diff options
Diffstat (limited to 'src/lib/netlist/devices/nld_7493.cpp')
-rw-r--r-- | src/lib/netlist/devices/nld_7493.cpp | 87 |
1 files changed, 37 insertions, 50 deletions
diff --git a/src/lib/netlist/devices/nld_7493.cpp b/src/lib/netlist/devices/nld_7493.cpp index f3c68f7a5c2..f26e1c237d5 100644 --- a/src/lib/netlist/devices/nld_7493.cpp +++ b/src/lib/netlist/devices/nld_7493.cpp @@ -6,23 +6,22 @@ */ #include "nld_7493.h" -#include "../nl_base.h" +#include "netlist/nl_base.h" namespace netlist { namespace devices { - static constexpr netlist_time out_delay = NLTIME_FROM_NS(18); - static constexpr netlist_time out_delay2 = NLTIME_FROM_NS(36); - static constexpr netlist_time out_delay3 = NLTIME_FROM_NS(54); + static constexpr const netlist_time out_delay = NLTIME_FROM_NS(18); + static constexpr const netlist_time out_delay2 = NLTIME_FROM_NS(36); + static constexpr const netlist_time out_delay3 = NLTIME_FROM_NS(54); NETLIB_OBJECT(7493) { NETLIB_CONSTRUCTOR(7493) , m_R1(*this, "R1") , m_R2(*this, "R2") - , m_reset(*this, "_m_reset", 0) , m_a(*this, "_m_a", 0) , m_bcd(*this, "_m_b", 0) , m_CLKA(*this, "CLKA", NETLIB_DELEGATE(7493, updA)) @@ -35,35 +34,51 @@ namespace netlist } private: - NETLIB_RESETI(); - NETLIB_UPDATEI(); + NETLIB_RESETI() + { + m_a = m_bcd = 0; + m_CLKA.set_state(logic_t::STATE_INP_HL); + m_CLKB.set_state(logic_t::STATE_INP_HL); + } - NETLIB_HANDLERI(updA) + NETLIB_UPDATEI() { - if (m_reset) + if (!(m_R1() & m_R2())) + { + m_CLKA.activate_hl(); + m_CLKB.activate_hl(); + } + else { - m_a ^= 1; - m_QA.push(m_a, out_delay); + m_CLKA.inactivate(); + m_CLKB.inactivate(); + m_QA.push(0, NLTIME_FROM_NS(40)); + m_QB.push(0, NLTIME_FROM_NS(40)); + m_QC.push(0, NLTIME_FROM_NS(40)); + m_QD.push(0, NLTIME_FROM_NS(40)); + m_a = m_bcd = 0; } } + NETLIB_HANDLERI(updA) + { + m_a ^= 1; + m_QA.push(m_a, out_delay); + } + NETLIB_HANDLERI(updB) { - if (m_reset) - { - ++m_bcd &= static_cast<std::uint8_t>(0x07); - m_QD.push((m_bcd >> 2) & 1, out_delay3); - m_QC.push((m_bcd >> 1) & 1, out_delay2); - m_QB.push(m_bcd & 1, out_delay); - } + auto cnt = (++m_bcd &= 0x07); + m_QD.push((cnt >> 2) & 1, out_delay3); + m_QC.push((cnt >> 1) & 1, out_delay2); + m_QB.push(cnt & 1, out_delay); } logic_input_t m_R1; logic_input_t m_R2; - state_var_sig m_reset; state_var_sig m_a; - state_var_sig m_bcd; + state_var_u8 m_bcd; logic_input_t m_CLKA; logic_input_t m_CLKB; @@ -97,37 +112,9 @@ namespace netlist } }; - NETLIB_RESET(7493) - { - m_reset = 1; - m_a = m_bcd = 0; - m_CLKA.set_state(logic_t::STATE_INP_HL); - m_CLKB.set_state(logic_t::STATE_INP_HL); - } - - NETLIB_UPDATE(7493) - { - m_reset = (m_R1() & m_R2()) ^ 1; - - if (m_reset) - { - m_CLKA.activate_hl(); - m_CLKB.activate_hl(); - } - else - { - m_CLKA.inactivate(); - m_CLKB.inactivate(); - m_QA.push_force(0, NLTIME_FROM_NS(40)); - m_QB.push_force(0, NLTIME_FROM_NS(40)); - m_QC.push_force(0, NLTIME_FROM_NS(40)); - m_QD.push_force(0, NLTIME_FROM_NS(40)); - m_a = m_bcd = 0; - } - } - NETLIB_DEVICE_IMPL(7493) - NETLIB_DEVICE_IMPL(7493_dip) + NETLIB_DEVICE_IMPL(7493, "TTL_7493", "+CLKA,+CLKB,+R1,+R2") + NETLIB_DEVICE_IMPL(7493_dip, "TTL_7493_DIP", "") } //namespace devices } // namespace netlist |