diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp index 36e255a4ec8..eab2922c1f3 100644 --- a/src/mame/drivers/naomi.cpp +++ b/src/mame/drivers/naomi.cpp @@ -3184,7 +3184,7 @@ void atomiswave_state::aw_base(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &atomiswave_state::aw_map); m_maincpu->set_addrmap(AS_IO, &atomiswave_state::aw_port); MACRONIX_29L001MC(config, "awflash"); - aw_rom_board &rom_board(AW_ROM_BOARD(config, "rom_board", 0, "rom_key")); + aw_rom_board &rom_board(AW_ROM_BOARD(config, "rom_board", 0)); rom_board.irq_callback().set(FUNC(dc_state::g1_irq)); MCFG_MACHINE_RESET_OVERRIDE(dc_state,dc_console) @@ -10533,8 +10533,7 @@ ROM_START( fotns ) ROM_LOAD( "ax1906m01.ic16", 0x6000000, 0x1000000, CRC(fe6da168) SHA1(d4ab6443383469bb5a4337005de917627a2e21cc) ) ROM_LOAD( "ax1907m01.ic17", 0x7000000, 0x1000000, CRC(9d3a0520) SHA1(78583fd171b34439f77a04a97ebe3c9d1bab61cc) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax1901f01.bin", 0, 4, CRC(0283c08d) SHA1(5d62b6769ae7f1fc68bd3db028d782621aaa6f9c) ) + ROM_PARAMETER(":rom_board:key", "c2") // ax1901f01 ROM_END ROM_START( rangrmsn ) @@ -10548,8 +10547,7 @@ ROM_START( rangrmsn ) ROM_LOAD( "ax1604m01.ic14", 0x4000000, 0x1000000, CRC(d2369144) SHA1(da1eae9957d27d1682c4191780cf51b32dfe6659) ) ROM_LOAD( "ax1605m01.ic15", 0x5000000, 0x1000000, CRC(0c11c1f9) SHA1(0585db60618c5b97f9b7c203baf7e5ac90883ca6) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax1601f01.bin", 0, 4, CRC(278f1df7) SHA1(bf3e92e0b19dc1604b764382b859e73158d18025) ) + ROM_PARAMETER(":rom_board:key", "88") // ax1601f01 ROM_END ROM_START( sprtshot ) @@ -10562,8 +10560,7 @@ ROM_START( sprtshot ) ROM_LOAD( "ax0103m01.ic13", 0x3000000, 0x1000000, CRC(6144e7a8) SHA1(4d4341082f008dfd93ef5bf32a44c80869ef02a8) ) ROM_LOAD( "ax0104m01.ic14", 0x4000000, 0x1000000, CRC(ccb72150) SHA1(a1032d321c27f9ff43da41f20b8687bf1958ddc9) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax0101f01.bin", 0, 4, CRC(2144df1c) SHA1(9069ca78e7450a285173431b3e52c5c25299e473) ) + ROM_PARAMETER(":rom_board:key", "64") // ax0101f01 ROM_END ROM_START( xtrmhunt ) @@ -10578,8 +10575,7 @@ ROM_START( xtrmhunt ) ROM_LOAD( "ax2405m01.ic15", 0x5000000, 0x1000000, CRC(940d77f1) SHA1(eefdfcb92873032dc7d9ff9310bf5ed715c8bf4f) ) ROM_LOAD( "ax2406m01.ic16", 0x6000000, 0x1000000, CRC(cbcf2c5d) SHA1(61362fabcbb3bfc01c996748a7ca65f8a0e02f2f) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax2401f01.bin", 0, 4, CRC(2f578ea4) SHA1(6775daa4b4081186905cc20f56df0f8ab147428b) ) + ROM_PARAMETER(":rom_board:key", "e4") // ax2401f01 ROM_END ROM_START( xtrmhnt2 ) @@ -10595,8 +10591,7 @@ ROM_START( xtrmhnt2 ) ROM_LOAD( "610-0752.u14", 0x6000000, 0x1000000, CRC(ce83bcc7) SHA1(e2d324a5a7eacbec7b0df9a4b9e276521bb9ab80) ) ROM_LOAD( "610-0752.u16", 0x7000000, 0x1000000, CRC(8ac71c76) SHA1(080e41e633bf082fc536781541c6031d1ac81939) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "315-6248.bin", 0, 4, CRC(553dd361) SHA1(a60a26b5ee786cf0bb3d09bb6f00374598fbd7cc) ) + ROM_PARAMETER(":rom_board:key", "2a") // 315-6248 ROM_REGION( 0x1400000, "network", 0) // network board ROM_LOAD( "fpr-24330a.ic2", 0x000000, 0x400000, CRC(8d89877e) SHA1(6caafc49114eb0358e217bc2d1a3ab58a93c8d19) ) @@ -10618,8 +10613,7 @@ ROM_START( anmlbskt ) // U14 Populated, Empty // U16 Populated, Empty - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "vm2001f01.bin", 0, 4, CRC(d8d6c32e) SHA1(255a437bdb4bb8372167f33f0ca1668bcd74ea32) ) + ROM_PARAMETER(":rom_board:key", "45") // vm2001f01 ROM_END // no case, Sega 171-8355A type board, stickers: VM20-6101-1 V20T0069 @@ -10634,8 +10628,7 @@ ROM_START( anmlbskta ) ROM_LOAD( "u2", 0x3000000, 0x1000000, CRC(b9162d97) SHA1(7f561617fa0538da554ad6f6c4d6a20e739491dc) ) // data not belongs to this game, more looks like random trash // U14-U17 not populated - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "vm2001f01.bin", 0, 4, CRC(d8d6c32e) SHA1(255a437bdb4bb8372167f33f0ca1668bcd74ea32) ) + ROM_PARAMETER(":rom_board:key", "45") // vm2001f01 ROM_END // game have 2 sets of graphics switched via "LOCATION" setting: SC (Shopping Center) kids oriented, and NORMAL @@ -10651,8 +10644,7 @@ ROM_START( blokpong ) //ROM_LOAD( "u2", 0x3000000, 0x1000000, CRC(b9162d97) SHA1(7f561617fa0538da554ad6f6c4d6a20e739491dc) ) // garbage data not used by this game, match anmlbskta U2 // U14-U17 not populated - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "vm2001f01.bin", 0, 4, CRC(d8d6c32e) SHA1(255a437bdb4bb8372167f33f0ca1668bcd74ea32) ) + ROM_PARAMETER(":rom_board:key", "45") // vm2001f01 ROM_END ROM_START( dolphin ) @@ -10666,8 +10658,7 @@ ROM_START( dolphin ) ROM_LOAD( "ax0404m01.ic14", 0x4000000, 0x1000000, CRC(f82a4ca3) SHA1(da686d86e176a9f24874d2916b1932f03a99a52d) ) ROM_LOAD( "ax0405m01.ic15", 0x5000000, 0x1000000, CRC(b88298d7) SHA1(490c3ec471018895b7268ee33498dddaccbbfd5a) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax0401f01.bin", 0, 4, CRC(394b52c9) SHA1(aa05d82e7c384f536cf68af48b5c0eb89e6f5dfa) ) + ROM_PARAMETER(":rom_board:key", "40") // ax0401f01 ROM_END ROM_START( demofist ) @@ -10683,8 +10674,7 @@ ROM_START( demofist ) ROM_LOAD( "ax0606m01.ic16", 0x6000000, 0x1000000, CRC(42c81617) SHA1(1cc686af5e3fc56143836e3dcc0067893f82fcf9) ) ROM_LOAD( "ax0607m01.ic17", 0x7000000, 0x1000000, CRC(96e5aa84) SHA1(e9841f550f2ef409d97004542bcadabb6b9e84af) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax0601f01.bin", 0, 4, CRC(25c9a3ae) SHA1(060c3fa1f8cd7d41785630db22e107790ade702a) ) + ROM_PARAMETER(":rom_board:key", "90") // ax0601f01 ROM_END // (C)Dimps Wed Mar 10 19:08:51 2004 TANAKA (build 0028) @@ -10701,8 +10691,7 @@ ROM_START( rumblef ) ROM_LOAD( "ax1806m01.ic16", 0x6000000, 0x1000000, CRC(ac2751bb) SHA1(5070fa12bf109ab87e8f7ea46ac4ae78a73105da) ) ROM_LOAD( "ax1807m01.ic17", 0x7000000, 0x1000000, CRC(3b2fbdb0) SHA1(f9f7e06785d3a07282247aaedd9999aa7c2670b9) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax1801f01.bin", 0, 4, CRC(5b2e82d9) SHA1(de0d9c2511c72b95777897403cb63b690f74dfa1)) + ROM_PARAMETER(":rom_board:key", "aa") // ax1801f01 ROM_END // Prototype, (C)Dimps Fri Feb 20 11:00:43 2004 TANAKA (build 0028) @@ -10727,8 +10716,7 @@ ROM_START( rumblefp ) ROM_LOAD("ic26", 0x07000000, 0x00800000, CRC(6421720d) SHA1(6eaeb93d462542c3cf3e815d5fb309c337a8673b) ) // IC27 populated, empty - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "key.bin", 0, 4, CRC(757054c4) SHA1(7d5556d0940c582adbcf5697c7b81453d0c91153) ) + ROM_PARAMETER(":rom_board:key", "25") // Julie ROM_END // Build:Jun 25 2005 17:00:38 @@ -10745,8 +10733,7 @@ ROM_START( ngbc ) ROM_LOAD( "ax3306m01.mrom6", 0x0e000000, 0x2000000, CRC(5cf32fbd) SHA1(b6ae0abe5791b3d6f8db07b8c8ca22219a153801) ) ROM_LOAD( "ax3307m01.mrom7", 0x12000000, 0x2000000, CRC(26d9da53) SHA1(0015b4be670005a451274de68279b4302fc42a97) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax3301f01.bin", 0, 4, CRC(9afe949b) SHA1(4f7b039f3287da61a53a2d012993bfb57e1459bd) ) + ROM_PARAMETER(":rom_board:key", "a0") // ax3301f01 ROM_END // same as above EN-dump, but CustomerID not FF-filled @@ -10764,8 +10751,7 @@ ROM_START( ngbcj ) ROM_LOAD( "ax3306m01.mrom6", 0x0e000000, 0x2000000, CRC(5cf32fbd) SHA1(b6ae0abe5791b3d6f8db07b8c8ca22219a153801) ) ROM_LOAD( "ax3307m01.mrom7", 0x12000000, 0x2000000, CRC(26d9da53) SHA1(0015b4be670005a451274de68279b4302fc42a97) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax3301f01.bin", 0, 4, CRC(9afe949b) SHA1(4f7b039f3287da61a53a2d012993bfb57e1459bd) ) + ROM_PARAMETER(":rom_board:key", "a0") // ax3301f01 ROM_END // Build:Jul 09 2004 15:05:53 @@ -10781,8 +10767,7 @@ ROM_START( kofnw ) ROM_LOAD( "ax2205m01.ic15", 0x5000000, 0x1000000, CRC(2851b791) SHA1(566ef95ea066b7bf548986085670242be217befc) ) ROM_LOAD( "ax2206m01.ic16", 0x6000000, 0x1000000, CRC(e53eb965) SHA1(f50cd53a5859f081d8a278d24a519c9d9b49ab96) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax2201f01.bin", 0, 4, CRC(b1fff0c8) SHA1(d83177e3672378a2bbc08653b4b73704333ca30a) ) + ROM_PARAMETER(":rom_board:key", "99") // ax2201f01 ROM_END // Build:Sep 10 2004 12:05:34 @@ -10800,8 +10785,7 @@ ROM_START( kofnwj ) ROM_LOAD( "ax2205m01.ic15", 0x5000000, 0x1000000, CRC(2851b791) SHA1(566ef95ea066b7bf548986085670242be217befc) ) ROM_LOAD( "ax2206m01.ic16", 0x6000000, 0x1000000, CRC(e53eb965) SHA1(f50cd53a5859f081d8a278d24a519c9d9b49ab96) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax2201f01.bin", 0, 4, CRC(b1fff0c8) SHA1(d83177e3672378a2bbc08653b4b73704333ca30a) ) + ROM_PARAMETER(":rom_board:key", "99") // ax2201f01 ROM_END ROM_START( kov7sprt ) @@ -10817,8 +10801,7 @@ ROM_START( kov7sprt ) ROM_LOAD( "ax1301m06.ic16", 0x6000000, 0x1000000, CRC(cb8cacb4) SHA1(5d008e8a934451b9bfa33fedfd492c86d9226ef5) ) ROM_LOAD( "ax1301m07.ic17", 0x7000000, 0x1000000, CRC(0ca92213) SHA1(115c50fa55e6de3439de23e74621695510c6a7ba) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax1301f01.bin", 0, 4, CRC(2a189821) SHA1(d15c9df83782d49ea85e201cba844f5a9e33f15c) ) + ROM_PARAMETER(":rom_board:key", "35") // ax1301f01 ROM_END ROM_START( ggisuka ) @@ -10835,8 +10818,7 @@ ROM_START( ggisuka ) ROM_LOAD( "ax1207m01.ic16", 0x6000000, 0x1000000, CRC(6636d1b8) SHA1(9bd8fc114557f6fbe772f85eeb246f7336d4255e) ) ROM_LOAD( "ax1208m01.ic17", 0x7000000, 0x1000000, CRC(38bda476) SHA1(0234a6f5fbaf5e958b3ba0db311dff157f80addc) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax1201f01.bin", 0, 4, CRC(325cf843) SHA1(c51d19a4fce37433f37e7ce23801a7fc4e09013d) ) + ROM_PARAMETER(":rom_board:key", "ed") // ax1201f01 /* Sammy AM3AHT/AWMPSYSTEM 4-cabinet splitter device, likely was used in GG Isuka, and maybe in 2-player AW-NET games too. @@ -10872,8 +10854,7 @@ ROM_START( maxspeed ) ROM_LOAD( "ax0504m01.ic14", 0x4000000, 0x1000000, CRC(7955b55a) SHA1(927f58d6961e702c2a8afce79bac5e5cff3dfed6) ) ROM_LOAD( "ax0505m01.ic15", 0x5000000, 0x1000000, CRC(e8ccc660) SHA1(a5f414f200a0d41e958430d0fc2d4e1fda1cc67c) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax0501f01.bin", 0, 4, CRC(c35d9a95) SHA1(bf260caf33821be51014b06480a11ec982fa4fcd) ) + ROM_PARAMETER(":rom_board:key", "55") // ax0501f01 ROM_END ROM_START( vfurlong ) @@ -10889,8 +10870,7 @@ ROM_START( vfurlong ) ROM_LOAD( "ax2006m01.ic16", 0x6000000, 0x1000000, CRC(8134ec55) SHA1(843e473d4f99237ded641cce9515b7802cfe3742) ) ROM_LOAD( "ax2007m01.ic17", 0x7000000, 0x1000000, CRC(d0557e8a) SHA1(df8057597eb690bd18c5d26736f5d4f86e3b1225) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax2001f01.bin", 0, 4, CRC(42d45ab8) SHA1(25bc9c046ff085e5219109316fbc0c1fae183d1f) ) + ROM_PARAMETER(":rom_board:key", "db") // ax2001f01 ROM_END ROM_START( salmankt ) @@ -10906,8 +10886,7 @@ ROM_START( salmankt ) ROM_LOAD( "ax1406m01.ic16", 0x6000000, 0x1000000, CRC(437673e6) SHA1(66f7e5f246ebbb1bdbf074da41ec16bf32720a82) ) ROM_LOAD( "ax1407m01.ic17", 0x7000000, 0x1000000, CRC(6b6acc0a) SHA1(a8c692c875271a0806460caa79c67fd756231273) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax1401f01.bin", 0, 4, CRC(67e742ae) SHA1(7c2e955bcb753ff8756db4bd75409583ffbadf62) ) + ROM_PARAMETER(":rom_board:key", "77") // ax1401f01 ROM_END ROM_START( ftspeed ) @@ -10922,8 +10901,7 @@ ROM_START( ftspeed ) ROM_LOAD( "ax1705m01.ic15", 0x5000000, 0x1000000, CRC(996f68e1) SHA1(3fa505c641127d9027bfc7ec0ab16905344a4e2c) ) ROM_LOAD( "ax1706m01.ic16", 0x6000000, 0x1000000, CRC(804b2eb2) SHA1(fcca02a5a8c09eb16548255115fb105c9c49c4e0) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax1701f01.bin", 0, 4, CRC(f3f03c35) SHA1(2a8329a29cdcc0219e9360cc573c0f3ad44d0175) ) + ROM_PARAMETER(":rom_board:key", "6d") // ax1701f01 ROM_END // contents of cartridges labeled as JP and EN is the same @@ -10941,8 +10919,7 @@ ROM_START( kofxi ) ROM_LOAD( "ax3206m01.mrom6", 0x0e000000, 0x2000000, CRC(cb81e5f5) SHA1(07faee02a58ac9c600ab3cdd525d22c16b35222d) ) ROM_LOAD( "ax3207m01.mrom7", 0x12000000, 0x2000000, CRC(164f6329) SHA1(a72c8cbe4ac7b98edda3d4434f6c81a370b8c39b) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax3201f01.bin", 0, 4, CRC(065d7fc6) SHA1(e4f18126e9f4e6747ffc5d0664766986fc07c127) ) + ROM_PARAMETER(":rom_board:key", "d3") // ax3201f01 ROM_END ROM_START( dirtypig ) @@ -10958,8 +10935,7 @@ ROM_START( dirtypig ) ROM_LOAD( "695-0014.u14", 0x6000000, 0x1000000, CRC(55470242) SHA1(789036189ae5488a9da565774bdf91b49cd8264e) ) ROM_LOAD( "695-0014.u16", 0x7000000, 0x1000000, CRC(730180a4) SHA1(017b82e2d2744695e3e521d35a8511ecc1c8ab43) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "315-6248.bin", 0, 4, CRC(553dd361) SHA1(a60a26b5ee786cf0bb3d09bb6f00374598fbd7cc) ) + ROM_PARAMETER(":rom_board:key", "2a") // 315-6248 ROM_END // Ver 2005/12/16 @@ -10974,8 +10950,7 @@ ROM_START( mslug6 ) ROM_LOAD( "ax3003m01.mrom3", 0x6000000, 0x2000000, CRC(4fe37370) SHA1(85d51db94c3e34265e37b636d6545ed2801ba5a6) ) ROM_LOAD( "ax3004m01.mrom4", 0xa000000, 0x2000000, CRC(2f4c4c6f) SHA1(5815c28fdaf0429003986e725c0015fe4c08721f) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax3001f01.bin", 0, 4, CRC(0b9939e9) SHA1(4ca1225c7c9993542a67035a054ac579ed021de5) ) + ROM_PARAMETER(":rom_board:key", "82") // ax3001f01 ROM_END // Build:Aug 05 2005 16:43:48 @@ -10992,8 +10967,7 @@ ROM_START( samsptk ) ROM_LOAD( "ax2906m01.mrom6", 0x0e000000, 0x2000000, CRC(cb95298d) SHA1(5fb5d5a0d6801df61101a1b23de0c14ff29ef654) ) ROM_LOAD( "ax2907m01.mrom7", 0x12000000, 0x2000000, CRC(48015081) SHA1(3c0a0a6dc9ab7bf889579477699e612c3092f9bf) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax2901f01.bin", 0, 4, CRC(8a6267aa) SHA1(9705bed35acb87d578f0efcf4f74b2a4b1a7be2e) ) + ROM_PARAMETER(":rom_board:key", "1d") // ax2901f01 ROM_END ROM_START( ggx15 ) @@ -11009,8 +10983,7 @@ ROM_START( ggx15 ) ROM_LOAD( "ax0806m01.ic16", 0x6000000, 0x1000000, CRC(3bf8ecba) SHA1(43e7fbf21d8ee60bab72ce558640730fd9c3e3b8) ) ROM_LOAD( "ax0807m01.ic17", 0x7000000, 0x1000000, CRC(e397dd79) SHA1(5fec32dc19dd71ef0d451f8058186f998015723b) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax0801f01.bin", 0, 4, CRC(a36e5017) SHA1(fd763a4c708fe37c7561ba5b5d0b8d2118cff16b) ) + ROM_PARAMETER(":rom_board:key", "c9") // ax0801f01 ROM_END // (C)Dimps Fri Mar 4 19:27:57 2005 NONAME (build 2319) @@ -11025,8 +10998,7 @@ ROM_START( rumblef2 ) ROM_LOAD( "ax3404m01.mrom4", 0xa000000, 0x2000000, CRC(a426b443) SHA1(617aab42e432a80b0663281fb7faa6c14ef4f149) ) ROM_LOAD( "ax3405m01.mrom5", 0xc000000, 0x2000000, CRC(4766ce56) SHA1(349b82013a75905ae5520b14a87702c9038a5def) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "ax3401f01.bin", 0, 4, CRC(952919a1) SHA1(d343fdbbd1d8b651401133f21facc1584bb66c04) ) + ROM_PARAMETER(":rom_board:key", "07") // ax3401f01 ROM_END // Prototype ROM board @@ -11052,8 +11024,7 @@ ROM_START( rumblf2p ) ROM_LOAD("ic26", 0x07000000, 0x00800000, CRC(ff9a2c4c) SHA1(81ac8fb41d7af605da0dcd92104cef0f045777bf) ) // IC27 populated, empty - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "julie_dev.bin", 0, 4, CRC(757054c4) SHA1(7d5556d0940c582adbcf5697c7b81453d0c91153) ) + ROM_PARAMETER(":rom_board:key", "25") // Julie ROM_END ROM_START( claychal ) @@ -11069,8 +11040,7 @@ ROM_START( claychal ) ROM_LOAD( "608-2161.u14", 0x6000000, 0x1000100, CRC(2e7d966f) SHA1(3304fd0c5140a13f6fe2ea9aaa74d7885e1505e1) ) ROM_LOAD( "608-2161.u16", 0x7000000, 0x1000100, CRC(14f8ca87) SHA1(778c048da9434ffda600e35ad5aca29e02cc98c0) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "315-6248.bin", 0x000000, 0x000004, CRC(553dd361) SHA1(a60a26b5ee786cf0bb3d09bb6f00374598fbd7cc) ) + ROM_PARAMETER(":rom_board:key", "2a") // 315-6248 ROM_END // Build:Feb 08 2009 22:35:34 @@ -11087,8 +11057,7 @@ ROM_START( basschalo ) ROM_LOAD("610-0811.u14", 0x06000000, 0x01000000, CRC(f2769383) SHA1(c580577df9d140bb6ecce192efafb0284d22c32d) ) ROM_LOAD("vera.u16", 0x07000000, 0x01000000, CRC(3590072d) SHA1(3375a0334c35de1d7d8231d7cc27775451042f91) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "315-6248.bin", 0x000000, 0x000004, CRC(553dd361) SHA1(a60a26b5ee786cf0bb3d09bb6f00374598fbd7cc) ) + ROM_PARAMETER(":rom_board:key", "2a") // 315-6248 ROM_END // Version A @@ -11106,8 +11075,7 @@ ROM_START( basschal ) ROM_LOAD("vera.u14", 0x06000000, 0x01000000, CRC(35df044f) SHA1(eeac6c4062f697205558846d6ac262cb5c1b10cf) ) ROM_LOAD("vera.u16", 0x07000000, 0x01000000, CRC(3590072d) SHA1(3375a0334c35de1d7d8231d7cc27775451042f91) ) - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "315-6248.bin", 0x000000, 0x000004, CRC(553dd361) SHA1(a60a26b5ee786cf0bb3d09bb6f00374598fbd7cc) ) + ROM_PARAMETER(":rom_board:key", "2a") // 315-6248 ROM_END // no case, Sega 171-8355A type board, stickers: VM20-6101-1 V20T0031 @@ -11121,8 +11089,7 @@ ROM_START( waidrive ) //ROM_LOAD( "u2", 0x3000000, 0x1000000, CRC(b9162d97) SHA1(7f561617fa0538da554ad6f6c4d6a20e739491dc) ) // garbage data not used by this game, match anmlbskta U2 // U14-U17 not populated - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "vm2001f01.bin", 0, 4, CRC(d8d6c32e) SHA1(255a437bdb4bb8372167f33f0ca1668bcd74ea32) ) + ROM_PARAMETER(":rom_board:key", "45") // vm2001f01 ROM_END // Prototype ROM board @@ -11140,8 +11107,7 @@ ROM_START( sushibar ) ROM_LOAD("ic18", 0x03000000, 0x00800000, CRC(b9957c76) SHA1(6d72c7ac8e1e0cbed7eb01b66f71bedf46a833e1) ) // IC19 - IC27 populated, empty - ROM_REGION( 4, "rom_key", 0 ) - ROM_LOAD( "julie_dev.bin", 0, 4, CRC(757054c4) SHA1(7d5556d0940c582adbcf5697c7b81453d0c91153) ) + ROM_PARAMETER(":rom_board:key", "25") // Julie ROM_END /* All games have the regional titles at the start of the IC22 rom in the following order diff --git a/src/mame/machine/awboard.cpp b/src/mame/machine/awboard.cpp index 843e3a52724..840b15ffc7c 100644 --- a/src/mame/machine/awboard.cpp +++ b/src/mame/machine/awboard.cpp @@ -174,49 +174,38 @@ void aw_rom_board::submap(address_map &map) aw_rom_board::aw_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : naomi_g1_device(mconfig, AW_ROM_BOARD, tag, owner, clock) , m_region(*this, DEVICE_SELF) - , m_keyregion(*this, finder_base::DUMMY_TAG) { } /* -We are using 20 bits keys with the following subfields' structure: -bits 0-15 is a 16-bits XOR -bits 17-16 is a index to the sboxes table -bits 19-18 is a index to the permutation table +We are using 8 bits keys with the following subfields' structure: +bits 0-3 is a index of 16-bits XOR (only 11 was used in known games) +bits 4-5 is a index to the sboxes table +bits 6-7 is a index to the permutation table These subfields could be differing from the "real" ones in the following ways: +- Current keys equal to decrypted game code binary 8-bit sum (of each byte's swapped 4-bit nibbles) - Every one of the index subfields could be suffering an arbitrary bitswap and XOR - The 16-bits-XOR subfield could suffer an arbitrary XOR which could depend on the 4 index bits (that is: a different XOR per every index combination) - Of course, the way in which we are mixing 3 subfields in one only key is arbitrary too. - -The keys are stored as 32-bits big-endian values in a file. - -Real keys provided by cartridge CPLD is only 8bit, bits 4-5 is sbox table index, bits 6-7 is permutation table index. -But it is not clear how 16-bit XOR value derived from 8bit key. */ const int aw_rom_board::permutation_table[4][16] = { + {14,1,11,15,7,3,8,13,0,4,2,12,6,10,5,9}, {8,10,1,3,7,4,11,2,5,15,6,0,12,13,9,14}, {4,5,9,6,1,13,7,11,10,0,14,12,8,15,2,3}, - {12,7,11,2,0,5,15,6,1,8,14,4,9,13,3,10}, - {14,1,11,15,7,3,8,13,0,4,2,12,6,10,5,9} + {12,7,11,2,0,5,15,6,1,8,14,4,9,13,3,10} }; const aw_rom_board::sbox_set aw_rom_board::sboxes_table[4] = { { - {4,12,8,14,16,30,31,0,23,29,24,21,11,22,27,5,3,20,18,26,10,7,17,1,28,6,15,13,2,9,25,19}, - {13,1,0,9,5,12,4,14,3,15,2,10,11,6,8,7}, - {7,13,4,6,5,9,3,2,0,15,12,10,8,11,1,14}, - {4,0,1,2,5,7,3,6} - }, - { - {3,0,14,17,10,15,31,20,13,2,29,28,9,18,25,27,6,19,30,22,7,12,1,16,23,11,24,4,8,26,21,5}, - {2,10,6,9,11,13,4,5,3,15,7,14,12,1,0,8}, + {11,8,6,25,2,7,23,28,5,10,21,20,1,26,17,19,14,27,22,30,15,4,9,24,31,3,16,12,0,18,29,13}, + {13,5,9,6,4,2,11,10,12,0,8,1,3,14,15,7}, {1,13,11,3,8,7,9,10,12,15,4,14,0,5,6,2}, - {6,5,0,3,7,1,4,2} + {3,0,5,6,2,4,1,7} }, { {9,15,28,7,13,24,2,23,21,1,22,16,18,8,17,31,27,6,30,12,4,20,5,19,0,25,3,29,10,14,11,26}, @@ -225,19 +214,30 @@ const aw_rom_board::sbox_set aw_rom_board::sboxes_table[4] = {1,5,6,2,4,7,3,0} }, { - {17,3,31,2,28,10,9,29,6,25,24,8,13,1,19,15,22,0,14,20,16,7,21,4,18,26,27,5,12,23,11,30}, - {4,8,11,15,3,14,7,12,1,0,9,5,6,13,2,10}, - {14,0,9,11,4,1,7,5,13,6,8,12,2,3,10,15}, - {2,1,0,5,4,6,7,3} + {17,25,29,27,5,11,10,21,2,8,13,0,30,3,14,16,22,1,7,15,31,18,4,20,9,19,26,24,23,28,12,6}, + {15,3,2,11,7,14,6,12,1,13,0,8,9,4,10,5}, + {6,12,5,7,4,8,2,3,1,14,13,11,9,10,0,15}, + {5,1,0,3,4,6,2,7} }, + { + {7,21,9,20,10,28,31,11,16,15,14,30,27,23,5,25,0,22,24,2,6,17,3,18,4,12,13,19,26,1,29,8}, + {10,6,5,1,13,0,9,2,15,14,7,11,8,3,12,4}, + {8,6,15,13,2,7,1,3,11,0,14,10,4,5,12,9}, + {6,5,4,1,0,2,3,7} + } }; -uint16_t aw_rom_board::decrypt(uint16_t cipherText, uint32_t address, const uint32_t key) +const int aw_rom_board::xor_table[16] = // -1 = unknown/unused +{ + 0x0000, -1, 0x97CF, 0x4BE3, 0x2255, 0x8DD6, -1, 0xC6A2, 0xA1E8, 0xB3BF, 0x3B1A, 0x547A, -1, 0x935F, -1, -1 +}; + +uint16_t aw_rom_board::decrypt(uint16_t cipherText, uint32_t address, const uint8_t key) { uint8_t b0,b1,b2,b3; uint16_t aux; - const int* pbox = permutation_table[key>>18]; - const sbox_set* ss = &sboxes_table[(key>>16)&3]; + const int* pbox = permutation_table[key>>6]; + const sbox_set* ss = &sboxes_table[(key>>4)&3]; aux = bitswap<16>(cipherText, pbox[15],pbox[14],pbox[13],pbox[12],pbox[11],pbox[10],pbox[9],pbox[8], @@ -254,25 +254,21 @@ uint16_t aw_rom_board::decrypt(uint16_t cipherText, uint32_t address, const uint b2 = ss->S2[b2]; b3 = ss->S3[b3]; - return ((b3<<13)|(b2<<9)|(b1<<5)|b0)^(key&0xffff); -} - -void aw_rom_board::set_key() -{ - if (!m_keyregion.found()) - return; - - if (m_keyregion->bytes() != 4) - throw emu_fatalerror("AW-ROM-BOARD: key region %s has incorrect size (%d, expected 4)\n", m_keyregion.finder_tag(), m_keyregion->bytes()); - - const uint8_t *krp = m_keyregion->base(); - rombd_key = (krp[0] << 24) | (krp[1] << 16) | (krp[2] << 8) | krp[3]; + return ((b3<<13)|(b2<<9)|(b1<<5)|b0)^xor_table[key&0xf]; } void aw_rom_board::device_start() { naomi_g1_device::device_start(); - set_key(); + + std::string skey = parameter("key"); + if (!skey.empty()) + rombd_key = strtoll(skey.c_str(), nullptr, 16); + else + { + logerror("%s: Warning: key not provided\n", tag()); + rombd_key = 0; + } mpr_offset = decrypt16(0x58/2) | (decrypt16(0x5a/2) << 16); diff --git a/src/mame/machine/awboard.h b/src/mame/machine/awboard.h index f991c5dcbc5..7164f646948 100644 --- a/src/mame/machine/awboard.h +++ b/src/mame/machine/awboard.h @@ -11,13 +11,6 @@ class aw_rom_board : public naomi_g1_device { public: - template - aw_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&keyregion_tag) - : aw_rom_board(mconfig, tag, owner, clock) - { - m_keyregion.set_tag(std::forward(keyregion_tag)); - } - aw_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void submap(address_map &map) override; @@ -42,8 +35,7 @@ private: enum { EPR, MPR_RECORD, MPR_FILE }; required_memory_region m_region; - optional_memory_region m_keyregion; - uint32_t rombd_key; + uint8_t rombd_key; uint32_t mpr_offset, mpr_bank; uint32_t epr_offset, mpr_file_offset; uint16_t mpr_record_index, mpr_first_file_index; @@ -60,10 +52,10 @@ private: static const int permutation_table[4][16]; static const sbox_set sboxes_table[4]; - static uint16_t decrypt(uint16_t cipherText, uint32_t address, const uint32_t key); + static const int xor_table[16]; + static uint16_t decrypt(uint16_t cipherText, uint32_t address, const uint8_t key); uint16_t decrypt16(uint32_t address) { return decrypt(m_region->as_u16(address), address, rombd_key); } - void set_key(); void recalc_dma_offset(int mode); };