fix: file the Roland ROMs under Roland

The four MT-32 and CM-32L ROMs had a second copy in the Amiga
tree, and the identity exemption that hid the crossing named a
DOSBox tree instead. The copies move next to the Munt ROMs already
under Roland, and each exemption now names the makers it covers,
so a copy under a third one is reported.
This commit is contained in:
Abdessamad Derraz committed 2026-10-18 01:25:50 +02:00
1 parent e4960dd4f8
commit da59b20aa6
7 files changed
+211 -182

No files matched your search

+134 -156
View File
@@ -1,6 +1,6 @@
{
"schema_version": 1,
"generated_at": "2026-10-17T14:58:23Z",
"generated_at": "2026-10-17T23:25:01Z",
"total_files": 19041,
"total_size": 17550209017,
"bios_dir": "bios",
@@ -32460,46 +32460,6 @@
"crc32": "3b46f0cb",
"adler32": "39d2a1e5"
},
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8": {
"path": "bios/Commodore/Amiga/mt32-roms/cm32l_control.rom",
"name": "cm32l_control.rom",
"size": 65536,
"sha1": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
"md5": "bfff32b6144c1d706109accb6e6b1113",
"sha256": "08d68695e5bff6bbcbb751d6e4453db9f5ead0b5f41e86480798a04376dfe090",
"crc32": "b998047e",
"adler32": "586ed7ae"
},
"b083518fffb7f66b03c23b7eb4f868e62dc5a987": {
"path": "bios/Commodore/Amiga/mt32-roms/mt32_control.rom",
"name": "mt32_control.rom",
"size": 65536,
"sha1": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
"md5": "5626206284b22c2734f3e9efefcd2675",
"sha256": "a73a06c23ed38370e58a11fb1b86f7ea4c547061a60d7aa62bae446235fd2dff",
"crc32": "a7c1531b",
"adler32": "1e07fec4"
},
"289cc298ad532b702461bfc738009d9ebe8025ea": {
"path": "bios/Commodore/Amiga/mt32-roms/pcm_cm32l.rom",
"name": "pcm_cm32l.rom",
"size": 1048576,
"sha1": "289cc298ad532b702461bfc738009d9ebe8025ea",
"md5": "08cdcfa0ed93e9cb16afa76e6ac5f0a4",
"sha256": "0dc50190bb7ea3fb212c970346b771a511772b528801e7eda6d27efda8c40698",
"crc32": "4b961eba",
"adler32": "884b72ba"
},
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252": {
"path": "bios/Commodore/Amiga/mt32-roms/pcm_mt32.rom",
"name": "pcm_mt32.rom",
"size": 524288,
"sha1": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
"md5": "89e42e386e82e0cacb4a2704a03706ca",
"sha256": "d9164063f293410cf33f2f64cdcea6893b44723fe41938e07ec9aef58b406238",
"crc32": "573e31cc",
"adler32": "da23d2eb"
},
"801bbab32e3d37386dd1636d4f1d6fa7e21d5874": {
"path": "bios/Commodore/Amiga/rom.key",
"name": "rom.key",
@@ -184614,6 +184574,46 @@
"crc32": "b9c5abec",
"adler32": "9344f251"
},
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8": {
"path": "bios/Roland/CM32L_CONTROL.ROM",
"name": "CM32L_CONTROL.ROM",
"size": 65536,
"sha1": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
"md5": "bfff32b6144c1d706109accb6e6b1113",
"sha256": "08d68695e5bff6bbcbb751d6e4453db9f5ead0b5f41e86480798a04376dfe090",
"crc32": "b998047e",
"adler32": "586ed7ae"
},
"289cc298ad532b702461bfc738009d9ebe8025ea": {
"path": "bios/Roland/CM32L_PCM.ROM",
"name": "CM32L_PCM.ROM",
"size": 1048576,
"sha1": "289cc298ad532b702461bfc738009d9ebe8025ea",
"md5": "08cdcfa0ed93e9cb16afa76e6ac5f0a4",
"sha256": "0dc50190bb7ea3fb212c970346b771a511772b528801e7eda6d27efda8c40698",
"crc32": "4b961eba",
"adler32": "884b72ba"
},
"b083518fffb7f66b03c23b7eb4f868e62dc5a987": {
"path": "bios/Roland/MT32_CONTROL.ROM",
"name": "MT32_CONTROL.ROM",
"size": 65536,
"sha1": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
"md5": "5626206284b22c2734f3e9efefcd2675",
"sha256": "a73a06c23ed38370e58a11fb1b86f7ea4c547061a60d7aa62bae446235fd2dff",
"crc32": "a7c1531b",
"adler32": "1e07fec4"
},
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252": {
"path": "bios/Roland/MT32_PCM.ROM",
"name": "MT32_PCM.ROM",
"size": 524288,
"sha1": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
"md5": "89e42e386e82e0cacb4a2704a03706ca",
"sha256": "d9164063f293410cf33f2f64cdcea6893b44723fe41938e07ec9aef58b406238",
"crc32": "573e31cc",
"adler32": "da23d2eb"
},
"73683d585cd6948cc19547942ca0e14a0319456d": {
"path": "bios/Roland/mt32-roms/ctrl_cm32l_1_00.rom",
"name": "ctrl_cm32l_1_00.rom",
@@ -198776,10 +198776,6 @@
"3f97c1963d82c808ef29e7c984c4c688": "ca2d6e1e2b4883929447a05e29418533723a419c",
"547b42b7b070c7f227ea45e0986d57a1": "1ad1b55e7226bd5cd66def8370a69f19244da796",
"f89f19b858ea6b1a04327c6f71ee1600": "973b42dcaf8d6cb111484b3c4d3b719b15f6792d",
"bfff32b6144c1d706109accb6e6b1113": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
"5626206284b22c2734f3e9efefcd2675": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
"08cdcfa0ed93e9cb16afa76e6ac5f0a4": "289cc298ad532b702461bfc738009d9ebe8025ea",
"89e42e386e82e0cacb4a2704a03706ca": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
"58aeacd8526d6c03fa93ca5f396b7ed9": "801bbab32e3d37386dd1636d4f1d6fa7e21d5874",
"f2f241bf094168cfb9e7805dc2856433": "9fa14825c40a2475a2eba5cf325bd483c447e7c1",
"1b1e985ea5325a1f46eb7fd9681707bf": "b1a5b826304d3df2a27d7163c6a81a532e040d32",
@@ -213772,6 +213768,10 @@
"927ed8f4d8394a4eca03cf7791ff3d6b": "b77432504698d3b01ab2034b5fa1d613a77f2fe2",
"f7ea340e1b9bad68c08067f37ea12d66": "5b851c281f00ee6e1a3895cd19659eb3990bfb05",
"a70bbb0dfe4bb8556e74258062766f5d": "191c4994adfffe4f83b98dc3959dde2724b1dbac",
"bfff32b6144c1d706109accb6e6b1113": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
"08cdcfa0ed93e9cb16afa76e6ac5f0a4": "289cc298ad532b702461bfc738009d9ebe8025ea",
"5626206284b22c2734f3e9efefcd2675": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
"89e42e386e82e0cacb4a2704a03706ca": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
"099552dcbc6a94bb0d2abf1281873fa1": "73683d585cd6948cc19547942ca0e14a0319456d",
"c5233e4594f9b7bc4f773ae6ba5aa87d": "5a5cb5a77d7d55ee69657c2f870416daed52dea7",
"1eddb73995829e4befecd40b13dfb408": "9cd4858014c4e8a9dff96053f784bfaac1092a2e",
@@ -223671,18 +223671,6 @@
"kick40068.A4000.RTB": [
"973b42dcaf8d6cb111484b3c4d3b719b15f6792d"
],
"cm32l_control.rom": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
],
"mt32_control.rom": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"pcm_cm32l.rom": [
"289cc298ad532b702461bfc738009d9ebe8025ea"
],
"pcm_mt32.rom": [
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252"
],
"rom.key": [
"801bbab32e3d37386dd1636d4f1d6fa7e21d5874"
],
@@ -262300,6 +262288,18 @@
"ringo470.rom": [
"191c4994adfffe4f83b98dc3959dde2724b1dbac"
],
"CM32L_CONTROL.ROM": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
],
"CM32L_PCM.ROM": [
"289cc298ad532b702461bfc738009d9ebe8025ea"
],
"MT32_CONTROL.ROM": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"MT32_PCM.ROM": [
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252"
],
"ctrl_cm32l_1_00.rom": [
"73683d585cd6948cc19547942ca0e14a0319456d"
],
@@ -268018,10 +268018,8 @@
"007-Ocean01.jpg": [
"e5741010ac7f941cdb3c01865a1eda016a479dfd"
],
"CM32L_CONTROL.ROM": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
"73683d585cd6948cc19547942ca0e14a0319456d",
"dc1c5b1b90a4646d00f7daf3679733c7badc7077"
"cm32l_control.rom": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
],
"ctrl_cm32l_1_02.rom": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
@@ -268029,7 +268027,16 @@
"cm32l_ctrl_1_02.rom": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
],
"CM32L_PCM.ROM": [
"mt32_control.rom": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"ctrl_mt32_1_07.rom": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"mt32_ctrl_1_07.rom": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"pcm_cm32l.rom": [
"289cc298ad532b702461bfc738009d9ebe8025ea"
],
"CM32LN_PCM.ROM": [
@@ -268038,24 +268045,7 @@
"cm32l_pcm.rom": [
"289cc298ad532b702461bfc738009d9ebe8025ea"
],
"MT32_CONTROL.ROM": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987",
"5a5cb5a77d7d55ee69657c2f870416daed52dea7",
"e17a3a6d265bf1fa150312061134293d2b58288c",
"a553481f4e2794c10cfe597fef154eef0d8257de",
"7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92",
"5837064c9df4741a55f7c4d8787ac158dff2d3ce",
"2c16432b6c73dd2a3947cba950a0f4c19d6180eb",
"2869cf4c235d671668cfcb62415e2ce8323ad4ed",
"47b52adefedaec475c925e54340e37673c11707c"
],
"ctrl_mt32_1_07.rom": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"mt32_ctrl_1_07.rom": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"MT32_PCM.ROM": [
"pcm_mt32.rom": [
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252"
],
"mt32_pcm.rom": [
@@ -270576,33 +270566,6 @@
"titles.txt": [
"f6a0cbfda6838065065e830ff40f322e6a3b6b00"
],
"mt32_ctrl_1_04.rom": [
"5a5cb5a77d7d55ee69657c2f870416daed52dea7"
],
"mt32_ctrl_1_05.rom": [
"e17a3a6d265bf1fa150312061134293d2b58288c"
],
"mt32_ctrl_1_06.rom": [
"a553481f4e2794c10cfe597fef154eef0d8257de"
],
"mt32_ctrl_bluer.rom": [
"7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92"
],
"mt32_ctrl_2_03.rom": [
"5837064c9df4741a55f7c4d8787ac158dff2d3ce"
],
"mt32_ctrl_2_04.rom": [
"2c16432b6c73dd2a3947cba950a0f4c19d6180eb"
],
"mt32_ctrl_2_06.rom": [
"2869cf4c235d671668cfcb62415e2ce8323ad4ed"
],
"mt32_ctrl_2_07.rom": [
"47b52adefedaec475c925e54340e37673c11707c"
],
"cm32l_ctrl_1_00.rom": [
"73683d585cd6948cc19547942ca0e14a0319456d"
],
"ctrl_cm32ln_1_00.rom": [
"dc1c5b1b90a4646d00f7daf3679733c7badc7077"
],
@@ -270630,18 +270593,27 @@
"TRIO64 (Ver. 1.5-07) [VGA] (S3 Incorporated).bin": [
"a308b15f93da34961c0141ec95b98c211557e2d5"
],
"mt32_ctrl_1_04.rom": [
"5a5cb5a77d7d55ee69657c2f870416daed52dea7"
],
"mt32_ctrl_1_04_a.rom": [
"9cd4858014c4e8a9dff96053f784bfaac1092a2e"
],
"mt32_ctrl_1_04_b.rom": [
"fe8db469b5bfeb37edb269fd47e3ce6d91014652"
],
"mt32_ctrl_1_05.rom": [
"e17a3a6d265bf1fa150312061134293d2b58288c"
],
"mt32_ctrl_1_05_a.rom": [
"57a09d80d2f7ca5b9734edbe9645e6e700f83701"
],
"mt32_ctrl_1_05_b.rom": [
"52e3c6666db9ef962591a8ee99be0cde17f3a6b6"
],
"mt32_ctrl_1_06.rom": [
"a553481f4e2794c10cfe597fef154eef0d8257de"
],
"mt32_ctrl_1_06_a.rom": [
"cc83bf23cee533097fb4c7e2c116e43b50ebacc8"
],
@@ -270654,12 +270626,30 @@
"mt32_ctrl_1_07_b.rom": [
"c55e165487d71fa88bd8c5e9c083bc456c1a89aa"
],
"mt32_ctrl_bluer.rom": [
"7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92"
],
"mt32_ctrl_bluer_a.rom": [
"11a6ae5d8b6ee328b371af7f1e40b82125aa6b4d"
],
"mt32_ctrl_bluer_b.rom": [
"e0934320d7cbb5edfaa29e0d01ae835ef620085b"
],
"mt32_ctrl_2_03.rom": [
"5837064c9df4741a55f7c4d8787ac158dff2d3ce"
],
"mt32_ctrl_2_04.rom": [
"2c16432b6c73dd2a3947cba950a0f4c19d6180eb"
],
"mt32_ctrl_2_06.rom": [
"2869cf4c235d671668cfcb62415e2ce8323ad4ed"
],
"mt32_ctrl_2_07.rom": [
"47b52adefedaec475c925e54340e37673c11707c"
],
"cm32l_ctrl_1_00.rom": [
"73683d585cd6948cc19547942ca0e14a0319456d"
],
"mt32_pcm_l.rom": [
"3a1e19b0cd4036623fd1d1d11f5f25995585962b"
],
@@ -274689,10 +274679,6 @@
"71180c7f": "ca2d6e1e2b4883929447a05e29418533723a419c",
"cf631e0b": "1ad1b55e7226bd5cd66def8370a69f19244da796",
"3b46f0cb": "973b42dcaf8d6cb111484b3c4d3b719b15f6792d",
"b998047e": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
"a7c1531b": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
"4b961eba": "289cc298ad532b702461bfc738009d9ebe8025ea",
"573e31cc": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
"869ae1b1": "801bbab32e3d37386dd1636d4f1d6fa7e21d5874",
"f5d4f3c8": "9fa14825c40a2475a2eba5cf325bd483c447e7c1",
"dd409902": "b1a5b826304d3df2a27d7163c6a81a532e040d32",
@@ -289685,6 +289671,10 @@
"1184b3e8": "b77432504698d3b01ab2034b5fa1d613a77f2fe2",
"2477d709": "5b851c281f00ee6e1a3895cd19659eb3990bfb05",
"b9c5abec": "191c4994adfffe4f83b98dc3959dde2724b1dbac",
"b998047e": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
"4b961eba": "289cc298ad532b702461bfc738009d9ebe8025ea",
"a7c1531b": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
"573e31cc": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
"ee62022f": "73683d585cd6948cc19547942ca0e14a0319456d",
"4c91fa96": "5a5cb5a77d7d55ee69657c2f870416daed52dea7",
"a93b65f2": "9cd4858014c4e8a9dff96053f784bfaac1092a2e",
@@ -293732,10 +293722,6 @@
"69809575d9f631eccb3f6d7b3dfa23017a33d9c1a911a5f7f8e5a4246cf8cbac": "ca2d6e1e2b4883929447a05e29418533723a419c",
"c1176e7b7b9860a8cded820e824677163cf1cc7c674883896a7f32dca5437736": "1ad1b55e7226bd5cd66def8370a69f19244da796",
"7cedf931e8b30620ba69954a30f037260325ff57282833fa557b4b0f2a2689f9": "973b42dcaf8d6cb111484b3c4d3b719b15f6792d",
"08d68695e5bff6bbcbb751d6e4453db9f5ead0b5f41e86480798a04376dfe090": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
"a73a06c23ed38370e58a11fb1b86f7ea4c547061a60d7aa62bae446235fd2dff": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
"0dc50190bb7ea3fb212c970346b771a511772b528801e7eda6d27efda8c40698": "289cc298ad532b702461bfc738009d9ebe8025ea",
"d9164063f293410cf33f2f64cdcea6893b44723fe41938e07ec9aef58b406238": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
"baf2366ae04337d37e7b37ebfb5cd7af7e4ffddeb6b017bf2e5fec43d87764e0": "801bbab32e3d37386dd1636d4f1d6fa7e21d5874",
"53c6053fb5ef9068db57d62c6565dfa30365d35349824525f02aa715962c446a": "9fa14825c40a2475a2eba5cf325bd483c447e7c1",
"2de4d06b4aa2a1b1129cc641a01cbac7e631de362dbd6fe2129eec7336afad53": "b1a5b826304d3df2a27d7163c6a81a532e040d32",
@@ -308728,6 +308714,10 @@
"0cc333aa339e76f6c5673b1da3334de582443caf3388b457baf785c2ae3040d2": "b77432504698d3b01ab2034b5fa1d613a77f2fe2",
"b5673896e0ff174b3030525668483a1a32657e46ee22213c6773f9ef11c961ae": "5b851c281f00ee6e1a3895cd19659eb3990bfb05",
"1b7b0a05f72134f93346d2e83307a4e3a8ff67909c12b5f9b68a5bd42db8e7e2": "191c4994adfffe4f83b98dc3959dde2724b1dbac",
"08d68695e5bff6bbcbb751d6e4453db9f5ead0b5f41e86480798a04376dfe090": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
"0dc50190bb7ea3fb212c970346b771a511772b528801e7eda6d27efda8c40698": "289cc298ad532b702461bfc738009d9ebe8025ea",
"a73a06c23ed38370e58a11fb1b86f7ea4c547061a60d7aa62bae446235fd2dff": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
"d9164063f293410cf33f2f64cdcea6893b44723fe41938e07ec9aef58b406238": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
"c8aea5fb1b28183523601bbc5fd7e2f48397c1cb26f8687d240333c2190e83e2": "73683d585cd6948cc19547942ca0e14a0319456d",
"c0ea149eaadc48049572ec429e45f90ab1bb75f1ed07000c636fc0124b64da23": "5a5cb5a77d7d55ee69657c2f870416daed52dea7",
"70fe51fef3ef16fac12f014f5c03e5cb69d9819d7568322459d9b08c675be78a": "9cd4858014c4e8a9dff96053f784bfaac1092a2e",
@@ -332322,42 +332312,6 @@
"Amiga/kick40068.A4000.RTB": [
"973b42dcaf8d6cb111484b3c4d3b719b15f6792d"
],
"Commodore/Amiga/mt32-roms/cm32l_control.rom": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
],
"Amiga/mt32-roms/cm32l_control.rom": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
],
"mt32-roms/cm32l_control.rom": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
],
"Commodore/Amiga/mt32-roms/mt32_control.rom": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"Amiga/mt32-roms/mt32_control.rom": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"mt32-roms/mt32_control.rom": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"Commodore/Amiga/mt32-roms/pcm_cm32l.rom": [
"289cc298ad532b702461bfc738009d9ebe8025ea"
],
"Amiga/mt32-roms/pcm_cm32l.rom": [
"289cc298ad532b702461bfc738009d9ebe8025ea"
],
"mt32-roms/pcm_cm32l.rom": [
"289cc298ad532b702461bfc738009d9ebe8025ea"
],
"Commodore/Amiga/mt32-roms/pcm_mt32.rom": [
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252"
],
"Amiga/mt32-roms/pcm_mt32.rom": [
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252"
],
"mt32-roms/pcm_mt32.rom": [
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252"
],
"Commodore/Amiga/rom.key": [
"801bbab32e3d37386dd1636d4f1d6fa7e21d5874"
],
@@ -541030,6 +540984,18 @@
"R470/ringo470.rom": [
"191c4994adfffe4f83b98dc3959dde2724b1dbac"
],
"Roland/CM32L_CONTROL.ROM": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
],
"Roland/CM32L_PCM.ROM": [
"289cc298ad532b702461bfc738009d9ebe8025ea"
],
"Roland/MT32_CONTROL.ROM": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"Roland/MT32_PCM.ROM": [
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252"
],
"Roland/mt32-roms/ctrl_cm32l_1_00.rom": [
"73683d585cd6948cc19547942ca0e14a0319456d"
],
@@ -577154,16 +577120,28 @@
"Panoramas/007-Ocean01.jpg": [
"e5741010ac7f941cdb3c01865a1eda016a479dfd"
],
"Roland/CM32L_CONTROL.ROM": [
"Roland/mt32-roms/cm32l_control.rom": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
],
"Roland/CM32L_PCM.ROM": [
"289cc298ad532b702461bfc738009d9ebe8025ea"
"mt32-roms/cm32l_control.rom": [
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
],
"Roland/MT32_CONTROL.ROM": [
"Roland/mt32-roms/mt32_control.rom": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"Roland/MT32_PCM.ROM": [
"mt32-roms/mt32_control.rom": [
"b083518fffb7f66b03c23b7eb4f868e62dc5a987"
],
"Roland/mt32-roms/pcm_cm32l.rom": [
"289cc298ad532b702461bfc738009d9ebe8025ea"
],
"mt32-roms/pcm_cm32l.rom": [
"289cc298ad532b702461bfc738009d9ebe8025ea"
],
"Roland/mt32-roms/pcm_mt32.rom": [
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252"
],
"mt32-roms/pcm_mt32.rom": [
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252"
],
"SNK/Neo Geo CD/.variants/uni-bioscd.rom.5158b728": [
+38 -24
View File
@@ -23,28 +23,42 @@ from pathlib import Path
# machines, where a shared dump says nothing about a misfiling.
SHARED_TREES = frozenset({"Arcade", "Other"})
# One dump, two machines that really did share it. Each entry names the reason,
# so a crossing that is not on this list is a finding rather than noise.
KNOWN_SHARED = {
"5ea7c2b824672e914525d1d5c419d71b84a426a2": "ZX Spectrum 48K ROM, which the "
"Enterprise and the FBNeo Spectrum driver run as well",
"16375d42ea109b47edded7a16028de7fdb3013a1": "ZX Spectrum 128K ROM, under both "
"Sinclair spellings and the Enterprise Spectrum mode",
"45bedc4cbdeac66c7df59e9e599195c778d86a92": "ColecoVision BIOS, carried by MSX "
"emulators for their ColecoVision machine",
"b2e1955d957a475de2411770452eff4ea19f4cee": "Odyssey 2 and Videopac are one "
"machine sold under two names",
"0d2ef6e67322f48f4b7e08d8bbe68827e2074561": "Oric Microdisc ROM, the Oric being "
"a Tangerine machine",
"0334b35f164089df7b2a82d46fa0ec6e43fafa90": "ZX81 overlay, the TS1500 being the "
"same machine for Timex",
"286b2e1fb21cc79851da01666db6c0b0e88f25e3": "one soundfont shipped by two "
"interpreters",
"a439fbb390da38cada95a7cbb1d6ca199cd66ef8": "Roland CM-32L control ROM, kept a "
"second time in the DOSBox mt32-roms tree",
"b083518fffb7f66b03c23b7eb4f868e62dc5a987": "Roland MT-32 control ROM, same",
"289cc298ad532b702461bfc738009d9ebe8025ea": "Roland CM-32L PCM ROM, same",
"f6b1eebc4b2d200ec6d3d21d51325d5b48c60252": "Roland MT-32 PCM ROM, same",
# One dump, two machines that really did share it. Each entry names the makers
# whose directories may hold it and the reason they do, so a crossing that is
# not on this list, or a further copy under a third maker, is a finding rather
# than noise.
KNOWN_SHARED: dict[str, tuple[frozenset[str], str]] = {
"5ea7c2b824672e914525d1d5c419d71b84a426a2": (
frozenset({"Enterprise", "Sinclair"}),
"ZX Spectrum 48K ROM, which the Enterprise and the FBNeo Spectrum "
"driver run as well",
),
"16375d42ea109b47edded7a16028de7fdb3013a1": (
frozenset({"Enterprise", "Sinclair"}),
"ZX Spectrum 128K ROM, under both Sinclair spellings and the "
"Enterprise Spectrum mode",
),
"45bedc4cbdeac66c7df59e9e599195c778d86a92": (
frozenset({"Coleco", "Microsoft"}),
"ColecoVision BIOS, carried by MSX emulators for their ColecoVision "
"machine",
),
"b2e1955d957a475de2411770452eff4ea19f4cee": (
frozenset({"Magnavox", "Philips"}),
"Odyssey 2 and Videopac are one machine sold under two names",
),
"0d2ef6e67322f48f4b7e08d8bbe68827e2074561": (
frozenset({"Oric", "Tangerine"}),
"Oric Microdisc ROM, the Oric being a Tangerine machine",
),
"0334b35f164089df7b2a82d46fa0ec6e43fafa90": (
frozenset({"Sinclair", "Timex"}),
"ZX81 overlay, the TS1500 being the same machine for Timex",
),
"286b2e1fb21cc79851da01666db6c0b0e88f25e3": (
frozenset({"Infocom", "ZC"}),
"one soundfont shipped by two interpreters",
),
}
CHUNK = 1 << 20
@@ -91,9 +105,9 @@ def scan(bios_dir: str = "bios") -> list[Duplicate]:
for sha1, paths in by_content.items():
if len(paths) < 2:
continue
if sha1 in KNOWN_SHARED:
continue
makers = {_manufacturer(p, root) for p in paths} - SHARED_TREES
if sha1 in KNOWN_SHARED and makers <= KNOWN_SHARED[sha1][0]:
continue
names = {p.name for p in paths}
if len(makers) > 1 and len(names) > 1:
found.append(
+39 -2
View File
@@ -59,12 +59,34 @@ class TestCrossVendorDuplicates(unittest.TestCase):
self._write("Philips/Videopac/O2.bin", b"odyssey")
first = self._scan()
self.assertEqual(len(first), 1)
identity.KNOWN_SHARED[first[0].sha1] = "one machine, two market names"
identity.KNOWN_SHARED[first[0].sha1] = (
frozenset({"Magnavox", "Philips"}), "one machine, two market names"
)
try:
self.assertEqual(self._scan(), [])
finally:
del identity.KNOWN_SHARED[first[0].sha1]
def test_an_exemption_does_not_cover_a_third_maker(self):
# The four Roland ROMs were exempt by content alone, under a reason
# naming a DOSBox tree; the second copies sat in the Amiga tree and
# nothing could tell.
self._write("Magnavox/Odyssey2/o2rom.bin", b"odyssey")
self._write("Philips/Videopac/O2.bin", b"odyssey")
self._write("Commodore/Amiga/odyssey.bin", b"odyssey")
sha1 = self._scan()[0].sha1
identity.KNOWN_SHARED[sha1] = (
frozenset({"Magnavox", "Philips"}), "one machine, two market names"
)
try:
found = self._scan()
self.assertEqual(len(found), 1)
self.assertEqual(
found[0].manufacturers, ["Commodore", "Magnavox", "Philips"]
)
finally:
del identity.KNOWN_SHARED[sha1]
def test_distinct_contents_are_never_grouped(self):
self._write("Commodore/Amiga/kickstart.rom", b"kick")
self._write("Sega/Saturn/cartridge.bin", b"other")
@@ -82,11 +104,26 @@ class TestAllowList(unittest.TestCase):
"""Every exemption carries the reason it is one."""
def test_each_entry_is_a_full_sha1_with_a_reason(self):
for sha1, reason in identity.KNOWN_SHARED.items():
for sha1, (makers, reason) in identity.KNOWN_SHARED.items():
self.assertEqual(len(sha1), 40, sha1)
self.assertTrue(all(c in "0123456789abcdef" for c in sha1), sha1)
self.assertGreaterEqual(len(makers), 2, sha1)
self.assertGreater(len(reason), 20, sha1)
def test_every_exemption_is_still_needed(self):
# An entry whose copies no longer cross its makers exempts nothing
# today and would silently cover the next misfiling.
repo = Path(__file__).resolve().parents[1] / "bios"
if not repo.is_dir():
self.skipTest("bios/ not present")
saved = dict(identity.KNOWN_SHARED)
identity.KNOWN_SHARED.clear()
try:
crossing = {d.sha1 for d in identity.scan(str(repo))}
finally:
identity.KNOWN_SHARED.update(saved)
self.assertEqual(sorted(set(saved) - crossing), [])
def test_the_repository_has_no_unexplained_crossing(self):
repo = Path(__file__).resolve().parents[1] / "bios"
if not repo.is_dir():