simplify Atomiswave key scheduling, get rid of 20bit key files

This commit is contained in:
MetalliC 2019-08-04 02:32:10 +03:00
parent 78ca6157e4
commit f3fc1b9d49
3 changed files with 76 additions and 122 deletions

View File

@ -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

View File

@ -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);

View File

@ -11,13 +11,6 @@
class aw_rom_board : public naomi_g1_device
{
public:
template <typename T>
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<T>(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);
};