diff options
author | angelosa <lordkale4@gmail.com> | 2018-06-08 00:11:02 +0200 |
---|---|---|
committer | angelosa <lordkale4@gmail.com> | 2018-06-08 00:11:02 +0200 |
commit | d0f20f2d13218a0f0c467bfe371e752c81dcf42b (patch) | |
tree | e7424e2edd6baf6496c289ac1f0c0e93d9239175 /src/mame/drivers/ninjakd2.cpp | |
parent | 7d87acb1c1bdf415950ed0f5d9d48f641be7a4a2 (diff) |
ninjakd2.cpp: basic inheritance (nw)
Diffstat (limited to 'src/mame/drivers/ninjakd2.cpp')
-rw-r--r-- | src/mame/drivers/ninjakd2.cpp | 178 |
1 files changed, 85 insertions, 93 deletions
diff --git a/src/mame/drivers/ninjakd2.cpp b/src/mame/drivers/ninjakd2.cpp index b0bc864bb49..c67ef3b9474 100644 --- a/src/mame/drivers/ninjakd2.cpp +++ b/src/mame/drivers/ninjakd2.cpp @@ -231,44 +231,44 @@ WRITE8_MEMBER(ninjakd2_state::ninjakd2_pcm_play_w) * *************************************/ -void ninjakd2_state::omegaf_io_protection_start() +void omegaf_state::io_protection_start() { // register for save states - save_item(NAME(m_omegaf_io_protection)); - save_item(NAME(m_omegaf_io_protection_input)); - save_item(NAME(m_omegaf_io_protection_tic)); + save_item(NAME(m_io_protection)); + save_item(NAME(m_io_protection_input)); + save_item(NAME(m_io_protection_tick)); } -void ninjakd2_state::omegaf_io_protection_reset() +void omegaf_state::io_protection_reset() { // make sure protection starts in a known state - m_omegaf_io_protection[0] = 0; - m_omegaf_io_protection[1] = 0; - m_omegaf_io_protection[2] = 0; - m_omegaf_io_protection_input = 0; - m_omegaf_io_protection_tic = 0; + m_io_protection[0] = 0; + m_io_protection[1] = 0; + m_io_protection[2] = 0; + m_io_protection_input = 0; + m_io_protection_tick = 0; } -READ8_MEMBER(ninjakd2_state::omegaf_io_protection_r) +READ8_MEMBER(omegaf_state::io_protection_r) { uint8_t result = 0xff; - switch (m_omegaf_io_protection[1] & 3) + switch (m_io_protection[1] & 3) { case 0: switch (offset) { case 1: - switch (m_omegaf_io_protection[0] & 0xe0) + switch (m_io_protection[0] & 0xe0) { case 0x00: - if (++m_omegaf_io_protection_tic & 1) + if (++m_io_protection_tick & 1) { result = 0x00; } else { - switch (m_omegaf_io_protection_input) + switch (m_io_protection_input) { // first interrogation // this happens just after setting mode 0. @@ -299,11 +299,11 @@ READ8_MEMBER(ninjakd2_state::omegaf_io_protection_r) break; case 0x80: - result = 0x20 | (m_omegaf_io_protection_input & 0x1f); + result = 0x20 | (m_io_protection_input & 0x1f); break; case 0xc0: - result = 0x60 | (m_omegaf_io_protection_input & 0x1f); + result = 0x60 | (m_io_protection_input & 0x1f); break; } break; @@ -332,16 +332,16 @@ READ8_MEMBER(ninjakd2_state::omegaf_io_protection_r) return result; } -WRITE8_MEMBER(ninjakd2_state::omegaf_io_protection_w) +WRITE8_MEMBER(omegaf_state::io_protection_w) { // load parameter on c006 bit 0 rise transition - if (offset == 2 && (data & 1) && !(m_omegaf_io_protection[2] & 1)) + if (offset == 2 && (data & 1) && !(m_io_protection[2] & 1)) { - logerror("loading protection input %02x\n", m_omegaf_io_protection[0]); - m_omegaf_io_protection_input = m_omegaf_io_protection[0]; + logerror("loading protection input %02x\n", m_io_protection[0]); + m_io_protection_input = m_io_protection[0]; } - m_omegaf_io_protection[offset] = data; + m_io_protection[offset] = data; } @@ -368,7 +368,7 @@ WRITE8_MEMBER(ninjakd2_state::ninjakd2_soundreset_w) // returning 0 and no small enemies shoot any bullet. // returning 0xff seems enough // TODO: find a better reference and verify if there are more gameplay quirks, this might really be anything! -READ8_MEMBER(ninjakd2_state::unk_r) +READ8_MEMBER(omegaf_state::unk_r) { return 0xff; } @@ -401,7 +401,7 @@ void ninjakd2_state::ninjakd2_main_cpu(address_map &map) map(0xfa00, 0xffff).ram().share("spriteram"); } -void ninjakd2_state::mnight_main_cpu(address_map &map) +void mnight_state::mnight_main_cpu(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0xbfff).bankr("bank1"); @@ -423,51 +423,51 @@ void ninjakd2_state::mnight_main_cpu(address_map &map) } -void ninjakd2_state::robokid_main_cpu(address_map &map) +void robokid_state::robokid_main_cpu(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0xbfff).bankr("bank1"); map(0xc000, 0xc7ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); map(0xc800, 0xcfff).ram().w(FUNC(ninjakd2_state::ninjakd2_fgvideoram_w)).share("fg_videoram"); - map(0xd000, 0xd3ff).rw(FUNC(ninjakd2_state::robokid_bg2_videoram_r), FUNC(ninjakd2_state::robokid_bg2_videoram_w)); // banked - map(0xd400, 0xd7ff).rw(FUNC(ninjakd2_state::robokid_bg1_videoram_r), FUNC(ninjakd2_state::robokid_bg1_videoram_w)); // banked - map(0xd800, 0xdbff).rw(FUNC(ninjakd2_state::robokid_bg0_videoram_r), FUNC(ninjakd2_state::robokid_bg0_videoram_w)); // banked + map(0xd000, 0xd3ff).rw(FUNC(robokid_state::robokid_bg2_videoram_r), FUNC(robokid_state::robokid_bg2_videoram_w)); // banked + map(0xd400, 0xd7ff).rw(FUNC(robokid_state::robokid_bg1_videoram_r), FUNC(robokid_state::robokid_bg1_videoram_w)); // banked + map(0xd800, 0xdbff).rw(FUNC(robokid_state::robokid_bg0_videoram_r), FUNC(robokid_state::robokid_bg0_videoram_w)); // banked map(0xdc00, 0xdc00).portr("KEYCOIN").w("soundlatch", FUNC(generic_latch_8_device::write)); map(0xdc01, 0xdc01).portr("PAD1").w(FUNC(ninjakd2_state::ninjakd2_soundreset_w)); map(0xdc02, 0xdc02).portr("PAD2").w(FUNC(ninjakd2_state::ninjakd2_bankselect_w)); map(0xdc03, 0xdc03).portr("DIPSW1").w(FUNC(ninjakd2_state::ninjakd2_sprite_overdraw_w)); map(0xdc04, 0xdc04).portr("DIPSW2"); - map(0xdd00, 0xdd04).w(FUNC(ninjakd2_state::robokid_bg0_ctrl_w)); - map(0xdd05, 0xdd05).w(FUNC(ninjakd2_state::robokid_bg0_bank_w)); - map(0xde00, 0xde04).w(FUNC(ninjakd2_state::robokid_bg1_ctrl_w)); - map(0xde05, 0xde05).w(FUNC(ninjakd2_state::robokid_bg1_bank_w)); - map(0xdf00, 0xdf04).w(FUNC(ninjakd2_state::robokid_bg2_ctrl_w)); - map(0xdf05, 0xdf05).w(FUNC(ninjakd2_state::robokid_bg2_bank_w)); + map(0xdd00, 0xdd04).w(FUNC(robokid_state::robokid_bg0_ctrl_w)); + map(0xdd05, 0xdd05).w(FUNC(robokid_state::robokid_bg0_bank_w)); + map(0xde00, 0xde04).w(FUNC(robokid_state::robokid_bg1_ctrl_w)); + map(0xde05, 0xde05).w(FUNC(robokid_state::robokid_bg1_bank_w)); + map(0xdf00, 0xdf04).w(FUNC(robokid_state::robokid_bg2_ctrl_w)); + map(0xdf05, 0xdf05).w(FUNC(robokid_state::robokid_bg2_bank_w)); map(0xe000, 0xf9ff).ram(); map(0xfa00, 0xffff).ram().share("spriteram"); } -void ninjakd2_state::omegaf_main_cpu(address_map &map) +void omegaf_state::omegaf_main_cpu(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0xbfff).bankr("bank1"); map(0xc000, 0xc000).portr("KEYCOIN").w("soundlatch", FUNC(generic_latch_8_device::write)); - map(0xc001, 0xc003).r(FUNC(ninjakd2_state::omegaf_io_protection_r)); + map(0xc001, 0xc003).r(FUNC(omegaf_state::io_protection_r)); map(0xc001, 0xc001).w(FUNC(ninjakd2_state::ninjakd2_soundreset_w)); map(0xc002, 0xc002).w(FUNC(ninjakd2_state::ninjakd2_bankselect_w)); map(0xc003, 0xc003).w(FUNC(ninjakd2_state::ninjakd2_sprite_overdraw_w)); - map(0xc004, 0xc006).w(FUNC(ninjakd2_state::omegaf_io_protection_w)); - map(0xc100, 0xc104).w(FUNC(ninjakd2_state::robokid_bg0_ctrl_w)); - map(0xc105, 0xc105).w(FUNC(ninjakd2_state::robokid_bg0_bank_w)); - map(0xc1e7, 0xc1e7).r(FUNC(ninjakd2_state::unk_r)); // see notes - map(0xc200, 0xc204).w(FUNC(ninjakd2_state::robokid_bg1_ctrl_w)); - map(0xc205, 0xc205).w(FUNC(ninjakd2_state::robokid_bg1_bank_w)); - map(0xc300, 0xc304).w(FUNC(ninjakd2_state::robokid_bg2_ctrl_w)); - map(0xc305, 0xc305).w(FUNC(ninjakd2_state::robokid_bg2_bank_w)); - map(0xc400, 0xc7ff).rw(FUNC(ninjakd2_state::robokid_bg0_videoram_r), FUNC(ninjakd2_state::robokid_bg0_videoram_w)); // banked - map(0xc800, 0xcbff).rw(FUNC(ninjakd2_state::robokid_bg1_videoram_r), FUNC(ninjakd2_state::robokid_bg1_videoram_w)); // banked - map(0xcc00, 0xcfff).rw(FUNC(ninjakd2_state::robokid_bg2_videoram_r), FUNC(ninjakd2_state::robokid_bg2_videoram_w)); // banked + map(0xc004, 0xc006).w(FUNC(omegaf_state::io_protection_w)); + map(0xc100, 0xc104).w(FUNC(omegaf_state::robokid_bg0_ctrl_w)); + map(0xc105, 0xc105).w(FUNC(omegaf_state::robokid_bg0_bank_w)); + map(0xc1e7, 0xc1e7).r(FUNC(omegaf_state::unk_r)); // see notes + map(0xc200, 0xc204).w(FUNC(omegaf_state::robokid_bg1_ctrl_w)); + map(0xc205, 0xc205).w(FUNC(omegaf_state::robokid_bg1_bank_w)); + map(0xc300, 0xc304).w(FUNC(omegaf_state::robokid_bg2_ctrl_w)); + map(0xc305, 0xc305).w(FUNC(omegaf_state::robokid_bg2_bank_w)); + map(0xc400, 0xc7ff).rw(FUNC(omegaf_state::robokid_bg0_videoram_r), FUNC(omegaf_state::robokid_bg0_videoram_w)); // banked + map(0xc800, 0xcbff).rw(FUNC(omegaf_state::robokid_bg1_videoram_r), FUNC(omegaf_state::robokid_bg1_videoram_w)); // banked + map(0xcc00, 0xcfff).rw(FUNC(omegaf_state::robokid_bg2_videoram_r), FUNC(omegaf_state::robokid_bg2_videoram_w)); // banked map(0xd000, 0xd7ff).ram().w(FUNC(ninjakd2_state::ninjakd2_fgvideoram_w)).share("fg_videoram"); map(0xd800, 0xdfff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); map(0xe000, 0xf9ff).ram(); @@ -910,6 +910,7 @@ GFXDECODE_END void ninjakd2_state::machine_start() { + // ... } void ninjakd2_state::machine_reset() @@ -922,18 +923,18 @@ void ninjakd2_state::machine_reset() m_rom_bank_mask = num_banks - 1; } -MACHINE_START_MEMBER(ninjakd2_state,omegaf) +void omegaf_state::machine_start() { - omegaf_io_protection_start(); + io_protection_start(); - machine_start(); + ninjakd2_state::machine_start(); } -MACHINE_RESET_MEMBER(ninjakd2_state,omegaf) +void omegaf_state::machine_reset() { - omegaf_io_protection_reset(); - - machine_reset(); + io_protection_reset(); + + ninjakd2_state::machine_reset(); } /*****************************************************************************/ @@ -1001,7 +1002,7 @@ MACHINE_CONFIG_START(ninjakd2_state::ninjakd2b) MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) MACHINE_CONFIG_END -MACHINE_CONFIG_START(ninjakd2_state::mnight) +MACHINE_CONFIG_START(mnight_state::mnight) ninjakd2_core(config); /* basic machine hardware */ @@ -1012,29 +1013,20 @@ MACHINE_CONFIG_START(ninjakd2_state::mnight) MCFG_DEVICE_PROGRAM_MAP(ninjakid_nopcm_sound_cpu) /* video hardware */ - MCFG_VIDEO_START_OVERRIDE(ninjakd2_state,mnight) + MCFG_VIDEO_START_OVERRIDE(mnight_state,mnight) /* sound hardware */ MCFG_DEVICE_REMOVE("pcm") MACHINE_CONFIG_END -MACHINE_CONFIG_START(ninjakd2_state::arkarea) - ninjakd2_core(config); - /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(mnight_main_cpu) - - MCFG_DEVICE_MODIFY("soundcpu") - MCFG_DEVICE_PROGRAM_MAP(ninjakid_nopcm_sound_cpu) +MACHINE_CONFIG_START(mnight_state::arkarea) + mnight(config); /* video hardware */ - MCFG_VIDEO_START_OVERRIDE(ninjakd2_state,arkarea) - - /* sound hardware */ - MCFG_DEVICE_REMOVE("pcm") + MCFG_VIDEO_START_OVERRIDE(mnight_state,arkarea) MACHINE_CONFIG_END -MACHINE_CONFIG_START(ninjakd2_state::robokid) +MACHINE_CONFIG_START(robokid_state::robokid) mnight(config); /* basic machine hardware */ @@ -1051,12 +1043,12 @@ MACHINE_CONFIG_START(ninjakd2_state::robokid) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) - MCFG_VIDEO_START_OVERRIDE(ninjakd2_state,robokid) + MCFG_VIDEO_START_OVERRIDE(robokid_state,robokid) MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(ninjakd2_state, screen_update_robokid) + MCFG_SCREEN_UPDATE_DRIVER(robokid_state,screen_update_robokid) MACHINE_CONFIG_END -MACHINE_CONFIG_START(ninjakd2_state::omegaf) +MACHINE_CONFIG_START(omegaf_state::omegaf) robokid(config); /* basic machine hardware */ @@ -1066,13 +1058,13 @@ MACHINE_CONFIG_START(ninjakd2_state::omegaf) MCFG_DEVICE_MODIFY("soundcpu") MCFG_DEVICE_PROGRAM_MAP(ninjakid_nopcm_sound_cpu) - MCFG_MACHINE_START_OVERRIDE(ninjakd2_state,omegaf) - MCFG_MACHINE_RESET_OVERRIDE(ninjakd2_state,omegaf) +// MCFG_MACHINE_START_OVERRIDE(ninjakd2_state,omegaf) +// MCFG_MACHINE_RESET_OVERRIDE(ninjakd2_state,omegaf) /* video hardware */ - MCFG_VIDEO_START_OVERRIDE(ninjakd2_state,omegaf) + MCFG_VIDEO_START_OVERRIDE(omegaf_state,omegaf) MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(ninjakd2_state, screen_update_omegaf) + MCFG_SCREEN_UPDATE_DRIVER(omegaf_state,screen_update_omegaf) MACHINE_CONFIG_END @@ -1664,21 +1656,21 @@ void ninjakd2_state::init_bootleg() gfx_unscramble(); } -void ninjakd2_state::init_mnight() +void mnight_state::init_mnight() { gfx_unscramble(); } /*****************************************************************************/ -READ8_MEMBER(ninjakd2_state::robokid_motion_error_verbose_r) +READ8_MEMBER(robokid_state::motion_error_verbose_r) { popmessage("%s MOTION ERROR, contact MAMEdev", machine().system().name); logerror("maincpu %04x MOTION ERROR\n", m_maincpu->pc()); return 0xe6; } -void ninjakd2_state::robokid_motion_error_kludge(uint16_t offset) +void robokid_state::motion_error_kludge(uint16_t offset) { // patch out rare "5268 MOTION ERROR" (MT 05024) // It looks like it's due to a buggy random number generator, @@ -1692,17 +1684,17 @@ void ninjakd2_state::robokid_motion_error_kludge(uint16_t offset) ROM[2] = 0x18; ROM[3] = 0xf6; // jr $-8 - m_maincpu->space(AS_PROGRAM).install_read_handler(offset, offset, read8_delegate(FUNC(ninjakd2_state::robokid_motion_error_verbose_r), this)); + m_maincpu->space(AS_PROGRAM).install_read_handler(offset, offset, read8_delegate(FUNC(robokid_state::motion_error_verbose_r), this)); } -void ninjakd2_state::init_robokid() +void robokid_state::init_robokid() { - robokid_motion_error_kludge(0x5247); + motion_error_kludge(0x5247); } -void ninjakd2_state::init_robokidj() +void robokid_state::init_robokidj() { - robokid_motion_error_kludge(0x5266); + motion_error_kludge(0x5266); } @@ -1721,15 +1713,15 @@ GAME( 1987, ninjakd2c, ninjakd2, ninjakd2, rdaction, ninjakd2_state, init_ninja GAME( 1987, rdaction, ninjakd2, ninjakd2, rdaction, ninjakd2_state, init_ninjakd2, ROT0, "UPL (World Games license)", "Rad Action / NinjaKun Ashura no Shou", MACHINE_SUPPORTS_SAVE ) GAME( 1987, jt104, ninjakd2, ninjakd2, rdaction, ninjakd2_state, init_bootleg, ROT0, "UPL (United Amusements license)", "JT-104 (title screen modification of Rad Action)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, mnight, 0, mnight, mnight, ninjakd2_state, init_mnight, ROT0, "UPL", "Mutant Night", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, mnightj, mnight, mnight, mnight, ninjakd2_state, init_mnight, ROT0, "UPL (Kawakus license)", "Mutant Night (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, mnight, 0, mnight, mnight, mnight_state, init_mnight, ROT0, "UPL", "Mutant Night", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, mnightj, mnight, mnight, mnight, mnight_state, init_mnight, ROT0, "UPL (Kawakus license)", "Mutant Night (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, arkarea, 0, arkarea, arkarea, ninjakd2_state, init_mnight, ROT0, "UPL", "Ark Area", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, arkarea, 0, arkarea, arkarea, mnight_state, init_mnight, ROT0, "UPL", "Ark Area", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, robokid, 0, robokid, robokid, ninjakd2_state, init_robokid, ROT0, "UPL", "Atomic Robo-kid (World, Type-2)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) // 3-digit highscore names -GAME( 1988, robokidj, robokid, robokid, robokidj, ninjakd2_state, init_robokidj, ROT0, "UPL", "Atomic Robo-kid (Japan, Type-2, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) -GAME( 1988, robokidj2, robokid, robokid, robokidj, ninjakd2_state, init_robokidj, ROT0, "UPL", "Atomic Robo-kid (Japan, Type-2, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) -GAME( 1988, robokidj3, robokid, robokid, robokidj, ninjakd2_state, empty_init, ROT0, "UPL", "Atomic Robo-kid (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) +GAME( 1988, robokid, 0, robokid, robokid, robokid_state, init_robokid, ROT0, "UPL", "Atomic Robo-kid (World, Type-2)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) // 3-digit highscore names +GAME( 1988, robokidj, robokid, robokid, robokidj, robokid_state, init_robokidj, ROT0, "UPL", "Atomic Robo-kid (Japan, Type-2, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) +GAME( 1988, robokidj2, robokid, robokid, robokidj, robokid_state, init_robokidj, ROT0, "UPL", "Atomic Robo-kid (Japan, Type-2, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) +GAME( 1988, robokidj3, robokid, robokid, robokidj, robokid_state, empty_init, ROT0, "UPL", "Atomic Robo-kid (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) -GAME( 1989, omegaf, 0, omegaf, omegaf, ninjakd2_state, empty_init, ROT270, "UPL", "Omega Fighter", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, omegafs, omegaf, omegaf, omegaf, ninjakd2_state, empty_init, ROT270, "UPL", "Omega Fighter Special", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, omegaf, 0, omegaf, omegaf, omegaf_state, empty_init, ROT270, "UPL", "Omega Fighter", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, omegafs, omegaf, omegaf, omegaf, omegaf_state, empty_init, ROT270, "UPL", "Omega Fighter Special", MACHINE_SUPPORTS_SAVE ) |