diff options
Diffstat (limited to 'src/lib/netlist/devices/nld_7493.cpp')
-rw-r--r-- | src/lib/netlist/devices/nld_7493.cpp | 142 |
1 files changed, 76 insertions, 66 deletions
diff --git a/src/lib/netlist/devices/nld_7493.cpp b/src/lib/netlist/devices/nld_7493.cpp index 003c3291096..a6d80fd551b 100644 --- a/src/lib/netlist/devices/nld_7493.cpp +++ b/src/lib/netlist/devices/nld_7493.cpp @@ -1,36 +1,77 @@ -// license:GPL-2.0+ +// license:BSD-3-Clause // copyright-holders:Couriersud /* * nld_7493.cpp * + * DM7493: Binary Counters + * + * +--------------+ + * B |1 ++ 14| A + * R01 |2 13| NC + * R02 |3 12| QA + * NC |4 7493 11| QD + * VCC |5 10| GND + * NC |6 9| QB + * NC |7 8| QC + * +--------------+ + * + * Counter Sequence + * + * +-------++----+----+----+----+ + * | COUNT || QD | QC | QB | QA | + * +=======++====+====+====+====+ + * | 0 || 0 | 0 | 0 | 0 | + * | 1 || 0 | 0 | 0 | 1 | + * | 2 || 0 | 0 | 1 | 0 | + * | 3 || 0 | 0 | 1 | 1 | + * | 4 || 0 | 1 | 0 | 0 | + * | 5 || 0 | 1 | 0 | 1 | + * | 6 || 0 | 1 | 1 | 0 | + * | 7 || 0 | 1 | 1 | 1 | + * | 8 || 1 | 0 | 0 | 0 | + * | 9 || 1 | 0 | 0 | 1 | + * | 10 || 1 | 0 | 1 | 0 | + * | 11 || 1 | 0 | 1 | 1 | + * | 12 || 1 | 1 | 0 | 0 | + * | 13 || 1 | 1 | 0 | 1 | + * | 14 || 1 | 1 | 1 | 0 | + * | 15 || 1 | 1 | 1 | 1 | + * +-------++----+----+----+----+ + * + * Note C Output QA is connected to input B + * + * Reset Count Function table + * + * +-----+-----++----+----+----+----+ + * | R01 | R02 || QD | QC | QB | QA | + * +=====+=====++====+====+====+====+ + * | 1 | 1 || 0 | 0 | 0 | 0 | + * | 0 | X || COUNT | + * | X | 0 || COUNT | + * +-----+-----++----+----+----+----+ + * + * Naming conventions follow National Semiconductor datasheet + * */ -#include "nld_7493.h" -#include "netlist/nl_base.h" -#include "nlid_system.h" +#include "nl_base.h" -namespace netlist -{ - namespace devices - { - 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); +namespace netlist::devices { + + static constexpr const std::array<const netlist_time, 3> out_delay { NLTIME_FROM_NS(18), NLTIME_FROM_NS(36), NLTIME_FROM_NS(54) }; NETLIB_OBJECT(7493) { NETLIB_CONSTRUCTOR(7493) - , m_R1(*this, "R1") - , m_R2(*this, "R2") - , m_a(*this, "_m_a", 0) - , m_bcd(*this, "_m_b", 0) - , m_CLKA(*this, "CLKA", NETLIB_DELEGATE(7493, updA)) - , m_CLKB(*this, "CLKB", NETLIB_DELEGATE(7493, updB)) + , m_CLKA(*this, "CLKA", NETLIB_DELEGATE(updA)) + , m_CLKB(*this, "CLKB", NETLIB_DELEGATE(updB)) , m_QA(*this, "QA") - , m_QB(*this, "QB") - , m_QC(*this, "QC") - , m_QD(*this, "QD") + , m_QBCD(*this, {"QB", "QC", "QD"}) + , m_a(*this, "m_a", 0) + , m_bcd(*this, "m_b", 0) + , m_R1(*this, "R1", NETLIB_DELEGATE(inputs)) + , m_R2(*this, "R2", NETLIB_DELEGATE(inputs)) , m_power_pins(*this) { } @@ -43,9 +84,9 @@ namespace netlist m_CLKB.set_state(logic_t::STATE_INP_HL); } - NETLIB_UPDATEI() + NETLIB_HANDLERI(inputs) { - if (!(m_R1() & m_R2())) + if (!(m_R1() && m_R2())) { m_CLKA.activate_hl(); m_CLKB.activate_hl(); @@ -55,9 +96,7 @@ namespace netlist 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_QBCD.push(0, NLTIME_FROM_NS(40)); m_a = m_bcd = 0; } } @@ -65,59 +104,30 @@ namespace netlist NETLIB_HANDLERI(updA) { m_a ^= 1; - m_QA.push(m_a, out_delay); + m_QA.push(m_a, out_delay[0]); } NETLIB_HANDLERI(updB) { - 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); + const auto cnt(++m_bcd &= 0x07); + m_QBCD.push(cnt, out_delay); } - logic_input_t m_R1; - logic_input_t m_R2; - - state_var_sig m_a; - state_var_u8 m_bcd; - logic_input_t m_CLKA; logic_input_t m_CLKB; logic_output_t m_QA; - logic_output_t m_QB; - logic_output_t m_QC; - logic_output_t m_QD; - nld_power_pins m_power_pins; - }; + object_array_t<logic_output_t, 3> m_QBCD; - NETLIB_OBJECT_DERIVED(7493_dip, 7493) - { - NETLIB_CONSTRUCTOR_DERIVED(7493_dip, 7493) - { - register_subalias("1", "CLKB"); - register_subalias("2", "R1"); - register_subalias("3", "R2"); - - // register_subalias("4", ); --> NC - register_subalias("5", "VCC"); - // register_subalias("6", ); --> NC - // register_subalias("7", ); --> NC - - register_subalias("8", "QC"); - register_subalias("9", "QB"); - register_subalias("10", "GND"); - register_subalias("11", "QD"); - register_subalias("12", "QA"); - // register_subalias("13", ); -. NC - register_subalias("14", "CLKA"); - } - }; + state_var<unsigned> m_a; + state_var<unsigned> m_bcd; + + logic_input_t m_R1; + logic_input_t m_R2; + nld_power_pins m_power_pins; + }; NETLIB_DEVICE_IMPL(7493, "TTL_7493", "+CLKA,+CLKB,+R1,+R2,@VCC,@GND") - NETLIB_DEVICE_IMPL(7493_dip, "TTL_7493_DIP", "") - } //namespace devices -} // namespace netlist +} // namespace netlist::devices |