XEVIOUSを解析してみた その3

ここらへんを参考にして、Ultra2000 ゼビウスを解析してみる。

https://github.com/mamedev/mame/blob/master/src/mame/drivers/galaga.c

 2559  ROM_START( xevious )
 2560      ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for the first CPU */
 2561      ROM_LOAD( "xvi_1.3p",     0x0000, 0x1000, CRC(09964dda) SHA1(4882b25b0938a903f3a367455ba788a30759b5b0) )
 2562      ROM_LOAD( "xvi_2.3m",     0x1000, 0x1000, CRC(60ecce84) SHA1(8adc60a5fcbca74092518dbc570ffff0f04c5b17) )
 2563      ROM_LOAD( "xvi_3.2m",     0x2000, 0x1000, CRC(79754b7d) SHA1(c6a154858716e1f073b476824b183de20e06d093) )
 2564      ROM_LOAD( "xvi_4.2l",     0x3000, 0x1000, CRC(c7d4bbf0) SHA1(4b846de204d08651253d3a141677c8a31626af07) )
 2565  
 2566      ROM_REGION( 0x10000, "sub", 0 ) /* 64k for the second CPU */
 2567      ROM_LOAD( "xvi_5.3f",     0x0000, 0x1000, CRC(c85b703f) SHA1(15f1c005b9d806a384ab1f2240b9c580bfe83893) )
 2568      ROM_LOAD( "xvi_6.3j",     0x1000, 0x1000, CRC(e18cdaad) SHA1(6b79efee1a9642edb9f752101737132401248aed) )
 2569  
 2570      ROM_REGION( 0x10000, "sub2", 0 )
 2571      ROM_LOAD( "xvi_7.2c",     0x0000, 0x1000, CRC(dd35cf1c) SHA1(f8d1f8e019d8198308443c2e7e815d0d04b23d14) )
 2572  
 2573      ROM_REGION( 0x1000, "gfx1", 0 )
 2574      ROM_LOAD( "xvi_12.3b",    0x0000, 0x1000, CRC(088c8b26) SHA1(9c3b61dfca2f84673a78f7f66e363777a8f47a59) )    /* foreground characters */
 2575  
 2576      ROM_REGION( 0x2000, "gfx2", 0 )
 2577      ROM_LOAD( "xvi_13.3c",    0x0000, 0x1000, CRC(de60ba25) SHA1(32bc09be5ff8b52ee3a26e0ac3ebc2d4107badb7) )    /* bg pattern B0 */
 2578      ROM_LOAD( "xvi_14.3d",    0x1000, 0x1000, CRC(535cdbbc) SHA1(fb9ffe5fc43e0213231267e98d605d43c15f61e8) )    /* bg pattern B1 */
 2579  
 2580      ROM_REGION( 0xa000, "gfx3", 0 )
 2581      ROM_LOAD( "xvi_15.4m",    0x0000, 0x2000, CRC(dc2c0ecb) SHA1(19ddbd9805f77f38c9a9a1bb30dba6c720b8609f) )    /* sprite set #1, planes 0/1 */
 2582      ROM_LOAD( "xvi_17.4p",    0x2000, 0x2000, CRC(dfb587ce) SHA1(acff2bf5cde85a16cdc98a52cdea11f77fadf25a) )    /* sprite set #2, planes 0/1 */
 2583      ROM_LOAD( "xvi_16.4n",    0x4000, 0x1000, CRC(605ca889) SHA1(3bf380ef76c03822a042ecc73b5edd4543c268ce) )    /* sprite set #3, planes 0/1 */
 2584      ROM_LOAD( "xvi_18.4r",    0x5000, 0x2000, CRC(02417d19) SHA1(b5f830dd2cf25cf154308d2e640f0ecdcda5d8cd) )    /* sprite set #1, plane 2, set #2, plane 2 */
 2585      /* 0x7000-0x8fff  will be unpacked from 0x5000-0x6fff */
 2586      ROM_FILL(                 0x9000, 0x1000, 0x00 )    // empty space to decode sprite set #3 as 3 bits per pixel
 2587  
 2588      ROM_REGION( 0x4000, "gfx4", 0 ) /* background tilemaps */
 2589      ROM_LOAD( "xvi_9.2a",     0x0000, 0x1000, CRC(57ed9879) SHA1(3106d1aacff06cf78371bd19967141072b32b7d7) )
 2590      ROM_LOAD( "xvi_10.2b",    0x1000, 0x2000, CRC(ae3ba9e5) SHA1(49064b25667ffcd81137cd5e800df4b78b182a46) )
 2591      ROM_LOAD( "xvi_11.2c",    0x3000, 0x1000, CRC(31e244dd) SHA1(3f7eac12863697a98e1122111801606759e44b2a) )
 2592  
 2593      ROM_REGION( 0x0b00, "proms", 0 )
 2594      ROM_LOAD( "xvi-8.6a",     0x0000, 0x0100, CRC(5cc2727f) SHA1(0dc1e63a47a4cb0ba75f6f1e0c15e408bb0ee2a1) ) /* palette red component */
 2595      ROM_LOAD( "xvi-9.6d",     0x0100, 0x0100, CRC(5c8796cc) SHA1(63015e3c0874afc6b1ca032f1ffb8f90562c77c8) ) /* palette green component */
 2596      ROM_LOAD( "xvi-10.6e",    0x0200, 0x0100, CRC(3cb60975) SHA1(c94d5a5dd4d8a08d6d39c051a4a722581b903f45) ) /* palette blue component */
 2597      ROM_LOAD( "xvi-7.4h",     0x0300, 0x0200, CRC(22d98032) SHA1(ec6626828c79350417d08b98e9631ad35edd4a41) ) /* bg tiles lookup table low bits */
 2598      ROM_LOAD( "xvi-6.4f",     0x0500, 0x0200, CRC(3a7599f0) SHA1(a4bdf58c190ca16fc7b976c97f41087a61fdb8b8) ) /* bg tiles lookup table high bits */
 2599      ROM_LOAD( "xvi-4.3l",     0x0700, 0x0200, CRC(fd8b9d91) SHA1(87ddf0b9d723aabb422d6d416aa9ec6bc246bf34) ) /* sprite lookup table low bits */
 2600      ROM_LOAD( "xvi-5.3m",     0x0900, 0x0200, CRC(bf906d82) SHA1(776168a73d3b9f0ce05610acc8a623deae0a572b) ) /* sprite lookup table high bits */
 2601  
 2602      ROM_REGION( 0x0200, "namco", 0 )    /* sound PROMs */
 2603      ROM_LOAD( "xvi-2.7n",     0x0000, 0x0100, CRC(550f06bc) SHA1(816a0fafa0b084ac11ae1af70a5186539376fc2a) )
 2604      ROM_LOAD( "xvi-1.5n",     0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) )    /* timing - not used */
 2605  ROM_END

