summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2018-10-03 00:54:44 +0900
committer ajrhacker <ajrhacker@users.noreply.github.com>2018-10-02 11:54:44 -0400
commit4d21877432faa5197f77a6688eb65cc8e31032e8 (patch)
tree96038588302aeeadb56bb8240f0f2d29de7ff0ef
parenta1a23add718137b43519394121336c187e6e6020 (diff)
itech8.cpp : Cleanups (#4038)
* itech8.cpp : Minor cleanups Convert sound latch into generic_latch_8_device, Reduce runtime tag lookup,ACCESSING_BITs, Remove unnecessary GROM pointer, Make bankswitch reset to 0 is only affect when maincpu rom is banked, Split address map related to bankswitch, Function difference, Fix spacing * itech8.cpp : Remove unused * itech8.cpp : Remove another unused * itech8.cpp : Cleanup duplicates, Fix naming
-rw-r--r--src/mame/drivers/itech8.cpp235
-rw-r--r--src/mame/includes/itech8.h39
-rw-r--r--src/mame/video/itech8.cpp18
3 files changed, 136 insertions, 156 deletions
diff --git a/src/mame/drivers/itech8.cpp b/src/mame/drivers/itech8.cpp
index b9bb3b2b5e5..cbf840a74bc 100644
--- a/src/mame/drivers/itech8.cpp
+++ b/src/mame/drivers/itech8.cpp
@@ -614,18 +614,16 @@ MACHINE_START_MEMBER(itech8_state,sstrike)
void itech8_state::machine_start()
{
- if (membank("bank1"))
- membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x4000, 0xc000);
+ if (m_mainbank)
+ m_mainbank->configure_entries(0, 2, memregion("maincpu")->base() + 0x4000, 0xc000);
m_irq_off_timer = timer_alloc(TIMER_IRQ_OFF);
- m_delayed_sound_data_timer = timer_alloc(TIMER_DELAYED_SOUND_DATA);
m_blitter_done_timer = timer_alloc(TIMER_BLITTER_DONE);
save_item(NAME(m_grom_bank));
save_item(NAME(m_blitter_int));
save_item(NAME(m_tms34061_int));
save_item(NAME(m_periodic_int));
- save_item(NAME(m_sound_data));
save_item(NAME(m_pia_porta_data));
save_item(NAME(m_pia_portb_data));
}
@@ -639,12 +637,10 @@ void grmatch_state::machine_start()
void itech8_state::machine_reset()
{
- device_type main_cpu_type = m_maincpu->type();
-
/* make sure bank 0 is selected */
- if (main_cpu_type == MC6809 || main_cpu_type == HD6309)
+ if (m_mainbank)
{
- membank("bank1")->set_entry(0);
+ m_mainbank->set_entry(0);
m_maincpu->reset();
}
@@ -672,9 +668,6 @@ void itech8_state::device_timer(emu_timer &timer, device_timer_id id, int param,
case TIMER_BEHIND_BEAM_UPDATE:
behind_the_beam_update(ptr, param);
break;
- case TIMER_DELAYED_SOUND_DATA:
- delayed_sound_data_w(ptr, param);
- break;
case TIMER_BLITTER_DONE:
blitter_done(ptr, param);
break;
@@ -721,7 +714,7 @@ WRITE8_MEMBER(itech8_state::blitter_bank_w)
{
/* bit 0x20 on address 7 controls CPU banking */
if (offset / 2 == 7)
- membank("bank1")->set_entry((data >> 5) & 1);
+ m_mainbank->set_entry((data >> 5) & 1);
/* the rest is handled by the video hardware */
blitter_w(space, offset, data);
@@ -731,7 +724,7 @@ WRITE8_MEMBER(itech8_state::blitter_bank_w)
WRITE8_MEMBER(itech8_state::rimrockn_bank_w)
{
/* banking is controlled here instead of by the blitter output */
- membank("bank1")->set_entry(data & 3);
+ m_mainbank->set_entry(data & 3);
}
@@ -796,18 +789,6 @@ WRITE8_MEMBER(itech8_state::ym2203_portb_out)
*
*************************************/
-TIMER_CALLBACK_MEMBER(itech8_state::delayed_sound_data_w)
-{
- m_sound_data = param;
- m_soundcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
-}
-
-
-WRITE8_MEMBER(itech8_state::sound_data_w)
-{
- synchronize(TIMER_DELAYED_SOUND_DATA, data);
-}
-
WRITE8_MEMBER(itech8_state::gtg2_sound_data_w)
{
@@ -816,14 +797,7 @@ WRITE8_MEMBER(itech8_state::gtg2_sound_data_w)
((data & 0x5d) << 1) |
((data & 0x20) >> 3) |
((data & 0x02) << 5);
- synchronize(TIMER_DELAYED_SOUND_DATA, data);
-}
-
-
-READ8_MEMBER(itech8_state::sound_data_r)
-{
- m_soundcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
- return m_sound_data;
+ m_soundlatch->write(space, offset, data);
}
@@ -840,19 +814,6 @@ WRITE8_MEMBER(itech8_state::grom_bank_w)
*
*************************************/
-WRITE16_MEMBER(itech8_state::grom_bank16_w)
-{
- if (ACCESSING_BITS_8_15)
- m_grom_bank = data >> 8;
-}
-
-
-WRITE16_MEMBER(itech8_state::display_page16_w)
-{
- if (ACCESSING_BITS_8_15)
- page_w(space, 0, ~data >> 8);
-}
-
READ16_MEMBER(itech8_state::rom_constant_r)
{
// Ninja Clowns reads this area for program ROM checksum
@@ -879,36 +840,78 @@ WRITE8_MEMBER(itech8_state::ninclown_palette_w)
*************************************/
/*------ common layout with TMS34061 at 0000 ------*/
-void itech8_state::tmslo_map(address_map &map)
+void itech8_state::common_lo_map(address_map &map)
{
map(0x0000, 0x0fff).rw(FUNC(itech8_state::tms34061_r), FUNC(itech8_state::tms34061_w));
map(0x1100, 0x1100).nopw();
- map(0x1120, 0x1120).w(FUNC(itech8_state::sound_data_w));
+ map(0x1120, 0x1120).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x1140, 0x1140).portr("40").w(FUNC(itech8_state::grom_bank_w));
map(0x1160, 0x1160).portr("60").w(FUNC(itech8_state::page_w));
map(0x1180, 0x1180).portr("80").w(m_tms34061, FUNC(tms34061_device::latch_w));
map(0x11a0, 0x11a0).w(FUNC(itech8_state::nmi_ack_w));
- map(0x11c0, 0x11df).r(FUNC(itech8_state::blitter_r)).w(FUNC(itech8_state::blitter_bank_w));
+ map(0x11c0, 0x11df).rw(FUNC(itech8_state::blitter_r), FUNC(itech8_state::blitter_bank_w));
map(0x11e0, 0x11ff).w(FUNC(itech8_state::palette_w));
map(0x2000, 0x3fff).ram().share("nvram");
- map(0x4000, 0xffff).bankr("bank1");
+ map(0x4000, 0xffff).bankr("mainbank");
}
/*------ common layout with TMS34061 at 1000 ------*/
-void itech8_state::tmshi_map(address_map &map)
+void itech8_state::common_hi_map(address_map &map)
{
- map(0x1000, 0x1fff).rw(FUNC(itech8_state::tms34061_r), FUNC(itech8_state::tms34061_w));
map(0x0100, 0x0100).nopw();
- map(0x0120, 0x0120).w(FUNC(itech8_state::sound_data_w));
+ map(0x0120, 0x0120).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x0140, 0x0140).portr("40").w(FUNC(itech8_state::grom_bank_w));
map(0x0160, 0x0160).portr("60").w(FUNC(itech8_state::page_w));
map(0x0180, 0x0180).portr("80").w(m_tms34061, FUNC(tms34061_device::latch_w));
map(0x01a0, 0x01a0).w(FUNC(itech8_state::nmi_ack_w));
- map(0x01c0, 0x01df).r(FUNC(itech8_state::blitter_r)).w(FUNC(itech8_state::blitter_bank_w));
+ map(0x01c0, 0x01df).rw(FUNC(itech8_state::blitter_r), FUNC(itech8_state::blitter_bank_w));
map(0x01e0, 0x01ff).w(FUNC(itech8_state::palette_w));
+ map(0x1000, 0x1fff).rw(FUNC(itech8_state::tms34061_r), FUNC(itech8_state::tms34061_w));
map(0x2000, 0x3fff).ram().share("nvram");
- map(0x4000, 0xffff).bankr("bank1");
+ map(0x4000, 0xffff).bankr("mainbank");
+}
+
+
+/*------ Grudge Match layout ------*/
+void grmatch_state::grmatch_map(address_map &map)
+{
+ itech8_state::common_hi_map(map);
+ map(0x0160, 0x0160).w(FUNC(grmatch_state::palette_w));
+ map(0x0180, 0x0180).w(FUNC(grmatch_state::xscroll_w));
+ map(0x01e0, 0x01ff).nopw();
+}
+
+
+/*------ Slick Shot layout ------*/
+void itech8_state::slikshot_map(address_map &map)
+{
+ common_hi_map(map);
+ map(0x0180, 0x0180).r(FUNC(itech8_state::slikshot_z80_r));
+ map(0x01cf, 0x01cf).rw(FUNC(itech8_state::slikshot_z80_control_r), FUNC(itech8_state::slikshot_z80_control_w));
+}
+
+
+/*------ Super Strike Bowling layout ------*/
+void itech8_state::sstrike_map(address_map &map)
+{
+ common_lo_map(map);
+ map(0x1180, 0x1180).r(FUNC(itech8_state::slikshot_z80_r));
+ map(0x11cf, 0x11cf).rw(FUNC(itech8_state::slikshot_z80_control_r), FUNC(itech8_state::slikshot_z80_control_w));
+}
+
+
+/*------ Rim Rockin' Basketball layout ------*/
+void itech8_state::rimrockn_map(address_map &map)
+{
+ common_hi_map(map);
+ map(0x0161, 0x0161).portr("161");
+ map(0x0162, 0x0162).portr("162");
+ map(0x0163, 0x0163).portr("163");
+ map(0x0164, 0x0164).portr("164");
+ map(0x0165, 0x0165).portr("165");
+ map(0x01a0, 0x01a0).w(FUNC(itech8_state::rimrockn_bank_w));
+ map(0x01c0, 0x01df).w(FUNC(itech8_state::blitter_w));
}
@@ -920,12 +923,12 @@ void itech8_state::gtg2_map(address_map &map)
map(0x0140, 0x015f).w(FUNC(itech8_state::palette_w));
map(0x0140, 0x0140).portr("80");
map(0x0160, 0x0160).w(FUNC(itech8_state::grom_bank_w));
- map(0x0180, 0x019f).r(FUNC(itech8_state::blitter_r)).w(FUNC(itech8_state::blitter_bank_w));
+ map(0x0180, 0x019f).rw(FUNC(itech8_state::blitter_r), FUNC(itech8_state::blitter_bank_w));
map(0x01c0, 0x01c0).w(FUNC(itech8_state::gtg2_sound_data_w));
map(0x01e0, 0x01e0).w(m_tms34061, FUNC(tms34061_device::latch_w));
map(0x1000, 0x1fff).rw(FUNC(itech8_state::tms34061_r), FUNC(itech8_state::tms34061_w));
map(0x2000, 0x3fff).ram().share("nvram");
- map(0x4000, 0xffff).bankr("bank1");
+ map(0x4000, 0xffff).bankr("mainbank");
}
/*------ Ninja Clowns layout ------*/
@@ -935,9 +938,11 @@ void itech8_state::ninclown_map(address_map &map)
map(0x000080, 0x003fff).ram().share("nvram");
map(0x004000, 0x03ffff).rom();
map(0x040000, 0x07ffff).r(FUNC(itech8_state::rom_constant_r));
- map(0x100080, 0x100080).w(FUNC(itech8_state::sound_data_w));
- map(0x100100, 0x100101).portr("40").w(FUNC(itech8_state::grom_bank16_w));
- map(0x100180, 0x100181).portr("60").w(FUNC(itech8_state::display_page16_w));
+ map(0x100080, 0x100080).w(m_soundlatch, FUNC(generic_latch_8_device::write));
+ map(0x100100, 0x100100).w(FUNC(itech8_state::grom_bank_w));
+ map(0x100100, 0x100101).portr("40");
+ map(0x100180, 0x100180).lw8("page_inv_w", [this](u8 data){ page_w(~data); } );
+ map(0x100180, 0x100181).portr("60");
map(0x100240, 0x100240).w(m_tms34061, FUNC(tms34061_device::latch_w));
map(0x100280, 0x100281).portr("80").nopw();
map(0x100300, 0x10031f).rw(FUNC(itech8_state::blitter_r), FUNC(itech8_state::blitter_w));
@@ -957,7 +962,7 @@ void itech8_state::ninclown_map(address_map &map)
void itech8_state::sound2203_map(address_map &map)
{
map(0x0000, 0x0000).nopw();
- map(0x1000, 0x1000).r(FUNC(itech8_state::sound_data_r));
+ map(0x1000, 0x1000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0x2000, 0x2001).mirror(0x0002).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
map(0x3000, 0x37ff).ram();
map(0x4000, 0x4000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
@@ -969,7 +974,7 @@ void itech8_state::sound2203_map(address_map &map)
void itech8_state::sound2608b_map(address_map &map)
{
map(0x1000, 0x1000).nopw();
- map(0x2000, 0x2000).r(FUNC(itech8_state::sound_data_r));
+ map(0x2000, 0x2000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0x4000, 0x4003).rw("ymsnd", FUNC(ym2608_device::read), FUNC(ym2608_device::write));
map(0x6000, 0x67ff).ram();
map(0x8000, 0xffff).rom();
@@ -980,7 +985,7 @@ void itech8_state::sound2608b_map(address_map &map)
void itech8_state::sound3812_map(address_map &map)
{
map(0x0000, 0x0000).nopw();
- map(0x1000, 0x1000).r(FUNC(itech8_state::sound_data_r));
+ map(0x1000, 0x1000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0x2000, 0x2001).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
map(0x3000, 0x37ff).ram();
map(0x4000, 0x4000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
@@ -993,7 +998,7 @@ void itech8_state::sound3812_map(address_map &map)
void itech8_state::sound3812_external_map(address_map &map)
{
map(0x0000, 0x0000).nopw();
- map(0x1000, 0x1000).r(FUNC(itech8_state::sound_data_r));
+ map(0x1000, 0x1000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0x2000, 0x2001).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
map(0x3000, 0x37ff).ram();
map(0x4000, 0x4000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
@@ -1268,9 +1273,6 @@ static INPUT_PORTS_START( slikshot )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Green")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_START("80")
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
PORT_START("FAKEX") /* fake */
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_RESET PORT_PLAYER(1)
@@ -1322,9 +1324,6 @@ static INPUT_PORTS_START( sstrike )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_START("80")
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
PORT_START("FAKEX") /* fake */
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_RESET PORT_PLAYER(1)
@@ -1718,6 +1717,9 @@ void itech8_state::itech8_core_devices(machine_config &config)
SPEAKER(config, "mono").front_center();
+ GENERIC_LATCH_8(config, m_soundlatch, 0);
+ m_soundlatch->data_pending_callback().set_inputline(m_soundcpu, M6809_IRQ_LINE);
+
via6522_device &via(VIA6522(config, "via6522_0", CLOCK_8MHz/4));
via.writepb_handler().set(FUNC(itech8_state::pia_portb_out));
via.irq_handler().set_inputline(m_soundcpu, M6809_FIRQ_LINE);
@@ -1726,7 +1728,7 @@ void itech8_state::itech8_core_devices(machine_config &config)
void itech8_state::itech8_core_lo(machine_config &config)
{
MC6809(config, m_maincpu, CLOCK_8MHz);
- m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::tmslo_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::common_lo_map);
itech8_core_devices(config);
}
@@ -1734,7 +1736,7 @@ void itech8_state::itech8_core_lo(machine_config &config)
void itech8_state::itech8_core_hi(machine_config &config)
{
itech8_core_lo(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::tmshi_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::common_hi_map);
}
void itech8_state::itech8_sound_ym2203(machine_config &config)
@@ -1821,6 +1823,8 @@ void grmatch_state::grmatch(machine_config &config)
itech8_core_hi(config);
itech8_sound_ym2608b(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &grmatch_state::grmatch_map);
+
m_screen->set_visarea(0, 399, 0, 239);
m_screen->set_screen_update(FUNC(grmatch_state::screen_update));
}
@@ -1848,6 +1852,8 @@ void itech8_state::slikshot_hi(machine_config &config)
itech8_core_hi(config);
itech8_sound_ym2203(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::slikshot_map);
+
Z80(config, m_subcpu, CLOCK_8MHz/2);
m_subcpu->set_addrmap(AS_PROGRAM, &itech8_state::slikz80_mem_map);
m_subcpu->set_addrmap(AS_IO, &itech8_state::slikz80_io_map);
@@ -1862,6 +1868,8 @@ void itech8_state::slikshot_lo(machine_config &config)
itech8_core_lo(config);
itech8_sound_ym2203(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::sstrike_map);
+
Z80(config, m_subcpu, CLOCK_8MHz/2);
m_subcpu->set_addrmap(AS_PROGRAM, &itech8_state::slikz80_mem_map);
m_subcpu->set_addrmap(AS_IO, &itech8_state::slikz80_io_map);
@@ -1910,7 +1918,7 @@ void itech8_state::rimrockn(machine_config &config)
itech8_sound_ym3812_external(config);
HD6309(config, m_maincpu, CLOCK_12MHz);
- m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::tmshi_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::rimrockn_map);
m_screen->set_visarea(24, 375, 0, 239);
m_screen->set_screen_update(FUNC(itech8_state::screen_update_2page_large));
@@ -2691,10 +2699,6 @@ ROM_END
void grmatch_state::driver_init()
{
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x0160, 0x0160, write8_delegate(FUNC(grmatch_state::palette_w),this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x0180, 0x0180, write8_delegate(FUNC(grmatch_state::xscroll_w),this));
- m_maincpu->space(AS_PROGRAM).unmap_write(0x01e0, 0x01ff);
-
save_item(NAME(m_palcontrol));
save_item(NAME(m_xscroll));
save_item(NAME(m_palette));
@@ -2703,10 +2707,6 @@ void grmatch_state::driver_init()
void itech8_state::init_slikshot()
{
- m_maincpu->space(AS_PROGRAM).install_read_handler (0x0180, 0x0180, read8_delegate(FUNC(itech8_state::slikshot_z80_r),this));
- m_maincpu->space(AS_PROGRAM).install_read_handler (0x01cf, 0x01cf, read8_delegate(FUNC(itech8_state::slikshot_z80_control_r),this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x01cf, 0x01cf, write8_delegate(FUNC(itech8_state::slikshot_z80_control_w),this));
-
m_delayed_z80_control_timer = timer_alloc(TIMER_DELAYED_Z80_CONTROL);
save_item(NAME(m_z80_ctrl));
@@ -2728,14 +2728,6 @@ void itech8_state::init_slikshot()
}
-void itech8_state::init_sstrike()
-{
- m_maincpu->space(AS_PROGRAM).install_read_handler (0x1180, 0x1180, read8_delegate(FUNC(itech8_state::slikshot_z80_r),this));
- m_maincpu->space(AS_PROGRAM).install_read_handler (0x11cf, 0x11cf, read8_delegate(FUNC(itech8_state::slikshot_z80_control_r),this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x11cf, 0x11cf, write8_delegate(FUNC(itech8_state::slikshot_z80_control_w),this));
-}
-
-
void itech8_state::init_hstennis()
{
m_visarea.set(0, 375, 0, 239);
@@ -2762,17 +2754,8 @@ void itech8_state::init_neckneck()
void itech8_state::init_rimrockn()
{
- /* additional input ports */
- m_maincpu->space(AS_PROGRAM).install_read_port (0x0161, 0x0161, "161");
- m_maincpu->space(AS_PROGRAM).install_read_port (0x0162, 0x0162, "162");
- m_maincpu->space(AS_PROGRAM).install_read_port (0x0163, 0x0163, "163");
- m_maincpu->space(AS_PROGRAM).install_read_port (0x0164, 0x0164, "164");
- m_maincpu->space(AS_PROGRAM).install_read_port (0x0165, 0x0165, "165");
-
/* different banking mechanism (disable the old one) */
- membank("bank1")->configure_entries(0, 4, memregion("maincpu")->base() + 0x4000, 0xc000);
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x01a0, 0x01a0, write8_delegate(FUNC(itech8_state::rimrockn_bank_w),this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x01c0, 0x01df, write8_delegate(FUNC(itech8_state::blitter_w),this));
+ m_mainbank->configure_entries(0, 4, memregion("maincpu")->base() + 0x4000, 0xc000);
}
@@ -2784,38 +2767,38 @@ void itech8_state::init_rimrockn()
*************************************/
/* Wheel of Fortune-style PCB */
-GAME( 1989, wfortune, 0, wfortune, wfortune, itech8_state, empty_init, ROT0, "GameTek", "Wheel Of Fortune (set 1)", 0 )
-GAME( 1989, wfortunea, wfortune, wfortune, wfortune, itech8_state, empty_init, ROT0, "GameTek", "Wheel Of Fortune (set 2)", 0 )
+GAME( 1989, wfortune, 0, wfortune, wfortune, itech8_state, empty_init, ROT0, "GameTek", "Wheel Of Fortune (set 1)", 0 )
+GAME( 1989, wfortunea, wfortune, wfortune, wfortune, itech8_state, empty_init, ROT0, "GameTek", "Wheel Of Fortune (set 2)", 0 )
/* Grudge Match-style PCB */
-GAME( 1989, grmatch, 0, grmatch, grmatch, grmatch_state, empty_init, ROT0, "Yankee Game Technology", "Grudge Match (Yankee Game Technology)", 0 )
+GAME( 1989, grmatch, 0, grmatch, grmatch, grmatch_state, empty_init, ROT0, "Yankee Game Technology", "Grudge Match (Yankee Game Technology)", 0 )
/* Strata Bowling-style PCB */
-GAME( 1990, stratab, 0, stratab_hi, stratab, itech8_state, empty_init, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V3)", 0 ) // still says V1 in service mode?
-GAME( 1990, stratab1, stratab, stratab_hi, stratab, itech8_state, empty_init, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V1)", 0 )
-GAME( 1990, gtg, 0, stratab_hi, gtg, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf (Joystick, v3.3)", 0 )
-GAME( 1990, gtgj31, gtg, stratab_hi, gtg, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf (Joystick, v3.1)", 0 )
-GAME( 1989, gtgt, gtg, stratab_hi, gtgt, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf (Trackball, v2.0)", 0 )
-GAME( 1989, gtgt1, gtg, stratab_hi, gtgt, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf (Trackball, v1.0)", 0 )
-GAME( 1989, gtg2t, gtg2, stratab_hi, gtg2t, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf II (Trackball, V1.1)", 0 )
-GAME( 1991, gtg2j, gtg2, stratab_lo, gtg, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf II (Joystick, V1.0)", 0 )
+GAME( 1990, stratab, 0, stratab_hi, stratab, itech8_state, empty_init, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V3)", 0 ) // still says V1 in service mode?
+GAME( 1990, stratab1, stratab, stratab_hi, stratab, itech8_state, empty_init, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V1)", 0 )
+GAME( 1990, gtg, 0, stratab_hi, gtg, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf (Joystick, v3.3)", 0 )
+GAME( 1990, gtgj31, gtg, stratab_hi, gtg, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf (Joystick, v3.1)", 0 )
+GAME( 1989, gtgt, gtg, stratab_hi, gtgt, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf (Trackball, v2.0)", 0 )
+GAME( 1989, gtgt1, gtg, stratab_hi, gtgt, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf (Trackball, v1.0)", 0 )
+GAME( 1989, gtg2t, gtg2, stratab_hi, gtg2t, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf II (Trackball, V1.1)", 0 )
+GAME( 1991, gtg2j, gtg2, stratab_lo, gtg, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf II (Joystick, V1.0)", 0 )
/* Slick Shot-style PCB */
-GAME( 1990, slikshot, 0, slikshot_hi, slikshot, itech8_state, init_slikshot, ROT90, "Grand Products/Incredible Technologies", "Slick Shot (V2.2)", MACHINE_MECHANICAL )
-GAME( 1990, slikshot17, slikshot, slikshot_hi, slikshot, itech8_state, init_slikshot, ROT90, "Grand Products/Incredible Technologies", "Slick Shot (V1.7)", MACHINE_MECHANICAL )
-GAME( 1990, slikshot16, slikshot, slikshot_hi, slikshot, itech8_state, init_slikshot, ROT90, "Grand Products/Incredible Technologies", "Slick Shot (V1.6)", MACHINE_MECHANICAL )
-GAME( 1990, dynobop, 0, slikshot_hi, dynobop, itech8_state, init_slikshot, ROT90, "Grand Products/Incredible Technologies", "Dyno Bop (V1.1)", MACHINE_MECHANICAL )
-GAME( 1990, sstrike, 0, sstrike, sstrike, itech8_state, init_sstrike, ROT270, "Strata/Incredible Technologies", "Super Strike Bowling (V1)", MACHINE_MECHANICAL )
-GAME( 1990, stratabs, stratab, sstrike, stratabs, itech8_state, init_sstrike, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V1 4T, Super Strike Bowling type PCB)", MACHINE_NOT_WORKING ) // need to figure out the control hookup for this set, service mode indicates it's still a trackball like stratab
-GAME( 1991, pokrdice, 0, slikshot_lo_noz80, pokrdice, itech8_state, empty_init, ROT90, "Strata/Incredible Technologies", "Poker Dice", 0 )
+GAME( 1990, slikshot, 0, slikshot_hi, slikshot, itech8_state, init_slikshot, ROT90, "Grand Products/Incredible Technologies", "Slick Shot (V2.2)", MACHINE_MECHANICAL )
+GAME( 1990, slikshot17, slikshot, slikshot_hi, slikshot, itech8_state, init_slikshot, ROT90, "Grand Products/Incredible Technologies", "Slick Shot (V1.7)", MACHINE_MECHANICAL )
+GAME( 1990, slikshot16, slikshot, slikshot_hi, slikshot, itech8_state, init_slikshot, ROT90, "Grand Products/Incredible Technologies", "Slick Shot (V1.6)", MACHINE_MECHANICAL )
+GAME( 1990, dynobop, 0, slikshot_hi, dynobop, itech8_state, init_slikshot, ROT90, "Grand Products/Incredible Technologies", "Dyno Bop (V1.1)", MACHINE_MECHANICAL )
+GAME( 1990, sstrike, 0, sstrike, sstrike, itech8_state, empty_init, ROT270, "Strata/Incredible Technologies", "Super Strike Bowling (V1)", MACHINE_MECHANICAL )
+GAME( 1990, stratabs, stratab, sstrike, stratabs, itech8_state, empty_init, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V1 4T, Super Strike Bowling type PCB)", MACHINE_NOT_WORKING ) // need to figure out the control hookup for this set, service mode indicates it's still a trackball like stratab
+GAME( 1991, pokrdice, 0, slikshot_lo_noz80, pokrdice, itech8_state, empty_init, ROT90, "Strata/Incredible Technologies", "Poker Dice", 0 )
/* Hot Shots Tennis-style PCB */
-GAME( 1990, hstennis, 0, hstennis_hi, hstennis, itech8_state, init_hstennis, ROT90, "Strata/Incredible Technologies", "Hot Shots Tennis (V1.1)", 0 )
-GAME( 1990, hstennis10, hstennis, hstennis_hi, hstennis, itech8_state, init_hstennis, ROT90, "Strata/Incredible Technologies", "Hot Shots Tennis (V1.0)", 0 )
-GAME( 1991, arlingtn, 0, hstennis_hi, arlingtn, itech8_state, init_arligntn, ROT0, "Strata/Incredible Technologies", "Arlington Horse Racing (v1.21-D)", 0 )
-GAME( 1991, peggle, 0, hstennis_lo, peggle, itech8_state, init_peggle, ROT90, "Strata/Incredible Technologies", "Peggle (Joystick, v1.0)", 0 )
-GAME( 1991, pegglet, peggle, hstennis_lo, pegglet, itech8_state, init_peggle, ROT90, "Strata/Incredible Technologies", "Peggle (Trackball, v1.0)", 0 )
-GAME( 1992, neckneck, 0, hstennis_lo, neckneck, itech8_state, init_neckneck, ROT0, "Bundra Games/Incredible Technologies", "Neck-n-Neck (v1.2)", 0 )
+GAME( 1990, hstennis, 0, hstennis_hi, hstennis, itech8_state, init_hstennis, ROT90, "Strata/Incredible Technologies", "Hot Shots Tennis (V1.1)", 0 )
+GAME( 1990, hstennis10, hstennis, hstennis_hi, hstennis, itech8_state, init_hstennis, ROT90, "Strata/Incredible Technologies", "Hot Shots Tennis (V1.0)", 0 )
+GAME( 1991, arlingtn, 0, hstennis_hi, arlingtn, itech8_state, init_arligntn, ROT0, "Strata/Incredible Technologies", "Arlington Horse Racing (v1.21-D)", 0 )
+GAME( 1991, peggle, 0, hstennis_lo, peggle, itech8_state, init_peggle, ROT90, "Strata/Incredible Technologies", "Peggle (Joystick, v1.0)", 0 )
+GAME( 1991, pegglet, peggle, hstennis_lo, pegglet, itech8_state, init_peggle, ROT90, "Strata/Incredible Technologies", "Peggle (Trackball, v1.0)", 0 )
+GAME( 1992, neckneck, 0, hstennis_lo, neckneck, itech8_state, init_neckneck, ROT0, "Bundra Games/Incredible Technologies", "Neck-n-Neck (v1.2)", 0 )
/* Rim Rockin' Basketball-style PCB */
GAME( 1991, rimrockn, 0, rimrockn, rimrockn, itech8_state, init_rimrockn, ROT0, "Strata/Incredible Technologies", "Rim Rockin' Basketball (V2.2)", 0 )
@@ -2825,8 +2808,8 @@ GAME( 1991, rimrockn12, rimrockn, rimrockn, rimrockn, itech8_state, in
GAME( 1991, rimrockn12b, rimrockn, rimrockn, rimrockn, itech8_state, init_rimrockn, ROT0, "bootleg", "Rim Rockin' Basketball (V1.2, bootleg)", 0 )
/* Ninja Clowns-style PCB */
-GAME( 1991, ninclown, 0, ninclown, ninclown, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Ninja Clowns (27 oct 91)", 0 )
+GAME( 1991, ninclown, 0, ninclown, ninclown, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Ninja Clowns (27 oct 91)", 0 )
/* Golden Tee Golf II-style PCB */
-GAME( 1992, gpgolf, 0, gtg2, gpgolf, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Par Golf (Joystick, V1.1)", 0 )
-GAME( 1992, gtg2, 0, gtg2, gtg2, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf II (Trackball, V2.2)", 0 )
+GAME( 1992, gpgolf, 0, gtg2, gpgolf, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Par Golf (Joystick, V1.1)", 0 )
+GAME( 1992, gtg2, 0, gtg2, gtg2, itech8_state, empty_init, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf II (Trackball, V2.2)", 0 )
diff --git a/src/mame/includes/itech8.h b/src/mame/includes/itech8.h
index d031b64ecc2..03213611a86 100644
--- a/src/mame/includes/itech8.h
+++ b/src/mame/includes/itech8.h
@@ -7,6 +7,7 @@
**************************************************************************/
+#include "machine/gen_latch.h"
#include "machine/ticket.h"
#include "machine/timer.h"
#include "video/tlc34076.h"
@@ -17,15 +18,18 @@
class itech8_state : public driver_device
{
public:
- itech8_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ itech8_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"),
m_subcpu(*this, "sub"),
+ m_soundlatch(*this, "soundlatch"),
m_tms34061(*this, "tms34061"),
m_tlc34076(*this, "tlc34076"),
m_screen(*this, "screen"),
m_ticket(*this, "ticket"),
+ m_grom(*this, "grom"),
+ m_mainbank(*this, "mainbank"),
m_an(*this, { { "AN_C", "AN_D", "AN_E", "AN_F" } }),
m_fakex(*this, "FAKEX"),
m_fakey(*this, "FAKEY"),
@@ -50,7 +54,6 @@ public:
void init_neckneck();
void init_arligntn();
void init_hstennis();
- void init_sstrike();
DECLARE_CUSTOM_INPUT_MEMBER(special_r);
DECLARE_CUSTOM_INPUT_MEMBER(gtg_mux);
@@ -64,7 +67,6 @@ protected:
{
TIMER_IRQ_OFF,
TIMER_BEHIND_BEAM_UPDATE,
- TIMER_DELAYED_SOUND_DATA,
TIMER_BLITTER_DONE,
TIMER_DELAYED_Z80_CONTROL,
TIMER_BASE_LAST = TIMER_DELAYED_Z80_CONTROL
@@ -73,10 +75,13 @@ protected:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
optional_device<cpu_device> m_subcpu;
+ required_device<generic_latch_8_device> m_soundlatch;
required_device<tms34061_device> m_tms34061;
required_device<tlc34076_device> m_tlc34076;
required_device<screen_device> m_screen;
required_device<ticket_dispenser_device> m_ticket;
+ required_region_ptr<uint8_t> m_grom;
+ optional_memory_bank m_mainbank;
optional_ioport_array<4> m_an;
optional_ioport m_fakex;
optional_ioport m_fakey;
@@ -87,7 +92,6 @@ protected:
uint8_t m_blitter_int;
uint8_t m_tms34061_int;
uint8_t m_periodic_int;
- uint8_t m_sound_data;
uint8_t m_pia_porta_data;
uint8_t m_pia_portb_data;
uint8_t m_z80_ctrl;
@@ -113,11 +117,8 @@ protected:
uint8_t m_fetch_rle_count;
uint8_t m_fetch_rle_value;
uint8_t m_fetch_rle_literal;
- uint8_t *m_grom_base;
- uint32_t m_grom_size;
emu_timer *m_irq_off_timer;
emu_timer *m_behind_beam_update_timer;
- emu_timer *m_delayed_sound_data_timer;
emu_timer *m_blitter_done_timer;
emu_timer *m_delayed_z80_control_timer;
@@ -127,12 +128,10 @@ protected:
DECLARE_WRITE8_MEMBER(blitter_bank_w);
DECLARE_WRITE8_MEMBER(rimrockn_bank_w);
DECLARE_WRITE8_MEMBER(pia_portb_out);
- DECLARE_WRITE8_MEMBER(sound_data_w);
DECLARE_WRITE8_MEMBER(gtg2_sound_data_w);
- DECLARE_READ8_MEMBER(sound_data_r);
DECLARE_WRITE8_MEMBER(grom_bank_w);
DECLARE_WRITE8_MEMBER(palette_w);
- DECLARE_WRITE8_MEMBER(page_w);
+ void page_w(u8 data);
DECLARE_READ8_MEMBER(blitter_r);
DECLARE_WRITE8_MEMBER(blitter_w);
DECLARE_WRITE8_MEMBER(tms34061_w);
@@ -155,7 +154,6 @@ protected:
DECLARE_WRITE_LINE_MEMBER(ninclown_irq);
TIMER_CALLBACK_MEMBER(irq_off);
TIMER_CALLBACK_MEMBER(behind_the_beam_update);
- TIMER_CALLBACK_MEMBER(delayed_sound_data_w);
TIMER_CALLBACK_MEMBER(blitter_done);
inline uint8_t fetch_next_raw();
@@ -165,7 +163,7 @@ protected:
void perform_blit(address_space &space);
void update_interrupts(int periodic, int tms34061, int blitter);
- /*----------- defined in machine/slikshot.c -----------*/
+ /*----------- defined in machine/itech8.cpp -----------*/
DECLARE_READ8_MEMBER( slikz80_port_r );
DECLARE_WRITE8_MEMBER( slikz80_port_w );
@@ -190,8 +188,6 @@ protected:
DECLARE_READ16_MEMBER(rom_constant_r);
DECLARE_READ8_MEMBER(ninclown_palette_r);
DECLARE_WRITE8_MEMBER(ninclown_palette_w);
- DECLARE_WRITE16_MEMBER(grom_bank16_w);
- DECLARE_WRITE16_MEMBER(display_page16_w);
void itech8_sound_ym2203(machine_config &config);
void itech8_sound_ym2608b(machine_config &config);
@@ -200,16 +196,19 @@ protected:
void itech8_core_devices(machine_config &config);
void itech8_core_lo(machine_config &config);
void itech8_core_hi(machine_config &config);
+ void common_hi_map(address_map &map);
+ void common_lo_map(address_map &map);
void gtg2_map(address_map &map);
void ninclown_map(address_map &map);
+ void rimrockn_map(address_map &map);
+ void slikshot_map(address_map &map);
void slikz80_io_map(address_map &map);
void slikz80_mem_map(address_map &map);
void sound2203_map(address_map &map);
void sound2608b_map(address_map &map);
void sound3812_external_map(address_map &map);
void sound3812_map(address_map &map);
- void tmshi_map(address_map &map);
- void tmslo_map(address_map &map);
+ void sstrike_map(address_map &map);
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
};
@@ -217,8 +216,8 @@ protected:
class grmatch_state : public itech8_state
{
public:
- grmatch_state(const machine_config &mconfig, device_type type, const char *tag)
- : itech8_state(mconfig, type, tag),
+ grmatch_state(const machine_config &mconfig, device_type type, const char *tag) :
+ itech8_state(mconfig, type, tag),
m_palette_timer(nullptr)
{
}
@@ -249,4 +248,6 @@ protected:
uint8_t m_palcontrol;
uint8_t m_xscroll;
rgb_t m_palette[2][16];
+
+ void grmatch_map(address_map &map);
};
diff --git a/src/mame/video/itech8.cpp b/src/mame/video/itech8.cpp
index 90d27ccbc54..6218c6c8e5e 100644
--- a/src/mame/video/itech8.cpp
+++ b/src/mame/video/itech8.cpp
@@ -146,10 +146,6 @@ void itech8_state::video_start()
/* reset statics */
m_page_select = 0xc0;
- /* fetch the GROM base */
- m_grom_base = memregion("grom")->base();
- m_grom_size = memregion("grom")->bytes();
-
save_item(NAME(m_blitter_data));
save_item(NAME(m_blit_in_progress));
save_item(NAME(m_page_select));
@@ -180,7 +176,7 @@ WRITE8_MEMBER(itech8_state::palette_w)
*
*************************************/
-WRITE8_MEMBER(itech8_state::page_w)
+void itech8_state::page_w(u8 data)
{
m_screen->update_partial(m_screen->vpos());
logerror("%04x:display_page = %02X (%d)\n", m_maincpu->pc(), data, m_screen->vpos());
@@ -198,7 +194,7 @@ WRITE8_MEMBER(itech8_state::page_w)
inline uint8_t itech8_state::fetch_next_raw()
{
- return m_grom_base[m_fetch_offset++ % m_grom_size];
+ return m_grom[m_fetch_offset++ % m_grom.length()];
}
@@ -212,17 +208,17 @@ inline uint8_t itech8_state::fetch_next_rle()
{
if (m_fetch_rle_count == 0)
{
- m_fetch_rle_count = m_grom_base[m_fetch_offset++ % m_grom_size];
+ m_fetch_rle_count = m_grom[m_fetch_offset++ % m_grom.length()];
m_fetch_rle_literal = m_fetch_rle_count & 0x80;
m_fetch_rle_count &= 0x7f;
if (!m_fetch_rle_literal)
- m_fetch_rle_value = m_grom_base[m_fetch_offset++ % m_grom_size];
+ m_fetch_rle_value = m_grom[m_fetch_offset++ % m_grom.length()];
}
m_fetch_rle_count--;
if (m_fetch_rle_literal)
- m_fetch_rle_value = m_grom_base[m_fetch_offset++ % m_grom_size];
+ m_fetch_rle_value = m_grom[m_fetch_offset++ % m_grom.length()];
return m_fetch_rle_value;
}
@@ -236,12 +232,12 @@ inline void itech8_state::consume_rle(int count)
if (m_fetch_rle_count == 0)
{
- m_fetch_rle_count = m_grom_base[m_fetch_offset++ % m_grom_size];
+ m_fetch_rle_count = m_grom[m_fetch_offset++ % m_grom.length()];
m_fetch_rle_literal = m_fetch_rle_count & 0x80;
m_fetch_rle_count &= 0x7f;
if (!m_fetch_rle_literal)
- m_fetch_rle_value = m_grom_base[m_fetch_offset++ % m_grom_size];
+ m_fetch_rle_value = m_grom[m_fetch_offset++ % m_grom.length()];
}
num_to_consume = (count < m_fetch_rle_count) ? count : m_fetch_rle_count;