summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2020-05-13 09:58:48 -0700
committer couriersud <couriersud@gmx.org>2020-05-15 13:10:15 +0200
commit5739043ced4866b978f07aa5755683c1540617dd (patch)
tree9d06889f8338e6b5edc65c7988f443d86b8fde1d /src/lib/netlist
parentcfc3a76d043f5ea2beb692992fb733bcaf5b685e (diff)
netlist: Add 74377/74378/74379 devices to netlist. [Aaron Giles]
Diffstat (limited to 'src/lib/netlist')
-rw-r--r--src/lib/netlist/build/makefile3
-rw-r--r--src/lib/netlist/devices/net_lib.cpp3
-rw-r--r--src/lib/netlist/devices/net_lib.h1
-rw-r--r--src/lib/netlist/devices/nld_74377.cpp256
-rw-r--r--src/lib/netlist/devices/nld_74377.h69
-rw-r--r--src/lib/netlist/devices/nld_devinc.h15
6 files changed, 346 insertions, 1 deletions
diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile
index 037e6e966c8..aaf6dca96ec 100644
--- a/src/lib/netlist/build/makefile
+++ b/src/lib/netlist/build/makefile
@@ -73,7 +73,7 @@ TIDY_DB = $(OBJ)/compile_commands.json
# LTO = -flto=4 -fuse-linker-plugin -flto-partition=balanced -Wodr
-CCOREFLAGS = -g -O3 -std=c++17 -I$(CURDIR)/.. -I$(CURDIR)/../..
+CCOREFLAGS = -g -O3 -std=c++14 -I$(CURDIR)/.. -I$(CURDIR)/../..
CFLAGS = $(LTO) $(CCOREFLAGS) $(CEXTRAFLAGS)
@@ -174,6 +174,7 @@ NLOBJS := \
$(NLOBJ)/devices/nld_74193.o \
$(NLOBJ)/devices/nld_74194.o \
$(NLOBJ)/devices/nld_74365.o \
+ $(NLOBJ)/devices/nld_74377.o \
$(NLOBJ)/devices/nld_74393.o \
$(NLOBJ)/devices/nld_74ls629.o \
$(NLOBJ)/devices/nld_82S16.o \
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp
index 1616bae4ece..9cbaea79bc5 100644
--- a/src/lib/netlist/devices/net_lib.cpp
+++ b/src/lib/netlist/devices/net_lib.cpp
@@ -129,6 +129,9 @@ namespace devices
LIB_ENTRY(74193)
LIB_ENTRY(74194)
LIB_ENTRY(74365)
+ LIB_ENTRY(74377_dip)
+ LIB_ENTRY(74378_dip)
+ LIB_ENTRY(74379_dip)
LIB_ENTRY(74393)
LIB_ENTRY(74393_dip)
//ENTRY(74279, TTL_74279, "") // only dip available
diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h
index 1eccd867cb6..9da245d3008 100644
--- a/src/lib/netlist/devices/net_lib.h
+++ b/src/lib/netlist/devices/net_lib.h
@@ -64,6 +64,7 @@
#include "nld_74193.h"
#include "nld_74194.h"
#include "nld_74365.h"
+#include "nld_74377.h"
#include "nld_74393.h"
#include "nld_7448.h"
#include "nld_7450.h"
diff --git a/src/lib/netlist/devices/nld_74377.cpp b/src/lib/netlist/devices/nld_74377.cpp
new file mode 100644
index 00000000000..6521d33764c
--- /dev/null
+++ b/src/lib/netlist/devices/nld_74377.cpp
@@ -0,0 +1,256 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_74377.c
+ *
+ */
+
+#include "nld_74377.h"
+#include "netlist/nl_base.h"
+
+namespace netlist
+{
+ namespace devices
+ {
+
+ constexpr const std::array<netlist_time, 2> delay = { NLTIME_FROM_NS(25), NLTIME_FROM_NS(25) };
+
+ NETLIB_OBJECT(74377_gate)
+ {
+ NETLIB_CONSTRUCTOR(74377_gate)
+ , m_E(*this, "E")
+ , m_D(*this, "D")
+ , m_CP(*this, "CP")
+ , m_Q(*this, "Q")
+ , m_QQ(*this, "QQ")
+ , m_cp(*this, "m_cp", 0)
+ , m_power_pins(*this)
+ {
+ }
+
+ NETLIB_RESETI()
+ {
+ }
+ NETLIB_UPDATEI()
+ {
+ netlist_sig_t last_cp = m_cp;
+
+ m_cp = m_CP();
+
+ if (!m_E() && !last_cp && m_cp)
+ {
+ netlist_sig_t d = m_D();
+ m_Q.push(d, delay[d]);
+ m_QQ.push(d ^ 1, delay[d ^ 1]);
+ }
+ }
+
+ friend class NETLIB_NAME(74377_dip);
+ friend class NETLIB_NAME(74378_dip);
+ friend class NETLIB_NAME(74379_dip);
+ private:
+ logic_input_t m_E;
+ logic_input_t m_D;
+ logic_input_t m_CP;
+ logic_output_t m_Q;
+ logic_output_t m_QQ;
+
+ state_var_sig m_cp;
+ nld_power_pins m_power_pins;
+ };
+
+ NETLIB_OBJECT(74377_dip)
+ {
+ NETLIB_CONSTRUCTOR(74377_dip)
+ , m_A(*this, "A")
+ , m_B(*this, "B")
+ , m_C(*this, "C")
+ , m_D(*this, "D")
+ , m_E(*this, "E")
+ , m_F(*this, "F")
+ , m_G(*this, "G")
+ , m_H(*this, "H")
+ {
+ register_subalias("1", m_A.m_E);
+ register_subalias("2", m_A.m_Q);
+ register_subalias("3", m_A.m_D);
+ register_subalias("4", m_B.m_D);
+ register_subalias("5", m_B.m_Q);
+ register_subalias("6", m_C.m_Q);
+ register_subalias("7", m_C.m_D);
+ register_subalias("8", m_D.m_D);
+ register_subalias("9", m_D.m_Q);
+ register_subalias("10", "A.GND");
+
+ register_subalias("11", m_A.m_CP);
+ register_subalias("12", m_E.m_Q);
+ register_subalias("13", m_E.m_D);
+ register_subalias("14", m_F.m_D);
+ register_subalias("15", m_F.m_Q);
+ register_subalias("16", m_G.m_Q);
+ register_subalias("17", m_G.m_D);
+ register_subalias("18", m_H.m_D);
+ register_subalias("19", m_H.m_Q);
+ register_subalias("20", "A.VCC");
+
+ connect("A.GND", "B.GND");
+ connect("A.GND", "C.GND");
+ connect("A.GND", "D.GND");
+ connect("A.GND", "E.GND");
+ connect("A.GND", "F.GND");
+ connect("A.GND", "G.GND");
+ connect("A.GND", "H.GND");
+ connect("A.VCC", "B.VCC");
+ connect("A.VCC", "C.VCC");
+ connect("A.VCC", "D.VCC");
+ connect("A.VCC", "E.VCC");
+ connect("A.VCC", "F.VCC");
+ connect("A.VCC", "G.VCC");
+ connect("A.VCC", "H.VCC");
+ connect(m_A.m_E, m_B.m_E);
+ connect(m_A.m_E, m_C.m_E);
+ connect(m_A.m_E, m_D.m_E);
+ connect(m_A.m_E, m_E.m_E);
+ connect(m_A.m_E, m_F.m_E);
+ connect(m_A.m_E, m_G.m_E);
+ connect(m_A.m_E, m_H.m_E);
+ connect(m_A.m_CP, m_B.m_CP);
+ connect(m_A.m_CP, m_C.m_CP);
+ connect(m_A.m_CP, m_D.m_CP);
+ connect(m_A.m_CP, m_E.m_CP);
+ connect(m_A.m_CP, m_F.m_CP);
+ connect(m_A.m_CP, m_G.m_CP);
+ connect(m_A.m_CP, m_H.m_CP);
+ }
+ //NETLIB_RESETI();
+ //NETLIB_UPDATEI();
+
+ protected:
+ NETLIB_SUB(74377_gate) m_A;
+ NETLIB_SUB(74377_gate) m_B;
+ NETLIB_SUB(74377_gate) m_C;
+ NETLIB_SUB(74377_gate) m_D;
+ NETLIB_SUB(74377_gate) m_E;
+ NETLIB_SUB(74377_gate) m_F;
+ NETLIB_SUB(74377_gate) m_G;
+ NETLIB_SUB(74377_gate) m_H;
+ };
+
+ NETLIB_OBJECT(74378_dip)
+ {
+ NETLIB_CONSTRUCTOR(74378_dip)
+ , m_A(*this, "A")
+ , m_B(*this, "B")
+ , m_C(*this, "C")
+ , m_D(*this, "D")
+ , m_E(*this, "E")
+ , m_F(*this, "F")
+ {
+ register_subalias("1", m_A.m_E);
+ register_subalias("2", m_A.m_Q);
+ register_subalias("3", m_A.m_D);
+ register_subalias("4", m_B.m_D);
+ register_subalias("5", m_B.m_Q);
+ register_subalias("6", m_C.m_D);
+ register_subalias("7", m_C.m_Q);
+ register_subalias("8", "A.GND");
+
+ register_subalias("9", m_A.m_CP);
+ register_subalias("10", m_D.m_Q);
+ register_subalias("11", m_D.m_D);
+ register_subalias("12", m_E.m_Q);
+ register_subalias("13", m_E.m_D);
+ register_subalias("14", m_F.m_D);
+ register_subalias("15", m_F.m_Q);
+ register_subalias("16", "A.VCC");
+
+ connect("A.GND", "B.GND");
+ connect("A.GND", "C.GND");
+ connect("A.GND", "D.GND");
+ connect("A.GND", "E.GND");
+ connect("A.GND", "F.GND");
+ connect("A.VCC", "B.VCC");
+ connect("A.VCC", "C.VCC");
+ connect("A.VCC", "D.VCC");
+ connect("A.VCC", "E.VCC");
+ connect("A.VCC", "F.VCC");
+ connect(m_A.m_E, m_B.m_E);
+ connect(m_A.m_E, m_C.m_E);
+ connect(m_A.m_E, m_D.m_E);
+ connect(m_A.m_E, m_E.m_E);
+ connect(m_A.m_E, m_F.m_E);
+ connect(m_A.m_CP, m_B.m_CP);
+ connect(m_A.m_CP, m_C.m_CP);
+ connect(m_A.m_CP, m_D.m_CP);
+ connect(m_A.m_CP, m_E.m_CP);
+ connect(m_A.m_CP, m_F.m_CP);
+ }
+ //NETLIB_RESETI();
+ //NETLIB_UPDATEI();
+
+ protected:
+ NETLIB_SUB(74377_gate) m_A;
+ NETLIB_SUB(74377_gate) m_B;
+ NETLIB_SUB(74377_gate) m_C;
+ NETLIB_SUB(74377_gate) m_D;
+ NETLIB_SUB(74377_gate) m_E;
+ NETLIB_SUB(74377_gate) m_F;
+ };
+
+ NETLIB_OBJECT(74379_dip)
+ {
+ NETLIB_CONSTRUCTOR(74379_dip)
+ , m_A(*this, "A")
+ , m_B(*this, "B")
+ , m_C(*this, "C")
+ , m_D(*this, "D")
+ {
+ register_subalias("1", m_A.m_E);
+ register_subalias("2", m_A.m_Q);
+ register_subalias("3", m_A.m_QQ);
+ register_subalias("4", m_A.m_D);
+ register_subalias("5", m_B.m_D);
+ register_subalias("6", m_B.m_QQ);
+ register_subalias("7", m_B.m_Q);
+ register_subalias("8", "A.GND");
+
+ register_subalias("9", m_A.m_CP);
+ register_subalias("10", m_C.m_Q);
+ register_subalias("11", m_C.m_QQ);
+ register_subalias("12", m_C.m_D);
+ register_subalias("13", m_D.m_D);
+ register_subalias("14", m_D.m_QQ);
+ register_subalias("15", m_D.m_Q);
+ register_subalias("16", "A.VCC");
+
+ connect("A.GND", "B.GND");
+ connect("A.GND", "C.GND");
+ connect("A.GND", "D.GND");
+ connect("A.VCC", "B.VCC");
+ connect("A.VCC", "C.VCC");
+ connect("A.VCC", "D.VCC");
+ connect(m_A.m_E, m_B.m_E);
+ connect(m_A.m_E, m_C.m_E);
+ connect(m_A.m_E, m_D.m_E);
+ connect(m_A.m_CP, m_B.m_CP);
+ connect(m_A.m_CP, m_C.m_CP);
+ connect(m_A.m_CP, m_D.m_CP);
+ }
+ //NETLIB_RESETI();
+ //NETLIB_UPDATEI();
+
+ protected:
+ NETLIB_SUB(74377_gate) m_A;
+ NETLIB_SUB(74377_gate) m_B;
+ NETLIB_SUB(74377_gate) m_C;
+ NETLIB_SUB(74377_gate) m_D;
+ };
+
+
+ NETLIB_DEVICE_IMPL(74377_gate, "TTL_74377_GATE", "")
+ NETLIB_DEVICE_IMPL(74377_dip, "TTL_74377_DIP", "")
+ NETLIB_DEVICE_IMPL(74378_dip, "TTL_74378_DIP", "")
+ NETLIB_DEVICE_IMPL(74379_dip, "TTL_74379_DIP", "")
+
+ } //namespace devices
+} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_74377.h b/src/lib/netlist/devices/nld_74377.h
new file mode 100644
index 00000000000..87646d150d3
--- /dev/null
+++ b/src/lib/netlist/devices/nld_74377.h
@@ -0,0 +1,69 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud,Aaron Giles
+/*
+ * nld_74377.h
+ *
+ * DM74377: Octal D Flip-Flop With Enable
+ *
+ * +--------------+
+ * /E |1 ++ 20| VCC
+ * Q0 |2 19| Q7
+ * D0 |3 18| D7
+ * D1 |4 74377 17| D6
+ * Q1 |5 16| Q6
+ * Q2 |6 15| Q5
+ * D2 |7 14| D5
+ * D3 |8 13| D4
+ * Q3 |9 12| Q4
+ * GND |10 11| CP
+ * +--------------+
+ *
+ * DM74378: Hex D Flip-Flop With Enable
+ *
+ * +--------------+
+ * /E |1 ++ 16| VCC
+ * Q0 |2 15| Q5
+ * D0 |3 14| D5
+ * D1 |4 74378 13| D4
+ * Q1 |5 12| Q4
+ * D2 |6 11| D3
+ * Q2 |7 10| Q3
+ * GND |8 9| CP
+ * +--------------+
+ *
+ * DM74379: 4-bit D Flip-Flop With Enable
+ *
+ * +--------------+
+ * /E |1 ++ 16| VCC
+ * Q0 |2 15| Q3
+ * /Q0 |3 14| /Q3
+ * D0 |4 74379 13| D3
+ * D1 |5 12| D2
+ * /Q1 |6 11| /Q2
+ * Q1 |7 10| Q2
+ * GND |8 9| CP
+ * +--------------+
+ *
+ * Naming conventions follow Motorola datasheet
+ *
+ */
+
+#ifndef NLD_74377_H_
+#define NLD_74377_H_
+
+#include "netlist/nl_setup.h"
+
+#define TTL_74377_GATE(name) \
+ NET_REGISTER_DEV(TTL_74377_GATE, name)
+
+#define TTL_74377_DIP(name) \
+ NET_REGISTER_DEV(TTL_74377_DIP, name)
+
+#define TTL_74378_DIP(name) \
+ NET_REGISTER_DEV(TTL_74378_DIP, name)
+
+#define TTL_74379_DIP(name) \
+ NET_REGISTER_DEV(TTL_74379_DIP, name)
+
+
+#endif /* NLD_74377_H_ */
diff --git a/src/lib/netlist/devices/nld_devinc.h b/src/lib/netlist/devices/nld_devinc.h
index bd453dad8f3..f42fa126fa5 100644
--- a/src/lib/netlist/devices/nld_devinc.h
+++ b/src/lib/netlist/devices/nld_devinc.h
@@ -427,6 +427,21 @@
NET_REGISTER_DEVEXT(TTL_74365, name, pG1Q, pG2Q, pA1, pA2, pA3, pA4, pA5, pA6)
// ---------------------------------------------------------------------
+// Source: src/lib/netlist/devices/nld_74377.cpp
+// ---------------------------------------------------------------------
+#define TTL_74377_GATE(name) \
+ NET_REGISTER_DEVEXT(TTL_74377_GATE, name)
+
+#define TTL_74377_DIP(name) \
+ NET_REGISTER_DEVEXT(TTL_74377_DIP, name)
+
+#define TTL_74378_DIP(name) \
+ NET_REGISTER_DEVEXT(TTL_74378_DIP, name)
+
+#define TTL_74379_DIP(name) \
+ NET_REGISTER_DEVEXT(TTL_74379_DIP, name)
+
+// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74393.cpp
// ---------------------------------------------------------------------
#define TTL_74393(name, pCP, pMR) \