From 43c5edd139178545db68a794bdd9ad57678098ad Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 12 Jan 2025 11:49:57 -0500 Subject: atari/tank8.cpp: Add addressable latch devices and XTAL definition; use raw parameters for screen --- src/emu/xtal.cpp | 1 + src/mame/atari/poolshrk.cpp | 4 ++-- src/mame/atari/tank8.cpp | 45 +++++++++++++++++++++++++++++---------------- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp index 9d5f4f55a5a..e5536621d08 100644 --- a/src/emu/xtal.cpp +++ b/src/emu/xtal.cpp @@ -198,6 +198,7 @@ const double XTAL::known_xtals[] = { 10'920'000, // 10.92_MHz_XTAL ADDS Viewpoint 60, Viewpoint A2 11'000'000, // 11_MHz_XTAL Mario I8039 sound 11'004'000, // 11.004_MHz_XTAL TI 911 VDT + 11'055'000, // 11.055_MHz_XTAL Atari Tank 8 11'059'200, // 11.0592_MHz_XTAL Used with MCS-51 to generate common baud rates 11'200'000, // 11.2_MHz_XTAL New York, New York 11'289'000, // 11.289_MHz_XTAL Vanguard diff --git a/src/mame/atari/poolshrk.cpp b/src/mame/atari/poolshrk.cpp index 4050ef13188..46241fe008c 100644 --- a/src/mame/atari/poolshrk.cpp +++ b/src/mame/atari/poolshrk.cpp @@ -351,9 +351,8 @@ void poolshrk_state::palette(palette_device &palette) const void poolshrk_state::poolshrk(machine_config &config) { // basic machine hardware - M6800(config, m_maincpu, 11'055'000 / 8); // ? + M6800(config, m_maincpu, 11.055_MHz_XTAL / 8); // divider not verified m_maincpu->set_addrmap(AS_PROGRAM, &poolshrk_state::cpu_map); - m_maincpu->set_vblank_int("screen", FUNC(poolshrk_state::irq0_line_assert)); WATCHDOG_TIMER(config, m_watchdog); @@ -364,6 +363,7 @@ void poolshrk_state::poolshrk(machine_config &config) screen.set_visarea(1, 255, 24, 255); screen.set_screen_update(FUNC(poolshrk_state::screen_update)); screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, M6800_IRQ_LINE, ASSERT_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_poolshrk); PALETTE(config, m_palette, FUNC(poolshrk_state::palette), 4); diff --git a/src/mame/atari/tank8.cpp b/src/mame/atari/tank8.cpp index 56da95dd6b7..05363ce53b8 100644 --- a/src/mame/atari/tank8.cpp +++ b/src/mame/atari/tank8.cpp @@ -12,6 +12,7 @@ Atari Tank 8 driver #include "tank8_a.h" #include "cpu/m6800/m6800.h" +#include "machine/74259.h" #include "sound/discrete.h" #include "emupal.h" @@ -66,7 +67,7 @@ private: emu_timer *m_collision_timer = nullptr; uint8_t collision_r(); - void lockout_w(offs_t offset, uint8_t data); + template void lockout_w(int state); void int_reset_w(uint8_t data); void video_ram_w(offs_t offset, uint8_t data); void crash_w(uint8_t data); @@ -74,7 +75,6 @@ private: void bugle_w(uint8_t data); void bug_w(uint8_t data); void attract_w(uint8_t data); - void motor_w(offs_t offset, uint8_t data); TILE_GET_INFO_MEMBER(get_tile_info); @@ -365,9 +365,10 @@ uint8_t tank8_state::collision_r() return m_collision_index; } -void tank8_state::lockout_w(offs_t offset, uint8_t data) +template +void tank8_state::lockout_w(int state) { - machine().bookkeeping().coin_lockout_w(offset, ~data & 1); + machine().bookkeeping().coin_lockout_w(N, !state); } @@ -422,11 +423,6 @@ void tank8_state::attract_w(uint8_t data) m_discrete->write(TANK8_ATTRACT_EN, data); } -void tank8_state::motor_w(offs_t offset, uint8_t data) -{ - m_discrete->write(NODE_RELATIVE(TANK8_MOTOR1_EN, offset), data); -} - void tank8_state::cpu_map(address_map &map) { map(0x0000, 0x00ff).ram(); @@ -453,7 +449,7 @@ void tank8_state::cpu_map(address_map &map) map(0x1c10, 0x1c1f).writeonly().share(m_pos_v_ram); map(0x1c20, 0x1c2f).writeonly().share(m_pos_d_ram); - map(0x1c30, 0x1c37).nopr().w(FUNC(tank8_state::lockout_w)); + map(0x1c30, 0x1c37).nopr().w("locklatch", FUNC(f9334_device::write_d0)); map(0x1d00, 0x1d00).nopr().w(FUNC(tank8_state::int_reset_w)); map(0x1d01, 0x1d01).nopr().w(FUNC(tank8_state::crash_w)); map(0x1d02, 0x1d02).nopr().w(FUNC(tank8_state::explosion_w)); @@ -461,7 +457,7 @@ void tank8_state::cpu_map(address_map &map) map(0x1d04, 0x1d04).nopr().w(FUNC(tank8_state::bug_w)); map(0x1d05, 0x1d05).nopr().writeonly().share(m_team); map(0x1d06, 0x1d06).nopr().w(FUNC(tank8_state::attract_w)); - map(0x1e00, 0x1e07).nopr().w(FUNC(tank8_state::motor_w)); + map(0x1e00, 0x1e07).nopr().w("motorlatch", FUNC(f9334_device::write_d0)); } @@ -661,16 +657,33 @@ GFXDECODE_END void tank8_state::tank8(machine_config &config) { // basic machine hardware - M6800(config, m_maincpu, 11'055'000 / 10); // ? + M6800(config, m_maincpu, 11.055_MHz_XTAL / 10); // divider not verified m_maincpu->set_addrmap(AS_PROGRAM, &tank8_state::cpu_map); + f9334_device &locklatch(F9334(config, "locklatch")); // C5 on audio board + locklatch.q_out_cb<0>().set(FUNC(tank8_state::lockout_w<0>)); + locklatch.q_out_cb<1>().set(FUNC(tank8_state::lockout_w<1>)); + locklatch.q_out_cb<2>().set(FUNC(tank8_state::lockout_w<2>)); + locklatch.q_out_cb<3>().set(FUNC(tank8_state::lockout_w<3>)); + locklatch.q_out_cb<4>().set(FUNC(tank8_state::lockout_w<4>)); + locklatch.q_out_cb<5>().set(FUNC(tank8_state::lockout_w<5>)); + locklatch.q_out_cb<6>().set(FUNC(tank8_state::lockout_w<6>)); + locklatch.q_out_cb<7>().set(FUNC(tank8_state::lockout_w<7>)); + + f9334_device &motorlatch(F9334(config, "motorlatch")); // D5 on audio board + motorlatch.q_out_cb<0>().set(m_discrete, FUNC(discrete_device::write_line)); + motorlatch.q_out_cb<1>().set(m_discrete, FUNC(discrete_device::write_line)); + motorlatch.q_out_cb<2>().set(m_discrete, FUNC(discrete_device::write_line)); + motorlatch.q_out_cb<3>().set(m_discrete, FUNC(discrete_device::write_line)); + motorlatch.q_out_cb<4>().set(m_discrete, FUNC(discrete_device::write_line)); + motorlatch.q_out_cb<5>().set(m_discrete, FUNC(discrete_device::write_line)); + motorlatch.q_out_cb<6>().set(m_discrete, FUNC(discrete_device::write_line)); + motorlatch.q_out_cb<7>().set(m_discrete, FUNC(discrete_device::write_line)); + // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK); - m_screen->set_refresh_hz(60); - m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(30 * 1000000 / 15681)); - m_screen->set_size(512, 524); - m_screen->set_visarea(16, 495, 0, 463); + m_screen->set_raw(11.055_MHz_XTAL * 2, 703, 16, 496, 524, 0, 464); // FIXME: should be 30 Hz interlaced, with two VBLANK interrupts per frame m_screen->set_screen_update(FUNC(tank8_state::screen_update)); m_screen->screen_vblank().set(FUNC(tank8_state::screen_vblank)); m_screen->set_palette(m_palette); -- cgit v1.2.3