diff options
| author | 2020-04-28 12:17:26 +0200 | |
|---|---|---|
| committer | 2020-04-28 21:08:04 +0200 | |
| commit | 097c736f7971156d6318b0e8aa3740513c23421c (patch) | |
| tree | 0b3de2ff7564b5a237f55acba4c2b19902fedf36 | |
| parent | da8cfd878f506499caef12fd44eaa896cacc9843 (diff) | |
Netlist: Added 74163 to netlist. [Couriersud]
| -rw-r--r-- | src/lib/netlist/devices/net_lib.cpp | 2 | ||||
| -rw-r--r-- | src/lib/netlist/devices/nld_9316.cpp | 79 | ||||
| -rw-r--r-- | src/lib/netlist/devices/nld_9316.h | 17 |
3 files changed, 69 insertions, 29 deletions
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index d3b5dc6987f..e418adc6930 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -110,6 +110,8 @@ namespace devices LIB_ENTRY(74153_dip) LIB_ENTRY(74161) LIB_ENTRY(74161_dip) + LIB_ENTRY(74163) + LIB_ENTRY(74163_dip) LIB_ENTRY(74164) LIB_ENTRY(74164_dip) LIB_ENTRY(74165) diff --git a/src/lib/netlist/devices/nld_9316.cpp b/src/lib/netlist/devices/nld_9316.cpp index 9d889dea28e..988de6eedc4 100644 --- a/src/lib/netlist/devices/nld_9316.cpp +++ b/src/lib/netlist/devices/nld_9316.cpp @@ -16,16 +16,20 @@ namespace netlist static constexpr const unsigned MAXCNT = 15; - NETLIB_OBJECT(9316) + // FIXME: Family needs to be set to LS for 74193. This needs some more + // thought generally. + + template <bool ASYNC> + NETLIB_OBJECT(9316_base) { - NETLIB_CONSTRUCTOR(9316) - , m_CLK(*this, "CLK", NETLIB_DELEGATE(9316, clk)) + NETLIB_CONSTRUCTOR(9316_base) + , m_CLK(*this, "CLK", NETLIB_DELEGATE(9316_base, clk)) , m_ENT(*this, "ENT") , m_RC(*this, "RC") , m_LOADQ(*this, "LOADQ") , m_ENP(*this, "ENP") , m_CLRQ(*this, "CLRQ") - , m_ABCD(*this, {"A", "B", "C", "D"}, NETLIB_DELEGATE(9316, abcd)) + , m_ABCD(*this, {"A", "B", "C", "D"}, NETLIB_DELEGATE(9316_base, abcd)) , m_Q(*this, { "QA", "QB", "QC", "QD" }) , m_cnt(*this, "m_cnt", 0) , m_abcd(*this, "m_abcd", 0) @@ -49,14 +53,14 @@ namespace netlist m_ent = m_ENT(); m_loadq = m_LOADQ(); - if (((m_loadq ^ 1) || (m_ent && m_ENP())) && CLRQ) + if (((m_loadq ^ 1) || (m_ent && m_ENP())) && (!ASYNC || CLRQ)) { m_CLK.activate_lh(); } else { m_CLK.inactivate(); - if (!CLRQ && (m_cnt>0)) + if (ASYNC && !CLRQ && (m_cnt>0)) { update_outputs_all(0, NLTIME_FROM_NS(36)); m_cnt = 0; @@ -68,10 +72,18 @@ namespace netlist NETLIB_HANDLERI(clk) { - auto cnt = (m_loadq ? (m_cnt + 1) & MAXCNT: m_abcd); - m_RC.push(m_ent && (cnt == MAXCNT), NLTIME_FROM_NS(27)); - update_outputs_all(cnt, NLTIME_FROM_NS(20)); - m_cnt = cnt; + if (!ASYNC && !m_CLRQ()) + { + update_outputs_all(0, NLTIME_FROM_NS(36)); + m_cnt = 0; + } + else + { + auto cnt = (m_loadq ? (m_cnt + 1) & MAXCNT: m_abcd); + m_RC.push(m_ent && (cnt == MAXCNT), NLTIME_FROM_NS(27)); + update_outputs_all(cnt, NLTIME_FROM_NS(20)); + m_cnt = cnt; + } } NETLIB_HANDLERI(abcd) @@ -109,33 +121,42 @@ namespace netlist } }; - NETLIB_OBJECT_DERIVED(9316_dip, 9316) + template <bool ASYNC> + NETLIB_OBJECT_DERIVED(9316_dip_base, 9316_base<ASYNC>) { - NETLIB_CONSTRUCTOR_DERIVED(9316_dip, 9316) + NETLIB_CONSTRUCTOR_DERIVED(9316_dip_base, 9316_base<ASYNC>) { - register_subalias("1", "CLRQ"); - register_subalias("2", "CLK"); - register_subalias("3", "A"); - register_subalias("4", "B"); - register_subalias("5", "C"); - register_subalias("6", "D"); - register_subalias("7", "ENP"); - register_subalias("8", "GND"); - - register_subalias("9", "LOADQ"); - register_subalias("10", "ENT"); - register_subalias("11", "QD"); - register_subalias("12", "QC"); - register_subalias("13", "QB"); - register_subalias("14", "QA"); - register_subalias("15", "RC"); - register_subalias("16", "VCC"); + this->register_subalias("1", "CLRQ"); + this->register_subalias("2", "CLK"); + this->register_subalias("3", "A"); + this->register_subalias("4", "B"); + this->register_subalias("5", "C"); + this->register_subalias("6", "D"); + this->register_subalias("7", "ENP"); + this->register_subalias("8", "GND"); + + this->register_subalias("9", "LOADQ"); + this->register_subalias("10", "ENT"); + this->register_subalias("11", "QD"); + this->register_subalias("12", "QC"); + this->register_subalias("13", "QB"); + this->register_subalias("14", "QA"); + this->register_subalias("15", "RC"); + this->register_subalias("16", "VCC"); } }; + using NETLIB_NAME(9316) = NETLIB_NAME(9316_base)<true>; + using NETLIB_NAME(74163) = NETLIB_NAME(9316_base)<false>; + + using NETLIB_NAME(9316_dip) = NETLIB_NAME(9316_dip_base)<true>; + using NETLIB_NAME(74163_dip) = NETLIB_NAME(9316_dip_base)<false>; NETLIB_DEVICE_IMPL(9316, "TTL_9316", "+CLK,+ENP,+ENT,+CLRQ,+LOADQ,+A,+B,+C,+D,@VCC,@GND") NETLIB_DEVICE_IMPL(9316_dip, "TTL_9316_DIP", "") + NETLIB_DEVICE_IMPL(74163, "TTL_74163", "+CLK,+ENP,+ENT,+CLRQ,+LOADQ,+A,+B,+C,+D,@VCC,@GND") + NETLIB_DEVICE_IMPL(74163_dip, "TTL_74163_DIP", "") + } //namespace devices } // namespace netlist diff --git a/src/lib/netlist/devices/nld_9316.h b/src/lib/netlist/devices/nld_9316.h index bdd925fa9f5..05bf8af8429 100644 --- a/src/lib/netlist/devices/nld_9316.h +++ b/src/lib/netlist/devices/nld_9316.h @@ -67,7 +67,24 @@ NET_CONNECT(name, C, cC) \ NET_CONNECT(name, D, cD) +#define TTL_74163(name, cCLK, cENP, cENT, cCLRQ, cLOADQ, cA, cB, cC, cD) \ + NET_REGISTER_DEV(TTL_74163, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, ENP, cENP) \ + NET_CONNECT(name, ENT, cENT) \ + NET_CONNECT(name, CLRQ, cCLRQ) \ + NET_CONNECT(name, LOADQ, cLOADQ) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D, cD) + #define TTL_9316_DIP(name) \ NET_REGISTER_DEV(TTL_9316_DIP, name) +#define TTL_74163_DIP(name) \ + NET_REGISTER_DEV(TTL_74163_DIP, name) + #endif /* NLD_9316_H_ */ |