sound PROMs以外はCRC32が一致しました!

>crc cpu1.bin 09964dda 1000
crc32=09964dda,size=1000
crc32=09964dda,addr=0000-0fff

>crc cpu1.bin 60ecce84 1000
crc32=60ecce84,size=1000
crc32=60ecce84,addr=1000-1fff

>crc cpu1.bin 79754b7d 1000
crc32=79754b7d,size=1000
crc32=79754b7d,addr=2000-2fff

>crc cpu1.bin c7d4bbf0 1000
crc32=c7d4bbf0,size=1000
crc32=c7d4bbf0,addr=3000-3fff

>crc cpu2.bin c85b703f 1000
crc32=c85b703f,size=1000
crc32=c85b703f,addr=0000-0fff

>crc cpu2.bin e18cdaad 1000
crc32=e18cdaad,size=1000
crc32=e18cdaad,addr=1000-1fff

>crc cpu3.bin dd35cf1c 1000
crc32=dd35cf1c,size=1000
crc32=dd35cf1c,addr=0000-0fff

>crc fg.bin 088c8b26 1000
crc32=088c8b26,size=1000
crc32=088c8b26,addr=0000-0fff

>crc bgpat.bin de60ba25 1000
crc32=de60ba25,size=1000
crc32=de60ba25,addr=0000-0fff

