summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/src/netlist.lua8
-rw-r--r--src/devices/machine/netlist.cpp4
-rw-r--r--src/devices/machine/netlist.h26
-rw-r--r--src/lib/netlist/build/makefile4
-rw-r--r--src/lib/netlist/devices/net_lib.cpp9
-rw-r--r--src/lib/netlist/devices/net_lib.h5
-rw-r--r--src/lib/netlist/devices/nld_74161.cpp131
-rw-r--r--src/lib/netlist/devices/nld_74161.h36
-rw-r--r--src/lib/netlist/devices/nld_7473.cpp198
-rw-r--r--src/lib/netlist/devices/nld_7473.h75
-rw-r--r--src/lib/netlist/devices/nld_am2847.cpp131
-rw-r--r--src/lib/netlist/devices/nld_am2847.h32
-rw-r--r--src/lib/netlist/devices/nld_dm9334.cpp152
-rw-r--r--src/lib/netlist/devices/nld_dm9334.h76
14 files changed, 877 insertions, 10 deletions
diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua
index 70feb291aa5..66c336a6dae 100644
--- a/scripts/src/netlist.lua
+++ b/scripts/src/netlist.lua
@@ -99,6 +99,8 @@ project "netlist"
MAME_DIR .. "src/lib/netlist/devices/nld_7448.h",
MAME_DIR .. "src/lib/netlist/devices/nld_7450.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_7450.h",
+ MAME_DIR .. "src/lib/netlist/devices/nld_7473.cpp",
+ MAME_DIR .. "src/lib/netlist/devices/nld_7473.h",
MAME_DIR .. "src/lib/netlist/devices/nld_7474.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_7474.h",
MAME_DIR .. "src/lib/netlist/devices/nld_7483.cpp",
@@ -113,6 +115,8 @@ project "netlist"
MAME_DIR .. "src/lib/netlist/devices/nld_74123.h",
MAME_DIR .. "src/lib/netlist/devices/nld_74153.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_74153.h",
+ MAME_DIR .. "src/lib/netlist/devices/nld_74161.cpp",
+ MAME_DIR .. "src/lib/netlist/devices/nld_74161.h",
MAME_DIR .. "src/lib/netlist/devices/nld_74175.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_74175.h",
MAME_DIR .. "src/lib/netlist/devices/nld_74192.cpp",
@@ -131,6 +135,10 @@ project "netlist"
MAME_DIR .. "src/lib/netlist/devices/nld_9312.h",
MAME_DIR .. "src/lib/netlist/devices/nld_9316.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_9316.h",
+ MAME_DIR .. "src/lib/netlist/devices/nld_am2847.cpp",
+ MAME_DIR .. "src/lib/netlist/devices/nld_am2847.h",
+ MAME_DIR .. "src/lib/netlist/devices/nld_dm9334.cpp",
+ MAME_DIR .. "src/lib/netlist/devices/nld_dm9334.h",
MAME_DIR .. "src/lib/netlist/devices/nld_ne555.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_ne555.h",
MAME_DIR .. "src/lib/netlist/devices/nld_mm5837.cpp",
diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp
index 138a56efe88..b7891d75286 100644
--- a/src/devices/machine/netlist.cpp
+++ b/src/devices/machine/netlist.cpp
@@ -84,7 +84,7 @@ void netlist_mame_analog_input_t::device_start()
// ----------------------------------------------------------------------------------------
netlist_mame_analog_output_t::netlist_mame_analog_output_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, NETLIST_ANALOG_INPUT, "Netlist Analog Output", tag, owner, clock, "netlist_analog_output", __FILE__),
+ : device_t(mconfig, NETLIST_ANALOG_OUTPUT, "Netlist Analog Output", tag, owner, clock, "netlist_analog_output", __FILE__),
netlist_mame_sub_interface(*owner),
m_in("")
{
@@ -119,7 +119,7 @@ void netlist_mame_analog_output_t::device_start()
// ----------------------------------------------------------------------------------------
netlist_mame_int_input_t::netlist_mame_int_input_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, NETLIST_INT_INPUT, "Netlist Logic Input", tag, owner, clock, "netlist_logic_input", __FILE__),
+ : device_t(mconfig, NETLIST_INT_INPUT, "Netlist Integer Input", tag, owner, clock, "netlist_logic_input", __FILE__),
netlist_mame_sub_interface(*owner),
m_param(nullptr),
m_mask(0xffffffff),
diff --git a/src/devices/machine/netlist.h b/src/devices/machine/netlist.h
index b368389d123..540dc2a8697 100644
--- a/src/devices/machine/netlist.h
+++ b/src/devices/machine/netlist.h
@@ -35,12 +35,12 @@
netlist_analog_output_delegate(& _class :: _member, \
# _class "::" # _member, _class_tag, (_class *)nullptr) );
-#define MCFG_NETLIST_LOGIC_INPUT(_basetag, _tag, _name, _shift) \
- MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_LOGIC_INPUT, 0) \
+#define MCFG_NETLIST_LOGIC_INPUT(_basetag, _tag, _name, _shift) \
+ MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_LOGIC_INPUT, 0) \
netlist_mame_logic_input_t::static_set_params(*device, _name, _shift);
-#define MCFG_NETLIST_INT_INPUT(_basetag, _tag, _name, _shift, _mask) \
- MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_INT_INPUT, 0) \
+#define MCFG_NETLIST_INT_INPUT(_basetag, _tag, _name, _shift, _mask) \
+ MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_INT_INPUT, 0) \
netlist_mame_int_input_t::static_set_params(*device, _name, _mask, _shift);
#define MCFG_NETLIST_ROM(_basetag, _tag, _name, _region) \
@@ -55,6 +55,7 @@
MCFG_DEVICE_ADD(_basetag ":cout" # _chan, NETLIST_STREAM_OUTPUT, 0) \
netlist_mame_stream_output_t::static_set_params(*device, _chan, _name);
+#define MCFG_NETLIST_ROM_ACCESS(
#define NETLIST_LOGIC_PORT_CHANGED(_base, _tag) \
PORT_CHANGED_MEMBER(_base ":" _tag, netlist_mame_logic_input_t, input_changed, 0)
@@ -416,16 +417,22 @@ private:
// ----------------------------------------------------------------------------------------
-// netlist_mame_int_input_t
+// netlist_mame_rom_t
// ----------------------------------------------------------------------------------------
-class netlist_mame_int_input_t : public device_t,
- public netlist_mame_sub_interface
+class netlist_mame_rom_t : public device_t,
+ public netlist_mame_sub_interface
{
public:
// construction/destruction
- netlist_mame_int_input_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ netlist_mame_rom_t(const machine_config &mconfig, const char *tag, device_t *owner)
+ : device_t(mconfig, NETLIST_ROM, "Netlist ROM Interface", tag, owner, 0, "netlist_rom", __FILE__),
+ netlist_mame_sub_interface(*owner),
+ m_in("")
+ m_mask(0xffffffff),
+ m_shift(0),
+ { }
virtual ~netlist_mame_int_input_t() { }
static void static_set_params(device_t &device, const char *param_name, const uint32_t mask, const uint32_t shift);
@@ -461,6 +468,7 @@ private:
pstring m_param_name;
};
+
// ----------------------------------------------------------------------------------------
// netlist_mame_logic_input_t
// ----------------------------------------------------------------------------------------
@@ -798,6 +806,8 @@ extern const device_type NETLIST_INT_INPUT;
extern const device_type NETLIST_ROM_REGION;
extern const device_type NETLIST_ANALOG_OUTPUT;
+//extern const device_type NETLIST_LOGIC_OUTPUT;
+extern const device_type NETLIST_INT_OUTPUT;
extern const device_type NETLIST_STREAM_INPUT;
extern const device_type NETLIST_STREAM_OUTPUT;
diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile
index 36bce299de5..bbef3d58b97 100644
--- a/src/lib/netlist/build/makefile
+++ b/src/lib/netlist/build/makefile
@@ -70,6 +70,7 @@ NLOBJS := \
$(NLOBJ)/devices/nld_4066.o \
$(NLOBJ)/devices/nld_7448.o \
$(NLOBJ)/devices/nld_7450.o \
+ $(NLOBJ)/devices/nld_7473.o \
$(NLOBJ)/devices/nld_7474.o \
$(NLOBJ)/devices/nld_7483.o \
$(NLOBJ)/devices/nld_7490.o \
@@ -77,6 +78,7 @@ NLOBJS := \
$(NLOBJ)/devices/nld_74107.o \
$(NLOBJ)/devices/nld_74123.o \
$(NLOBJ)/devices/nld_74153.o \
+ $(NLOBJ)/devices/nld_74161.o \
$(NLOBJ)/devices/nld_74175.o \
$(NLOBJ)/devices/nld_74192.o \
$(NLOBJ)/devices/nld_74193.o \
@@ -86,6 +88,8 @@ NLOBJS := \
$(NLOBJ)/devices/nld_9310.o \
$(NLOBJ)/devices/nld_9312.o \
$(NLOBJ)/devices/nld_9316.o \
+ $(NLOBJ)/devices/nld_am2847.o \
+ $(NLOBJ)/devices/nld_dm9334.o \
$(NLOBJ)/devices/nld_mm5837.o \
$(NLOBJ)/devices/nld_ne555.o \
$(NLOBJ)/devices/nld_r2r_dac.o \
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp
index f70e229ddff..a9f087c1002 100644
--- a/src/lib/netlist/devices/net_lib.cpp
+++ b/src/lib/netlist/devices/net_lib.cpp
@@ -108,6 +108,8 @@ static void initialize_factory(factory_list_t &factory)
ENTRYX(nicDelay, NETDEV_DELAY, "-")
ENTRYX(7450, TTL_7450_ANDORINVERT, "+A,B,C,D")
ENTRYX(7448, TTL_7448, "+A,B,C,D,LTQ,BIQ,RBIQ")
+ ENTRYX(7473, TTL_7473, "+CLK1,J1,K1,CLRQ1,CLK2,J2,K2,CLRQ2")
+ ENTRYX(7473A, TTL_7473A, "+CLK1,J1,K1,CLRQ1,CLK2,J2,K2,CLRQ2")
ENTRYX(7474, TTL_7474, "+CLK,D,CLRQ,PREQ")
ENTRYX(7483, TTL_7483, "+A1,A2,A3,A4,B1,B2,B3,B4,C0")
ENTRYX(7490, TTL_7490, "+A,B,R1,R2,R91,R92")
@@ -116,15 +118,18 @@ static void initialize_factory(factory_list_t &factory)
ENTRYX(74107A, TTL_74107A, "+CLK,J,K,CLRQ")
ENTRYX(74123, TTL_74123, "-")
ENTRYX(74153, TTL_74153, "+C0,C1,C2,C3,A,B,G")
+ ENTRYX(74161, TTL_74175, "-")
ENTRYX(74175, TTL_74175, "-")
ENTRYX(74192, TTL_74192, "-")
ENTRYX(74193, TTL_74193, "-")
+ ENTRYX(DM9334, TTL_DM9334, "-")
//ENTRY(74279, TTL_74279, "-") // only dip available
ENTRYX(SN74LS629, SN74LS629, "CAP")
ENTRYX(82S16, TTL_82S16, "-")
ENTRYX(9310, TTL_9310, "-")
ENTRYX(9312, TTL_9312, "-")
ENTRYX(9316, TTL_9316, "+CLK,ENP,ENT,CLRQ,LOADQ,A,B,C,D")
+ ENTRYX(AM2847, TTL_AM2847, "-")
ENTRYX(CD4020, CD4020, "")
ENTRYX(CD4066_GATE, CD4066_GATE, "")
/* entries with suffix WI are legacy only */
@@ -135,6 +140,8 @@ static void initialize_factory(factory_list_t &factory)
ENTRYX(4538_dip, CD4538_DIP, "-")
ENTRYX(7448_dip, TTL_7448_DIP, "-")
ENTRYX(7450_dip, TTL_7450_DIP, "-")
+ ENTRYX(7473_dip, TTL_7473_DIP, "-")
+ ENTRYX(7473A_dip, TTL_7473A_DIP, "-")
ENTRYX(7474_dip, TTL_7474_DIP, "-")
ENTRYX(7483_dip, TTL_7483_DIP, "-")
ENTRYX(7490_dip, TTL_7490_DIP, "-")
@@ -151,6 +158,8 @@ static void initialize_factory(factory_list_t &factory)
ENTRYX(9310_dip, TTL_9310_DIP, "-")
ENTRYX(9312_dip, TTL_9312_DIP, "-")
ENTRYX(9316_dip, TTL_9316_DIP, "-")
+ ENTRYX(AM2847_dip, TTL_AM2847_DIP, "-")
+ ENTRYX(DM9334_dip, TTL_DM9334_DIP, "-")
ENTRYX(SN74LS629_dip, SN74LS629_DIP, "1.CAP1,2.CAP2")
ENTRYX(NE555_dip, NE555_DIP, "-")
ENTRYX(MM5837_dip, MM5837_DIP, "-")
diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h
index b87526bf391..b7248683f0a 100644
--- a/src/lib/netlist/devices/net_lib.h
+++ b/src/lib/netlist/devices/net_lib.h
@@ -18,6 +18,7 @@
#include "nld_4066.h"
#include "nld_7448.h"
#include "nld_7450.h"
+#include "nld_7473.h"
#include "nld_7474.h"
#include "nld_7483.h"
#include "nld_7490.h"
@@ -25,6 +26,7 @@
#include "nld_74107.h"
#include "nld_74123.h"
#include "nld_74153.h"
+#include "nld_74161.h"
#include "nld_74175.h"
#include "nld_74192.h"
#include "nld_74193.h"
@@ -35,6 +37,9 @@
#include "nld_9312.h"
#include "nld_9316.h"
+#include "nld_am2847.h"
+#include "nld_dm9334.h"
+
#include "nld_ne555.h"
#include "nld_mm5837.h"
diff --git a/src/lib/netlist/devices/nld_74161.cpp b/src/lib/netlist/devices/nld_74161.cpp
new file mode 100644
index 00000000000..b4621daa50f
--- /dev/null
+++ b/src/lib/netlist/devices/nld_74161.cpp
@@ -0,0 +1,131 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/*
+ * nld_74161.c
+ *
+ */
+
+#define MAXCNT 15
+
+#include "nld_74161.h"
+
+namespace netlist
+{
+ namespace devices
+ {
+ NETLIB_OBJECT(74161)
+ {
+ NETLIB_CONSTRUCTOR(74161)
+ , m_A(*this, "A")
+ , m_B(*this, "B")
+ , m_C(*this, "C")
+ , m_D(*this, "D")
+ , m_CLEAR(*this, "CLEAR")
+ , m_LOAD(*this, "LOAD")
+ , m_CLK(*this, "CLK")
+ , m_ENABLEP(*this, "ENABLEP")
+ , m_ENABLET(*this, "ENABLET")
+ , m_cnt(*this, "m_cnt", 0)
+ , m_last_CLK(*this, "m_last_CLK", 0)
+ , m_Q(*this, {{"QA", "QB", "QC", "QD"}})
+ , m_RCO(*this, "RCO")
+ {
+ }
+
+ NETLIB_RESETI();
+ NETLIB_UPDATEI();
+
+ protected:
+ logic_input_t m_A;
+ logic_input_t m_B;
+ logic_input_t m_C;
+ logic_input_t m_D;
+ logic_input_t m_CLEAR;
+ logic_input_t m_LOAD;
+ logic_input_t m_CLK;
+ logic_input_t m_ENABLEP;
+ logic_input_t m_ENABLET;
+
+ state_var<unsigned> m_cnt;
+ state_var<unsigned> m_last_CLK;
+
+ object_array_t<logic_output_t, 4> m_Q;
+ logic_output_t m_RCO;
+ };
+
+ NETLIB_OBJECT_DERIVED(74161_dip, 74161)
+ {
+ NETLIB_CONSTRUCTOR_DERIVED(74161_dip, 74161)
+ {
+ register_subalias("1", m_CLEAR);
+ register_subalias("2", m_CLK);
+ register_subalias("3", m_A);
+ register_subalias("4", m_B);
+ register_subalias("5", m_C);
+ register_subalias("6", m_D);
+ register_subalias("7", m_ENABLEP);
+
+ register_subalias("9", m_LOAD);
+ register_subalias("10", m_ENABLET);
+ register_subalias("11", m_Q[3]);
+ register_subalias("12", m_Q[2]);
+ register_subalias("13", m_Q[1]);
+ register_subalias("14", m_Q[0]);
+ register_subalias("15", m_RCO);
+
+ }
+ };
+
+ NETLIB_RESET(74161)
+ {
+ m_cnt = 0;
+ m_last_CLK = 0;
+ }
+
+ // FIXME: Timing
+ static const netlist_time delay[4] =
+ {
+ NLTIME_FROM_NS(40),
+ NLTIME_FROM_NS(40),
+ NLTIME_FROM_NS(40),
+ NLTIME_FROM_NS(40)
+ };
+
+ NETLIB_UPDATE(74161)
+ {
+ netlist_sig_t tRippleCarryOut = 0;
+ if (m_CLEAR())
+ {
+ m_cnt = 0;
+ }
+ else if (m_CLK() && !m_last_CLK)
+ {
+ if (m_LOAD())
+ {
+ m_cnt = (m_D() << 3) | (m_C() << 2)
+ | (m_B() << 1) | (m_A() << 0);
+ }
+ else if (m_ENABLET() && m_ENABLEP())
+ {
+ m_cnt++;
+ if (m_cnt > MAXCNT)
+ m_cnt = 0;
+ }
+ }
+
+ if (m_ENABLET() && (m_cnt == MAXCNT))
+ tRippleCarryOut = 1;
+
+ m_last_CLK = m_CLK();
+
+ for (std::size_t i=0; i<4; i++)
+ m_Q[i].push((m_cnt >> i) & 1, delay[i]);
+
+ m_RCO.push(tRippleCarryOut, NLTIME_FROM_NS(20)); //FIXME
+ }
+
+ NETLIB_DEVICE_IMPL(74161)
+ NETLIB_DEVICE_IMPL(74161_dip)
+
+ } //namespace devices
+} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_74161.h b/src/lib/netlist/devices/nld_74161.h
new file mode 100644
index 00000000000..507bcc5ea6b
--- /dev/null
+++ b/src/lib/netlist/devices/nld_74161.h
@@ -0,0 +1,36 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/*
+ * nld_74161.h
+ *
+ * DM74161: Synchronous 4-Bit Binary Counter with Clock
+ *
+ * +--------------+
+ * CLEAR |1 ++ 16| VCC
+ * CLK |2 15| RCO
+ * A |3 14| QA
+ * B |4 74161 13| QB
+ * C |5 12| QC
+ * D |6 11| QD
+ * ENABLEP |7 10| ENABLET
+ * GND |8 9| LOAD
+ * +--------------+
+ *
+ * RCO: Ripple carry output
+ *
+ * Naming convention attempts to follow National Semiconductor datasheet
+ *
+ */
+
+#ifndef NLD_74161_H_
+#define NLD_74161_H_
+
+#include "nl_setup.h"
+
+#define TTL_74161(name) \
+ NET_REGISTER_DEV(TTL_74161, name)
+
+#define TTL_74161_DIP(name) \
+ NET_REGISTER_DEV(TTL_74161_DIP, name)
+
+#endif /* NLD_74161_H_ */
diff --git a/src/lib/netlist/devices/nld_7473.cpp b/src/lib/netlist/devices/nld_7473.cpp
new file mode 100644
index 00000000000..9af4bd89374
--- /dev/null
+++ b/src/lib/netlist/devices/nld_7473.cpp
@@ -0,0 +1,198 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_74107.c
+ *
+ */
+
+#include "nld_74107.h"
+
+namespace netlist
+{
+ namespace devices
+ {
+ NETLIB_OBJECT(7473_flipflop_base)
+ {
+ NETLIB_CONSTRUCTOR(7473_flipflop_base)
+ , m_CLK(*this, "CLK")
+ , m_CLR(*this, "CLR")
+ , m_J(*this, "J")
+ , m_K(*this, "K")
+ , m_Q(*this, "Q")
+ , m_QQ(*this, "QQ")
+ , m_last_CLK(*this, "m_last_CLK", 0)
+ {
+ }
+
+ NETLIB_RESETI();
+
+ public:
+ logic_input_t m_CLK;
+ logic_input_t m_CLR;
+ logic_input_t m_J;
+ logic_input_t m_K;
+
+ logic_output_t m_Q;
+ logic_output_t m_QQ;
+
+ state_var<netlist_sig_t> m_last_CLK;
+
+ void tick();
+ };
+
+ NETLIB_RESET(7473_flipflop_base)
+ {
+ m_last_CLK = 0;
+ }
+
+ inline NETLIB_FUNC_VOID(7473_flipflop_base, tick, (void))
+ {
+ const netlist_time delay[2] = { NLTIME_FROM_NS(40), NLTIME_FROM_NS(25) };
+
+ const netlist_sig_t j = m_J();
+ const netlist_sig_t k = m_K();
+ const netlist_sig_t old_q = m_Q.net().Q();
+ netlist_sig_t q = old_q;
+ if (j && k)
+ {
+ q ^= 1;
+ }
+ else if (j)
+ {
+ q = 1;
+ }
+ else if (k)
+ {
+ q = 0;
+ }
+
+ if (q != old_q)
+ {
+ m_Q.push(q, delay[q]);
+ m_QQ.push(q ^ 1, delay[q ^ 1]);
+ }
+ }
+
+ NETLIB_OBJECT_DERIVED(7473_flipflop, 7473_flipflop_base)
+ {
+ public:
+ NETLIB_CONSTRUCTOR_DERIVED(7473_flipflop, 7473_flipflop_base) { }
+ NETLIB_UPDATEI();
+ };
+
+ NETLIB_UPDATE(7473_flipflop)
+ {
+ if (m_CLR())
+ {
+ m_Q.push(0, NLTIME_FROM_NS(40));
+ m_QQ.push(1, NLTIME_FROM_NS(25));
+ }
+ else if (m_CLK())
+ {
+ tick();
+ }
+
+ m_last_CLK = m_CLK();
+ }
+
+ NETLIB_OBJECT_DERIVED(7473A_flipflop, 7473_flipflop_base)
+ {
+ public:
+ NETLIB_CONSTRUCTOR_DERIVED(7473A_flipflop, 7473_flipflop_base) { }
+ NETLIB_UPDATEI();
+ };
+
+ NETLIB_UPDATE(7473A_flipflop)
+ {
+ if (m_CLR())
+ {
+ m_Q.push(0, NLTIME_FROM_NS(40));
+ m_QQ.push(1, NLTIME_FROM_NS(25));
+ }
+ else if (!m_CLK() && m_last_CLK)
+ {
+ tick();
+ }
+
+ m_last_CLK = m_CLK();
+ };
+
+ NETLIB_OBJECT(7473)
+ {
+ NETLIB_CONSTRUCTOR(7473)
+ , m_FF1(*this, "FF1")
+ , m_FF2(*this, "FF2")
+ { }
+
+ protected:
+ NETLIB_SUB(7473_flipflop) m_FF1;
+ NETLIB_SUB(7473_flipflop) m_FF2;
+ };
+
+ NETLIB_OBJECT(7473A)
+ {
+ NETLIB_CONSTRUCTOR(7473A)
+ , m_FF1(*this, "FF1")
+ , m_FF2(*this, "FF2")
+ { }
+
+ protected:
+ NETLIB_SUB(7473A_flipflop) m_FF1;
+ NETLIB_SUB(7473A_flipflop) m_FF2;
+ };
+
+ NETLIB_OBJECT_DERIVED(7473_dip, 7473)
+ {
+ NETLIB_CONSTRUCTOR_DERIVED(7473_dip, 7473)
+ {
+ register_subalias("1", m_FF1.m_CLK);
+ register_subalias("2", m_FF1.m_CLR);
+ register_subalias("3", m_FF1.m_K);
+ // register_subalias("4", ); ==> VCC
+ register_subalias("5", m_FF2.m_CLK);
+ register_subalias("6", m_FF2.m_CLR);
+ register_subalias("7", m_FF2.m_J);
+
+ register_subalias("8", m_FF2.m_QQ);
+ register_subalias("9", m_FF2.m_Q);
+ register_subalias("10", m_FF2.m_K);
+ // register_subalias("11", ); ==> GND
+ register_subalias("12", m_FF1.m_Q);
+ register_subalias("13", m_FF1.m_QQ);
+ register_subalias("14", m_FF1.m_J);
+ }
+ };
+
+ NETLIB_OBJECT_DERIVED(7473A_dip, 7473A)
+ {
+ NETLIB_CONSTRUCTOR_DERIVED(7473A_dip, 7473A)
+ {
+ register_subalias("1", m_FF1.m_CLK);
+ register_subalias("2", m_FF1.m_CLR);
+ register_subalias("3", m_FF1.m_K);
+ // register_subalias("4", ); ==> VCC
+ register_subalias("5", m_FF2.m_CLK);
+ register_subalias("6", m_FF2.m_CLR);
+ register_subalias("7", m_FF2.m_J);
+
+ register_subalias("8", m_FF2.m_QQ);
+ register_subalias("9", m_FF2.m_Q);
+ register_subalias("10", m_FF2.m_K);
+ // register_subalias("11", ); ==> GND
+ register_subalias("12", m_FF1.m_Q);
+ register_subalias("13", m_FF1.m_QQ);
+ register_subalias("14", m_FF1.m_J);
+ }
+ //NETLIB_RESETI();
+ //NETLIB_UPDATEI();
+
+ private:
+ };
+
+ NETLIB_DEVICE_IMPL(7473)
+ NETLIB_DEVICE_IMPL(7473A)
+ NETLIB_DEVICE_IMPL(7473_dip)
+ NETLIB_DEVICE_IMPL(7473A_dip)
+
+ } //namespace devices
+} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_7473.h b/src/lib/netlist/devices/nld_7473.h
new file mode 100644
index 00000000000..5dbb829fd98
--- /dev/null
+++ b/src/lib/netlist/devices/nld_7473.h
@@ -0,0 +1,75 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_7473.h
+ *
+ * DM7473: Dual Master-Slave J-K Flip-Flops with Clear and Complementary Outputs
+ * DM7473A: Dual Negative-Edge-Triggered Master-Slave J-K Flip-Flops with Clear and Complementary Outputs
+ *
+ * +--------------+
+ * CLK1 |1 ++ 14| J1
+ * CLR1 |2 13| QQ1
+ * K1 |3 12| Q1
+ * VCC |4 7473 11| GND
+ * CLK2 |5 10| K2
+ * CLR2 |6 9| Q2
+ * J2 |7 8| QQ2
+ * +--------------+
+ *
+ *
+ * Function table 73
+ *
+ * +-----+-----+-----+---++---+-----+
+ * | CLR | CLK | J | K || Q | QQ |
+ * +=====+=====+=====+===++===+=====+
+ * | 0 | X | X | X || 0 | 1 |
+ * | 1 | * | 0 | 0 || Q0| Q0Q |
+ * | 1 | * | 1 | 0 || 1 | 0 |
+ * | 1 | * | 0 | 1 || 0 | 1 |
+ * | 1 | * | 1 | 1 || TOGGLE |
+ * +-----+-----+-----+---++---+-----+
+ * _
+ * * = _| |_
+ *
+ * This is positive triggered, J and K
+ * are latched during clock high and
+ * transferred when CLK falls.
+ *
+ * Function table 73A
+ *
+ * +-----+-----+-----+---++---+-----+
+ * | CLR | CLK | J | K || Q | QQ |
+ * +=====+=====+=====+===++===+=====+
+ * | 0 | X | X | X || 0 | 1 |
+ * | 1 | F | 0 | 0 || Q0| Q0Q |
+ * | 1 | F | 1 | 0 || 1 | 0 |
+ * | 1 | F | 0 | 1 || 0 | 1 |
+ * | 1 | F | 1 | 1 || TOGGLE |
+ * | 1 | 1 | X | X || Q0| Q0Q |
+ * +-----+-----+-----+---++---+-----+
+ *
+ * THe 73A is negative triggered.
+ *
+ * Naming conventions follow Fairchild Semiconductor datasheet
+ *
+ */
+
+#ifndef NLD_7473_H_
+#define NLD_7473_H_
+
+#include "nl_setup.h"
+
+#define TTL_7473A(name, cCLK, cJ, cK, cCLR) \
+ NET_REGISTER_DEV(TTL_7473A, name) \
+ NET_CONNECT(name, CLK, cCLK) \
+ NET_CONNECT(name, J, cJ) \
+ NET_CONNECT(name, K, cK) \
+ NET_CONNECT(name, CLRQ, cCLRQ)
+
+#define TTL_74107(name, cCLK, cJ, cK, cCLRQ) \
+ TTL_74107A(name, cCLK, cJ, cK, cCLRQ)
+
+#define TTL_74107_DIP(name) \
+ NET_REGISTER_DEV(TTL_74107_DIP, name)
+
+#endif /* NLD_74107_H_ */
diff --git a/src/lib/netlist/devices/nld_am2847.cpp b/src/lib/netlist/devices/nld_am2847.cpp
new file mode 100644
index 00000000000..c685a7d4c82
--- /dev/null
+++ b/src/lib/netlist/devices/nld_am2847.cpp
@@ -0,0 +1,131 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/*
+ * nld_am2847.cpp
+ *
+ */
+
+#include "nld_am2847.h"
+
+namespace netlist
+{
+ namespace devices
+ {
+ NETLIB_OBJECT(Am2847_shifter)
+ {
+ NETLIB_CONSTRUCTOR(Am2847_shifter)
+ , m_RC(*this, "RC")
+ , m_IN(*this, "IN")
+ , m_buffer(*this, "m_buffer", 0)
+ , m_OUT(*this, "OUT")
+ {
+ }
+
+ public:
+ void shift();
+
+ logic_input_t m_RC;
+ logic_input_t m_IN;
+
+ state_var<uint_fast32_t[5]> m_buffer;
+
+ logic_output_t m_OUT;
+ };
+
+ NETLIB_OBJECT(AM2847)
+ {
+ NETLIB_CONSTRUCTOR(AM2847)
+ , m_A(*this, "A")
+ , m_B(*this, "B")
+ , m_C(*this, "C")
+ , m_D(*this, "D")
+ , m_CP(*this, "CP")
+ , m_last_CP(*this, "m_last_CP", 0)
+ {
+ register_subalias("OUTA", m_A.m_OUT);
+ register_subalias("OUTB", m_B.m_OUT);
+ register_subalias("OUTC", m_C.m_OUT);
+ register_subalias("OUTD", m_D.m_OUT);
+ register_subalias("INA", m_A.m_IN);
+ register_subalias("INB", m_B.m_IN);
+ register_subalias("INC", m_C.m_IN);
+ register_subalias("IND", m_D.m_IN);
+ register_subalias("RCA", m_A.m_RC);
+ register_subalias("RCB", m_B.m_RC);
+ register_subalias("RCC", m_C.m_RC);
+ register_subalias("RCD", m_D.m_RC);
+ }
+
+ NETLIB_RESETI();
+ NETLIB_UPDATEI();
+
+ protected:
+ NETLIB_SUB(Am2847_shifter) m_A;
+ NETLIB_SUB(Am2847_shifter) m_B;
+ NETLIB_SUB(Am2847_shifter) m_C;
+ NETLIB_SUB(Am2847_shifter) m_D;
+ logic_input_t m_CP;
+
+ state_var<uint_fast32_t> m_last_CP;
+ };
+
+ NETLIB_OBJECT_DERIVED(AM2847_dip, AM2847)
+ {
+ NETLIB_CONSTRUCTOR_DERIVED(AM2847_dip, AM2847)
+ {
+ register_subalias("1", m_A.m_OUT);
+ register_subalias("2", m_A.m_RC);
+ register_subalias("3", m_A.m_IN);
+ register_subalias("4", m_B.m_OUT);
+ register_subalias("5", m_B.m_RC);
+ register_subalias("6", m_B.m_IN);
+ register_subalias("7", m_C.m_OUT);
+
+ register_subalias("9", m_C.m_RC);
+ register_subalias("10", m_C.m_IN);
+ register_subalias("11", m_CP);
+ register_subalias("13", m_D.m_OUT);
+ register_subalias("14", m_D.m_RC);
+ register_subalias("15", m_D.m_IN);
+
+ }
+ };
+
+ NETLIB_RESET(AM2847)
+ {
+ m_last_CP = 0;
+ }
+
+ NETLIB_UPDATE(AM2847)
+ {
+ unsigned cp = m_CP();
+ if (cp != m_last_CP && cp != 0)
+ {
+ m_A.shift();
+ m_B.shift();
+ m_C.shift();
+ m_D.shift();
+ }
+
+ m_last_CP = m_CP();
+ }
+
+ inline NETLIB_FUNC_VOID(Am2847_shifter, shift, (void))
+ {
+ unsigned out = m_buffer[0] & 1;
+ uint_fast32_t in = (m_RC() ? out : m_IN());
+ for (std::size_t i=0; i < 5; i++)
+ {
+ uint_fast32_t shift_in = (i == 4) ? in : m_buffer[i + 1];
+ m_buffer[i] >>= 1;
+ m_buffer[i] |= shift_in << 31;
+ }
+
+ m_OUT.push(out, NLTIME_FROM_NS(200));
+ }
+
+ NETLIB_DEVICE_IMPL(AM2847)
+ NETLIB_DEVICE_IMPL(AM2847_dip)
+
+ } //namespace devices
+} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_am2847.h b/src/lib/netlist/devices/nld_am2847.h
new file mode 100644
index 00000000000..647d74e8691
--- /dev/null
+++ b/src/lib/netlist/devices/nld_am2847.h
@@ -0,0 +1,32 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/*
+ * nld_am2847.h
+ *
+ * Am2847: Quad 80-Bit Static Shift Register
+ *
+ * +--------------+
+ * OUTA |1 ++ 16| VSS
+ * RCA |2 15| IND
+ * INA |3 14| RCD
+ * OUTB |4 Am2847 13| OUTD
+ * RCB |5 12| VGG
+ * INB |6 11| CP
+ * OUTC |7 10| INC
+ * VDD |8 9| RCC
+ * +--------------+
+ *
+ */
+
+#ifndef NLD_AM2847_H_
+#define NLD_AM2847_H_
+
+#include "nl_setup.h"
+
+#define TTL_AM2847(name) \
+ NET_REGISTER_DEV(TTL_AM2847, name)
+
+#define TTL_AM2847_DIP(name) \
+ NET_REGISTER_DEV(TTL_AM2847_DIP, name)
+
+#endif /* NLD_AM2847_H_ */
diff --git a/src/lib/netlist/devices/nld_dm9334.cpp b/src/lib/netlist/devices/nld_dm9334.cpp
new file mode 100644
index 00000000000..028a9485dc2
--- /dev/null
+++ b/src/lib/netlist/devices/nld_dm9334.cpp
@@ -0,0 +1,152 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/*
+ * nld_dm9334.cpp
+ *
+ */
+
+#include "nld_dm9334.h"
+
+namespace netlist
+{
+ namespace devices
+ {
+ NETLIB_OBJECT(DM9334)
+ {
+ NETLIB_CONSTRUCTOR(DM9334)
+ , m_C(*this, "C")
+ , m_E(*this, "E")
+ , m_D(*this, "D")
+ , m_A(*this, {{"A0", "A1", "A2"}})
+ , m_Q(*this, {{"Q0", "Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7"}})
+ , m_last_C(*this, "m_last_C", 0)
+ , m_last_E(*this, "m_last_E", 0)
+ , m_last_D(*this, "m_last_D", 0)
+ , m_last_A(*this, "m_last_A", 0)
+ , m_last_Q(*this, "m_last_Q", 0)
+ {
+ }
+
+ NETLIB_RESETI();
+ NETLIB_UPDATEI();
+
+ protected:
+ logic_input_t m_C;
+ logic_input_t m_E;
+ logic_input_t m_D;
+ object_array_t<logic_input_t, 3> m_A;
+ object_array_t<logic_output_t, 8> m_Q;
+
+ state_var<unsigned> m_last_C;
+ state_var<unsigned> m_last_E;
+ state_var<unsigned> m_last_D;
+ state_var<unsigned> m_last_A;
+ state_var<unsigned> m_last_Q;
+ };
+
+ NETLIB_OBJECT_DERIVED(DM9334_dip, DM9334)
+ {
+ NETLIB_CONSTRUCTOR_DERIVED(DM9334_dip, DM9334)
+ {
+ register_subalias("1", m_A[0]);
+ register_subalias("2", m_A[1]);
+ register_subalias("3", m_A[2]);
+ register_subalias("4", m_Q[0]);
+ register_subalias("5", m_Q[1]);
+ register_subalias("6", m_Q[2]);
+ register_subalias("7", m_Q[3]);
+
+ register_subalias("9", m_Q[4]);
+ register_subalias("10", m_Q[5]);
+ register_subalias("11", m_Q[6]);
+ register_subalias("12", m_Q[7]);
+ register_subalias("13", m_D);
+ register_subalias("14", m_E);
+ register_subalias("15", m_C);
+
+ }
+ };
+
+ NETLIB_RESET(DM9334)
+ {
+ m_last_C = 0;
+ m_last_E = 0;
+ m_last_D = 0;
+ m_last_A = 0;
+ m_last_Q = 0;
+ }
+
+ NETLIB_UPDATE(DM9334)
+ {
+ uint_fast8_t a = 0;
+ for (std::size_t i=0; i<3; i++)
+ {
+ a |= (m_A[i]() << i);
+ }
+
+ netlist_time delay = NLTIME_FROM_NS(27); // Clear Low to High Level Output (not documented, making reasonable guess)
+
+ if (a != m_last_A)
+ {
+ delay = NLTIME_FROM_NS(35);
+ }
+ else if (m_D() != m_last_D)
+ {
+ if (m_last_D)
+ {
+ delay = NLTIME_FROM_NS(28);
+ }
+ else
+ {
+ delay = NLTIME_FROM_NS(35);
+ }
+ }
+ else if (m_E() != m_last_E)
+ {
+ if (m_last_E)
+ {
+ delay = NLTIME_FROM_NS(27);
+ }
+ else
+ {
+ delay = NLTIME_FROM_NS(28);
+ }
+ }
+
+ uint_fast8_t q = m_last_Q;
+
+ if (!m_C())
+ {
+ if (m_E())
+ {
+ q = 0;
+ }
+ else
+ {
+ q = m_D() << a;
+ }
+ }
+ else if(!m_E())
+ {
+ q &= ~(1 << a);
+ q |= (m_D() << a);
+ }
+
+ m_last_C = m_C();
+ m_last_E = m_E();
+ m_last_D = m_D();
+ m_last_A = a;
+
+ if (q != m_last_Q)
+ {
+ m_last_Q = q;
+ for (std::size_t i=0; i<8; i++)
+ m_Q[i].push((q >> i) & 1, delay);
+ }
+ }
+
+ NETLIB_DEVICE_IMPL(DM9334)
+ NETLIB_DEVICE_IMPL(DM9334_dip)
+
+ } //namespace devices
+} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_dm9334.h b/src/lib/netlist/devices/nld_dm9334.h
new file mode 100644
index 00000000000..e024dddebde
--- /dev/null
+++ b/src/lib/netlist/devices/nld_dm9334.h
@@ -0,0 +1,76 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/*
+ * nld_DM9334.h
+ *
+ * DM9334: 8-Bit Addressable Latch
+ *
+ * +--------------+
+ * A0 |1 ++ 16| VCC
+ * A1 |2 15| /C
+ * A2 |3 14| /E
+ * Q0 |4 DM9334 13| D
+ * Q1 |5 12| Q7
+ * Q2 |6 11| Q6
+ * Q3 |7 10| Q5
+ * GND |8 9| Q4
+ * +--------------+
+ *
+ * +---+---++---++---+---+---++---+---+---+---+---+---+---+---+
+ * | C | E || D || A0| A1| A2|| Q0| Q1| Q2| Q3| Q4| Q5| Q6| Q7|
+ * +===+===++===++===+===+===++===+===+===+===+===+===+===+===+
+ * | 1 | 0 || X || X | X | X || 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+ * +---+---++---++---+---+---++---+---+---+---+---+---+---+---+
+ * | 1 | 1 || 0 || 0 | 0 | 0 || 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 1 || 0 | 0 | 0 || 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 0 || 0 | 0 | 1 || 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 1 || 0 | 0 | 1 || 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 0 || 0 | 1 | 0 || 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 1 || 0 | 1 | 0 || 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 0 || 0 | 1 | 1 || 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 1 || 0 | 1 | 1 || 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 0 || 1 | 0 | 0 || 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 1 || 1 | 0 | 0 || 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
+ * | 1 | 1 || 0 || 1 | 0 | 1 || 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 1 || 1 | 0 | 1 || 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
+ * | 1 | 1 || 0 || 1 | 1 | 0 || 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 1 || 1 | 1 | 0 || 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
+ * | 1 | 1 || 0 || 1 | 1 | 1 || 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+ * | 1 | 1 || 1 || 1 | 1 | 1 || 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
+ * +---+---++---++---+---+---++---+---+---+---+---+---+---+---+
+ * | 0 | 0 || X || X | X | X || P | P | P | P | P | P | P | P |
+ * +---+---++---++---+---+---++---+---+---+---+---+---+---+---+
+ * | 0 | 1 || 0 || 0 | 0 | 0 || 0 | P | P | P | P | P | P | P |
+ * | 0 | 1 || 1 || 0 | 0 | 0 || 1 | P | P | P | P | P | P | P |
+ * | 0 | 1 || 0 || 0 | 0 | 1 || P | 0 | P | P | P | P | P | P |
+ * | 0 | 1 || 1 || 0 | 0 | 1 || P | 1 | P | P | P | P | P | P |
+ * | 0 | 1 || 0 || 0 | 1 | 0 || P | P | 0 | P | P | P | P | P |
+ * | 0 | 1 || 1 || 0 | 1 | 0 || P | P | 1 | P | P | P | P | P |
+ * | 0 | 1 || 0 || 0 | 1 | 1 || P | P | P | 0 | P | P | P | P |
+ * | 0 | 1 || 1 || 0 | 1 | 1 || P | P | P | 1 | P | P | P | P |
+ * | 0 | 1 || 0 || 1 | 0 | 0 || P | P | P | P | 0 | P | P | P |
+ * | 0 | 1 || 1 || 1 | 0 | 0 || P | P | P | P | 1 | P | P | P |
+ * | 0 | 1 || 0 || 1 | 0 | 1 || P | P | P | P | P | 0 | P | P |
+ * | 0 | 1 || 1 || 1 | 0 | 1 || P | P | P | P | P | 1 | P | P |
+ * | 0 | 1 || 0 || 1 | 1 | 0 || P | P | P | P | P | P | 0 | P |
+ * | 0 | 1 || 1 || 1 | 1 | 0 || P | P | P | P | P | P | 1 | P |
+ * | 0 | 1 || 0 || 1 | 1 | 1 || P | P | P | P | P | P | P | 0 |
+ * | 0 | 1 || 1 || 1 | 1 | 1 || P | P | P | P | P | P | P | 1 |
+ * +---+---++---++---+---+---++---+---+---+---+---+---+---+---+
+ *
+ * Naming convention attempts to follow Texas Instruments / National Semiconductor datasheet Literature Number SNOS382A
+ *
+ */
+
+#ifndef NLD_DM9334_H_
+#define NLD_DM9334_H_
+
+#include "nl_setup.h"
+
+#define TTL_DM9334(name) \
+ NET_REGISTER_DEV(TTL_DM9334, name)
+
+#define TTL_DM9334_DIP(name) \
+ NET_REGISTER_DEV(TTL_DM9334_DIP, name)
+
+#endif /* NLD_DM9334_H_ */