summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2025-10-18 21:42:40 +0900
committer GitHub <noreply@github.com>2025-10-18 23:42:40 +1100
commit659f8756522339ca025defff25a78531b280613b (patch)
tree4146958c4b72730a67d15306f52704c8f3cc4814
parent3f5a31e743c39d89e5dc8f4e5d752f81a61b78d7 (diff)
toaplan/slapfght.cpp: Split driver classes for different hardware configurations. (#14351)
* Suppress side effects for debugger reads, improved save state support. * Reduced literal tags and run-time tag lookups. * Reduce duplication and cleaned up code.
-rw-r--r--src/mame/toaplan/slapfght.cpp298
-rw-r--r--src/mame/toaplan/slapfght.h201
-rw-r--r--src/mame/toaplan/slapfght_m.cpp37
-rw-r--r--src/mame/toaplan/slapfght_v.cpp76
4 files changed, 327 insertions, 285 deletions
diff --git a/src/mame/toaplan/slapfght.cpp b/src/mame/toaplan/slapfght.cpp
index 2d489d97dea..177328d209f 100644
--- a/src/mame/toaplan/slapfght.cpp
+++ b/src/mame/toaplan/slapfght.cpp
@@ -13,7 +13,7 @@
Tiger-Heli
TODO:
- - proper MCU emulation (see slapfght_m.cpp)
+ - proper MCU emulation (see toaplan/slapfght_m.cpp)
****************************************************************************
@@ -277,65 +277,67 @@ Stephh's notes (based on the games Z80 code and some tests) :
***************************************************************************/
-void slapfght_state::perfrman_map(address_map &map)
+void perfrman_state::perfrman_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram();
- map(0x8800, 0x8fff).ram().share("share1");
- map(0x9000, 0x97ff).ram().w(FUNC(slapfght_state::videoram_w)).share("videoram");
- map(0x9800, 0x9fff).ram().w(FUNC(slapfght_state::colorram_w)).share("colorram");
+ map(0x8800, 0x8fff).ram().share("sharedram");
+ map(0x9000, 0x97ff).ram().w(FUNC(perfrman_state::videoram_w)).share(m_videoram);
+ map(0x9800, 0x9fff).ram().w(FUNC(perfrman_state::colorram_w)).share(m_colorram);
map(0xa000, 0xa7ff).ram().share("spriteram");
}
-
-void slapfght_state::tigerh_map(address_map &map)
+void tigerh_state::tigerh_base_map(address_map &map)
{
- map(0x0000, 0xbfff).rom();
map(0xc000, 0xc7ff).ram();
- map(0xc800, 0xcfff).ram().share("share1");
- map(0xd000, 0xd7ff).ram().w(FUNC(slapfght_state::videoram_w)).share("videoram");
- map(0xd800, 0xdfff).ram().w(FUNC(slapfght_state::colorram_w)).share("colorram");
+ map(0xc800, 0xcfff).ram().share("sharedram");
+ map(0xd000, 0xd7ff).ram().w(FUNC(tigerh_state::videoram_w)).share(m_videoram);
+ map(0xd800, 0xdfff).ram().w(FUNC(tigerh_state::colorram_w)).share(m_colorram);
map(0xe000, 0xe7ff).ram().share("spriteram");
- map(0xe800, 0xe800).w(FUNC(slapfght_state::scrollx_lo_w));
- map(0xe801, 0xe801).w(FUNC(slapfght_state::scrollx_hi_w));
- map(0xe802, 0xe802).w(FUNC(slapfght_state::scrolly_w));
- map(0xf000, 0xf7ff).ram().w(FUNC(slapfght_state::fixram_w)).share("fixvideoram");
- map(0xf800, 0xffff).ram().w(FUNC(slapfght_state::fixcol_w)).share("fixcolorram");
+ map(0xf000, 0xf7ff).ram().w(FUNC(tigerh_state::fixram_w)).share(m_fixvideoram);
+ map(0xf800, 0xffff).ram().w(FUNC(tigerh_state::fixcol_w)).share(m_fixcolorram);
+}
+
+void tigerh_state::tigerh_map(address_map &map)
+{
+ tigerh_base_map(map);
+ map(0x0000, 0xbfff).rom();
+ map(0xe800, 0xe800).w(FUNC(tigerh_state::scrollx_lo_w));
+ map(0xe801, 0xe801).w(FUNC(tigerh_state::scrollx_hi_w));
+ map(0xe802, 0xe802).w(FUNC(tigerh_state::scrolly_w));
}
-void slapfght_state::tigerh_map_mcu(address_map &map)
+void tigerh_state::tigerh_map_mcu(address_map &map)
{
tigerh_map(map);
map(0xe803, 0xe803).rw(m_bmcu, FUNC(taito68705_mcu_device::data_r), FUNC(taito68705_mcu_device::data_w));
}
-void slapfght_state::tigerhb1_map(address_map &map)
+void tigerh_state::tigerhb1_map(address_map &map)
{
tigerh_map(map);
- map(0xe803, 0xe803).rw(FUNC(slapfght_state::tigerhb1_prot_r), FUNC(slapfght_state::tigerhb1_prot_w));
+ map(0xe803, 0xe803).rw(FUNC(tigerh_state::tigerhb1_prot_r), FUNC(tigerh_state::tigerhb1_prot_w));
}
-void slapfght_state::tigerhb2_map(address_map &map)
+void tigerh_state::tigerhb2_map(address_map &map)
{
tigerh_map(map);
map(0xe803, 0xe803).noprw(); // no MCU
}
+void slapfght_state::slapfigh_base_map(address_map &map)
+{
+ tigerh_base_map(map);
+ map(0x0000, 0x7fff).rom();
+ map(0x8000, 0xbfff).bankr(m_mainbank);
+}
void slapfght_state::slapfigh_map(address_map &map)
{
- map(0x0000, 0x7fff).rom();
- map(0x8000, 0xbfff).bankr("bank1");
- map(0xc000, 0xc7ff).ram();
- map(0xc800, 0xcfff).ram().share("share1");
- map(0xd000, 0xd7ff).ram().w(FUNC(slapfght_state::videoram_w)).share("videoram");
- map(0xd800, 0xdfff).ram().w(FUNC(slapfght_state::colorram_w)).share("colorram");
- map(0xe000, 0xe7ff).ram().share("spriteram");
+ slapfigh_base_map(map);
map(0xe800, 0xe800).w(FUNC(slapfght_state::scrollx_lo_w));
map(0xe801, 0xe801).w(FUNC(slapfght_state::scrollx_hi_w));
map(0xe802, 0xe802).w(FUNC(slapfght_state::scrolly_w));
- map(0xf000, 0xf7ff).ram().w(FUNC(slapfght_state::fixram_w)).share("fixvideoram");
- map(0xf800, 0xffff).ram().w(FUNC(slapfght_state::fixcol_w)).share("fixcolorram");
}
void slapfght_state::slapfigh_map_mcu(address_map &map)
@@ -358,31 +360,23 @@ void slapfght_state::getstar_map(address_map &map)
void slapfght_state::slapfighb2_map(address_map &map)
{
- map(0x0000, 0x7fff).rom();
- map(0x8000, 0xbfff).bankr("bank1");
- map(0xc000, 0xc7ff).ram();
- map(0xc800, 0xcfff).ram().share("share1");
- map(0xd000, 0xd7ff).ram().w(FUNC(slapfght_state::videoram_w)).share("videoram");
- map(0xd800, 0xdfff).ram().w(FUNC(slapfght_state::colorram_w)).share("colorram");
- map(0xe000, 0xe7ff).ram().share("spriteram");
+ slapfigh_base_map(map);
map(0xe800, 0xe800).w(FUNC(slapfght_state::scrollx_hi_w));
map(0xe802, 0xe802).w(FUNC(slapfght_state::scrolly_w));
map(0xe803, 0xe803).w(FUNC(slapfght_state::scrollx_lo_w));
map(0xec00, 0xefff).rom(); // it reads a copy of the logo from here!
- map(0xf000, 0xf7ff).ram().w(FUNC(slapfght_state::fixram_w)).share("fixvideoram");
- map(0xf800, 0xffff).ram().w(FUNC(slapfght_state::fixcol_w)).share("fixcolorram");
}
/**************************************************************************/
-void slapfght_state::vblank_irq(int state)
+void perfrman_state::vblank_irq(int state)
{
if (state && m_main_irq_enabled)
m_maincpu->set_input_line(0, ASSERT_LINE);
}
-void slapfght_state::irq_enable_w(int state)
+void perfrman_state::irq_enable_w(int state)
{
m_main_irq_enabled = state ? true : false;
@@ -390,7 +384,7 @@ void slapfght_state::irq_enable_w(int state)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
-void slapfght_state::sound_reset_w(int state)
+void perfrman_state::sound_reset_w(int state)
{
m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE);
@@ -398,22 +392,22 @@ void slapfght_state::sound_reset_w(int state)
m_sound_nmi_enabled = false;
}
-uint8_t slapfght_state::vblank_r()
+uint8_t perfrman_state::vblank_r()
{
return m_screen->vblank() ? 1 : 0;
}
-void slapfght_state::io_map_nomcu(address_map &map)
+void perfrman_state::io_map_nomcu(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0x00).r(FUNC(slapfght_state::vblank_r));
+ map(0x00, 0x00).r(FUNC(perfrman_state::vblank_r));
map(0x00, 0x0f).w("mainlatch", FUNC(ls259_device::write_a0));
}
-void slapfght_state::io_map_mcu(address_map &map)
+void tigerh_state::io_map_mcu(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0x00).r(FUNC(slapfght_state::tigerh_mcu_status_r));
+ map(0x00, 0x00).r(FUNC(tigerh_state::tigerh_mcu_status_r));
map(0x00, 0x0f).w("mainlatch", FUNC(ls259_device::write_a0));
}
@@ -439,41 +433,40 @@ void slapfght_state::getstarb2_io_map(address_map &map)
***************************************************************************/
-INTERRUPT_GEN_MEMBER(slapfght_state::sound_nmi)
+INTERRUPT_GEN_MEMBER(perfrman_state::sound_nmi)
{
if (m_sound_nmi_enabled)
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
-void slapfght_state::sound_nmi_enable_w(offs_t offset, uint8_t data)
+void perfrman_state::sound_nmi_enable_w(offs_t offset, uint8_t data)
{
m_sound_nmi_enabled = offset ? false : true;
}
-void slapfght_state::perfrman_sound_map(address_map &map)
+void perfrman_state::base_sound_map(address_map &map)
{
- map(0x0000, 0x1fff).rom();
- map(0x8800, 0x8fff).ram().share("share1");
map(0xa080, 0xa080).w("ay1", FUNC(ay8910_device::address_w));
map(0xa081, 0xa081).r("ay1", FUNC(ay8910_device::data_r));
map(0xa082, 0xa082).w("ay1", FUNC(ay8910_device::data_w));
map(0xa090, 0xa090).w("ay2", FUNC(ay8910_device::address_w));
map(0xa091, 0xa091).r("ay2", FUNC(ay8910_device::data_r));
map(0xa092, 0xa092).w("ay2", FUNC(ay8910_device::data_w));
- map(0xa0e0, 0xa0e0).select(0x0010).w(FUNC(slapfght_state::sound_nmi_enable_w));
+ map(0xa0e0, 0xa0e0).select(0x0010).w(FUNC(perfrman_state::sound_nmi_enable_w));
}
-void slapfght_state::tigerh_sound_map(address_map &map)
+void perfrman_state::perfrman_sound_map(address_map &map)
{
+ base_sound_map(map);
map(0x0000, 0x1fff).rom();
- map(0xa080, 0xa080).w("ay1", FUNC(ay8910_device::address_w));
- map(0xa081, 0xa081).r("ay1", FUNC(ay8910_device::data_r));
- map(0xa082, 0xa082).w("ay1", FUNC(ay8910_device::data_w));
- map(0xa090, 0xa090).w("ay2", FUNC(ay8910_device::address_w));
- map(0xa091, 0xa091).r("ay2", FUNC(ay8910_device::data_r));
- map(0xa092, 0xa092).w("ay2", FUNC(ay8910_device::data_w));
- map(0xa0e0, 0xa0e0).select(0x0010).w(FUNC(slapfght_state::sound_nmi_enable_w));
- map(0xc800, 0xcfff).ram().share("share1");
+ map(0x8800, 0x8fff).ram().share("sharedram");
+}
+
+void tigerh_state::tigerh_sound_map(address_map &map)
+{
+ base_sound_map(map);
+ map(0x0000, 0x1fff).rom();
+ map(0xc800, 0xcfff).ram().share("sharedram");
map(0xd000, 0xffff).ram();
}
@@ -721,76 +714,81 @@ INPUT_PORTS_END
***************************************************************************/
-void slapfght_state::machine_start()
+void perfrman_state::machine_start()
{
// zerofill
m_palette_bank = 0;
+ m_main_irq_enabled = false;
+ m_sound_nmi_enabled = false;
+
+ // savestates
+ save_item(NAME(m_palette_bank));
+ save_item(NAME(m_main_irq_enabled));
+ save_item(NAME(m_sound_nmi_enabled));
+}
+
+void tigerh_state::machine_start()
+{
+ perfrman_state::machine_start();
+ // zerofill
m_scrollx_lo = 0;
m_scrollx_hi = 0;
m_scrolly = 0;
- m_main_irq_enabled = false;
- m_sound_nmi_enabled = false;
+ m_tigerhb_cmd = 0;
+
+ // savestates
+ save_item(NAME(m_scrollx_lo));
+ save_item(NAME(m_scrollx_hi));
+ save_item(NAME(m_scrolly));
+
+ save_item(NAME(m_tigerhb_cmd));
+}
+
+void slapfght_state::machine_start()
+{
+ tigerh_state::machine_start();
+ uint8_t *ROM = memregion("maincpu")->base();
+ m_mainbank->configure_entries(0, 2, &ROM[0x10000], 0x4000);
+ m_mainbank->set_entry(0);
m_getstar_status = 0;
- m_getstar_sequence_index = 0;
m_getstar_status_state = 0;
m_getstar_cmd = 0;
m_gs_a = 0;
m_gs_d = 0;
m_gs_e = 0;
- m_tigerhb_cmd = 0;
// savestates
- save_item(NAME(m_palette_bank));
- save_item(NAME(m_scrollx_lo));
- save_item(NAME(m_scrollx_hi));
- save_item(NAME(m_scrolly));
- save_item(NAME(m_main_irq_enabled));
- save_item(NAME(m_sound_nmi_enabled));
-
-
save_item(NAME(m_getstar_status));
- save_item(NAME(m_getstar_sequence_index));
save_item(NAME(m_getstar_status_state));
save_item(NAME(m_getstar_cmd));
save_item(NAME(m_gs_a));
save_item(NAME(m_gs_d));
save_item(NAME(m_gs_e));
- save_item(NAME(m_tigerhb_cmd));
}
-void slapfght_state::machine_reset()
+void perfrman_state::machine_reset()
{
- m_getstar_status = 0xc7;
- m_getstar_status_state = 0;
- m_getstar_sequence_index = 0;
-
// reset sound
m_sound_nmi_enabled = false;
m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}
-/**************************************************************************/
-
-void slapfght_state::init_banks()
+void slapfght_state::machine_reset()
{
- uint8_t *ROM = memregion("maincpu")->base();
- membank("bank1")->configure_entries(0, 2, &ROM[0x10000], 0x4000);
+ perfrman_state::machine_reset();
- membank("bank1")->set_entry(0);
+ m_getstar_status = 0xc7;
+ m_getstar_status_state = 0;
}
-void slapfght_state::init_slapfigh()
-{
- init_banks();
-}
+/**************************************************************************/
void slapfght_state::init_getstarb1()
{
m_getstar_id = GETSTARB1;
- init_banks();
/* requires this or it gets stuck with 'rom test' on screen */
/* it is possible the program roms are slightly corrupt like the gfx roms, or
@@ -803,7 +801,6 @@ void slapfght_state::init_getstarb1()
void slapfght_state::init_getstarb2()
{
m_getstar_id = GETSTARB2;
- init_banks();
}
@@ -893,22 +890,22 @@ GFXDECODE_END
***************************************************************************/
-void slapfght_state::perfrman(machine_config &config)
+void perfrman_state::perfrman(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, 16_MHz_XTAL/4); // 4MHz? XTAL is known, divider is guessed
- m_maincpu->set_addrmap(AS_PROGRAM, &slapfght_state::perfrman_map);
- m_maincpu->set_addrmap(AS_IO, &slapfght_state::io_map_nomcu);
+ m_maincpu->set_addrmap(AS_PROGRAM, &perfrman_state::perfrman_map);
+ m_maincpu->set_addrmap(AS_IO, &perfrman_state::io_map_nomcu);
ls259_device &mainlatch(LS259(config, "mainlatch"));
- mainlatch.q_out_cb<0>().set(FUNC(slapfght_state::sound_reset_w));
- mainlatch.q_out_cb<1>().set(FUNC(slapfght_state::flipscreen_w));
- mainlatch.q_out_cb<3>().set(FUNC(slapfght_state::irq_enable_w));
- mainlatch.q_out_cb<6>().set(FUNC(slapfght_state::palette_bank_w));
+ mainlatch.q_out_cb<0>().set(FUNC(perfrman_state::sound_reset_w));
+ mainlatch.q_out_cb<1>().set(FUNC(perfrman_state::flipscreen_w));
+ mainlatch.q_out_cb<3>().set(FUNC(perfrman_state::irq_enable_w));
+ mainlatch.q_out_cb<6>().set(FUNC(perfrman_state::palette_bank_w));
Z80(config, m_audiocpu, 16_MHz_XTAL/8); // 2MHz? XTAL is known, divider is guessed
- m_audiocpu->set_addrmap(AS_PROGRAM, &slapfght_state::perfrman_sound_map);
- m_audiocpu->set_periodic_int(FUNC(slapfght_state::sound_nmi), attotime::from_hz(240)); // music speed, verified
+ m_audiocpu->set_addrmap(AS_PROGRAM, &perfrman_state::perfrman_sound_map);
+ m_audiocpu->set_periodic_int(FUNC(perfrman_state::sound_nmi), attotime::from_hz(240)); // music speed, verified
config.set_maximum_quantum(attotime::from_hz(m_maincpu->clock() / 4));
@@ -916,16 +913,15 @@ void slapfght_state::perfrman(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
// pure guesswork, hopefully we can get real values
m_screen->set_raw(16_MHz_XTAL/3, 344, 0, 256, 270, 0, 240);
- m_screen->set_screen_update(FUNC(slapfght_state::screen_update_perfrman));
- m_screen->screen_vblank().set(m_spriteram_buffer, FUNC(buffered_spriteram8_device::vblank_copy_falling));
- m_screen->screen_vblank().append(FUNC(slapfght_state::vblank_irq));
+ m_screen->set_screen_update(FUNC(perfrman_state::screen_update_perfrman));
+ m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_falling));
+ m_screen->screen_vblank().append(FUNC(perfrman_state::vblank_irq));
m_screen->set_palette(m_palette);
- BUFFERED_SPRITERAM8(config, m_spriteram_buffer);
+ BUFFERED_SPRITERAM8(config, m_spriteram);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_perfrman);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256);
- MCFG_VIDEO_START_OVERRIDE(slapfght_state, perfrman)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -942,21 +938,21 @@ void slapfght_state::perfrman(machine_config &config)
}
-void slapfght_state::tigerh(machine_config &config)
+void tigerh_state::tigerh(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, 36_MHz_XTAL/6); // 6MHz
- m_maincpu->set_addrmap(AS_PROGRAM, &slapfght_state::tigerh_map_mcu);
- m_maincpu->set_addrmap(AS_IO, &slapfght_state::io_map_mcu);
+ m_maincpu->set_addrmap(AS_PROGRAM, &tigerh_state::tigerh_map_mcu);
+ m_maincpu->set_addrmap(AS_IO, &tigerh_state::io_map_mcu);
ls259_device &mainlatch(LS259(config, "mainlatch"));
- mainlatch.q_out_cb<0>().set(FUNC(slapfght_state::sound_reset_w));
- mainlatch.q_out_cb<1>().set(FUNC(slapfght_state::flipscreen_w));
- mainlatch.q_out_cb<3>().set(FUNC(slapfght_state::irq_enable_w));
+ mainlatch.q_out_cb<0>().set(FUNC(tigerh_state::sound_reset_w));
+ mainlatch.q_out_cb<1>().set(FUNC(tigerh_state::flipscreen_w));
+ mainlatch.q_out_cb<3>().set(FUNC(tigerh_state::irq_enable_w));
Z80(config, m_audiocpu, 36_MHz_XTAL/12); // 3MHz
- m_audiocpu->set_addrmap(AS_PROGRAM, &slapfght_state::tigerh_sound_map);
- m_audiocpu->set_periodic_int(FUNC(slapfght_state::sound_nmi), attotime::from_hz(360)); // music speed, verified with pcb recording
+ m_audiocpu->set_addrmap(AS_PROGRAM, &tigerh_state::tigerh_sound_map);
+ m_audiocpu->set_periodic_int(FUNC(tigerh_state::sound_nmi), attotime::from_hz(360)); // music speed, verified with pcb recording
TAITO68705_MCU_TIGER(config, m_bmcu, 36_MHz_XTAL/12); // 3MHz
@@ -965,16 +961,15 @@ void slapfght_state::tigerh(machine_config &config)
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(36_MHz_XTAL/6, 388, 0, 296, 270, 0, 240);
- m_screen->set_screen_update(FUNC(slapfght_state::screen_update_slapfight));
- m_screen->screen_vblank().set(m_spriteram_buffer, FUNC(buffered_spriteram8_device::vblank_copy_falling));
- m_screen->screen_vblank().append(FUNC(slapfght_state::vblank_irq));
+ m_screen->set_screen_update(FUNC(tigerh_state::screen_update_slapfight));
+ m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_falling));
+ m_screen->screen_vblank().append(FUNC(tigerh_state::vblank_irq));
m_screen->set_palette(m_palette);
- BUFFERED_SPRITERAM8(config, m_spriteram_buffer);
+ BUFFERED_SPRITERAM8(config, m_spriteram);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_slapfght);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256);
- MCFG_VIDEO_START_OVERRIDE(slapfght_state, slapfight)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -990,34 +985,34 @@ void slapfght_state::tigerh(machine_config &config)
ay2.add_route(ALL_OUTPUTS, "mono", 0.25);
}
-void slapfght_state::tigerhb1(machine_config &config)
+void tigerh_state::tigerhb1(machine_config &config)
{
tigerh(config);
/* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &slapfght_state::tigerhb1_map);
- m_maincpu->set_addrmap(AS_IO, &slapfght_state::io_map_nomcu);
+ m_maincpu->set_addrmap(AS_PROGRAM, &tigerh_state::tigerhb1_map);
+ m_maincpu->set_addrmap(AS_IO, &tigerh_state::io_map_nomcu);
config.device_remove("bmcu");
}
-void slapfght_state::tigerhb2(machine_config &config)
+void tigerh_state::tigerhb2(machine_config &config)
{
tigerhb1(config);
/* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &slapfght_state::tigerhb2_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &tigerh_state::tigerhb2_map);
}
-void slapfght_state::tigerhb4(machine_config &config)
+void tigerh_state::tigerhb4(machine_config &config)
{
tigerhb2(config);
// TODO: hook up
m68705p_device &mcu(M68705P5(config, "mcu", 6000000)); // unverified clock
- mcu.porta_r().set([this]() { logerror("%s MCU port A read\n", machine().describe_context()); return 0xff; });
- mcu.portb_r().set([this]() { logerror("%s MCU port B read\n", machine().describe_context()); return 0xff; });
- mcu.portc_r().set([this]() { logerror("%s MCU port C read\n", machine().describe_context()); return 0xff; });
+ mcu.porta_r().set([this]() { if (!machine().side_effects_disabled()) logerror("%s MCU port A read\n", machine().describe_context()); return 0xff; });
+ mcu.portb_r().set([this]() { if (!machine().side_effects_disabled()) logerror("%s MCU port B read\n", machine().describe_context()); return 0xff; });
+ mcu.portc_r().set([this]() { if (!machine().side_effects_disabled()) logerror("%s MCU port C read\n", machine().describe_context()); return 0xff; });
mcu.porta_w().set([this](uint8_t data) { logerror("%s MCU port a write: %02X\n", machine().describe_context(), data); });
mcu.portb_w().set([this](uint8_t data) { logerror("%s MCU port b write: %02X\n", machine().describe_context(), data); });
mcu.portc_w().set([this](uint8_t data) { logerror("%s MCU port c write: %02X\n", machine().describe_context(), data); });
@@ -1033,7 +1028,7 @@ void slapfght_state::slapfigh(machine_config &config)
ls259_device &mainlatch(LS259(config, "mainlatch"));
mainlatch.q_out_cb<0>().set(FUNC(slapfght_state::sound_reset_w));
mainlatch.q_out_cb<3>().set(FUNC(slapfght_state::irq_enable_w));
- mainlatch.q_out_cb<4>().set_membank("bank1");
+ mainlatch.q_out_cb<4>().set_membank(m_mainbank);
Z80(config, m_audiocpu, 36_MHz_XTAL/12); // 3MHz
m_audiocpu->set_addrmap(AS_PROGRAM, &slapfght_state::tigerh_sound_map);
@@ -1049,15 +1044,14 @@ void slapfght_state::slapfigh(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(36_MHz_XTAL/6, 388, 0, 296, 270, 0, 240);
m_screen->set_screen_update(FUNC(slapfght_state::screen_update_slapfight));
- m_screen->screen_vblank().set(m_spriteram_buffer, FUNC(buffered_spriteram8_device::vblank_copy_falling));
+ m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_falling));
m_screen->screen_vblank().append(FUNC(slapfght_state::vblank_irq));
m_screen->set_palette(m_palette);
- BUFFERED_SPRITERAM8(config, m_spriteram_buffer);
+ BUFFERED_SPRITERAM8(config, m_spriteram);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_slapfght);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256);
- MCFG_VIDEO_START_OVERRIDE(slapfght_state, slapfight)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2096,24 +2090,24 @@ ROM_END
/* ( YEAR NAME PARENT MACHINE INPUT INIT MONITOR, COMPANY, FULLNAME, FLAGS ) */
-GAME( 1985, perfrman, 0, perfrman, perfrman, slapfght_state, empty_init, ROT270, "Toaplan / Data East Corporation", "Performan (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, perfrmanu, perfrman, perfrman, perfrman, slapfght_state, empty_init, ROT270, "Toaplan / Data East USA", "Performan (US)", MACHINE_SUPPORTS_SAVE )
-
-GAME( 1985, tigerh, 0, tigerh, tigerh, slapfght_state, empty_init, ROT270, "Toaplan / Taito America Corp.", "Tiger-Heli (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, tigerhj, tigerh, tigerh, tigerh, slapfght_state, empty_init, ROT270, "Toaplan / Taito", "Tiger-Heli (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, tigerhb1, tigerh, tigerhb1, tigerh, slapfght_state, empty_init, ROT270, "bootleg", "Tiger-Heli (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, tigerhb2, tigerh, tigerhb2, tigerh, slapfght_state, empty_init, ROT270, "bootleg", "Tiger-Heli (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, tigerhb3, tigerh, tigerhb2, tigerh, slapfght_state, empty_init, ROT270, "bootleg", "Tiger-Heli (bootleg set 3)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, tigerhb4, tigerh, tigerhb4, tigerh, slapfght_state, empty_init, ROT270, "bootleg", "Tiger-Heli (bootleg set 4)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // MCU not hooked up
-
-GAME( 1986, alcon, 0, slapfigh, slapfigh, slapfght_state, init_slapfigh, ROT270, "Toaplan / Taito America Corp.", "Alcon (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, slapfigh, alcon, slapfigh, slapfigh, slapfght_state, init_slapfigh, ROT270, "Toaplan / Taito", "Slap Fight (A77 set, 8606M PCB)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, slapfigha, alcon, slapfigha, slapfigh, slapfght_state, init_slapfigh, ROT270, "Toaplan / Taito", "Slap Fight (A76 set, GX-006-A PCB)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, slapfighb1, alcon, slapfighb1, slapfigh, slapfght_state, init_slapfigh, ROT270, "bootleg", "Slap Fight (bootleg set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
-GAME( 1986, slapfighb2, alcon, slapfighb2, slapfigh, slapfght_state, init_slapfigh, ROT270, "bootleg", "Slap Fight (bootleg set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // England?
-GAME( 1986, slapfighb3, alcon, slapfighb2, slapfigh, slapfght_state, init_slapfigh, ROT270, "bootleg", "Slap Fight (bootleg set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // PCB labeled 'slap fighter'
-
-GAME( 1986, grdian, 0, slapfigh, getstar, slapfght_state, init_slapfigh, ROT0, "Toaplan / Taito America Corporation (Kitkorp license)", "Guardian (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, getstarj, grdian, slapfigh, getstarj, slapfght_state, init_slapfigh, ROT0, "Toaplan / Taito", "Get Star (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, perfrman, 0, perfrman, perfrman, perfrman_state, empty_init, ROT270, "Toaplan / Data East Corporation", "Performan (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, perfrmanu, perfrman, perfrman, perfrman, perfrman_state, empty_init, ROT270, "Toaplan / Data East USA", "Performan (US)", MACHINE_SUPPORTS_SAVE )
+
+GAME( 1985, tigerh, 0, tigerh, tigerh, tigerh_state, empty_init, ROT270, "Toaplan / Taito America Corp.", "Tiger-Heli (US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, tigerhj, tigerh, tigerh, tigerh, tigerh_state, empty_init, ROT270, "Toaplan / Taito", "Tiger-Heli (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, tigerhb1, tigerh, tigerhb1, tigerh, tigerh_state, empty_init, ROT270, "bootleg", "Tiger-Heli (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, tigerhb2, tigerh, tigerhb2, tigerh, tigerh_state, empty_init, ROT270, "bootleg", "Tiger-Heli (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, tigerhb3, tigerh, tigerhb2, tigerh, tigerh_state, empty_init, ROT270, "bootleg", "Tiger-Heli (bootleg set 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, tigerhb4, tigerh, tigerhb4, tigerh, tigerh_state, empty_init, ROT270, "bootleg", "Tiger-Heli (bootleg set 4)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // MCU not hooked up
+
+GAME( 1986, alcon, 0, slapfigh, slapfigh, slapfght_state, empty_init, ROT270, "Toaplan / Taito America Corp.", "Alcon (US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, slapfigh, alcon, slapfigh, slapfigh, slapfght_state, empty_init, ROT270, "Toaplan / Taito", "Slap Fight (A77 set, 8606M PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, slapfigha, alcon, slapfigha, slapfigh, slapfght_state, empty_init, ROT270, "Toaplan / Taito", "Slap Fight (A76 set, GX-006-A PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, slapfighb1, alcon, slapfighb1, slapfigh, slapfght_state, empty_init, ROT270, "bootleg", "Slap Fight (bootleg set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
+GAME( 1986, slapfighb2, alcon, slapfighb2, slapfigh, slapfght_state, empty_init, ROT270, "bootleg", "Slap Fight (bootleg set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // England?
+GAME( 1986, slapfighb3, alcon, slapfighb2, slapfigh, slapfght_state, empty_init, ROT270, "bootleg", "Slap Fight (bootleg set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // PCB labeled 'slap fighter'
+
+GAME( 1986, grdian, 0, slapfigh, getstar, slapfght_state, empty_init, ROT0, "Toaplan / Taito America Corporation (Kitkorp license)", "Guardian (US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, getstarj, grdian, slapfigh, getstarj, slapfght_state, empty_init, ROT0, "Toaplan / Taito", "Get Star (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, getstarb1, grdian, getstarb1, getstarj, slapfght_state, init_getstarb1, ROT0, "bootleg", "Get Star (bootleg set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1986, getstarb2, grdian, getstarb2, getstarb2, slapfght_state, init_getstarb2, ROT0, "bootleg", "Get Star (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/toaplan/slapfght.h b/src/mame/toaplan/slapfght.h
index 58e7ccb57eb..6b1112656a8 100644
--- a/src/mame/toaplan/slapfght.h
+++ b/src/mame/toaplan/slapfght.h
@@ -19,143 +19,184 @@
#include "screen.h"
#include "tilemap.h"
-class slapfght_state : public driver_device
+class perfrman_state : public driver_device
{
public:
- slapfght_state(const machine_config &mconfig, device_type type, const char *tag) :
+ perfrman_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
- m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
- m_spriteram(*this, "spriteram"),
- m_spriteram_buffer(*this, "spriteram"),
- m_fixvideoram(*this, "fixvideoram"),
- m_fixcolorram(*this, "fixcolorram")
+ m_spriteram(*this, "spriteram")
{ }
- void tigerh(machine_config &config);
- void tigerhb1(machine_config &config);
- void tigerhb2(machine_config &config);
- void tigerhb4(machine_config &config);
- void getstarb2(machine_config &config);
- void getstarb1(machine_config &config);
- void perfrman(machine_config &config);
- void slapfigh(machine_config &config);
- void slapfigha(machine_config &config);
- void slapfighb1(machine_config &config);
- void slapfighb2(machine_config &config);
-
- void init_banks();
- void init_getstarb1();
- void init_slapfigh();
- void init_getstarb2();
+ void perfrman(machine_config &config) ATTR_COLD;
+
+protected:
+ virtual void machine_start() override ATTR_COLD;
+ virtual void machine_reset() override ATTR_COLD;
+ virtual void video_start() override ATTR_COLD;
-private:
// devices, memory pointers
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
- optional_device<taito68705_mcu_device> m_bmcu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_colorram;
- required_shared_ptr<uint8_t> m_spriteram;
- required_device<buffered_spriteram8_device> m_spriteram_buffer;
- optional_shared_ptr<uint8_t> m_fixvideoram;
- optional_shared_ptr<uint8_t> m_fixcolorram;
-
- /* This it the best way to allow game specific kludges until the system is fully understood */
- enum getstar_id
- {
- GETSTUNK = 0, /* unknown for inclusion of possible new sets */
- //GETSTAR,
- //GETSTARJ,
- GETSTARB1, /* "good" bootleg with same behaviour as 'getstarj' */
- GETSTARB2 /* "lame" bootleg with lots of ingame bugs */
- } m_getstar_id;
+ required_device<buffered_spriteram8_device> m_spriteram;
tilemap_t *m_pf1_tilemap = nullptr;
- tilemap_t *m_fix_tilemap = nullptr;
uint8_t m_palette_bank = 0;
- uint8_t m_scrollx_lo = 0;
- uint8_t m_scrollx_hi = 0;
- uint8_t m_scrolly = 0;
bool m_main_irq_enabled = false;
bool m_sound_nmi_enabled = false;
- int m_getstar_status = 0;
- int m_getstar_sequence_index = 0;
- int m_getstar_status_state = 0;
- uint8_t m_getstar_cmd = 0;
- uint8_t m_gs_a = 0;
- uint8_t m_gs_d = 0;
- uint8_t m_gs_e = 0;
- uint8_t m_tigerhb_cmd = 0;
-
- uint8_t tigerh_mcu_status_r();
void sound_reset_w(int state);
void irq_enable_w(int state);
uint8_t vblank_r();
void sound_nmi_enable_w(offs_t offset, uint8_t data);
void videoram_w(offs_t offset, uint8_t data);
void colorram_w(offs_t offset, uint8_t data);
+ void flipscreen_w(int state);
+ void palette_bank_w(int state);
+
+ TILE_GET_INFO_MEMBER(get_pf_tile_info);
+
+ void draw_perfrman_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int layer);
+ uint32_t screen_update_perfrman(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ void vblank_irq(int state);
+ INTERRUPT_GEN_MEMBER(sound_nmi);
+
+ void base_sound_map(address_map &map) ATTR_COLD;
+ void io_map_nomcu(address_map &map) ATTR_COLD;
+ void perfrman_map(address_map &map) ATTR_COLD;
+ void perfrman_sound_map(address_map &map) ATTR_COLD;
+};
+
+// with foreground tilemap layer
+class tigerh_state : public perfrman_state
+{
+public:
+ tigerh_state(const machine_config &mconfig, device_type type, const char *tag) :
+ perfrman_state(mconfig, type, tag),
+ m_bmcu(*this, "bmcu"),
+ m_fixvideoram(*this, "fixvideoram"),
+ m_fixcolorram(*this, "fixcolorram")
+ { }
+
+ void tigerh(machine_config &config) ATTR_COLD;
+ void tigerhb1(machine_config &config) ATTR_COLD;
+ void tigerhb2(machine_config &config) ATTR_COLD;
+ void tigerhb4(machine_config &config) ATTR_COLD;
+
+protected:
+ virtual void machine_start() override ATTR_COLD;
+ virtual void video_start() override ATTR_COLD;
+
+ // devices, memory pointers
+ optional_device<taito68705_mcu_device> m_bmcu;
+
+ required_shared_ptr<uint8_t> m_fixvideoram;
+ required_shared_ptr<uint8_t> m_fixcolorram;
+
+ tilemap_t *m_fix_tilemap = nullptr;
+ uint8_t m_scrollx_lo = 0;
+ uint8_t m_scrollx_hi = 0;
+ uint8_t m_scrolly = 0;
+
+ uint8_t m_tigerhb_cmd = 0;
+
+ uint8_t tigerh_mcu_status_r();
void fixram_w(offs_t offset, uint8_t data);
void fixcol_w(offs_t offset, uint8_t data);
void scrollx_lo_w(uint8_t data);
void scrollx_hi_w(uint8_t data);
void scrolly_w(uint8_t data);
- void flipscreen_w(int state);
- void palette_bank_w(int state);
- void scroll_from_mcu_w(offs_t offset, uint8_t data);
-
- uint8_t getstar_mcusim_r();
- void getstar_mcusim_w(uint8_t data);
- uint8_t getstar_mcusim_status_r();
- uint8_t getstarb1_prot_r();
uint8_t tigerhb1_prot_r();
void tigerhb1_prot_w(uint8_t data);
- virtual void machine_start() override ATTR_COLD;
- virtual void machine_reset() override ATTR_COLD;
-
- TILE_GET_INFO_MEMBER(get_pf_tile_info);
TILE_GET_INFO_MEMBER(get_pf1_tile_info);
TILE_GET_INFO_MEMBER(get_fix_tile_info);
- DECLARE_VIDEO_START(perfrman);
- DECLARE_VIDEO_START(slapfight);
- void draw_perfrman_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int layer);
void draw_slapfight_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_perfrman(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_slapfight(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void vblank_irq(int state);
- INTERRUPT_GEN_MEMBER(sound_nmi);
+ void io_map_mcu(address_map &map) ATTR_COLD;
+ void tigerh_base_map(address_map &map) ATTR_COLD;
+ void tigerh_map(address_map &map) ATTR_COLD;
+ void tigerh_map_mcu(address_map &map) ATTR_COLD;
+ void tigerh_sound_map(address_map &map) ATTR_COLD;
+ void tigerhb1_map(address_map &map) ATTR_COLD;
+ void tigerhb2_map(address_map &map) ATTR_COLD;
+};
+
+// above with main CPU bankswitching
+class slapfght_state : public tigerh_state
+{
+public:
+ slapfght_state(const machine_config &mconfig, device_type type, const char *tag) :
+ tigerh_state(mconfig, type, tag),
+ m_mainbank(*this, "mainbank")
+ { }
+
+ void getstarb2(machine_config &config) ATTR_COLD;
+ void getstarb1(machine_config &config) ATTR_COLD;
+ void slapfigh(machine_config &config) ATTR_COLD;
+ void slapfigha(machine_config &config) ATTR_COLD;
+ void slapfighb1(machine_config &config) ATTR_COLD;
+ void slapfighb2(machine_config &config) ATTR_COLD;
+
+ void init_getstarb1() ATTR_COLD;
+ void init_getstarb2() ATTR_COLD;
+
+protected:
+ virtual void machine_start() override ATTR_COLD;
+ virtual void machine_reset() override ATTR_COLD;
+
+private:
+ // devices, memory pointers
+ required_memory_bank m_mainbank;
+
+ /* This it the best way to allow game specific kludges until the system is fully understood */
+ enum getstar_id
+ {
+ GETSTUNK = 0, /* unknown for inclusion of possible new sets */
+ //GETSTAR,
+ //GETSTARJ,
+ GETSTARB1, /* "good" bootleg with same behaviour as 'getstarj' */
+ GETSTARB2 /* "lame" bootleg with lots of ingame bugs */
+ } m_getstar_id;
+
+ uint8_t m_getstar_status = 0;
+ int32_t m_getstar_status_state = 0;
+ uint8_t m_getstar_cmd = 0;
+ uint8_t m_gs_a = 0;
+ uint8_t m_gs_d = 0;
+ uint8_t m_gs_e = 0;
+
+ void scroll_from_mcu_w(offs_t offset, uint8_t data);
+
+ uint8_t getstar_mcusim_r();
+ void getstar_mcusim_w(uint8_t data);
+ uint8_t getstar_mcusim_status_r();
+ uint8_t getstarb1_prot_r();
void getstar_map(address_map &map) ATTR_COLD;
void getstarb1_io_map(address_map &map) ATTR_COLD;
void getstarb2_io_map(address_map &map) ATTR_COLD;
- void io_map_mcu(address_map &map) ATTR_COLD;
- void io_map_nomcu(address_map &map) ATTR_COLD;
- void perfrman_map(address_map &map) ATTR_COLD;
- void perfrman_sound_map(address_map &map) ATTR_COLD;
+ void slapfigh_base_map(address_map &map) ATTR_COLD;
void slapfigh_map(address_map &map) ATTR_COLD;
void slapfigh_map_mcu(address_map &map) ATTR_COLD;
void slapfighb1_map(address_map &map) ATTR_COLD;
void slapfighb2_map(address_map &map) ATTR_COLD;
- void tigerh_map(address_map &map) ATTR_COLD;
- void tigerh_map_mcu(address_map &map) ATTR_COLD;
- void tigerh_sound_map(address_map &map) ATTR_COLD;
- void tigerhb1_map(address_map &map) ATTR_COLD;
- void tigerhb2_map(address_map &map) ATTR_COLD;
};
#endif // MAME_TOAPLAN_SLAPFGHT_H
diff --git a/src/mame/toaplan/slapfght_m.cpp b/src/mame/toaplan/slapfght_m.cpp
index e857cef1309..f1fbc761e08 100644
--- a/src/mame/toaplan/slapfght_m.cpp
+++ b/src/mame/toaplan/slapfght_m.cpp
@@ -14,7 +14,7 @@
/**************************************************************************/
-uint8_t slapfght_state::tigerh_mcu_status_r()
+uint8_t tigerh_state::tigerh_mcu_status_r()
{
return
(m_screen->vblank() ? 0x01 : 0x00) |
@@ -39,21 +39,25 @@ void slapfght_state::scroll_from_mcu_w(offs_t offset, uint8_t data)
uint8_t slapfght_state::getstar_mcusim_status_r()
{
- static const int states[3]={ 0xc7, 0x55, 0x00 };
+ static const uint8_t states[3]={ 0xc7, 0x55, 0x00 };
- m_getstar_status = states[m_getstar_status_state];
+ const uint8_t ret = states[m_getstar_status_state];
+ if (!machine().side_effects_disabled())
+ {
+ m_getstar_status = ret;
- m_getstar_status_state++;
- if (m_getstar_status_state > 2) m_getstar_status_state = 0;
+ m_getstar_status_state++;
+ if (m_getstar_status_state > 2) m_getstar_status_state = 0;
+ }
- return m_getstar_status;
+ return ret;
}
uint8_t slapfght_state::getstar_mcusim_r()
{
uint8_t getstar_val = 0;
- uint8_t lives_lookup_table[] = {0x03, 0x05, 0x01, 0x02}; /* table at 0x0e62 in 'getstarb1' */
- uint8_t lgsb2_lookup_table[] = {0x00, 0x03, 0x04, 0x05}; /* fake tanle for "test mode" in 'getstarb2' */
+ static const uint8_t lives_lookup_table[] = {0x03, 0x05, 0x01, 0x02}; /* table at 0x0e62 in 'getstarb1' */
+ static const uint8_t lgsb2_lookup_table[] = {0x00, 0x03, 0x04, 0x05}; /* fake tanle for "test mode" in 'getstarb2' */
switch (m_getstar_id)
{
@@ -79,7 +83,8 @@ uint8_t slapfght_state::getstar_mcusim_r()
if (m_maincpu->pc() == 0x6b04) return (lgsb2_lookup_table[m_gs_a]);
break;
default:
- logerror("%04x: getstar_mcusim_r - cmd = %02x - unknown set !\n",m_maincpu->pc(),m_getstar_cmd);
+ if (!machine().side_effects_disabled())
+ logerror("%s: getstar_mcusim_r - cmd = %02x - unknown set !\n",machine(). describe_context(), m_getstar_cmd);
break;
}
return getstar_val;
@@ -175,7 +180,7 @@ void slapfght_state::getstar_mcusim_w(uint8_t data)
}
break;
default:
- logerror("%04x: getstar_mcusim_w - data = %02x - unknown set !\n",m_maincpu->pc(),data);
+ logerror("%s: getstar_mcusim_w - data = %02x - unknown set !\n", machine().describe_context(), data);
break;
}
}
@@ -188,7 +193,7 @@ void slapfght_state::getstar_mcusim_w(uint8_t data)
***************************************************************************/
-uint8_t slapfght_state::tigerhb1_prot_r()
+uint8_t tigerh_state::tigerhb1_prot_r()
{
uint8_t tigerhb_val = 0;
switch (m_tigerhb_cmd)
@@ -197,13 +202,14 @@ uint8_t slapfght_state::tigerhb1_prot_r()
tigerhb_val = 0x83;
break;
default:
- logerror("%04x: tigerhb1_prot_r - cmd = %02x\n", m_maincpu->pc(), m_getstar_cmd);
+ if (!machine().side_effects_disabled())
+ logerror("%s: tigerhb1_prot_r - cmd = %02x\n", machine().describe_context(), m_tigerhb_cmd);
break;
}
return tigerhb_val;
}
-void slapfght_state::tigerhb1_prot_w(uint8_t data)
+void tigerh_state::tigerhb1_prot_w(uint8_t data)
{
switch (data)
{
@@ -212,7 +218,7 @@ void slapfght_state::tigerhb1_prot_w(uint8_t data)
m_tigerhb_cmd = 0x73;
break;
default:
- logerror("%04x: tigerhb1_prot_w - data = %02x\n",m_maincpu->pc(),data);
+ logerror("%s: tigerhb1_prot_w - data = %02x\n", machine().describe_context(), data);
m_tigerhb_cmd = 0x00;
break;
}
@@ -270,7 +276,8 @@ uint8_t slapfght_state::getstarb1_prot_r()
if (m_maincpu->pc() == 0x6ae4) return 2; /* bit 1 must be ON */
if (m_maincpu->pc() == 0x6af5) return 0; /* bit 2 must be OFF */
- logerror("Port Read PC=%04x\n",m_maincpu->pc());
+ if (!machine().side_effects_disabled())
+ logerror("Port Read PC=%04x\n", m_maincpu->pc());
return 0;
}
diff --git a/src/mame/toaplan/slapfght_v.cpp b/src/mame/toaplan/slapfght_v.cpp
index d3bafc10674..6c194fe0c69 100644
--- a/src/mame/toaplan/slapfght_v.cpp
+++ b/src/mame/toaplan/slapfght_v.cpp
@@ -18,27 +18,27 @@
***************************************************************************/
-TILE_GET_INFO_MEMBER(slapfght_state::get_pf_tile_info)
+TILE_GET_INFO_MEMBER(perfrman_state::get_pf_tile_info)
{
/* For Performan only */
- int tile = m_videoram[tile_index] | ((m_colorram[tile_index] & 0x03) << 8);
- int color = (m_colorram[tile_index] >> 3) & 0x0f;
+ const int tile = m_videoram[tile_index] | ((m_colorram[tile_index] & 0x03) << 8);
+ const int color = (m_colorram[tile_index] >> 3) & 0x0f;
tileinfo.set(0, tile, color, 0);
}
-TILE_GET_INFO_MEMBER(slapfght_state::get_pf1_tile_info)
+TILE_GET_INFO_MEMBER(tigerh_state::get_pf1_tile_info)
{
- int tile = m_videoram[tile_index] | ((m_colorram[tile_index] & 0x0f) << 8);
- int color = (m_colorram[tile_index] & 0xf0) >> 4;
+ const int tile = m_videoram[tile_index] | ((m_colorram[tile_index] & 0x0f) << 8);
+ const int color = (m_colorram[tile_index] & 0xf0) >> 4;
tileinfo.set(1, tile, color, 0);
}
-TILE_GET_INFO_MEMBER(slapfght_state::get_fix_tile_info)
+TILE_GET_INFO_MEMBER(tigerh_state::get_fix_tile_info)
{
- int tile = m_fixvideoram[tile_index] | ((m_fixcolorram[tile_index] & 0x03) << 8);
- int color = (m_fixcolorram[tile_index] & 0xfc) >> 2;
+ const int tile = m_fixvideoram[tile_index] | ((m_fixcolorram[tile_index] & 0x03) << 8);
+ const int color = (m_fixcolorram[tile_index] & 0xfc) >> 2;
tileinfo.set(0, tile, color, 0);
}
@@ -51,19 +51,19 @@ TILE_GET_INFO_MEMBER(slapfght_state::get_fix_tile_info)
***************************************************************************/
-VIDEO_START_MEMBER(slapfght_state, perfrman)
+void perfrman_state::video_start()
{
- m_pf1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(slapfght_state::get_pf_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+ m_pf1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(perfrman_state::get_pf_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_pf1_tilemap->set_scrolldy(-16, 0);
m_pf1_tilemap->set_transparent_pen(0);
}
-VIDEO_START_MEMBER(slapfght_state, slapfight)
+void tigerh_state::video_start()
{
- m_pf1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(slapfght_state::get_pf1_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
- m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(slapfght_state::get_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+ m_pf1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tigerh_state::get_pf1_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+ m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tigerh_state::get_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_fix_tilemap->set_scrolldy(-16, 0);
m_pf1_tilemap->set_scrolldy(-17, -1);
@@ -79,51 +79,51 @@ VIDEO_START_MEMBER(slapfght_state, slapfight)
***************************************************************************/
-void slapfght_state::videoram_w(offs_t offset, uint8_t data)
+void perfrman_state::videoram_w(offs_t offset, uint8_t data)
{
m_videoram[offset] = data;
m_pf1_tilemap->mark_tile_dirty(offset);
}
-void slapfght_state::colorram_w(offs_t offset, uint8_t data)
+void perfrman_state::colorram_w(offs_t offset, uint8_t data)
{
m_colorram[offset] = data;
m_pf1_tilemap->mark_tile_dirty(offset);
}
-void slapfght_state::fixram_w(offs_t offset, uint8_t data)
+void tigerh_state::fixram_w(offs_t offset, uint8_t data)
{
m_fixvideoram[offset] = data;
m_fix_tilemap->mark_tile_dirty(offset);
}
-void slapfght_state::fixcol_w(offs_t offset, uint8_t data)
+void tigerh_state::fixcol_w(offs_t offset, uint8_t data)
{
m_fixcolorram[offset] = data;
m_fix_tilemap->mark_tile_dirty(offset);
}
-void slapfght_state::scrollx_lo_w(uint8_t data)
+void tigerh_state::scrollx_lo_w(uint8_t data)
{
m_scrollx_lo = data;
}
-void slapfght_state::scrollx_hi_w(uint8_t data)
+void tigerh_state::scrollx_hi_w(uint8_t data)
{
m_scrollx_hi = data;
}
-void slapfght_state::scrolly_w(uint8_t data)
+void tigerh_state::scrolly_w(uint8_t data)
{
m_scrolly = data;
}
-void slapfght_state::flipscreen_w(int state)
+void perfrman_state::flipscreen_w(int state)
{
flip_screen_set(state ? 0 : 1);
}
-void slapfght_state::palette_bank_w(int state)
+void perfrman_state::palette_bank_w(int state)
{
m_palette_bank = state;
}
@@ -136,9 +136,9 @@ void slapfght_state::palette_bank_w(int state)
***************************************************************************/
-void slapfght_state::draw_perfrman_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int layer)
+void perfrman_state::draw_perfrman_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int layer)
{
- const uint8_t *src = m_spriteram_buffer->buffer();
+ const uint8_t *src = m_spriteram->buffer();
for (int offs = 0; offs < 0x800; offs += 4)
{
@@ -153,18 +153,18 @@ void slapfght_state::draw_perfrman_sprites(bitmap_ind16 &bitmap, const rectangle
3: xxxxxxxx - y
*/
- int code = src[offs + 0];
+ const int code = src[offs + 0];
int sy = src[offs + 3] - 17;
int sx = src[offs + 1] - 13;
- int pri = src[offs + 2] >> 6 & 3;
- int color = (src[offs + 2] >> 1 & 3) | (src[offs + 2] << 2 & 4) | (m_palette_bank << 3);
- int fx = 0, fy = 0;
+ const int pri = src[offs + 2] >> 6 & 3;
+ const int color = (src[offs + 2] >> 1 & 3) | (src[offs + 2] << 2 & 4) | (m_palette_bank << 3);
+ bool fx = false, fy = false;
if (flip_screen())
{
sy = (206 - sy) & 0xff;
sx = 284 - sx;
- fx = fy = 1;
+ fx = fy = true;
}
if (layer == pri)
@@ -172,7 +172,7 @@ void slapfght_state::draw_perfrman_sprites(bitmap_ind16 &bitmap, const rectangle
}
}
-uint32_t slapfght_state::screen_update_perfrman(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+uint32_t perfrman_state::screen_update_perfrman(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_pf1_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE);
draw_perfrman_sprites(bitmap, cliprect, 0);
@@ -186,9 +186,9 @@ uint32_t slapfght_state::screen_update_perfrman(screen_device &screen, bitmap_in
}
-void slapfght_state::draw_slapfight_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
+void tigerh_state::draw_slapfight_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- const uint8_t *src = m_spriteram_buffer->buffer();
+ const uint8_t *src = m_spriteram->buffer();
for (int offs = 0; offs < 0x800; offs += 4)
{
@@ -202,17 +202,17 @@ void slapfght_state::draw_slapfight_sprites(bitmap_ind16 &bitmap, const rectangl
3: xxxxxxxx - y
*/
- int code = src[offs + 0] | ((src[offs + 2] & 0xc0) << 2);
+ const int code = src[offs + 0] | ((src[offs + 2] & 0xc0) << 2);
int sy = src[offs + 3] - 17;
int sx = (src[offs + 1] | (src[offs + 2] << 8 & 0x100)) - 13;
- int color = src[offs + 2] >> 1 & 0xf;
- int fx = 0, fy = 0;
+ const int color = src[offs + 2] >> 1 & 0xf;
+ bool fx = false, fy = false;
if (flip_screen())
{
sy = (206 - sy) & 0xff;
sx = 284 - sx;
- fx = fy = 1;
+ fx = fy = true;
}
if (sy > 256-8)
@@ -222,7 +222,7 @@ void slapfght_state::draw_slapfight_sprites(bitmap_ind16 &bitmap, const rectangl
}
}
-uint32_t slapfght_state::screen_update_slapfight(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+uint32_t tigerh_state::screen_update_slapfight(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_pf1_tilemap->set_scrollx(m_scrollx_hi << 8 | m_scrollx_lo);
m_pf1_tilemap->set_scrolly(m_scrolly);