>crc bgpat.bin 535cdbbc 1000
crc32=535cdbbc,size=1000
crc32=535cdbbc,addr=1000-1fff

>crc spr.bin dc2c0ecb 2000
crc32=dc2c0ecb,size=2000
crc32=dc2c0ecb,addr=0000-1fff

>crc spr.bin dfb587ce 2000
crc32=dfb587ce,size=2000
crc32=dfb587ce,addr=4000-5fff

>crc spr.bin 605ca889 1000
crc32=605ca889,size=1000
crc32=605ca889,addr=6000-6fff

>crc spr.bin 02417d19 2000
crc32=02417d19,size=2000
crc32=02417d19,addr=2000-3fff

>crc bgtile.bin 57ed9879 1000
crc32=57ed9879,size=1000
crc32=57ed9879,addr=0000-0fff

>crc bgtile.bin ae3ba9e5 2000
crc32=ae3ba9e5,size=2000
crc32=ae3ba9e5,addr=1000-2fff

>crc bgtile.bin 31e244dd 1000
crc32=31e244dd,size=1000
crc32=31e244dd,addr=3000-3fff

>crc pal.bin 5cc2727f 100
crc32=5cc2727f,size=0100
crc32=5cc2727f,addr=0000-00ff

>crc pal.bin 5c8796cc 100
crc32=5c8796cc,size=0100
crc32=5c8796cc,addr=0100-01ff

>crc pal.bin 3cb60975 100
crc32=3cb60975,size=0100
crc32=3cb60975,addr=0200-02ff

>crc bglkup.bin 22d98032 200
crc32=22d98032,size=0200
crc32=22d98032,addr=0200-03ff

>crc bglkup.bin 3a7599f0 200
crc32=3a7599f0,size=0200
crc32=3a7599f0,addr=0000-01ff

>crc sprlkup.bin fd8b9d91 200
crc32=fd8b9d91,size=0200
crc32=fd8b9d91,addr=0000-01ff

>crc sprlkup.bin bf906d82 200
crc32=bf906d82,size=0200
crc32=bf906d82,addr=0200-03ff

以下のPROMが不足しているようですがsound.binを代わりに使います。

>copy sound.bin xvi-2.7n
>copy sound.bin xvi-1.5n

MAMEで起動してみます。

>mame.exe -joystick -window -resolution 574x448 xevious
xvi_2bpr.7n WRONG CHECKSUMS:
    EXPECTED: CRC(550f06bc) SHA1(816a0fafa0b084ac11ae1af70a5186539376fc2a)
       FOUND: CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46)
xvi_1bpr.5n WRONG CHECKSUMS:
    EXPECTED: CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746)
       FOUND: CRC(7a2815b4) SHA1(085ada18c498fdb18ecedef0ea8fe9217edb7b46)
WARNING: the game might not run correctly.

f:id:tanam:20141226174815p:image

最近のMAMEでは以下のROMも不足しているようですが、古いMAME(0.112)では不要です。

http://www.mamedev.org/oldrel.html

50xx.bin 0x0800 a0acbaf7 f03c79451e73b3a93c1591cdb27fedc9f130508d mcu 
51xx.bin 0x0400 c2f57ef8 50de79e0d6a76bda95ffb02fcce369a79e6abfec mcu 
54xx.bin 0x0400 ee7357e0 01bdf984a49e8d0cc8761b2cc162fd6434d5afbe mcu