From fe8c88862fb60ababe0230dba3f7aa7f0a299c93 Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Sat, 1 Aug 2020 23:57:57 -0700 Subject: netlist: Macro-ized 9322 DIPs. --- src/lib/netlist/devices/net_lib.cpp | 2 +- src/lib/netlist/devices/nld_9322.cpp | 96 +++++++++++------------------------ src/lib/netlist/devices/nld_9322.h | 21 ++------ src/lib/netlist/devices/nld_devinc.h | 11 ++-- src/lib/netlist/macro/nlm_ttl74xx.cpp | 40 +++++++++++++++ src/lib/netlist/macro/nlm_ttl74xx.h | 3 ++ 6 files changed, 83 insertions(+), 90 deletions(-) diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index 3244a920623..9ac09949306 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -128,6 +128,7 @@ namespace devices LIB_ENTRY(9310) LIB_ENTRY(9314) LIB_ENTRY(9316) + LIB_ENTRY(9322_GATE) LIB_ENTRY(9322) LIB_ENTRY(9334) LIB_ENTRY(AM2847) @@ -163,7 +164,6 @@ namespace devices LIB_ENTRY(74365_dip) LIB_ENTRY(9602) LIB_ENTRY(9314_dip) - LIB_ENTRY(9322_dip) LIB_ENTRY(9334_dip) LIB_ENTRY(AM2847_dip) LIB_ENTRY(MM5837_dip) diff --git a/src/lib/netlist/devices/nld_9322.cpp b/src/lib/netlist/devices/nld_9322.cpp index 8c7742360b9..3b963111bb3 100644 --- a/src/lib/netlist/devices/nld_9322.cpp +++ b/src/lib/netlist/devices/nld_9322.cpp @@ -14,24 +14,34 @@ namespace netlist { class NETLIB_NAME(9322); - NETLIB_OBJECT(9322_selector) + NETLIB_OBJECT(9322_GATE) { - NETLIB_CONSTRUCTOR(9322_selector) - , m_parent(owner) + NETLIB_CONSTRUCTOR(9322_GATE) , m_A(*this, "A", NETLIB_DELEGATE(inputs)) , m_B(*this, "B", NETLIB_DELEGATE(inputs)) + , m_SELECT(*this, "SELECT", NETLIB_DELEGATE(inputs)) + , m_STROBE(*this, "STROBE", NETLIB_DELEGATE(inputs)) , m_Y(*this, "Y") , m_power_pins(*this) { } // FIXME: Timing - NETLIB_HANDLERI(inputs); + NETLIB_HANDLERI(inputs) + { + if (m_STROBE()) + m_Y.push(0, NLTIME_FROM_NS(21)); + else if (m_SELECT()) + m_Y.push(m_B(), NLTIME_FROM_NS(14)); + else + m_Y.push(m_A(), NLTIME_FROM_NS(14)); + } public: - NETLIB_NAME(9322) &m_parent; logic_input_t m_A; logic_input_t m_B; + logic_input_t m_SELECT; + logic_input_t m_STROBE; logic_output_t m_Y; nld_power_pins m_power_pins; }; @@ -39,8 +49,6 @@ namespace netlist NETLIB_OBJECT(9322) { NETLIB_CONSTRUCTOR(9322) - , m_SELECT(*this, "SELECT", NETLIB_DELEGATE(inputs)) - , m_STROBE(*this, "STROBE", NETLIB_DELEGATE(inputs)) , m_1(*this, "A") , m_2(*this, "B") , m_3(*this, "C") @@ -65,73 +73,29 @@ namespace netlist connect("A.GND", "B.GND"); connect("A.GND", "C.GND"); connect("A.GND", "D.GND"); - + connect("A.SELECT", "B.SELECT"); + connect("A.SELECT", "C.SELECT"); + connect("A.SELECT", "D.SELECT"); + connect("A.STROBE", "B.STROBE"); + connect("A.STROBE", "C.STROBE"); + connect("A.STROBE", "D.STROBE"); + + register_subalias("SELECT", "A.SELECT"); + register_subalias("STROBE", "A.STROBE"); register_subalias("GND", "A.GND"); register_subalias("VCC", "B.VCC"); - } - friend class NETLIB_NAME(9322_dip); - public: - logic_input_t m_SELECT; - logic_input_t m_STROBE; private: - NETLIB_HANDLERI(inputs) - { - m_1.inputs(); - m_2.inputs(); - m_3.inputs(); - m_4.inputs(); - } - - NETLIB_SUB(9322_selector) m_1; - NETLIB_SUB(9322_selector) m_2; - NETLIB_SUB(9322_selector) m_3; - NETLIB_SUB(9322_selector) m_4; - - }; - - NETLIB_HANDLER(9322_selector, inputs) - { - if (m_parent.m_STROBE()) - m_Y.push(0, NLTIME_FROM_NS(21)); - else if (m_parent.m_SELECT()) - m_Y.push(m_B(), NLTIME_FROM_NS(14)); - else - m_Y.push(m_A(), NLTIME_FROM_NS(14)); - } - - NETLIB_OBJECT(9322_dip) - { - NETLIB_CONSTRUCTOR(9322_dip) - , A(*this, "A") - { - register_subalias("1", A.m_SELECT); - register_subalias("2", A.m_1.m_A); - register_subalias("3", A.m_1.m_B); - register_subalias("4", A.m_1.m_Y); - register_subalias("5", A.m_2.m_A); - register_subalias("6", A.m_2.m_B); - register_subalias("7", A.m_2.m_Y); - register_subalias("8", "A.GND"); + NETLIB_SUB(9322_GATE) m_1; + NETLIB_SUB(9322_GATE) m_2; + NETLIB_SUB(9322_GATE) m_3; + NETLIB_SUB(9322_GATE) m_4; - register_subalias("9", A.m_3.m_Y); - register_subalias("10", A.m_3.m_B); - register_subalias("11", A.m_3.m_A); - register_subalias("12", A.m_4.m_Y); - register_subalias("13", A.m_4.m_B); - register_subalias("14", A.m_4.m_A); - register_subalias("15", A.m_STROBE); - register_subalias("16", "A.VCC"); - } - - //NETLIB_RESETI() {} - private: - NETLIB_SUB(9322) A; }; - NETLIB_DEVICE_IMPL(9322, "TTL_9322", "+SELECT,+A1,+B1,+A2,+B2,+A3,+B3,+A4,+B4,+STROBE,@VCC,@GND") - NETLIB_DEVICE_IMPL(9322_dip, "TTL_9322_DIP", "") + NETLIB_DEVICE_IMPL(9322_GATE, "TTL_9322_GATE", "") + NETLIB_DEVICE_IMPL(9322, "TTL_9322", "+SELECT,+A1,+B1,+A2,+B2,+A3,+B3,+A4,+B4,+STROBE,@VCC,@GND") } //namespace devices } // namespace netlist diff --git a/src/lib/netlist/devices/nld_9322.h b/src/lib/netlist/devices/nld_9322.h index e55c73847b3..9a20f4ca2ac 100644 --- a/src/lib/netlist/devices/nld_9322.h +++ b/src/lib/netlist/devices/nld_9322.h @@ -23,22 +23,11 @@ #include "netlist/nl_setup.h" -#define TTL_9322(name, cSELECT, cA1, cB1, cA2, cB2, cA3, cB3, cA4, cB4, cSTROBE) \ - NET_REGISTER_DEV(TTL_9322, name) \ - NET_CONNECT(name, SELECT, cSELECT) \ - NET_CONNECT(name, GND, GND) \ - NET_CONNECT(name, VCC, VCC) \ - NET_CONNECT(name, A1, cA1) \ - NET_CONNECT(name, B1, cB1) \ - NET_CONNECT(name, A2, cA2) \ - NET_CONNECT(name, B2, cB2) \ - NET_CONNECT(name, A3, cA3) \ - NET_CONNECT(name, B3, cB3) \ - NET_CONNECT(name, A4, cA4) \ - NET_CONNECT(name, B4, cB4) \ - NET_CONNECT(name, STROBE, cSTROBE) +#define TTL_9322_GATE(...) \ + NET_REGISTER_DEVEXT(TTL_9322_GATE, __VA_ARGS__) -#define TTL_9322_DIP(name) \ - NET_REGISTER_DEV(TTL_9322_DIP, name) +// usage: TTL_9322(name, cSELECT, cA1, cB1, cA2, cB2, cA3, cB3, cA4, cB4, cSTROBE) +#define TTL_9322(...) \ + NET_REGISTER_DEVEXT(TTL_9322, __VA_ARGS__) #endif /* NLD_9322_H_ */ diff --git a/src/lib/netlist/devices/nld_devinc.h b/src/lib/netlist/devices/nld_devinc.h index c7813bfdef7..8f34119120e 100644 --- a/src/lib/netlist/devices/nld_devinc.h +++ b/src/lib/netlist/devices/nld_devinc.h @@ -798,13 +798,6 @@ #define TTL_9314_DIP(...) \ NET_REGISTER_DEVEXT(TTL_9314_DIP, __VA_ARGS__) -// --------------------------------------------------------------------- -// Source: src/lib/netlist/devices/nld_9322.cpp -// --------------------------------------------------------------------- -// usage : TTL_9322_DIP(name) -#define TTL_9322_DIP(...) \ - NET_REGISTER_DEVEXT(TTL_9322_DIP, __VA_ARGS__) - // --------------------------------------------------------------------- // Source: src/lib/netlist/devices/nld_dm9334.cpp // --------------------------------------------------------------------- @@ -1227,6 +1220,10 @@ #define TTL_9316_DIP(...) \ NET_REGISTER_DEVEXT(TTL_9316_DIP, __VA_ARGS__) +// usage : TTL_9322_DIP(name) +#define TTL_9322_DIP(...) \ + NET_REGISTER_DEVEXT(TTL_9322_DIP, __VA_ARGS__) + // --------------------------------------------------------------------- // Source: CD4XXX_lib // --------------------------------------------------------------------- diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx.cpp index 795b5cb19fa..365a0dd1286 100644 --- a/src/lib/netlist/macro/nlm_ttl74xx.cpp +++ b/src/lib/netlist/macro/nlm_ttl74xx.cpp @@ -1864,6 +1864,45 @@ static NETLIST_START(TTL_9316_DIP) ) NETLIST_END() +/* + * 9322: Quad 2-Line to 1-Line Data Selectors/Multiplexers + * + * +------------+ + * SELECT |1 ++ 16| VCC + * A1 |2 15| STROBE + * B1 |3 14| A4 + * Y1 |4 9322 13| B4 + * A2 |5 12| Y4 + * B2 |6 11| A3 + * Y2 |7 10| B3 + * GND |8 9| Y3 + * +------------+ + */ + +static NETLIST_START(TTL_9322_DIP) + TTL_9322_GATE(A) + TTL_9322_GATE(B) + TTL_9322_GATE(C) + TTL_9322_GATE(D) + + NET_C(A.SELECT, B.SELECT, C.SELECT, D.SELECT) + NET_C(A.STROBE, B.STROBE, C.STROBE, D.STROBE) + NET_C(A.VCC, B.VCC, C.VCC, D.VCC) + NET_C(A.GND, B.GND, C.GND, D.GND) + + DIPPINS( /* +------------+ */ + A.SELECT, /* SELECT |1 ++ 16| VCC */ A.VCC, + A.A, /* A1 |2 15| STROBE */ A.STROBE, + A.B, /* B1 |3 14| A4 */ D.A, + A.Y, /* Y1 |4 9322 13| B4 */ D.B, + B.A, /* A2 |5 12| Y4 */ D.Y, + B.B, /* B2 |6 11| A3 */ C.A, + B.Y, /* Y2 |7 10| B3 */ C.B, + A.GND, /* GND |8 9| Y3 */ C.Y + /* +------------+ */ + ) +NETLIST_END() + /* SN7442: 4-Line BCD to 10-Line Decimal Decoder * * +--------------+ @@ -2527,4 +2566,5 @@ NETLIST_START(TTL74XX_lib) LOCAL_LIB_ENTRY(DM9312_DIP) LOCAL_LIB_ENTRY(TTL_9310_DIP) LOCAL_LIB_ENTRY(TTL_9316_DIP) + LOCAL_LIB_ENTRY(TTL_9322_DIP) NETLIST_END() diff --git a/src/lib/netlist/macro/nlm_ttl74xx.h b/src/lib/netlist/macro/nlm_ttl74xx.h index 2a7148fc442..d3d41ddeafd 100644 --- a/src/lib/netlist/macro/nlm_ttl74xx.h +++ b/src/lib/netlist/macro/nlm_ttl74xx.h @@ -397,6 +397,9 @@ #define TTL_9316_DIP(name) \ NET_REGISTER_DEV(TTL_9316_DIP, name) +#define TTL_9322_DIP(name) \ + NET_REGISTER_DEV(TTL_9322_DIP, name) + #endif // NL_AUTO_DEVICES /* ---------------------------------------------------------------------------- -- cgit v1.2.3