diff options
author | 2018-10-03 00:54:44 +0900 | |
---|---|---|
committer | 2018-10-02 11:54:44 -0400 | |
commit | 4d21877432faa5197f77a6688eb65cc8e31032e8 (patch) | |
tree | 96038588302aeeadb56bb8240f0f2d29de7ff0ef | |
parent | a1a23add718137b43519394121336c187e6e6020 (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.cpp | 235 | ||||
-rw-r--r-- | src/mame/includes/itech8.h | 39 | ||||
-rw-r--r-- | src/mame/video/itech8.cpp | 18 |
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; |