summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/devices/nld_7493.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/devices/nld_7493.cpp')
-rw-r--r--src/lib/netlist/devices/nld_7493.cpp87
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