diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2018-08-01 17:22:35 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2018-08-01 17:22:35 -0400 |
commit | ae8fc532e3c285d186694e35831d7bf3734104a3 (patch) | |
tree | 7f1169e2441f2cf52145ee161ce9d519371b993c | |
parent | 768a48ff60e430d929800d7000065a0b54cef2a8 (diff) |
play_2.cpp: Use ripple counter device (nw)
-rw-r--r-- | src/mame/drivers/play_2.cpp | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/src/mame/drivers/play_2.cpp b/src/mame/drivers/play_2.cpp index cf9f1f8a228..7b12c7e254b 100644 --- a/src/mame/drivers/play_2.cpp +++ b/src/mame/drivers/play_2.cpp @@ -38,6 +38,7 @@ Notes: #include "cpu/cosmac/cosmac.h" #include "machine/7474.h" #include "machine/clock.h" +#include "machine/ripple_counter.h" #include "sound/ay8910.h" #include "sound/cdp1863.h" #include "speaker.h" @@ -53,6 +54,7 @@ public: , m_maincpu(*this, "maincpu") , m_4013a(*this, "4013a") , m_4013b(*this, "4013b") + , m_4020(*this, "4020") , m_1863(*this, "1863") , m_aysnd1(*this, "aysnd1") , m_keyboard(*this, "X.%u", 0) @@ -75,8 +77,7 @@ private: DECLARE_READ_LINE_MEMBER(clear_r); DECLARE_READ_LINE_MEMBER(ef1_r); DECLARE_READ_LINE_MEMBER(ef4_r); - DECLARE_WRITE_LINE_MEMBER(q4013a_w); - DECLARE_WRITE_LINE_MEMBER(clock_w); + DECLARE_WRITE16_MEMBER(clockcnt_w); DECLARE_WRITE_LINE_MEMBER(clock2_w); // Zira DECLARE_WRITE8_MEMBER(sound_d_w); @@ -89,7 +90,6 @@ private: void play_2_map(address_map &map); void zira_sound_map(address_map &map); - uint16_t m_clockcnt; uint16_t m_resetcnt; uint8_t m_kbdrow; uint8_t m_segment[5]; @@ -102,6 +102,7 @@ private: required_device<cosmac_device> m_maincpu; required_device<ttl7474_device> m_4013a; required_device<ttl7474_device> m_4013b; + required_device<ripple_counter_device> m_4020; optional_device<cdp1863_device> m_1863; optional_device<ay8910_device> m_aysnd1; required_ioport_array<8> m_keyboard; @@ -209,7 +210,6 @@ INPUT_PORTS_END void play_2_state::machine_reset() { - m_clockcnt = 0; m_resetcnt = 0; m_4013b->d_w(1); m_kbdrow = 0; @@ -292,7 +292,7 @@ READ_LINE_MEMBER( play_2_state::clear_r ) READ_LINE_MEMBER( play_2_state::ef1_r ) { - return (!BIT(m_clockcnt, 10)); // inverted + return (!BIT(m_4020->count(), 10)); // inverted } READ_LINE_MEMBER( play_2_state::ef4_r ) @@ -300,17 +300,10 @@ READ_LINE_MEMBER( play_2_state::ef4_r ) return BIT(m_keyboard[7]->read(), 0); // inverted test button - doesn't seem to do anything } -WRITE_LINE_MEMBER( play_2_state::clock_w ) +WRITE16_MEMBER( play_2_state::clockcnt_w ) { - m_4013a->clock_w(state); - - if (!state) - { - m_clockcnt++; - // simulate 4020 chip - if ((m_clockcnt & 0x3ff) == 0) - m_4013b->preset_w(BIT(m_clockcnt, 10)); // Q10 output - } + if ((data & 0x3ff) == 0) + m_4013b->preset_w(BIT(data, 10)); // Q10 output } WRITE_LINE_MEMBER( play_2_state::clock2_w ) @@ -319,11 +312,6 @@ WRITE_LINE_MEMBER( play_2_state::clock2_w ) m_maincpu->ef3_w(state); // inverted } -WRITE_LINE_MEMBER( play_2_state::q4013a_w ) -{ - m_clockcnt = 0; -} - // *********** Zira Sound handlers ***************** (same as cidelsa.cpp) WRITE8_MEMBER( play_2_state::sound_d_w ) { @@ -374,8 +362,9 @@ MACHINE_CONFIG_START(play_2_state::play_2) m_maincpu->clear_cb().set(FUNC(play_2_state::clear_r)); m_maincpu->ef1_cb().set(FUNC(play_2_state::ef1_r)); m_maincpu->ef4_cb().set(FUNC(play_2_state::ef4_r)); - m_maincpu->q_cb().set("4013a", FUNC(ttl7474_device::clear_w)); - m_maincpu->tpb_cb().set(FUNC(play_2_state::clock_w)); + m_maincpu->q_cb().set(m_4013a, FUNC(ttl7474_device::clear_w)); + m_maincpu->tpb_cb().set(m_4013a, FUNC(ttl7474_device::clock_w)); + m_maincpu->tpb_cb().append(m_4020, FUNC(ripple_counter_device::clock_w)); MCFG_NVRAM_ADD_0FILL("nvram") @@ -388,12 +377,16 @@ MACHINE_CONFIG_START(play_2_state::play_2) // This is actually a 4013 chip (has 2 RS flipflops) TTL7474(config, m_4013a, 0); m_4013a->comp_output_cb().set(m_4013a, FUNC(ttl7474_device::d_w)); - m_4013a->output_cb().set(FUNC(play_2_state::q4013a_w)); + m_4013a->output_cb().set(m_4020, FUNC(ripple_counter_device::reset_w)); // TODO: also CKD for display TTL7474(config, m_4013b, 0); m_4013b->output_cb().set(m_maincpu, FUNC(cosmac_device::ef2_w)); m_4013b->comp_output_cb().set(m_maincpu, FUNC(cosmac_device::int_w)).invert(); // int is reversed in mame + RIPPLE_COUNTER(config, m_4020); + m_4020->set_stages(14); // only Q10 is actually used + m_4020->count_out_cb().set(FUNC(play_2_state::clockcnt_w)); + /* Sound */ genpin_audio(config); |