スクランブルのROMを解析してみた その3

なんか惜しいので、BOOTLEGも含めてCRC32を調べたところ元ネタは以下のようです。

http://mamedev.org/source/src/mame/drivers/galdrvr.c.html

ROM_START( scramblebb ) // no PCB, just eproms...
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "1",      0x0000, 0x0800, CRC(8ba174c4) SHA1(9ff48669054e4f55a19cb2d317a9d7a5e400e86c) )
ROM_LOAD( "2",      0x0800, 0x0800, CRC(43cb40a4) SHA1(4e500f63a06865a5fd9a7d920eb866ea610a4d92) )
ROM_LOAD( "3",      0x1000, 0x0800, CRC(eec265ee) SHA1(29b6cf6b93220414eb58cddeba591dc8813c4935) )
ROM_LOAD( "4",      0x1800, 0x0800, CRC(dd380a22) SHA1(125e713a58cc5f2c1e38f67dad29f8c985ce5a8b) )
ROM_LOAD( "5",      0x2000, 0x0800, CRC(92980e72) SHA1(7e0605b461ace534f8f91028bb82968ecd907ca1) )
ROM_LOAD( "6",      0x2800, 0x0800, CRC(9fd96374) SHA1(c8456dd8a012353a023a2d3fa5d508e49c36ace8) )
ROM_LOAD( "7",      0x3000, 0x0800, CRC(88ac07a0) SHA1(c57061db5984b472039356bf84a050b5b66e3813) )
ROM_LOAD( "8",      0x3800, 0x0800, CRC(75232e09) SHA1(b0da201bf05c63031cdbe9f7059e3c710557f33d) )
 
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "ot1.5c",  0x0000, 0x0800, BAD_DUMP CRC(bcd297f0) SHA1(8ed78487d76fd0a917ab7b258937a46e2cd9800c) )    // need proper dump
ROM_LOAD( "ot2.5d",  0x0800, 0x0800, BAD_DUMP CRC(de7912da) SHA1(8558b4eff5d7e63029b325edef9914feda5834c3) )    // need proper dump
ROM_LOAD( "ot3.5e",  0x1000, 0x0800, BAD_DUMP CRC(ba2fa933) SHA1(1f976d8595706730e29f93027e7ab4620075c078) )    // need proper dump

ROM_REGION( 0x1000, "gfx1", 0 )
ROM_LOAD( "9",      0x0000, 0x0800, CRC(4708845b) SHA1(a8b1ad19a95a9d35050a2ab7194cc96fc5afcdc9) )
ROM_LOAD( "10",     0x0800, 0x0800, CRC(11fd2887) SHA1(69844e48bb4d372cac7ae83c953df573c7ecbb7f) )

ROM_REGION( 0x0020, "proms", 0 ) // should be different on this bootleg..
ROM_LOAD( "c01s.6e", 0x0000, 0x0020, BAD_DUMP CRC(4e3caeab) SHA1(a25083c3e36d28afdefe4af6e6d4f3155e303625) )    // need proper dump
ROM_END

結果12個のROMはCRC32が一致したので、残り2個のアドレスを推測してみる。

>crc SLPM_626.26 8ba174c4 800
>crc SLPM_626.26 43cb40a4 800
>crc SLPM_626.26 eec265ee 800
crc32=eec265ee,size=0800
crc32=eec265ee,addr=584d0-58ccf(3)
>crc SLPM_626.26 dd380a22 800
crc32=dd380a22,size=0800
crc32=dd380a22,addr=58cd0-594cf(4)
>crc SLPM_626.26 92980e72 800
crc32=92980e72,size=0800
crc32=92980e72,addr=594d0-59ccf(5)
>crc SLPM_626.26 9fd96374 800
crc32=9fd96374,size=0800
crc32=9fd96374,addr=59cd0-5a4cf(6)
>crc SLPM_626.26 88ac07a0 800
crc32=88ac07a0,size=0800
crc32=88ac07a0,addr=5a4d0-5accf(7)
>crc SLPM_626.26 75232e09 800
crc32=75232e09,size=0800
crc32=75232e09,addr=5acd0-5b4cf(8)
>crc SLPM_626.26 bcd297f0 800
crc32=bcd297f0,size=0800
crc32=bcd297f0,addr=674d0-67ccf(ot1.5c)
>crc SLPM_626.26 de7912da 800
crc32=de7912da,size=0800
crc32=de7912da,addr=67cd0-684cf(ot2.5d)
>crc SLPM_626.26 ba2fa933 800
crc32=ba2fa933,size=0800
crc32=ba2fa933,addr=684d0-68ccf(ot3.5e)
>crc SLPM_626.26 4708845b 800
crc32=4708845b,size=0800
crc32=4708845b,addr=77cd0-784cf(9)
>crc SLPM_626.26 11fd2887 800
crc32=11fd2887,size=0800
crc32=11fd2887,addr=774d0-77ccf(10)
>crc SLPM_626.26 4e3caeab 20
crc32=4e3caeab,size=0020
crc32=4e3caeab,addr=784d0-784ef(c01s.6e)

おそらく残り2個のアドレスはこうではないかな?

crc32=xxxxxxxx,addr=574d0-57ccf NG(1)
crc32=xxxxxxxx,addr=57cd0-584cf NG(2)
crc32=eec265ee,addr=584d0-58ccf OK(3)
crc32=dd380a22,addr=58cd0-594cf OK(4)
crc32=92980e72,addr=594d0-59ccf OK(5)
crc32=9fd96374,addr=59cd0-5a4cf OK(6)
crc32=88ac07a0,addr=5a4d0-5accf OK(7)
crc32=75232e09,addr=5acd0-5b4cf OK(8)

>cut SLPM_626.26 574d0 800
start=000574d0,size=0800
crc32=2609efdc,addr=574d0-57ccf

>cut SLPM_626.26 57cd0 800
start=00057cd0,size=0800
crc32=9bfd2f62,addr=57cd0-584cf

とりあえずMAMEで実行してみるがまだ動かない。しかし14個中12個のROMはCRC32が一致したので暗号化はされてないはず。

>mame -window -resolution 1536x448  scramblebb

その後、試行錯誤して動かすことが出来ました。

f:id:tanam:20140211232734p:image:w360

f:id:tanam:20140211232733p:image:w360

f:id:tanam:20140211232732p:image:w360

修正箇所は以下の6バイトになります。ちなみに、オレたちゲーセン族の元ファイルはSLPM_626.26(CRC32:26ebfad7)でした。

574d0 -> 1(CRC32:aed2ef5b)

000001B5: 67 C3
000001B6: 68 F9
000001B7: B0 01

57cd0 -> 2(CRC32:a6f3e2b8)

000003F4: D0 00
000003F8: D0 00
00000443: C0 00