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.cpp142
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