diff options
Diffstat (limited to 'src/lib/netlist/devices/nld_74153.cpp')
-rw-r--r-- | src/lib/netlist/devices/nld_74153.cpp | 113 |
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 |