From 5739043ced4866b978f07aa5755683c1540617dd Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Wed, 13 May 2020 09:58:48 -0700 Subject: [PATCH] netlist: Add 74377/74378/74379 devices to netlist. [Aaron Giles] --- scripts/src/netlist.lua | 2 + src/lib/netlist/build/makefile | 3 +- src/lib/netlist/devices/net_lib.cpp | 3 + src/lib/netlist/devices/net_lib.h | 1 + src/lib/netlist/devices/nld_74377.cpp | 256 ++++++++++++++++++++++++++ src/lib/netlist/devices/nld_74377.h | 69 +++++++ src/lib/netlist/devices/nld_devinc.h | 15 ++ 7 files changed, 348 insertions(+), 1 deletion(-) create mode 100644 src/lib/netlist/devices/nld_74377.cpp create mode 100644 src/lib/netlist/devices/nld_74377.h diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index 566bb3ad624..905a081cd4a 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -180,6 +180,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_74193.h", MAME_DIR .. "src/lib/netlist/devices/nld_74194.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_74194.h", + MAME_DIR .. "src/lib/netlist/devices/nld_74377.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_74377.h", MAME_DIR .. "src/lib/netlist/devices/nld_74393.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_74393.h", MAME_DIR .. "src/lib/netlist/devices/nld_74365.cpp", 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 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 @@ -426,6 +426,21 @@ #define TTL_74365(name, pG1Q, pG2Q, pA1, pA2, pA3, pA4, pA5, pA6) \ 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 // ---------------------------------------------------------------------