diff options
| author | 2009-09-06 21:52:31 +0000 | |
|---|---|---|
| committer | 2009-09-06 21:52:31 +0000 | |
| commit | f0189a6234e97be03075364d3685d8307ad5c979 (patch) | |
| tree | 056716a69720fc968187504be02d323b6c1c9827 /src | |
| parent | 095f6923fd3dde6ed78ce00c042996aa5c1560a8 (diff) | |
> From: David Haywood [mailto:neohaze@nildram.co.uk]
> Sent: Friday, September 04, 2009 1:47 AM
> To: Aaron Giles
> Subject: Master Ninja
>
> this adds the basics of the 'Master Ninja' bootleg
>
> new clones
> -----------
>
> Master Ninja (bootleg of Ninja Gaiden) [f205v, David Haywood] (NOT
> WORKING)
>
> it needs work on the sprites and sound which are different to the
> original.
Diffstat (limited to 'src')
| -rw-r--r-- | src/mame/drivers/gaiden.c | 263 | ||||
| -rw-r--r-- | src/mame/mamedriv.c | 1 | ||||
| -rw-r--r-- | src/mame/video/gaiden.c | 15 |
3 files changed, 279 insertions, 0 deletions
diff --git a/src/mame/drivers/gaiden.c b/src/mame/drivers/gaiden.c index 160727c651c..316d2bc8669 100644 --- a/src/mame/drivers/gaiden.c +++ b/src/mame/drivers/gaiden.c @@ -139,6 +139,7 @@ extern int raiga_alpha; VIDEO_START( gaiden ); VIDEO_START( raiga ); VIDEO_START( drgnbowl ); +VIDEO_START( mastninj ); VIDEO_UPDATE( gaiden ); VIDEO_UPDATE( raiga ); @@ -774,6 +775,35 @@ static GFXDECODE_START( raiga ) GFXDECODE_ENTRY( "gfx4", 0, spritelayout, 0x000, 16 + 128 ) /* sprites 8x8 (only colors 0x00-x0f and 0x80-0x8f are used) */ GFXDECODE_END +static const gfx_layout mastninj_tile2layout = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { 24,16,8,0 }, + { 0,1,2,3,4,5,6,7, 256,257,258,259,260,261,262,263 }, + { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32, 512+0*32, 512+1*32, 512+2*32, 512+3*32, 512+4*32, 512+5*32, 512+6*32, 512+7*32}, + 32*32 +}; + +static const gfx_layout mastninj_spritelayout = +{ + 8,8, /* tile size */ + RGN_FRAC(1,4), /* number of tiles */ + 4, /* 4 bits per pixel */ + { RGN_FRAC(0,4),RGN_FRAC(1,4),RGN_FRAC(2,4),RGN_FRAC(3,4) }, + { 0,1,2,3,4,5,6,7 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 /* offset to next tile */ +}; + +static GFXDECODE_START( mastninj ) + GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0x000, 16 ) /* tiles 8x8 */ + GFXDECODE_ENTRY( "gfx2", 0, mastninj_tile2layout, 0x300, 16 ) /* tiles 16x16 */ + GFXDECODE_ENTRY( "gfx3", 0, mastninj_tile2layout, 0x200, 16 ) /* tiles 16x16 */ + GFXDECODE_ENTRY( "gfx4", 0, mastninj_spritelayout, 0x100, 16 ) /* sprites 8x8 */ +GFXDECODE_END + static const gfx_layout drgnbowl_tile2layout = { 16,16, @@ -914,6 +944,134 @@ static MACHINE_DRIVER_START( drgnbowl ) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_DRIVER_END +/* +Master Ninja + +CPUs + +QTY Type position function +1x MC68000P10 68000 main PCB main +1x Z8400HB1 ic36 main PCB sound +2x YM2203C ic31,ic32 main PCB sound +2x Y3014B c16,ic17 main PCB sound +2x LM324N ic2,ic6 main PCB sound +1x TDA2002 ic1 main PCB sound + +Oscillators +1x oscillator 20.000 (xl2 main PCB) +1x blu resonator 400K (xl1 main PCB) + +ROMs + +QTY Type position status +6x AM27C512 1-6 main PCB dumped +32x AM27C512 8-39 ROMs PCB dumped + +RAMs + +QTY Type position +4x HY6264LP-10 ic25,ic28,ic61,ic62 main PCB +3x HY6116ALP-10 ic33,ic123,ic124 main PCB +1x HM6148P ic80 main PCB +1x MCM2018AN45 ic81 main PCB +4x HM6148P ic63-66 ROMs PCB +1x HY6116ALP-10 ic85 ROMs PCB + +PLDs + +QTY Type position status +2x TIBPAL16L8 ic15,ic54 main PCB read protected +1x GAL16L8 ic42 ROMs PCB read protected + +Others + +1x JAMMA edge connector +1x trimmer (volume) +2x 8x2 switches DIP +*/ + +static ADDRESS_MAP_START( mastninj_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xdfff) AM_ROM + AM_RANGE(0xf000, 0xf7ff) AM_RAM + AM_RANGE(0xc400, 0xc401) AM_DEVWRITE("ym1", ym2203_w) + AM_RANGE(0xc800, 0xc801) AM_DEVWRITE("ym2", ym2203_w) +// AM_RANGE(0xfc00, 0xfc00) AM_NOP /* ?? */ +// AM_RANGE(0xfc20, 0xfc20) AM_READ(soundlatch_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( mastninj_map, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_ROM + AM_RANGE(0x060000, 0x063fff) AM_RAM + AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(gaiden_videoram_w) AM_BASE(&gaiden_videoram) + AM_RANGE(0x072000, 0x073fff) AM_READWRITE(gaiden_videoram2_r, gaiden_videoram2_w) AM_BASE(&gaiden_videoram2) + AM_RANGE(0x074000, 0x075fff) AM_READWRITE(gaiden_videoram3_r, gaiden_videoram3_w) AM_BASE(&gaiden_videoram3) + AM_RANGE(0x076000, 0x077fff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) + AM_RANGE(0x078000, 0x079fff) AM_RAM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE(&paletteram16) +// AM_RANGE(0x078800, 0x079fff) AM_RAM + AM_RANGE(0x07a000, 0x07a001) AM_READ_PORT("SYSTEM") + AM_RANGE(0x07a002, 0x07a003) AM_READ_PORT("P1_P2") + AM_RANGE(0x07a004, 0x07a005) AM_READ_PORT("DSW") +// AM_RANGE(0x07a104, 0x07a105) AM_WRITE(gaiden_txscrolly_w) +// AM_RANGE(0x07a10c, 0x07a10d) AM_WRITE(gaiden_txscrollx_w) + AM_RANGE(0x07f000, 0x07f001) AM_WRITE(gaiden_bgscrolly_w) + AM_RANGE(0x07f002, 0x07f003) AM_WRITE(gaiden_bgscrollx_w) + AM_RANGE(0x07f004, 0x07f005) AM_WRITE(gaiden_fgscrolly_w) + AM_RANGE(0x07f006, 0x07f007) AM_WRITE(gaiden_fgscrollx_w) + AM_RANGE(0x07a800, 0x07a801) AM_WRITE(watchdog_reset16_w) + AM_RANGE(0x07e000, 0x07e001) AM_WRITE(gaiden_sound_command_w) +// AM_RANGE(0x07a806, 0x07a807) AM_WRITENOP +// AM_RANGE(0x07a808, 0x07a809) AM_WRITE(gaiden_flip_w) +ADDRESS_MAP_END + +static MACHINE_DRIVER_START( mastninj ) + + /* basic machine hardware */ + MDRV_CPU_ADD("maincpu", M68000, 10000000) /* 10 MHz? */ + MDRV_CPU_PROGRAM_MAP(mastninj_map) + MDRV_CPU_VBLANK_INT("screen", irq5_line_hold) + + MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* ?? MHz */ + MDRV_CPU_PROGRAM_MAP(mastninj_sound_map) + /* IRQs are triggered by the YM2203 */ + + MDRV_MACHINE_RESET(raiga) + + /* video hardware */ + MDRV_SCREEN_ADD("screen", RASTER) + MDRV_SCREEN_REFRESH_RATE(59.17) /* verified on pcb */ + MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(32*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) + + MDRV_GFXDECODE(mastninj) + MDRV_PALETTE_LENGTH(4096) + + MDRV_VIDEO_START(mastninj) + MDRV_VIDEO_UPDATE(gaiden) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD("ym1", YM2203, 4000000) /* ?? MHz */ + MDRV_SOUND_CONFIG(ym2203_config) + MDRV_SOUND_ROUTE(0, "mono", 0.15) + MDRV_SOUND_ROUTE(1, "mono", 0.15) + MDRV_SOUND_ROUTE(2, "mono", 0.15) + MDRV_SOUND_ROUTE(3, "mono", 0.60) + + MDRV_SOUND_ADD("ym2", YM2203, 4000000) /* ?? MHz */ + MDRV_SOUND_ROUTE(0, "mono", 0.15) + MDRV_SOUND_ROUTE(1, "mono", 0.15) + MDRV_SOUND_ROUTE(2, "mono", 0.15) + MDRV_SOUND_ROUTE(3, "mono", 0.60) + + /* no OKI on the bootleg */ +// MDRV_SOUND_ADD("oki", OKIM6295, 1000000) +// MDRV_SOUND_CONFIG(okim6295_interface_pin7high) +// MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) +MACHINE_DRIVER_END + /*************************************************************************** Game driver(s) @@ -1128,6 +1286,62 @@ ROM_START( ryukendna ) ROM_LOAD( "4.4a", 0x0000, 0x20000, CRC(b0e0faf9) SHA1(2275d2ef5eee356ccf80b9e9644d16fc30a4d107) ) /* samples */ ROM_END +ROM_START( mastninj ) + ROM_REGION( 0x40000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "3.ic27", 0x00000, 0x10000, CRC(41fedeb3) SHA1(7e95f8e5b0c38b578eedbce9afbd10dbb14cdddf) ) + ROM_LOAD16_BYTE( "1.ic30", 0x00001, 0x10000, CRC(93b1e3dd) SHA1(325b2f0ef5d92f4d760086de6cb23494d1e6c6e6) ) + ROM_LOAD16_BYTE( "4.ic26", 0x20000, 0x10000, CRC(d375c5f6) SHA1(925e84d79f35595a344a417125d74dc46ebec310) ) // 1ST AND 2ND HALF IDENTICAL (but correct?) + ROM_LOAD16_BYTE( "2.ic29", 0x20001, 0x10000, CRC(6b53b8b1) SHA1(68bffc992fecae5e113592a9481c0cee80925135) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "5.ic35", 0x000000, 0x10000, CRC(ba528424) SHA1(5ab93059e26483a756d80b8c18d9669d2a3416de) ) + + ROM_REGION( 0x010000, "gfx1", 0 ) + ROM_LOAD( "6.ic120", 0x000000, 0x10000, CRC(847cc552) SHA1(e5e2ed19efcedb52885f9f91a1690c88a6b6261d) ) + + ROM_REGION( 0x080000, "gfx2", 0 ) + ROM_LOAD32_BYTE( "8.ic13", 0x000000, 0x10000, CRC(e3987e0f) SHA1(8805443e56575fc455d21703bd2f9ebef434e262) ) + ROM_LOAD32_BYTE( "10.ic11", 0x000001, 0x10000, CRC(5e8afc68) SHA1(ecef113a947b9bda6abbef5f75557cd201e355b3) ) + ROM_LOAD32_BYTE( "12.ic9", 0x000002, 0x10000, CRC(2713e9f1) SHA1(87614a79596216d2b710925167f3130d4c2e07c9) ) + ROM_LOAD32_BYTE( "14.ic7", 0x000003, 0x10000, CRC(ca59280f) SHA1(d5a1d85f75ea667812708758915f43f01c8c9830) ) + ROM_LOAD32_BYTE( "20.ic27", 0x040000, 0x10000, CRC(72e5c1c2) SHA1(0e744407c52a61ed657557978cdfe455fe5e931e) ) + ROM_LOAD32_BYTE( "22.ic25", 0x040001, 0x10000, CRC(55affaf8) SHA1(c121a904ba44dc53c8a10b8d56c4c25ab879d8be) ) + ROM_LOAD32_BYTE( "24.ic23", 0x040002, 0x10000, CRC(bd76fd53) SHA1(bc2ad054b63573f16c99f82c680f0f6de2ee4683) ) + ROM_LOAD32_BYTE( "26.ic21", 0x040003, 0x10000, CRC(f3bfcfd6) SHA1(7d73a2ae00825979b3d09502f52d78f61f3ea1a9) ) + + ROM_REGION( 0x080000, "gfx3", 0 ) + ROM_LOAD32_BYTE( "9.ic12", 0x000000, 0x10000, CRC(ae043a2e) SHA1(3513b21d4ee7f869c9ebda68707845d030b0ecad) ) + ROM_LOAD32_BYTE( "11.ic10", 0x000001, 0x10000, CRC(e197fd97) SHA1(1e92139ae6a1c15de629039757c21e32cacc42d6) ) + ROM_LOAD32_BYTE( "13.ic8", 0x000002, 0x10000, CRC(0871971c) SHA1(ede9bb5d6d968fc532217b4eb1cd4c0d7ea9a4a1) ) + ROM_LOAD32_BYTE( "15.ic6", 0x000003, 0x10000, CRC(6850aea3) SHA1(670820ba2df040ded8739907bfdde4ac97373200) ) + ROM_LOAD32_BYTE( "21.ic26", 0x040000, 0x10000, CRC(dd162ce7) SHA1(70ec5a722ea31434be2a4b3104f9c54a48b8ec05) ) + ROM_LOAD32_BYTE( "23.ic24", 0x040001, 0x10000, CRC(edd65385) SHA1(3b5c0115ae1972bfe696a22edd2da9e6fb9739f4) ) + ROM_LOAD32_BYTE( "25.ic22", 0x040002, 0x10000, CRC(ca691635) SHA1(177f94a17cfaf67c764c2a2dff48475039207fae) ) + ROM_LOAD32_BYTE( "27.ic20", 0x040003, 0x10000, CRC(2ae70f42) SHA1(aad89dbd0309a5e3a786aa028995b56859d5b5ff) ) + + ROM_REGION( 0x100000, "gfx4", 0) /* these will need a further descramble to be in the same format as gaiden, although the sprites on the bootleg look different anyway */ + ROM_LOAD( "36.ic50", 0x000000, 0x10000, CRC(3c117e62) SHA1(dee45d6bbe053996e0b3faaba0293a273faf1ffa) ) + ROM_LOAD( "37.ic49", 0x010000, 0x10000, CRC(f6d6422d) SHA1(933487b09d3bcff9714fb2469b3d751b38459cfd) ) + ROM_LOAD( "38.ic48", 0x020000, 0x10000, CRC(642f06e7) SHA1(5b30b5029884b7eddcad201224a639f94ee27823) ) + ROM_LOAD( "39.ic47", 0x030000, 0x10000, CRC(51f00702) SHA1(c2a7819beb37ebf613cb2d65476dcee39f72a781) ) + ROM_LOAD( "32.ic34", 0x040000, 0x10000, CRC(940f3dbb) SHA1(4e2f224ed2ec1b8da992bd375d3ab1cf6fbfdd1f) ) + ROM_LOAD( "33.ic33", 0x050000, 0x10000, CRC(f6baccb0) SHA1(2244d16127efe67fcf59a59e50eabc54e3081dd1) ) + ROM_LOAD( "34.ic32", 0x060000, 0x10000, CRC(bb46ef1b) SHA1(4c8f9e06fa4d7f14206f6180a999b3f32681785a) ) + ROM_LOAD( "35.ic31", 0x070000, 0x10000, CRC(c0b6ba3e) SHA1(8849cf5c7777e4b5e52c695bcb6038b3bad4e04c) ) + ROM_LOAD( "28.ic19", 0x080000, 0x10000, CRC(012da98d) SHA1(413e1f02e2e3267fb4b893b14f627105789aa1c9) ) + ROM_LOAD( "29.ic18", 0x090000, 0x10000, CRC(fa32da96) SHA1(5e240f6f91813bdafacf1d29ea65704f2c4f2ae6) ) + ROM_LOAD( "30.ic17", 0x0a0000, 0x10000, CRC(910fccdb) SHA1(99523b53ae0dbf82783ab5a731df3c02984c72fe) ) + ROM_LOAD( "31.ic16", 0x0b0000, 0x10000, CRC(d16b593b) SHA1(2895b2eba0f3ad5e209fe8c550dd8cc3c3e08742) ) + ROM_LOAD( "16.ic5", 0x0c0000, 0x10000, CRC(216eeef5) SHA1(5167af8cef220a5092add2bf578e8323360132a5) ) + ROM_LOAD( "17.ic4", 0x0d0000, 0x10000, CRC(f72f8bfd) SHA1(ccf0aab11987e76c927a73f12e5cd4bb125c1258) ) + ROM_LOAD( "18.ic3", 0x0e0000, 0x10000, CRC(6de96087) SHA1(0b9028320cb622dad07cf8bde015428eba7f8a5e) ) + ROM_LOAD( "19.ic2", 0x0f0000, 0x10000, CRC(c12c367b) SHA1(9835292f335f1353f7b9bd0bb85124942822646f) ) + + ROM_REGION( 0x080000, "misc", 0 ) + ROM_LOAD( "gal16v8.ic42.bad.dump", 0x000, 0x117, BAD_DUMP CRC(61d6a8d7) SHA1(d3a6331b1fccd374e4f080740094d3832ff98ad9) ) + ROM_LOAD( "tibpal16l8.ic15.bad.dump", 0x000, 0x104, BAD_DUMP CRC(e9cd78fb) SHA1(557d3e7ef3b25c1338b24722cac91bca788c02b8) ) + ROM_LOAD( "tibpal16l8.ic54.bad.dump", 0x000, 0x104, BAD_DUMP CRC(e9cd78fb) SHA1(557d3e7ef3b25c1338b24722cac91bca788c02b8) ) +ROM_END ROM_START( tknight ) @@ -1391,12 +1605,61 @@ static DRIVER_INIT( drgnbowl ) free(buffer); } +static void descramble_mastninj_gfx(UINT8* src) +{ + UINT8 *buffer; + int len = 0x80000; + + /* rearrange gfx */ + buffer = alloc_array_or_die(UINT8, len); + { + int i; + for (i = 0;i < len; i++) + { + buffer[i] = src[BITSWAP24(i, + 23,22,21,20, + 19,18,17,16, + 15,5,14,13,12, + 11,10,9,8, + 7,6,4, + 3,2,1,0)]; + } + memcpy(src,buffer,len); + free(buffer); + } + + buffer = alloc_array_or_die(UINT8, len); + { + int i; + for (i = 0;i < len; i++) + { + buffer[i] = src[BITSWAP24(i, + 23,22,21,20, + 19,18,17,16, + 15,6,14,13,12, + 11,10,9,8, + 7,5,4, + 3,2,1,0)]; + } + memcpy(src,buffer,len); + free(buffer); + } +} + +DRIVER_INIT(mastninj) +{ + // rearrange the graphic roms into a format that MAME can decode + descramble_mastninj_gfx(memory_region(machine,"gfx2")); + descramble_mastninj_gfx(memory_region(machine,"gfx3")); + DRIVER_INIT_CALL(shadoww); +} GAME( 1988, shadoww, 0, shadoww, shadoww, shadoww, ROT0, "Tecmo", "Shadow Warriors (World, set 1)", 0 ) GAME( 1988, shadowwa, shadoww, shadoww, shadoww, shadoww, ROT0, "Tecmo", "Shadow Warriors (World, set 2)", 0 ) GAME( 1988, gaiden, shadoww, shadoww, shadoww, shadoww, ROT0, "Tecmo", "Ninja Gaiden (US)", 0 ) GAME( 1989, ryukendn, shadoww, shadoww, shadoww, shadoww, ROT0, "Tecmo", "Ninja Ryukenden (Japan, set 1)", 0 ) GAME( 1989, ryukendna,shadoww, shadoww, shadoww, shadoww, ROT0, "Tecmo", "Ninja Ryukenden (Japan, set 2)", 0 ) +GAME( 1989, mastninj, shadoww, mastninj,shadoww, mastninj, ROT0, "bootleg", "Master Ninja (bootleg of Shadow Warriors / Ninja Gaiden)", GAME_NOT_WORKING ) // sprites need fixing, sound and yscroll too. GAME( 1989, wildfang, 0, shadoww, wildfang, wildfang, ROT0, "Tecmo", "Wild Fang / Tecmo Knight", 0 ) GAME( 1989, tknight, wildfang, shadoww, tknight, wildfang, ROT0, "Tecmo", "Tecmo Knight", 0 ) GAME( 1991, stratof, 0, raiga, raiga, raiga, ROT0, "Tecmo", "Raiga - Strato Fighter (US)", GAME_IMPERFECT_GRAPHICS ) diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index db2eb3b359d..115b256d835 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -5081,6 +5081,7 @@ BOMULEUL CHAJARA SEGA ST-V 1997/04/11 DRIVER( gaiden ) /* 6215 - (c) 1988 Tecmo (US) */ DRIVER( ryukendn ) /* 6215 - (c) 1989 Tecmo (Japan) */ DRIVER( ryukendna ) /* 6215 - (c) 1989 Tecmo (Japan) */ + DRIVER( mastninj ) /* bootleg */ DRIVER( wildfang ) /* (c) 1989 Tecmo */ DRIVER( tknight ) /* (c) 1989 Tecmo */ DRIVER( stratof ) /* (c) 1991 Tecmo */ diff --git a/src/mame/video/gaiden.c b/src/mame/video/gaiden.c index d81f44bc776..9429b9cf8d4 100644 --- a/src/mame/video/gaiden.c +++ b/src/mame/video/gaiden.c @@ -86,6 +86,21 @@ VIDEO_START( gaiden ) tilemap_set_transparent_pen(text_layer, 0); } +VIDEO_START( mastninj ) +{ + /* set up tile layers */ + background = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 16, 16, 64, 32); + foreground = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 16, 16, 64, 32); + text_layer = tilemap_create(machine, get_tx_tile_info, tilemap_scan_rows, 8, 8, 32, 32); + +// tilemap_set_transparent_pen(background, 15); + tilemap_set_transparent_pen(foreground, 15); + tilemap_set_transparent_pen(text_layer, 15); + + tilemap_set_scrolldx(background, -248, 248); + tilemap_set_scrolldx(foreground, -252, 252); +} + VIDEO_START( raiga ) { int width = video_screen_get_width(machine->primary_screen); |
