diff options
Diffstat (limited to 'src/mame/drivers/gaiden.cpp')
-rw-r--r-- | src/mame/drivers/gaiden.cpp | 152 |
1 files changed, 76 insertions, 76 deletions
diff --git a/src/mame/drivers/gaiden.cpp b/src/mame/drivers/gaiden.cpp index 4c0f314133a..80a7275506f 100644 --- a/src/mame/drivers/gaiden.cpp +++ b/src/mame/drivers/gaiden.cpp @@ -141,6 +141,8 @@ Notes: #include "sound/ym2151.h" #include "speaker.h" +#include <algorithm> + WRITE16_MEMBER(gaiden_state::irq_ack_w) { @@ -165,17 +167,17 @@ WRITE16_MEMBER(gaiden_state::gaiden_sound_command_w) /* and reads the answer from 0x07a007. The returned values contain the address of */ /* a function to jump to. */ +static const int wildfang_jumppoints[] = +{ + 0x0c0c,0x0cac,0x0d42,0x0da2,0x0eea,0x112e,0x1300,0x13fa, + 0x159a,0x1630,0x109a,0x1700,0x1750,0x1806,0x18d6,0x1a44, + 0x1b52 +}; + WRITE16_MEMBER(gaiden_state::wildfang_protection_w) { if (ACCESSING_BITS_8_15) { - static const int jumppoints[] = - { - 0x0c0c,0x0cac,0x0d42,0x0da2,0x0eea,0x112e,0x1300,0x13fa, - 0x159a,0x1630,0x109a,0x1700,0x1750,0x1806,0x18d6,0x1a44, - 0x1b52 - }; - data >>= 8; // logerror("PC %06x: prot = %02x\n",m_maincpu->pc(),data); @@ -191,7 +193,7 @@ WRITE16_MEMBER(gaiden_state::wildfang_protection_w) break; case 0x20: /* low 4 bits of jump code */ m_jumpcode |= data & 0x0f; - if (m_jumpcode >= ARRAY_LENGTH(jumppoints)) + if (m_jumpcode >= ARRAY_LENGTH(wildfang_jumppoints)) { logerror("unknown jumpcode %02x\n", m_jumpcode); m_jumpcode = 0; @@ -199,16 +201,16 @@ WRITE16_MEMBER(gaiden_state::wildfang_protection_w) m_prot = 0x20; break; case 0x30: /* ask for bits 12-15 of function address */ - m_prot = 0x40 | ((jumppoints[m_jumpcode] >> 12) & 0x0f); + m_prot = 0x40 | ((m_jumppoints[m_jumpcode] >> 12) & 0x0f); break; case 0x40: /* ask for bits 8-11 of function address */ - m_prot = 0x50 | ((jumppoints[m_jumpcode] >> 8) & 0x0f); + m_prot = 0x50 | ((m_jumppoints[m_jumpcode] >> 8) & 0x0f); break; case 0x50: /* ask for bits 4-7 of function address */ - m_prot = 0x60 | ((jumppoints[m_jumpcode] >> 4) & 0x0f); + m_prot = 0x60 | ((m_jumppoints[m_jumpcode] >> 4) & 0x0f); break; case 0x60: /* ask for bits 0-3 of function address */ - m_prot = 0x70 | ((jumppoints[m_jumpcode] >> 0) & 0x0f); + m_prot = 0x70 | ((m_jumppoints[m_jumpcode] >> 0) & 0x0f); break; } } @@ -266,7 +268,7 @@ same commands as some of the above */ /* these are used during startup */ -static const int jumppoints_00[0x100] = +static const int raiga_jumppoints_00[0x100] = { 0x6669, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,0x4a46, -1, @@ -279,7 +281,7 @@ static const int jumppoints_00[0x100] = }; /* these are used the rest of the time */ -static const int jumppoints_other[0x100] = +static const int raiga_jumppoints_other[0x100] = { 0x5457,0x494e,0x5f4b,0x4149,0x5345,0x525f,0x4d49,0x5941, 0x5241,0x5349,0x4d4f,0x4a49, -1, -1, -1, -1, @@ -291,7 +293,7 @@ static const int jumppoints_other[0x100] = -1, -1, -1, -1, -1, -1, -1, -1 }; -MACHINE_RESET_MEMBER(gaiden_state,raiga) +void gaiden_state::machine_reset() { m_prot = 0; m_jumpcode = 0; @@ -309,7 +311,13 @@ MACHINE_RESET_MEMBER(gaiden_state,raiga) m_spr_offset_y = 0; } -MACHINE_START_MEMBER(gaiden_state,raiga) +MACHINE_RESET_MEMBER(gaiden_state,raiga) +{ + gaiden_state::machine_reset() + m_jumppoints = raiga_jumppoints_00; +} + +void gaiden_state::machine_start() { save_item(NAME(m_prot)); save_item(NAME(m_jumpcode)); @@ -348,12 +356,12 @@ WRITE16_MEMBER(gaiden_state::raiga_protection_w) m_jumpcode |= data & 0x0f; logerror("requested protection jumpcode %02x\n", m_jumpcode); // m_jumpcode = 0; - if (m_raiga_jumppoints[m_jumpcode] == -2) + if (m_jumppoints[m_jumpcode] == -2) { - m_raiga_jumppoints = jumppoints_other; + m_jumppoints = raiga_jumppoints_other; } - if (m_raiga_jumppoints[m_jumpcode] == -1) + if (m_jumppoints[m_jumpcode] == -1) { logerror("unknown jumpcode %02x\n", m_jumpcode); popmessage("unknown jumpcode %02x", m_jumpcode); @@ -362,16 +370,16 @@ WRITE16_MEMBER(gaiden_state::raiga_protection_w) m_prot = 0x20; break; case 0x30: /* ask for bits 12-15 of function address */ - m_prot = 0x40 | ((m_raiga_jumppoints[m_jumpcode] >> 12) & 0x0f); + m_prot = 0x40 | ((m_jumppoints[m_jumpcode] >> 12) & 0x0f); break; case 0x40: /* ask for bits 8-11 of function address */ - m_prot = 0x50 | ((m_raiga_jumppoints[m_jumpcode] >> 8) & 0x0f); + m_prot = 0x50 | ((m_jumppoints[m_jumpcode] >> 8) & 0x0f); break; case 0x50: /* ask for bits 4-7 of function address */ - m_prot = 0x60 | ((m_raiga_jumppoints[m_jumpcode] >> 4) & 0x0f); + m_prot = 0x60 | ((m_jumppoints[m_jumpcode] >> 4) & 0x0f); break; case 0x60: /* ask for bits 0-3 of function address */ - m_prot = 0x70 | ((m_raiga_jumppoints[m_jumpcode] >> 0) & 0x0f); + m_prot = 0x70 | ((m_jumppoints[m_jumpcode] >> 0) & 0x0f); break; } } @@ -386,9 +394,9 @@ READ16_MEMBER(gaiden_state::raiga_protection_r) ADDRESS_MAP_START(gaiden_state::gaiden_map) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x060000, 0x063fff) AM_RAM - AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(gaiden_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x072000, 0x073fff) AM_RAM_WRITE(gaiden_videoram2_w) AM_SHARE("videoram2") - AM_RANGE(0x074000, 0x075fff) AM_RAM_WRITE(gaiden_videoram3_w) AM_SHARE("videoram3") + AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(gaiden_tx_videoram_w) AM_SHARE("videoram1") + AM_RANGE(0x072000, 0x073fff) AM_RAM_WRITE(gaiden_videoram_w<1>) AM_SHARE("videoram2") + AM_RANGE(0x074000, 0x075fff) AM_RAM_WRITE(gaiden_videoram_w<2>) AM_SHARE("videoram3") AM_RANGE(0x076000, 0x077fff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x078000, 0x079fff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") AM_RANGE(0x07a000, 0x07a001) AM_READ_PORT("SYSTEM") @@ -409,12 +417,24 @@ ADDRESS_MAP_START(gaiden_state::gaiden_map) AM_RANGE(0x07a808, 0x07a809) AM_WRITE(gaiden_flip_w) ADDRESS_MAP_END +ADDRESS_MAP_START(gaiden_state::wildfang_map) + AM_IMPORT_FROM(gaiden_map) + AM_RANGE(0x07a006, 0x07a007) AM_READ(wildfang_protection_r) + AM_RANGE(0x07a804, 0x07a805) AM_WRITE(wildfang_protection_w) +ADDRESS_MAP_END + +ADDRESS_MAP_START(gaiden_state::raiga_map) + AM_IMPORT_FROM(gaiden_map) + AM_RANGE(0x07a006, 0x07a007) AM_READ(raiga_protection_r) + AM_RANGE(0x07a804, 0x07a805) AM_WRITE(raiga_protection_w) +ADDRESS_MAP_END + ADDRESS_MAP_START(gaiden_state::drgnbowl_map) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x060000, 0x063fff) AM_RAM - AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(gaiden_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x072000, 0x073fff) AM_RAM_WRITE(gaiden_videoram2_w) AM_SHARE("videoram2") - AM_RANGE(0x074000, 0x075fff) AM_RAM_WRITE(gaiden_videoram3_w) AM_SHARE("videoram3") + AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(gaiden_tx_videoram_w) AM_SHARE("videoram1") + AM_RANGE(0x072000, 0x073fff) AM_RAM_WRITE(gaiden_videoram_w<1>) AM_SHARE("videoram2") + AM_RANGE(0x074000, 0x075fff) AM_RAM_WRITE(gaiden_videoram_w<2>) AM_SHARE("videoram3") AM_RANGE(0x076000, 0x077fff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x078000, 0x079fff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") AM_RANGE(0x07a000, 0x07a001) AM_READ_PORT("SYSTEM") @@ -671,15 +691,8 @@ static const gfx_layout spritelayout = static GFXDECODE_START( gaiden ) GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0x100, 16 ) /* tiles 8x8 */ GFXDECODE_ENTRY( "gfx2", 0, tile2layout, 0x000, 0x1000 ) /* tiles 16x16 */ - GFXDECODE_ENTRY( "gfx3", 0, tile2layout, 0x000, 0x1000 ) /* tiles 16x16 */ - GFXDECODE_ENTRY( "gfx4", 0, spritelayout, 0x000, 0x1000 ) /* sprites 8x8 */ -GFXDECODE_END - -static GFXDECODE_START( raiga ) - GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0x100, 16 ) /* tiles 8x8 */ - GFXDECODE_ENTRY( "gfx2", 0, tile2layout, 0x000, 0x1000 ) /* tiles 16x16 */ - GFXDECODE_ENTRY( "gfx3", 0, tile2layout, 0x000, 0x1000 ) /* tiles 16x16 (only colors 0x00-x0f and 0x80-0x8f are used) */ - GFXDECODE_ENTRY( "gfx4", 0, spritelayout, 0x000, 0x1000 ) /* sprites 8x8 (only colors 0x00-x0f and 0x80-0x8f are used) */ + GFXDECODE_ENTRY( "gfx3", 0, tile2layout, 0x000, 0x1000 ) /* tiles 16x16 (only colors 0x00-0x0f and 0x80-0x8f are used) */ + GFXDECODE_ENTRY( "gfx4", 0, spritelayout, 0x000, 0x1000 ) /* sprites 8x8 (only colors 0x00-0x0f and 0x80-0x8f are used) */ GFXDECODE_END static const gfx_layout mastninj_tile2layout = @@ -752,9 +765,6 @@ MACHINE_CONFIG_START(gaiden_state::shadoww) MCFG_CPU_PROGRAM_MAP(sound_map) /* IRQs are triggered by the YM2203 */ - MCFG_MACHINE_START_OVERRIDE(gaiden_state,raiga) - MCFG_MACHINE_RESET_OVERRIDE(gaiden_state,raiga) - MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -805,14 +815,20 @@ MACHINE_CONFIG_START(gaiden_state::shadoww) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) MACHINE_CONFIG_END +MACHINE_CONFIG_START(gaiden_state::wildfang) + shadoww(config); + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(wildfang_map) +MACHINE_CONFIG_END + MACHINE_CONFIG_START(gaiden_state::raiga) shadoww(config); + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(raiga_map) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(gaiden_state, screen_update_raiga) + MCFG_MACHINE_RESET_OVERRIDE(gaiden_state,raiga) MCFG_VIDEO_START_OVERRIDE(gaiden_state,raiga) - MCFG_GFXDECODE_MODIFY("gfxdecode", raiga) MACHINE_CONFIG_END MACHINE_CONFIG_START(gaiden_state::drgnbowl) @@ -826,9 +842,6 @@ MACHINE_CONFIG_START(gaiden_state::drgnbowl) MCFG_CPU_PROGRAM_MAP(drgnbowl_sound_map) MCFG_CPU_IO_MAP(drgnbowl_sound_port_map) - MCFG_MACHINE_START_OVERRIDE(gaiden_state,raiga) - MCFG_MACHINE_RESET_OVERRIDE(gaiden_state,raiga) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -937,7 +950,7 @@ WRITE8_MEMBER(gaiden_state::adpcm_bankswitch_w) MACHINE_START_MEMBER(gaiden_state,mastninj) { - MACHINE_START_CALL_MEMBER(raiga); + gaiden_state::machine_start(); m_adpcm_bank->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000); m_adpcm_bank->set_entry(0); @@ -949,9 +962,9 @@ MACHINE_START_MEMBER(gaiden_state,mastninj) ADDRESS_MAP_START(gaiden_state::mastninj_map) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x060000, 0x063fff) AM_RAM - AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(gaiden_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x072000, 0x073fff) AM_RAM_WRITE(gaiden_videoram2_w) AM_SHARE("videoram2") - AM_RANGE(0x074000, 0x075fff) AM_RAM_WRITE(gaiden_videoram3_w) AM_SHARE("videoram3") + AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(gaiden_tx_videoram_w) AM_SHARE("videoram1") + AM_RANGE(0x072000, 0x073fff) AM_RAM_WRITE(gaiden_videoram_w<1>) AM_SHARE("videoram2") + AM_RANGE(0x074000, 0x075fff) AM_RAM_WRITE(gaiden_videoram_w<2>) AM_SHARE("videoram3") AM_RANGE(0x076000, 0x077fff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x078000, 0x079fff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") // AM_RANGE(0x078800, 0x079fff) AM_RAM @@ -982,7 +995,6 @@ MACHINE_CONFIG_START(gaiden_state::mastninj) MCFG_CPU_PROGRAM_MAP(mastninj_sound_map) MCFG_MACHINE_START_OVERRIDE(gaiden_state,mastninj) - MCFG_MACHINE_RESET_OVERRIDE(gaiden_state,raiga) MCFG_WATCHDOG_ADD("watchdog") @@ -1580,33 +1592,23 @@ ROM_END DRIVER_INIT_MEMBER(gaiden_state,shadoww) { + m_jumppoints = wildfang_jumppoints; /* sprite size Y = sprite size X */ m_sprite_sizey = 0; - m_raiga_jumppoints = jumppoints_00; } DRIVER_INIT_MEMBER(gaiden_state,wildfang) { + m_jumppoints = wildfang_jumppoints; /* sprite size Y = sprite size X */ m_sprite_sizey = 0; - m_raiga_jumppoints = jumppoints_00; - - m_prot = 0; - m_jumpcode = 0; - m_maincpu->space(AS_PROGRAM).install_read_handler(0x07a006, 0x07a007, read16_delegate(FUNC(gaiden_state::wildfang_protection_r),this)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x07a804, 0x07a805, write16_delegate(FUNC(gaiden_state::wildfang_protection_w),this)); } DRIVER_INIT_MEMBER(gaiden_state,raiga) { + m_jumppoints = raiga_jumppoints_00; /* sprite size Y independent from sprite size X */ m_sprite_sizey = 2; - m_raiga_jumppoints = jumppoints_00; - - m_prot = 0; - m_jumpcode = 0; - m_maincpu->space(AS_PROGRAM).install_read_handler(0x07a006, 0x07a007, read16_delegate(FUNC(gaiden_state::raiga_protection_r),this)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x07a804, 0x07a805, write16_delegate(FUNC(gaiden_state::raiga_protection_w),this)); } void gaiden_state::descramble_drgnbowl(int descramble_cpu) @@ -1619,7 +1621,7 @@ void gaiden_state::descramble_drgnbowl(int descramble_cpu) { std::vector<uint8_t> buffer(size); - memcpy(&buffer[0], ROM, size); + std::copy(&ROM[0], &ROM[size], buffer.begin()); for( i = 0; i < size; i++ ) { ROM[i] = buffer[bitswap<24>(i,23,22,21,20, @@ -1636,7 +1638,7 @@ void gaiden_state::descramble_drgnbowl(int descramble_cpu) { std::vector<uint8_t> buffer(size); - memcpy(&buffer[0],ROM,size); + std::copy(&ROM[0], &ROM[size], buffer.begin()); for( i = 0; i < size; i++ ) { ROM[i] = buffer[bitswap<24>(i,23,22,21,20, @@ -1651,15 +1653,13 @@ void gaiden_state::descramble_drgnbowl(int descramble_cpu) DRIVER_INIT_MEMBER(gaiden_state,drgnbowl) { - m_raiga_jumppoints = jumppoints_00; - + m_jumppoints = wildfang_jumppoints; descramble_drgnbowl(1); } DRIVER_INIT_MEMBER(gaiden_state,drgnbowla) { - m_raiga_jumppoints = jumppoints_00; - + m_jumppoints = wildfang_jumppoints; descramble_drgnbowl(0); } @@ -1681,7 +1681,7 @@ void gaiden_state::descramble_mastninj_gfx(uint8_t* src) 7,6,4, 3,2,1,0)]; } - memcpy(src, &buffer[0], len); + std::copy(buffer.begin(), buffer.end(), &src[0]); } { @@ -1697,7 +1697,7 @@ void gaiden_state::descramble_mastninj_gfx(uint8_t* src) 7,5,4, 3,2,1,0)]; } - memcpy(src, &buffer[0], len); + std::copy(buffer.begin(), buffer.end(), &src[0]); } } @@ -1719,9 +1719,9 @@ GAME( 1989, mastninj, shadoww, mastninj, common, gaiden_state, mastninj, ROT GAME( 1992, drgnbowl, 0, drgnbowl, drgnbowl, gaiden_state, drgnbowl, ROT0, "Nics", "Dragon Bowl (set 1, encrypted program)", MACHINE_SUPPORTS_SAVE ) // Dragon Bowl is based on Ninja Gaiden code GAME( 1992, drgnbowla, drgnbowl, drgnbowl, drgnbowl, gaiden_state, drgnbowla,ROT0, "Nics", "Dragon Bowl (set 2, unencrypted program)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, wildfang, 0, shadoww, wildfang, gaiden_state, wildfang, ROT0, "Tecmo", "Wild Fang / Tecmo Knight", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, wildfangs, wildfang, shadoww, tknight, gaiden_state, wildfang, ROT0, "Tecmo", "Wild Fang", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, tknight, wildfang, shadoww, tknight, gaiden_state, wildfang, ROT0, "Tecmo", "Tecmo Knight", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, wildfang, 0, wildfang, wildfang, gaiden_state, wildfang, ROT0, "Tecmo", "Wild Fang / Tecmo Knight", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, wildfangs, wildfang, wildfang, tknight, gaiden_state, wildfang, ROT0, "Tecmo", "Wild Fang", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, tknight, wildfang, wildfang, tknight, gaiden_state, wildfang, ROT0, "Tecmo", "Tecmo Knight", MACHINE_SUPPORTS_SAVE ) GAME( 1991, stratof, 0, raiga, raiga, gaiden_state, raiga, ROT0, "Tecmo", "Raiga - Strato Fighter (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1991, raiga, stratof, raiga, raiga, gaiden_state, raiga, ROT0, "Tecmo", "Raiga - Strato Fighter (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) |