summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/devices/nld_74153.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/devices/nld_74153.cpp')
-rw-r--r--src/lib/netlist/devices/nld_74153.cpp113
1 files changed, 52 insertions, 61 deletions
diff --git a/src/lib/netlist/devices/nld_74153.cpp b/src/lib/netlist/devices/nld_74153.cpp
index ce2e25cb3f3..c68a8537811 100644
--- a/src/lib/netlist/devices/nld_74153.cpp
+++ b/src/lib/netlist/devices/nld_74153.cpp
@@ -1,43 +1,75 @@
-// license:GPL-2.0+
+// license:BSD-3-Clause
// copyright-holders:Couriersud
/*
- * nld_74153.c
+ * nld_74153.cpp
+ *
+ * DM74153: Dual 4-Line to 1-Line Data Selectors Multiplexers
+ *
+ * +--------------+
+ * G1 |1 ++ 16| VCC
+ * B |2 15| G2
+ * 1C3 |3 14| A
+ * 1C2 |4 74153 13| 2C3
+ * 1C1 |5 12| 2C2
+ * 1C0 |6 11| 2C1
+ * Y1 |7 10| 2C0
+ * GND |8 9| Y2
+ * +--------------+
+ *
+ *
+ * Function table
+ *
+ * +-----+-----++----+----+----+----++----+----+
+ * | B | A || C0 | C1 | C2 | C3 || G | Y |
+ * +=====+=====++====+====+====+====++====+====+
+ * | X | X || X | X | X | X || H | L |
+ * | L | L || L | X | X | X || L | L |
+ * | L | L || H | X | X | X || L | H |
+ * | L | H || X | L | X | X || L | L |
+ * | L | H || X | H | X | X || L | H |
+ * | H | L || X | X | L | X || L | L |
+ * | H | L || X | X | H | X || L | H |
+ * | H | H || X | X | X | L || L | L |
+ * | H | H || X | X | X | H || L | H |
+ * +-----+-----++----+----+----+----++----+----+
+ *
+ * A, B : Select Inputs
+ * C* : Data inputs
+ * G : Strobe
+ * Y : Output
+ *
+ * Naming conventions follow National Semiconductor datasheet
*
*/
-#include "nld_74153.h"
-#include "netlist/nl_base.h"
-#include "nlid_system.h"
+#include "nl_base.h"
-namespace netlist
-{
-namespace devices
-{
+namespace netlist::devices {
- /* FIXME: timing is not 100% accurate, Strobe and Select inputs have a
- * slightly longer timing.
- * Convert this to sub-devices at some time.
- */
+ // FIXME: timing is not 100% accurate, Strobe and Select inputs have a
+ // slightly longer timing .
+ // FIXME: Truth table candidate
NETLIB_OBJECT(74153)
{
NETLIB_CONSTRUCTOR(74153)
- , m_C(*this, {{"C0", "C1", "C2", "C3"}}, NETLIB_DELEGATE(74153, sub))
- , m_G(*this, "G", NETLIB_DELEGATE(74153, sub))
+ , m_C(*this, {"C0", "C1", "C2", "C3"}, NETLIB_DELEGATE(sub))
+ , m_G(*this, "G", NETLIB_DELEGATE(sub))
, m_Y(*this, "AY") //FIXME: Change netlists
, m_chan(*this, "m_chan", 0)
- , m_A(*this, "A")
- , m_B(*this, "B")
+ , m_A(*this, "A", NETLIB_DELEGATE(other))
+ , m_B(*this, "B", NETLIB_DELEGATE(other))
, m_power_pins(*this)
{
}
+ private:
NETLIB_RESETI()
{
m_chan = 0;
}
- NETLIB_UPDATEI()
+ NETLIB_HANDLERI(other)
{
m_chan = (m_A() | (m_B()<<1));
sub();
@@ -45,7 +77,7 @@ namespace devices
NETLIB_HANDLERI(sub)
{
- constexpr const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) };
+ constexpr const std::array<netlist_time, 2> delay = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) };
if (!m_G())
{
auto t = m_C[m_chan]();
@@ -57,7 +89,6 @@ namespace devices
}
}
- public:
object_array_t<logic_input_t, 4> m_C;
logic_input_t m_G;
@@ -71,46 +102,6 @@ namespace devices
nld_power_pins m_power_pins;
};
- NETLIB_OBJECT(74153_dip)
- {
- NETLIB_CONSTRUCTOR(74153_dip)
- , m_A(*this, "A")
- , m_B(*this, "B")
- {
- register_subalias("1", m_A.m_G);
- register_subalias("2", m_A.m_B);
- register_subalias("3", m_A.m_C[3]);
- register_subalias("4", m_A.m_C[2]);
- register_subalias("5", m_A.m_C[1]);
- register_subalias("6", m_A.m_C[0]);
- register_subalias("7", m_A.m_Y);
- register_subalias("8", "A.GND");
-
- register_subalias("9", m_B.m_Y);
- register_subalias("10", m_B.m_C[0]);
- register_subalias("11", m_B.m_C[1]);
- register_subalias("12", m_B.m_C[2]);
- register_subalias("13", m_B.m_C[3]);
- register_subalias("14", m_A.m_A);
-
- register_subalias("15", m_B.m_G);
- register_subalias("16", "A.VCC");
-
- connect("A.GND", "B.GND");
- connect("A.VCC", "B.VCC");
- connect(m_A.m_A, m_B.m_A);
- connect(m_A.m_B, m_B.m_B);
- }
- //NETLIB_RESETI();
- //NETLIB_UPDATEI();
-
- protected:
- NETLIB_SUB(74153) m_A;
- NETLIB_SUB(74153) m_B;
- };
-
NETLIB_DEVICE_IMPL(74153, "TTL_74153", "+C0,+C1,+C2,+C3,+A,+B,+G,@VCC,@GND")
- NETLIB_DEVICE_IMPL(74153_dip, "TTL_74153_DIP", "")
-} //namespace devices
-} // namespace netlist
+} // namespace netlist::devices