summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-04-28 12:17:26 +0200
committer couriersud <couriersud@gmx.org>2020-04-28 21:08:04 +0200
commit097c736f7971156d6318b0e8aa3740513c23421c (patch)
tree0b3de2ff7564b5a237f55acba4c2b19902fedf36
parentda8cfd878f506499caef12fd44eaa896cacc9843 (diff)
Netlist: Added 74163 to netlist. [Couriersud]
-rw-r--r--src/lib/netlist/devices/net_lib.cpp2
-rw-r--r--src/lib/netlist/devices/nld_9316.cpp79
-rw-r--r--src/lib/netlist/devices/nld_9316.h17
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_ */