From 72f4f2a20ef91a32a076c680f0e78212408055a1 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Tue, 13 Dec 2016 19:09:49 +0100 Subject: netlist: Device additions: [Ryan Holtz] * 74161 Synchronous 4-Bit Binary Counter with Clock * 7473 Dual Master-Slave J-K Flip-Flops with Clear and Complementary Outputs * Am2847 Quad 80-bit Static Shift Register * DM9334 8-bit Addressable Latch --- scripts/src/netlist.lua | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'scripts/src/netlist.lua') 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", -- cgit v1.2.3-70-g09d2 From 19165cfbfd0a5df163101f95323a567d519ea90c Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Tue, 13 Dec 2016 19:42:42 +0100 Subject: netlist: Added 82S126 1K-bit bipolar PROM device. [Ryan Holtz] --- scripts/src/netlist.lua | 2 + src/lib/netlist/build/makefile | 1 + src/lib/netlist/devices/net_lib.cpp | 2 + src/lib/netlist/devices/net_lib.h | 1 + src/lib/netlist/devices/nld_82S126.cpp | 85 ++++++++++++++++++++++++++++++++++ src/lib/netlist/devices/nld_82S126.h | 34 ++++++++++++++ 6 files changed, 125 insertions(+) create mode 100644 src/lib/netlist/devices/nld_82S126.cpp create mode 100644 src/lib/netlist/devices/nld_82S126.h (limited to 'scripts/src/netlist.lua') diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index 66c336a6dae..7a3bf069b84 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -129,6 +129,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_74ls629.h", MAME_DIR .. "src/lib/netlist/devices/nld_82S16.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_82S16.h", + MAME_DIR .. "src/lib/netlist/devices/nld_82S126.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_82S126.h", MAME_DIR .. "src/lib/netlist/devices/nld_9310.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_9310.h", MAME_DIR .. "src/lib/netlist/devices/nld_9312.cpp", diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index bbef3d58b97..f262f17fc1a 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -85,6 +85,7 @@ NLOBJS := \ $(NLOBJ)/devices/nld_74279.o \ $(NLOBJ)/devices/nld_74ls629.o \ $(NLOBJ)/devices/nld_82S16.o \ + $(NLOBJ)/devices/nld_82S126.o \ $(NLOBJ)/devices/nld_9310.o \ $(NLOBJ)/devices/nld_9312.o \ $(NLOBJ)/devices/nld_9316.o \ diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index a9f087c1002..02cfe14f692 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -126,6 +126,7 @@ static void initialize_factory(factory_list_t &factory) //ENTRY(74279, TTL_74279, "-") // only dip available ENTRYX(SN74LS629, SN74LS629, "CAP") ENTRYX(82S16, TTL_82S16, "-") + ENTRYX(82S126, TTL_82S126, "-") ENTRYX(9310, TTL_9310, "-") ENTRYX(9312, TTL_9312, "-") ENTRYX(9316, TTL_9316, "+CLK,ENP,ENT,CLRQ,LOADQ,A,B,C,D") @@ -154,6 +155,7 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(74193_dip, TTL_74193_DIP, "-") ENTRYX(74279_dip, TTL_74279_DIP, "-") ENTRYX(82S16_dip, TTL_82S16_DIP, "-") + ENTRYX(82S126_dip, TTL_82S126_DIP, "-") ENTRYX(9602_dip, TTL_9602_DIP, "-") ENTRYX(9310_dip, TTL_9310_DIP, "-") ENTRYX(9312_dip, TTL_9312_DIP, "-") diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index b7248683f0a..02d36402d01 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -33,6 +33,7 @@ #include "nld_74279.h" #include "nld_74ls629.h" #include "nld_82S16.h" +#include "nld_82S126.h" #include "nld_9310.h" #include "nld_9312.h" #include "nld_9316.h" diff --git a/src/lib/netlist/devices/nld_82S126.cpp b/src/lib/netlist/devices/nld_82S126.cpp new file mode 100644 index 00000000000..ac9e51587ca --- /dev/null +++ b/src/lib/netlist/devices/nld_82S126.cpp @@ -0,0 +1,85 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_82s126.cpp + * + */ + +#include "nld_82s126.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(82S126) + { + NETLIB_CONSTRUCTOR(82S126) + , m_A(*this, {{"A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7" }}) + , m_CE1Q(*this, "CE1Q") + , m_CE2Q(*this, "CE2Q") + , m_O(*this, {{"O1", "O2", "O3", "O4" }}) + , m_ROM(*this, "m_ROM", nullptr) + { + } + + NETLIB_UPDATEI(); + + protected: + object_array_t m_A; + logic_input_t m_CE1Q; + logic_input_t m_CE2Q; + object_array_t m_O; + + param_rom_t m_ROM; // 1024 bits, 32x32, used as 256x4 + }; + + NETLIB_OBJECT_DERIVED(82S126_dip, 82S126) + { + NETLIB_CONSTRUCTOR_DERIVED(82S126_dip, 82S126) + { + register_subalias("5", m_A[0]); + register_subalias("6", m_A[1]); + register_subalias("7", m_A[2]); + register_subalias("4", m_A[3]); + register_subalias("3", m_A[4]); + register_subalias("2", m_A[5]); + register_subalias("1", m_A[6]); + register_subalias("15", m_A[7]); + + register_subalias("13", m_CE1Q); + register_subalias("14", m_CE2Q); + + register_subalias("12", m_O[0]); + register_subalias("11", m_O[1]); + register_subalias("10", m_O[2]); + register_subalias("9", m_O[3]); + } + }; + + // FIXME: timing! + NETLIB_UPDATE(82S126) + { + unsigned o = 0xf; + + netlist_time delay = NLTIME_FROM_NS(25); + if (m_CE1Q() && m_CE1Q()) + { + unsigned a = 0; + for (std::size_t i=0; i<8; i++) + a |= (m_A[i]() << i); + + o = m_ROM()[a]; + + delay = NLTIME_FROM_NS(50); + } + + // FIXME: Outputs are tristate. This needs to be properly implemented + for (std::size_t i=0; i<4; i++) + m_O[i].push((o >> i) & 1, delay); + } + + NETLIB_DEVICE_IMPL(82S126) + NETLIB_DEVICE_IMPL(82S126_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_82S126.h b/src/lib/netlist/devices/nld_82S126.h new file mode 100644 index 00000000000..3ecfd985faf --- /dev/null +++ b/src/lib/netlist/devices/nld_82S126.h @@ -0,0 +1,34 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_82S126.h + * + * 82S126: 1K-bit TTL bipolar PROM + * + * +--------------+ + * A6 |1 ++ 16| VCC + * A5 |2 15| Q7 + * A4 |3 14| CE2Q + * A3 |4 82S126 13| CE1Q + * A0 |5 12| O1 + * A1 |6 11| O2 + * A2 |7 10| O3 + * GND |8 9| O4 + * +--------------+ + * + * + * Naming conventions follow Signetics datasheet + * + */ + +#ifndef NLD_82S126_H_ +#define NLD_82S126_H_ + +#include "nl_setup.h" + +#define TTL_82S126(name) \ + NET_REGISTER_DEV(TTL_82S126, name) +#define TTL_82S126_DIP(name) \ + NET_REGISTER_DEV(TTL_82S126_DIP, name) + +#endif /* NLD_82S126_H_ */ -- cgit v1.2.3-70-g09d2 From 32d0f10418ab2871acb0e8060d0c9ee6da5ef1b1 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Tue, 13 Dec 2016 21:52:46 +0100 Subject: -netlist: Added 74174 Hex D-Type Flip-Flop with Clear [Ryan Holtz] --- scripts/src/netlist.lua | 2 + src/lib/netlist/build/makefile | 1 + src/lib/netlist/devices/net_lib.cpp | 5 +- src/lib/netlist/devices/net_lib.h | 1 + src/lib/netlist/devices/nld_74174.cpp | 140 +++++++++++++++++++++++++++++++++ src/lib/netlist/devices/nld_74174.h | 47 +++++++++++ src/lib/netlist/devices/nld_82S126.cpp | 2 +- 7 files changed, 196 insertions(+), 2 deletions(-) create mode 100644 src/lib/netlist/devices/nld_74174.cpp create mode 100644 src/lib/netlist/devices/nld_74174.h (limited to 'scripts/src/netlist.lua') diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index 7a3bf069b84..0e9877e2bcc 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -117,6 +117,8 @@ project "netlist" 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_74174.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_74174.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", diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index f262f17fc1a..2c38085dc07 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -79,6 +79,7 @@ NLOBJS := \ $(NLOBJ)/devices/nld_74123.o \ $(NLOBJ)/devices/nld_74153.o \ $(NLOBJ)/devices/nld_74161.o \ + $(NLOBJ)/devices/nld_74174.o \ $(NLOBJ)/devices/nld_74175.o \ $(NLOBJ)/devices/nld_74192.o \ $(NLOBJ)/devices/nld_74193.o \ diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index 02cfe14f692..ee3cd54c073 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -118,7 +118,8 @@ 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(74161, TTL_74161, "-") + ENTRYX(74174, TTL_74174, "-") ENTRYX(74175, TTL_74175, "-") ENTRYX(74192, TTL_74192, "-") ENTRYX(74193, TTL_74193, "-") @@ -150,6 +151,8 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(74107_dip, TTL_74107_DIP, "-") ENTRYX(74123_dip, TTL_74123_DIP, "-") ENTRYX(74153_dip, TTL_74153_DIP, "-") + ENTRYX(74161_dip, TTL_74161_DIP, "-") + ENTRYX(74174_dip, TTL_74174_DIP, "-") ENTRYX(74175_dip, TTL_74175_DIP, "-") ENTRYX(74192_dip, TTL_74192_DIP, "-") ENTRYX(74193_dip, TTL_74193_DIP, "-") diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index 02d36402d01..cc678b09f3a 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -27,6 +27,7 @@ #include "nld_74123.h" #include "nld_74153.h" #include "nld_74161.h" +#include "nld_74174.h" #include "nld_74175.h" #include "nld_74192.h" #include "nld_74193.h" diff --git a/src/lib/netlist/devices/nld_74174.cpp b/src/lib/netlist/devices/nld_74174.cpp new file mode 100644 index 00000000000..64698423435 --- /dev/null +++ b/src/lib/netlist/devices/nld_74174.cpp @@ -0,0 +1,140 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * nld_74174.cpp + * + */ + +#include "nld_74174.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(74174_sub) + { + NETLIB_CONSTRUCTOR(74174_sub) + , m_CLK(*this, "CLK") + , m_Q(*this, {{"Q1", "Q2", "Q3", "Q4", "Q5", "Q6"}}) + , m_clrq(*this, "m_clr", 0) + , m_data(*this, "m_data", 0) + { + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + public: + logic_input_t m_CLK; + object_array_t m_Q; + + state_var m_clrq; + state_var m_data; + }; + + NETLIB_OBJECT(74174) + { + NETLIB_CONSTRUCTOR(74174) + , m_sub(*this, "sub") + , m_D(*this, {{"D1", "D2", "D3", "D4", "D5", "D6"}}) + , m_CLRQ(*this, "CLRQ") + { + register_subalias("CLK", m_sub.m_CLK); + + register_subalias("Q1", m_sub.m_Q[0]); + register_subalias("Q2", m_sub.m_Q[1]); + register_subalias("Q3", m_sub.m_Q[2]); + register_subalias("Q4", m_sub.m_Q[3]); + register_subalias("Q5", m_sub.m_Q[4]); + register_subalias("Q6", m_sub.m_Q[5]); + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + protected: + NETLIB_SUB(74174_sub) m_sub; + object_array_t m_D; + logic_input_t m_CLRQ; + }; + + NETLIB_OBJECT_DERIVED(74174_dip, 74174) + { + NETLIB_CONSTRUCTOR_DERIVED(74174_dip, 74174) + { + register_subalias("1", m_CLRQ); + register_subalias("9", m_sub.m_CLK); + + register_subalias("3", m_D[0]); + register_subalias("2", m_sub.m_Q[0]); + + register_subalias("4", m_D[1]); + register_subalias("5", m_sub.m_Q[1]); + + register_subalias("6", m_D[2]); + register_subalias("7", m_sub.m_Q[2]); + + register_subalias("11", m_D[3]); + register_subalias("10", m_sub.m_Q[3]); + + register_subalias("13", m_D[4]); + register_subalias("12", m_sub.m_Q[4]); + + register_subalias("14", m_D[5]); + register_subalias("15", m_sub.m_Q[5]); + } + }; + + NETLIB_RESET(74174_sub) + { + m_CLK.set_state(logic_t::STATE_INP_LH); + m_clrq = 0; + m_data = 0xFF; + } + + NETLIB_UPDATE(74174_sub) + { + if (m_clrq) + { + for (std::size_t i=0; i<6; i++) + { + netlist_sig_t d = (m_data >> i) & 1; + m_Q[i].push(d, NLTIME_FROM_NS(25)); + } + m_CLK.inactivate(); + } + } + + NETLIB_UPDATE(74174) + { + uint_fast8_t d = 0; + for (std::size_t i=0; i<6; i++) + { + d |= (m_D[i]() << i); + } + m_sub.m_clrq = m_CLRQ(); + if (!m_sub.m_clrq) + { + for (std::size_t i=0; i<6; i++) + { + m_sub.m_Q[i].push(0, NLTIME_FROM_NS(40)); + } + m_sub.m_data = 0; + } else if (d != m_sub.m_data) + { + m_sub.m_data = d; + m_sub.m_CLK.activate_lh(); + } + } + + + NETLIB_RESET(74174) + { + //m_sub.do_reset(); + } + + NETLIB_DEVICE_IMPL(74174) + NETLIB_DEVICE_IMPL(74174_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_74174.h b/src/lib/netlist/devices/nld_74174.h new file mode 100644 index 00000000000..785902f8875 --- /dev/null +++ b/src/lib/netlist/devices/nld_74174.h @@ -0,0 +1,47 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * nld_74174.h + * + * DM74174: hEX D Flip-Flops with Clear + * + * +--------------+ + * CLR |1 ++ 16| VCC + * Q1 |2 15| Q6 + * D1 |3 14| D6 + * D2 |4 74174 13| D5 + * Q2 |5 12| Q5 + * D3 |6 11| D4 + * Q3 |7 10| Q4 + * GND |8 9| CLK + * +--------------+ + * + * +-----+-----+---++---+-----+ + * | CLR | CLK | D || Q | QQ | + * +=====+=====+===++===+=====+ + * | 0 | X | X || 0 | 1 | + * | 1 | R | 1 || 1 | 0 | + * | 1 | R | 0 || 0 | 1 | + * | 1 | 0 | X || Q0| Q0Q | + * +-----+-----+---++---+-----+ + * + * Q0 The output logic level of Q before the indicated input conditions were established + * + * R: 0 -> 1 + * + * Naming conventions follow National Semiconductor datasheet + * + */ + +#ifndef NLD_74174_H_ +#define NLD_74174_H_ + +#include "nl_setup.h" + +#define TTL_74174(name) \ + NET_REGISTER_DEV(TTL_74174, name) +#define TTL_74174_DIP(name) \ + NET_REGISTER_DEV(TTL_74174_DIP, name) + + +#endif /* NLD_74174_H_ */ diff --git a/src/lib/netlist/devices/nld_82S126.cpp b/src/lib/netlist/devices/nld_82S126.cpp index ac9e51587ca..29c2813c751 100644 --- a/src/lib/netlist/devices/nld_82S126.cpp +++ b/src/lib/netlist/devices/nld_82S126.cpp @@ -28,7 +28,7 @@ namespace netlist object_array_t m_A; logic_input_t m_CE1Q; logic_input_t m_CE2Q; - object_array_t m_O; + object_array_t m_O; param_rom_t m_ROM; // 1024 bits, 32x32, used as 256x4 }; -- cgit v1.2.3-70-g09d2 From e3e38025c35619379af5d3696da24099debf5981 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Tue, 13 Dec 2016 23:19:54 +0100 Subject: -netlist: Added 2716 16 Kbit (2 Kbit x 8) UV EPROM. [Ryan Holtz] --- scripts/src/netlist.lua | 2 + src/lib/netlist/build/makefile | 1 + src/lib/netlist/devices/net_lib.cpp | 4 +- src/lib/netlist/devices/net_lib.h | 1 + src/lib/netlist/devices/nld_2716.cpp | 98 ++++++++++++++++++++++++++++++++++++ src/lib/netlist/devices/nld_2716.h | 38 ++++++++++++++ 6 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 src/lib/netlist/devices/nld_2716.cpp create mode 100644 src/lib/netlist/devices/nld_2716.h (limited to 'scripts/src/netlist.lua') diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index 0e9877e2bcc..0d9fa86f828 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -91,6 +91,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/solver/nld_ms_w.h", MAME_DIR .. "src/lib/netlist/solver/nld_ms_direct_lu.h", MAME_DIR .. "src/lib/netlist/solver/vector_base.h", + MAME_DIR .. "src/lib/netlist/devices/nld_2716.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_2716.h", MAME_DIR .. "src/lib/netlist/devices/nld_4020.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_4020.h", MAME_DIR .. "src/lib/netlist/devices/nld_4066.cpp", diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index 2c38085dc07..a0634ebc597 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -66,6 +66,7 @@ NLOBJS := \ $(NLOBJ)/analog/nld_switches.o \ $(NLOBJ)/analog/nld_twoterm.o \ $(NLOBJ)/analog/nld_opamps.o \ + $(NLOBJ)/devices/nld_2716.o \ $(NLOBJ)/devices/nld_4020.o \ $(NLOBJ)/devices/nld_4066.o \ $(NLOBJ)/devices/nld_7448.o \ diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index ee3cd54c073..c21a127b3f3 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -105,7 +105,8 @@ static void initialize_factory(factory_list_t &factory) ENTRY(switch1, SWITCH, "-") ENTRY(switch2, SWITCH2, "-") ENTRYX(nicRSFF, NETDEV_RSFF, "+S,R") - ENTRYX(nicDelay, NETDEV_DELAY, "-") + ENTRYX(nicDelay, NETDEV_DELAY, "-") + ENTRYX(2716, EPROM_2716, "-") 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") @@ -139,6 +140,7 @@ static void initialize_factory(factory_list_t &factory) //ENTRY(4066, CD_4066, "+A,B") ENTRYX(NE555, NE555, "-") ENTRYX(r2r_dac, R2R_DAC, "+VIN,R,N") + ENTRYX(2716_dip, EPROM_2716_DIP, "-") ENTRYX(4538_dip, CD4538_DIP, "-") ENTRYX(7448_dip, TTL_7448_DIP, "-") ENTRYX(7450_dip, TTL_7450_DIP, "-") diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index cc678b09f3a..6098a6718fd 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -14,6 +14,7 @@ #include "nl_base.h" #include "nld_system.h" +#include "nld_2716.h" #include "nld_4020.h" #include "nld_4066.h" #include "nld_7448.h" diff --git a/src/lib/netlist/devices/nld_2716.cpp b/src/lib/netlist/devices/nld_2716.cpp new file mode 100644 index 00000000000..75176119ae7 --- /dev/null +++ b/src/lib/netlist/devices/nld_2716.cpp @@ -0,0 +1,98 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_2716.cpp + * + */ + +#include "nld_2716.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(2716) + { + NETLIB_CONSTRUCTOR(2716) + , m_A(*this, {{ "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10" }}) + , m_GQ(*this, "GQ") + , m_EPQ(*this, "EPQ") + , m_Q(*this, {{ "Q0", "Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7" }}) + , m_last_EPQ(*this, "m_last_EPQ", 1) + , m_ROM(*this, "m_ROM", nullptr) + { + } + + NETLIB_UPDATEI(); + + protected: + object_array_t m_A; + logic_input_t m_GQ; + logic_input_t m_EPQ; + object_array_t m_Q; + + state_var m_last_EPQ; + + param_rom_t m_ROM; // 16 Kbits, used as 2 Kbit x 8 + }; + + NETLIB_OBJECT_DERIVED(2716_dip, 2716) + { + NETLIB_CONSTRUCTOR_DERIVED(2716_dip, 2716) + { + register_subalias("8", m_A[0]); + register_subalias("7", m_A[1]); + register_subalias("6", m_A[2]); + register_subalias("5", m_A[3]); + register_subalias("4", m_A[4]); + register_subalias("3", m_A[5]); + register_subalias("2", m_A[6]); + register_subalias("1", m_A[7]); + register_subalias("23", m_A[8]); + register_subalias("22", m_A[9]); + register_subalias("19", m_A[10]); + + register_subalias("20", m_GQ); + register_subalias("18", m_EPQ); + + register_subalias("9", m_Q[0]); + register_subalias("10", m_Q[1]); + register_subalias("11", m_Q[2]); + register_subalias("13", m_Q[3]); + register_subalias("14", m_Q[4]); + register_subalias("15", m_Q[5]); + register_subalias("16", m_Q[6]); + register_subalias("17", m_Q[7]); + } + }; + + // FIXME: timing! + NETLIB_UPDATE(2716) + { + unsigned q = 0xff; + + netlist_time delay = NLTIME_FROM_NS(450); + if (!m_GQ() && !m_EPQ()) + { + unsigned a = 0; + for (std::size_t i=0; i<11; i++) + a |= (m_A[i]() << i); + + q = m_ROM()[a]; + + if (m_last_EPQ) + delay = NLTIME_FROM_NS(120); + } + + m_last_EPQ = m_EPQ(); + + // FIXME: Outputs are tristate. This needs to be properly implemented + for (std::size_t i=0; i<8; i++) + m_Q[i].push((q >> i) & 1, delay); + } + + NETLIB_DEVICE_IMPL(2716) + NETLIB_DEVICE_IMPL(2716_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_2716.h b/src/lib/netlist/devices/nld_2716.h new file mode 100644 index 00000000000..144bbf04658 --- /dev/null +++ b/src/lib/netlist/devices/nld_2716.h @@ -0,0 +1,38 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_82S126.h + * + * 2716: 16 Kbit (2Kb x 8) UV EPROM + * + * +----------------+ + * A7 |1 ++ 24| VCC + * A6 |2 23| A8 + * A5 |3 22| A9 + * A4 |4 2716 21| VPP + * A3 |5 20| GQ + * A2 |6 19| A10 + * A1 |7 18| EPQ + * A0 |8 17| Q7 + * Q0 |9 16| Q6 + * Q1 |10 15| Q5 + * Q2 |11 14| Q4 + * VSS |12 13| Q3 + * +----------------+ + * + * + * Naming conventions follow STMicro datasheet + * + */ + +#ifndef NLD_2716_H_ +#define NLD_2716_H_ + +#include "nl_setup.h" + +#define TTL_2716(name) \ + NET_REGISTER_DEV(TTL_2716, name) +#define TTL_2716_DIP(name) \ + NET_REGISTER_DEV(TTL_2716_DIP, name) + +#endif /* NLD_2716_H_ */ -- cgit v1.2.3-70-g09d2 From 4a71e6bdcf7dd3329d331b6700b65f53eb7b0291 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Wed, 14 Dec 2016 00:11:35 +0100 Subject: -netlist: Added 74166 Parallel-Load 8-Bit Shift Register device. [Ryan Holtz] --- scripts/src/netlist.lua | 2 + src/lib/netlist/build/makefile | 1 + src/lib/netlist/devices/net_lib.cpp | 2 + src/lib/netlist/devices/net_lib.h | 1 + src/lib/netlist/devices/nld_74166.cpp | 136 ++++++++++++++++++++++++++++++++++ src/lib/netlist/devices/nld_74166.h | 37 +++++++++ 6 files changed, 179 insertions(+) create mode 100644 src/lib/netlist/devices/nld_74166.cpp create mode 100644 src/lib/netlist/devices/nld_74166.h (limited to 'scripts/src/netlist.lua') diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index 0d9fa86f828..b5fe059d074 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -119,6 +119,8 @@ project "netlist" 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_74166.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_74166.h", MAME_DIR .. "src/lib/netlist/devices/nld_74174.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_74174.h", MAME_DIR .. "src/lib/netlist/devices/nld_74175.cpp", diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index a0634ebc597..046ae395d93 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -80,6 +80,7 @@ NLOBJS := \ $(NLOBJ)/devices/nld_74123.o \ $(NLOBJ)/devices/nld_74153.o \ $(NLOBJ)/devices/nld_74161.o \ + $(NLOBJ)/devices/nld_74166.o \ $(NLOBJ)/devices/nld_74174.o \ $(NLOBJ)/devices/nld_74175.o \ $(NLOBJ)/devices/nld_74192.o \ diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index c21a127b3f3..c647e986ac2 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -120,6 +120,7 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(74123, TTL_74123, "-") ENTRYX(74153, TTL_74153, "+C0,C1,C2,C3,A,B,G") ENTRYX(74161, TTL_74161, "-") + ENTRYX(74166, TTL_74166, "-") ENTRYX(74174, TTL_74174, "-") ENTRYX(74175, TTL_74175, "-") ENTRYX(74192, TTL_74192, "-") @@ -154,6 +155,7 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(74123_dip, TTL_74123_DIP, "-") ENTRYX(74153_dip, TTL_74153_DIP, "-") ENTRYX(74161_dip, TTL_74161_DIP, "-") + ENTRYX(74166_dip, TTL_74166_DIP, "-") ENTRYX(74174_dip, TTL_74174_DIP, "-") ENTRYX(74175_dip, TTL_74175_DIP, "-") ENTRYX(74192_dip, TTL_74192_DIP, "-") diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index 6098a6718fd..66c7f57d842 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -28,6 +28,7 @@ #include "nld_74123.h" #include "nld_74153.h" #include "nld_74161.h" +#include "nld_74166.h" #include "nld_74174.h" #include "nld_74175.h" #include "nld_74192.h" diff --git a/src/lib/netlist/devices/nld_74166.cpp b/src/lib/netlist/devices/nld_74166.cpp new file mode 100644 index 00000000000..6ba7adcefcd --- /dev/null +++ b/src/lib/netlist/devices/nld_74166.cpp @@ -0,0 +1,136 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_74166.c + * + */ + +#include "nld_74166.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(74166) + { + NETLIB_CONSTRUCTOR(74166) + , m_DATA(*this, {{ "H", "G", "F", "E", "D", "C", "B", "A" }}) + , m_SER(*this, "SER") + , m_CLRQ(*this, "CLRQ") + , m_SH_LDQ(*this, "SH_LDQ") + , m_CLK(*this, "CLK") + , m_CLKINH(*this, "CLKINH") + , m_QH(*this, "QH") + , m_shifter(*this, "m_shifter", 0) + , m_last_CLRQ(*this, "m_last_CLRQ", 0) + , m_last_CLK(*this, "m_last_CLK", 0) + { + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + protected: + object_array_t m_DATA; + logic_input_t m_SER; + logic_input_t m_CLRQ; + logic_input_t m_SH_LDQ; + logic_input_t m_CLK; + logic_input_t m_CLKINH; + logic_output_t m_QH; + + state_var m_shifter; + state_var m_last_CLRQ; + state_var m_last_CLK; + }; + + NETLIB_OBJECT_DERIVED(74166_dip, 74166) + { + NETLIB_CONSTRUCTOR_DERIVED(74166_dip, 74166) + { + register_subalias("1", m_SER); + register_subalias("2", m_DATA[7]); + register_subalias("3", m_DATA[6]); + register_subalias("4", m_DATA[5]); + register_subalias("5", m_DATA[4]); + register_subalias("6", m_CLKINH); + register_subalias("7", m_CLK); + + register_subalias("9", m_CLRQ); + register_subalias("10", m_DATA[3]); + register_subalias("11", m_DATA[2]); + register_subalias("12", m_DATA[1]); + register_subalias("13", m_QH); + register_subalias("14", m_DATA[0]); + register_subalias("15", m_SH_LDQ); + + } + }; + + NETLIB_RESET(74166) + { + m_shifter = 0; + m_last_CLRQ = 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(74166) + { + netlist_sig_t old_qh = m_QH.net().Q(); + netlist_sig_t qh = 0; + + netlist_time delay = NLTIME_FROM_NS(26); + if (m_CLRQ()) + { + bool clear_unset = !m_last_CLRQ(); + if (clear_unset) + { + delay = NLTIME_FROM_NS(35); + } + + if (!m_CLK() || m_CLKINH()) + { + qh = old_qh; + } + else if (!m_last_CLK) + { + if (!m_SH_LDQ()) + { + m_shifter = 0; + for (std::size_t i=0; i<8; i++) + m_shifter |= (m_DATA[i]() << i); + } + else + { + unsigned high_bit = m_SER() ? 0x80 : 0; + m_shifter = high_bit | (m_shifter >> 1); + } + + qh = m_shifter & 1; + if (!qh && !clear_unset) + { + delay = NLTIME_FROM_NS(30); + } + } + } + + m_last_CLRQ = m_CLRQ(); + m_last_CLK = m_CLK(); + + m_QH.push(qh, delay); //FIXME + } + + NETLIB_DEVICE_IMPL(74166) + NETLIB_DEVICE_IMPL(74166_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_74166.h b/src/lib/netlist/devices/nld_74166.h new file mode 100644 index 00000000000..348559fdb6a --- /dev/null +++ b/src/lib/netlist/devices/nld_74166.h @@ -0,0 +1,37 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan 161 +/* + * nld_74166.h + * + * 74166: Parallel-Load 8-Bit Shift Register + * + * +--------------+ + * SER |1 ++ 16| VCC + * A |2 15| SH/LDQ + * B |3 14| H + * C |4 74166 13| QH + * D |5 12| G + * CLKINH |6 11| F + * CLK |7 10| E + * GND |8 9| CLRQ + * +--------------+ + * + * SH/LDQ: Shift / !Load + * CLKINH: Clock Inhibit + * + * Naming convention attempts to follow Texas Instruments datasheet + * + */ + +#ifndef NLD_74166_H_ +#define NLD_74166_H_ + +#include "nl_setup.h" + +#define TTL_74166(name) \ + NET_REGISTER_DEV(TTL_74166, name) + +#define TTL_74166_DIP(name) \ + NET_REGISTER_DEV(TTL_74166_DIP, name) + +#endif /* NLD_74166_H_ */ -- cgit v1.2.3-70-g09d2 From 66abfa8e6d0ebe032ee374a11078510bc4254929 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Wed, 21 Dec 2016 20:14:48 +0100 Subject: -netlist: Added shared RAM pointer, for use by netlist RAM devices which need updating by non-netlist driver code. [Ryan Holtz] -netlist: Added new devices: [Ryan Holtz] * Intel 2102A 1Kbit (1024 x 1) Static RAM * 74365 Hex Bus Driver with 3-State Outputs * Generic 2- and 3-terminal Tristate device * Note: Tristate device and 74365 do not actually tristate, they are simply a way of combining multiple outputs + chip enables. --- scripts/src/netlist.lua | 6 ++ src/devices/machine/netlist.cpp | 54 +++++++++++++--- src/devices/machine/netlist.h | 57 +++++++++++++---- src/lib/netlist/build/makefile | 3 + src/lib/netlist/devices/net_lib.cpp | 6 ++ src/lib/netlist/devices/net_lib.h | 4 ++ src/lib/netlist/devices/nld_2102A.cpp | 103 +++++++++++++++++++++++++++++++ src/lib/netlist/devices/nld_2102A.h | 48 ++++++++++++++ src/lib/netlist/devices/nld_2716.cpp | 31 +++++----- src/lib/netlist/devices/nld_2716.h | 32 +++++++--- src/lib/netlist/devices/nld_74365.cpp | 74 ++++++++++++++++++++++ src/lib/netlist/devices/nld_74365.h | 44 +++++++++++++ src/lib/netlist/devices/nld_82S126.cpp | 22 +++++-- src/lib/netlist/devices/nld_tristate.cpp | 76 +++++++++++++++++++++++ src/lib/netlist/devices/nld_tristate.h | 31 ++++++++++ src/lib/netlist/nl_base.cpp | 2 +- src/lib/netlist/nl_base.h | 4 +- src/lib/netlist/nl_setup.cpp | 4 +- src/lib/netlist/prg/nltool.cpp | 4 +- 19 files changed, 551 insertions(+), 54 deletions(-) create mode 100644 src/lib/netlist/devices/nld_2102A.cpp create mode 100644 src/lib/netlist/devices/nld_2102A.h create mode 100644 src/lib/netlist/devices/nld_74365.cpp create mode 100644 src/lib/netlist/devices/nld_74365.h create mode 100644 src/lib/netlist/devices/nld_tristate.cpp create mode 100644 src/lib/netlist/devices/nld_tristate.h (limited to 'scripts/src/netlist.lua') diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index b5fe059d074..a0ac5045565 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -91,6 +91,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/solver/nld_ms_w.h", MAME_DIR .. "src/lib/netlist/solver/nld_ms_direct_lu.h", MAME_DIR .. "src/lib/netlist/solver/vector_base.h", + MAME_DIR .. "src/lib/netlist/devices/nld_2102A.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_2102A.h", MAME_DIR .. "src/lib/netlist/devices/nld_2716.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_2716.h", MAME_DIR .. "src/lib/netlist/devices/nld_4020.cpp", @@ -131,6 +133,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_74193.h", MAME_DIR .. "src/lib/netlist/devices/nld_74279.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_74279.h", + MAME_DIR .. "src/lib/netlist/devices/nld_74365.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_74365.h", MAME_DIR .. "src/lib/netlist/devices/nld_74ls629.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_74ls629.h", MAME_DIR .. "src/lib/netlist/devices/nld_82S16.cpp", @@ -153,6 +157,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_mm5837.h", MAME_DIR .. "src/lib/netlist/devices/nld_r2r_dac.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_r2r_dac.h", + MAME_DIR .. "src/lib/netlist/devices/nld_tristate.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_tristate.h", MAME_DIR .. "src/lib/netlist/devices/nld_legacy.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_legacy.h", MAME_DIR .. "src/lib/netlist/devices/net_lib.cpp", diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp index b7891d75286..2301ec49a4f 100644 --- a/src/devices/machine/netlist.cpp +++ b/src/devices/machine/netlist.cpp @@ -29,6 +29,7 @@ const device_type NETLIST_SOUND = &device_creator; const device_type NETLIST_ANALOG_INPUT = &device_creator; const device_type NETLIST_INT_INPUT = &device_creator; const device_type NETLIST_ROM_REGION = &device_creator; +const device_type NETLIST_RAM_POINTER = &device_creator; const device_type NETLIST_LOGIC_INPUT = &device_creator; const device_type NETLIST_STREAM_INPUT = &device_creator; @@ -181,37 +182,74 @@ void netlist_mame_logic_input_t::device_start() } // ---------------------------------------------------------------------------------------- -// netlist_mame_rom_region_t +// netlist_mame_rom_t // ---------------------------------------------------------------------------------------- + netlist_mame_rom_t::netlist_mame_rom_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, NETLIST_ROM_REGION, "Netlist ROM Region", tag, owner, clock, "netlist_rom_region", __FILE__) , netlist_mame_sub_interface(*owner) , m_param(nullptr) , m_param_name("") - , m_rom_tag(nullptr) - , m_rom(nullptr) + , m_data_tag(nullptr) + , m_data(nullptr) { } -void netlist_mame_rom_t::static_set_params(device_t &device, const char *param_name, const char* region_tag) +void netlist_mame_rom_t::static_set_params(device_t &device, const char *param_name, const char* data_tag) { - netlist_mame_rom_t &netlist = downcast(device); + netlist_mame_rom_t &netlist = downcast(device); LOG_DEV_CALLS(("static_set_params %s\n", device.tag())); netlist.m_param_name = param_name; - netlist.m_rom_tag = region_tag; + netlist.m_data_tag = data_tag; } void netlist_mame_rom_t::device_start() { LOG_DEV_CALLS(("start %s\n", tag())); netlist::param_t *p = downcast(this->owner())->setup().find_param(m_param_name); - m_param = dynamic_cast(p); + m_param = dynamic_cast(p); + if (m_param == nullptr) + { + fatalerror("device %s wrong parameter type for %s\n", basetag(), m_param_name.cstr()); + } + + if (memregion(m_data_tag) != nullptr) + m_data = memregion(m_data_tag)->base(); + + m_param->setTo(m_data); +} + +// ---------------------------------------------------------------------------------------- +// netlist_ram_pointer_t +// ---------------------------------------------------------------------------------------- + +netlist_ram_pointer_t::netlist_ram_pointer_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, NETLIST_RAM_POINTER, "Netlist RAM Pointer", tag, owner, clock, "netlist_ram_pointer", __FILE__) + , netlist_mame_sub_interface(*owner) + , m_param(nullptr) + , m_param_name("") + , m_data(nullptr) +{ +} + +void netlist_ram_pointer_t::static_set_params(device_t &device, const char *param_name) +{ + netlist_ram_pointer_t &netlist = downcast(device); + LOG_DEV_CALLS(("static_set_params %s\n", device.tag())); + netlist.m_param_name = param_name; +} + +void netlist_ram_pointer_t::device_start() +{ + LOG_DEV_CALLS(("start %s\n", tag())); + netlist::param_t *p = downcast(this->owner())->setup().find_param(m_param_name); + m_param = dynamic_cast(p); if (m_param == nullptr) { fatalerror("device %s wrong parameter type for %s\n", basetag(), m_param_name.cstr()); } - m_rom = memregion(m_rom_tag)->base(); + m_data = (*m_param)(); } // ---------------------------------------------------------------------------------------- diff --git a/src/devices/machine/netlist.h b/src/devices/machine/netlist.h index 28444e2d7e7..3a223541091 100644 --- a/src/devices/machine/netlist.h +++ b/src/devices/machine/netlist.h @@ -43,9 +43,13 @@ 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) \ - MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_ROM_REGION, 0, _region) \ - netlist_mame_rom_t::static_set_params(*device, _name); +#define MCFG_NETLIST_ROM_REGION(_basetag, _tag, _name, _region) \ + MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_ROM_REGION, 0) \ + netlist_mame_rom_t::static_set_params(*device, _name ".m_ROM", ":" _region); + +#define MCFG_NETLIST_RAM_POINTER(_basetag, _tag, _name) \ + MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_RAM_POINTER, 0) \ + netlist_ram_pointer_t::static_set_params(*device, _name ".m_RAM"); #define MCFG_NETLIST_STREAM_INPUT(_basetag, _chan, _name) \ MCFG_DEVICE_ADD(_basetag ":cin" # _chan, NETLIST_STREAM_INPUT, 0) \ @@ -413,7 +417,6 @@ private: netlist_analog_output_delegate m_delegate; }; - // ---------------------------------------------------------------------------------------- // netlist_mame_int_input_t // ---------------------------------------------------------------------------------------- @@ -510,8 +513,8 @@ private: // netlist_mame_rom_t // ---------------------------------------------------------------------------------------- -class netlist_mame_rom_t : public device_t, - public netlist_mame_sub_interface +class netlist_mame_rom_t : public device_t, + public netlist_mame_sub_interface { public: @@ -526,14 +529,45 @@ protected: virtual void device_start() override; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override { - m_param->setTo(m_rom); + m_param->setTo(m_data); + } + +private: + netlist::param_ptr_t *m_param; + pstring m_param_name; + const char* m_data_tag; + uint8_t* m_data; +}; + +// ---------------------------------------------------------------------------------------- +// netlist_ram_pointer_t +// ---------------------------------------------------------------------------------------- + +class netlist_ram_pointer_t: public device_t, + public netlist_mame_sub_interface +{ +public: + + // construction/destruction + netlist_ram_pointer_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + virtual ~netlist_ram_pointer_t() { } + + uint8_t* ptr() const { return m_data; } + + static void static_set_params(device_t &device, const char *param_name); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override + { + m_data = (*m_param)(); } private: - netlist::param_rom_t *m_param; + netlist::param_ptr_t *m_param; pstring m_param_name; - const char* m_rom_tag; - uint8_t* m_rom; + uint8_t* m_data; }; // ---------------------------------------------------------------------------------------- @@ -796,10 +830,9 @@ extern const device_type NETLIST_ANALOG_INPUT; extern const device_type NETLIST_LOGIC_INPUT; extern const device_type NETLIST_INT_INPUT; extern const device_type NETLIST_ROM_REGION; +extern const device_type NETLIST_RAM_POINTER; 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 046ae395d93..70aacc15244 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -66,6 +66,7 @@ NLOBJS := \ $(NLOBJ)/analog/nld_switches.o \ $(NLOBJ)/analog/nld_twoterm.o \ $(NLOBJ)/analog/nld_opamps.o \ + $(NLOBJ)/devices/nld_2102A.o \ $(NLOBJ)/devices/nld_2716.o \ $(NLOBJ)/devices/nld_4020.o \ $(NLOBJ)/devices/nld_4066.o \ @@ -86,6 +87,7 @@ NLOBJS := \ $(NLOBJ)/devices/nld_74192.o \ $(NLOBJ)/devices/nld_74193.o \ $(NLOBJ)/devices/nld_74279.o \ + $(NLOBJ)/devices/nld_74365.o \ $(NLOBJ)/devices/nld_74ls629.o \ $(NLOBJ)/devices/nld_82S16.o \ $(NLOBJ)/devices/nld_82S126.o \ @@ -97,6 +99,7 @@ NLOBJS := \ $(NLOBJ)/devices/nld_mm5837.o \ $(NLOBJ)/devices/nld_ne555.o \ $(NLOBJ)/devices/nld_r2r_dac.o \ + $(NLOBJ)/devices/nld_tristate.o \ $(NLOBJ)/devices/nld_legacy.o \ $(NLOBJ)/devices/net_lib.o \ $(NLOBJ)/devices/nld_log.o \ diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index c647e986ac2..f235766ebcc 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -107,6 +107,7 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(nicRSFF, NETDEV_RSFF, "+S,R") ENTRYX(nicDelay, NETDEV_DELAY, "-") ENTRYX(2716, EPROM_2716, "-") + ENTRYX(2102A, RAM_2102A, "-") 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") @@ -125,6 +126,7 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(74175, TTL_74175, "-") ENTRYX(74192, TTL_74192, "-") ENTRYX(74193, TTL_74193, "-") + ENTRYX(74365, TTL_74365, "-") ENTRYX(DM9334, TTL_DM9334, "-") //ENTRY(74279, TTL_74279, "-") // only dip available ENTRYX(SN74LS629, SN74LS629, "CAP") @@ -141,6 +143,9 @@ static void initialize_factory(factory_list_t &factory) //ENTRY(4066, CD_4066, "+A,B") ENTRYX(NE555, NE555, "-") ENTRYX(r2r_dac, R2R_DAC, "+VIN,R,N") + ENTRYX(tristate, TTL_TRISTATE, "-") + ENTRYX(tristate3, TTL_TRISTATE3, "-") + ENTRYX(2102A_dip, RAM_2102A_DIP, "-") ENTRYX(2716_dip, EPROM_2716_DIP, "-") ENTRYX(4538_dip, CD4538_DIP, "-") ENTRYX(7448_dip, TTL_7448_DIP, "-") @@ -161,6 +166,7 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(74192_dip, TTL_74192_DIP, "-") ENTRYX(74193_dip, TTL_74193_DIP, "-") ENTRYX(74279_dip, TTL_74279_DIP, "-") + ENTRYX(74365_dip, TTL_74365_DIP, "-") ENTRYX(82S16_dip, TTL_82S16_DIP, "-") ENTRYX(82S126_dip, TTL_82S126_DIP, "-") ENTRYX(9602_dip, TTL_9602_DIP, "-") diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index 66c7f57d842..6e9ba446231 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -14,6 +14,7 @@ #include "nl_base.h" #include "nld_system.h" +#include "nld_2102A.h" #include "nld_2716.h" #include "nld_4020.h" #include "nld_4066.h" @@ -34,6 +35,7 @@ #include "nld_74192.h" #include "nld_74193.h" #include "nld_74279.h" +#include "nld_74365.h" #include "nld_74ls629.h" #include "nld_82S16.h" #include "nld_82S126.h" @@ -49,6 +51,8 @@ #include "nld_r2r_dac.h" +#include "nld_tristate.h" + #include "nld_log.h" #include "macro/nlm_cd4xxx.h" diff --git a/src/lib/netlist/devices/nld_2102A.cpp b/src/lib/netlist/devices/nld_2102A.cpp new file mode 100644 index 00000000000..45a7ee53c34 --- /dev/null +++ b/src/lib/netlist/devices/nld_2102A.cpp @@ -0,0 +1,103 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_2102A.cpp + * + */ + +#include "nld_2102A.h" + +#define ADDR2BYTE(a) ((a) >> 3) +#define ADDR2BIT(a) ((a) & 0x7) + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(2102A) + { + NETLIB_CONSTRUCTOR(2102A) + , m_A(*this, {{"A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9" }}) + , m_CEQ(*this, "CEQ") + , m_RWQ(*this, "RWQ") + , m_DI(*this, "DI") + , m_DO(*this, "DO") + , m_ram(*this, "m_ram", 0) + , m_RAM(*this, "m_RAM", &m_ram[0]) + { + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + protected: + object_array_t m_A; + logic_input_t m_CEQ; + logic_input_t m_RWQ; + logic_input_t m_DI; + + logic_output_t m_DO; + + state_var m_ram; // 1024x1 bits + param_ptr_t m_RAM; + }; + + NETLIB_OBJECT_DERIVED(2102A_dip, 2102A) + { + NETLIB_CONSTRUCTOR_DERIVED(2102A_dip, 2102A) + { + register_subalias("8", m_A[0]); + register_subalias("4", m_A[1]); + register_subalias("5", m_A[2]); + register_subalias("6", m_A[3]); + register_subalias("7", m_A[4]); + register_subalias("2", m_A[5]); + register_subalias("1", m_A[6]); + register_subalias("16", m_A[7]); + register_subalias("15", m_A[8]); + register_subalias("14", m_A[9]); + + register_subalias("13", m_CEQ); + register_subalias("3", m_RWQ); + + register_subalias("11", m_DI); + register_subalias("12", m_DO); + } + }; + + NETLIB_UPDATE(2102A) + { + netlist_time max_delay = NLTIME_FROM_NS(350); + + if (!m_CEQ()) + { + unsigned a = 0; + for (std::size_t i=0; i<10; i++) + { + a |= m_A[i]() << i; + } + const unsigned byte = ADDR2BYTE(a); + const unsigned bit = ADDR2BIT(a); + + if (!m_RWQ()) + { + m_ram[byte] &= ~(static_cast(1) << bit); + m_ram[byte] |= (static_cast(m_DI()) << bit); + } + + m_DO.push((m_ram[byte] >> bit) & 1, max_delay); + } + } + + NETLIB_RESET(2102A) + { + m_RAM.setTo(&m_ram[0]); + for (std::size_t i=0; i<128; i++) + m_ram[i] = 0; + } + + NETLIB_DEVICE_IMPL(2102A) + NETLIB_DEVICE_IMPL(2102A_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_2102A.h b/src/lib/netlist/devices/nld_2102A.h new file mode 100644 index 00000000000..fe2feebf38e --- /dev/null +++ b/src/lib/netlist/devices/nld_2102A.h @@ -0,0 +1,48 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_2102A.h + * + * 2102: 1024 x 1-bit Static RAM + * + * +--------------+ + * A6 |1 ++ 16| A7 + * A5 |2 15| A8 + * RWQ |3 14| A9 + * A1 |4 82S16 13| CEQ + * A2 |5 12| DO + * A3 |6 11| DI + * A4 |7 10| VCC + * A0 |8 9| GND + * +--------------+ + * + * + * Naming conventions follow Intel datasheet + * + */ + +#ifndef NLD_2102A_H_ +#define NLD_2102A_H_ + +#include "nl_setup.h" + +#define RAM_2102A(name, cCEQ, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7, cA8, cA9, cRWQ, cDI) \ + NET_REGISTER_DEV(RAM_2102A, name) \ + NET_CONNECT(name, CEQ, cCEQ) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, A5, cA5) \ + NET_CONNECT(name, A6, cA6) \ + NET_CONNECT(name, A7, cA7) \ + NET_CONNECT(name, A8, cA8) \ + NET_CONNECT(name, A9, cA9) \ + NET_CONNECT(name, RWQ, cRWQ) \ + NET_CONNECT(name, DI, cDI) + +#define RAM_2102A_DIP(name) \ + NET_REGISTER_DEV(RAM_2102A_DIP, name) + +#endif /* NLD_2102A_H_ */ diff --git a/src/lib/netlist/devices/nld_2716.cpp b/src/lib/netlist/devices/nld_2716.cpp index 75176119ae7..45cedba592b 100644 --- a/src/lib/netlist/devices/nld_2716.cpp +++ b/src/lib/netlist/devices/nld_2716.cpp @@ -17,7 +17,7 @@ namespace netlist , m_A(*this, {{ "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10" }}) , m_GQ(*this, "GQ") , m_EPQ(*this, "EPQ") - , m_Q(*this, {{ "Q0", "Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7" }}) + , m_D(*this, {{ "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7" }}) , m_last_EPQ(*this, "m_last_EPQ", 1) , m_ROM(*this, "m_ROM", nullptr) { @@ -29,11 +29,11 @@ namespace netlist object_array_t m_A; logic_input_t m_GQ; logic_input_t m_EPQ; - object_array_t m_Q; + object_array_t m_D; state_var m_last_EPQ; - param_rom_t m_ROM; // 16 Kbits, used as 2 Kbit x 8 + param_ptr_t m_ROM; // 16 Kbits, used as 2 Kbit x 8 }; NETLIB_OBJECT_DERIVED(2716_dip, 2716) @@ -55,21 +55,21 @@ namespace netlist register_subalias("20", m_GQ); register_subalias("18", m_EPQ); - register_subalias("9", m_Q[0]); - register_subalias("10", m_Q[1]); - register_subalias("11", m_Q[2]); - register_subalias("13", m_Q[3]); - register_subalias("14", m_Q[4]); - register_subalias("15", m_Q[5]); - register_subalias("16", m_Q[6]); - register_subalias("17", m_Q[7]); + register_subalias("9", m_D[0]); + register_subalias("10", m_D[1]); + register_subalias("11", m_D[2]); + register_subalias("13", m_D[3]); + register_subalias("14", m_D[4]); + register_subalias("15", m_D[5]); + register_subalias("16", m_D[6]); + register_subalias("17", m_D[7]); } }; // FIXME: timing! NETLIB_UPDATE(2716) { - unsigned q = 0xff; + unsigned d = 0xff; netlist_time delay = NLTIME_FROM_NS(450); if (!m_GQ() && !m_EPQ()) @@ -78,7 +78,10 @@ namespace netlist for (std::size_t i=0; i<11; i++) a |= (m_A[i]() << i); - q = m_ROM()[a]; + if (m_ROM() != nullptr) + { + d = ((std::uint_fast8_t*)(m_ROM()))[a]; + } if (m_last_EPQ) delay = NLTIME_FROM_NS(120); @@ -88,7 +91,7 @@ namespace netlist // FIXME: Outputs are tristate. This needs to be properly implemented for (std::size_t i=0; i<8; i++) - m_Q[i].push((q >> i) & 1, delay); + m_D[i].push((d >> i) & 1, delay); } NETLIB_DEVICE_IMPL(2716) diff --git a/src/lib/netlist/devices/nld_2716.h b/src/lib/netlist/devices/nld_2716.h index 144bbf04658..72a02a2166e 100644 --- a/src/lib/netlist/devices/nld_2716.h +++ b/src/lib/netlist/devices/nld_2716.h @@ -13,11 +13,11 @@ * A3 |5 20| GQ * A2 |6 19| A10 * A1 |7 18| EPQ - * A0 |8 17| Q7 - * Q0 |9 16| Q6 - * Q1 |10 15| Q5 - * Q2 |11 14| Q4 - * VSS |12 13| Q3 + * A0 |8 17| D7 + * D0 |9 16| D6 + * D1 |10 15| D5 + * D2 |11 14| D4 + * VSS |12 13| D3 * +----------------+ * * @@ -30,9 +30,23 @@ #include "nl_setup.h" -#define TTL_2716(name) \ - NET_REGISTER_DEV(TTL_2716, name) -#define TTL_2716_DIP(name) \ - NET_REGISTER_DEV(TTL_2716_DIP, name) +#define EPROM_2716(name, cGQ, cEPQ, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7, cA8, cA9, cA10) \ + NET_REGISTER_DEV(EPROM_2716, name) \ + NET_CONNECT(name, GQ, cGQ) \ + NET_CONNECT(name, EPQ, cEPQ) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, A5, cA5) \ + NET_CONNECT(name, A6, cA6) \ + NET_CONNECT(name, A7, cA7) \ + NET_CONNECT(name, A8, cA8) \ + NET_CONNECT(name, A9, cA9) \ + NET_CONNECT(name, A10, cA10) + +#define EPROM_2716_DIP(name) \ + NET_REGISTER_DEV(EPROM_2716_DIP, name) #endif /* NLD_2716_H_ */ diff --git a/src/lib/netlist/devices/nld_74365.cpp b/src/lib/netlist/devices/nld_74365.cpp new file mode 100644 index 00000000000..34eafb0856e --- /dev/null +++ b/src/lib/netlist/devices/nld_74365.cpp @@ -0,0 +1,74 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_74365.cpp + * + */ + +#include "nld_74365.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(74365) + { + NETLIB_CONSTRUCTOR(74365) + , m_G1Q(*this, "G1Q") + , m_G2Q(*this, "G2Q") + , m_A(*this, {{ "A1", "A2", "A3", "A4", "A5", "A6" }}) + , m_Y(*this, {{ "Y1", "Y2", "Y3", "Y4", "Y5", "Y6" }}) + { + } + + NETLIB_UPDATEI(); + + protected: + logic_input_t m_G1Q; + logic_input_t m_G2Q; + object_array_t m_A; + object_array_t m_Y; + }; + + NETLIB_OBJECT_DERIVED(74365_dip, 74365) + { + NETLIB_CONSTRUCTOR_DERIVED(74365_dip, 74365) + { + register_subalias("1", m_G1Q); + register_subalias("2", m_A[0]); + register_subalias("3", m_Y[0]); + register_subalias("4", m_A[1]); + register_subalias("5", m_Y[1]); + register_subalias("6", m_A[2]); + register_subalias("7", m_Y[2]); + + register_subalias("9", m_A[3]); + register_subalias("10", m_Y[3]); + register_subalias("11", m_A[4]); + register_subalias("12", m_Y[4]); + register_subalias("13", m_A[5]); + register_subalias("14", m_Y[5]); + register_subalias("15", m_G2Q); + + } + }; + + NETLIB_UPDATE(74365) + { + if (!m_G1Q() && !m_G2Q()) + { + for (std::size_t i=0; i<6; i++) + m_Y[i].push(m_A[i](), NLTIME_FROM_NS(20)); // FIXME: Correct timing + } + else + { + for (std::size_t i=0; i<6; i++) + m_Y[i].push(0, NLTIME_FROM_NS(20)); // FIXME: Correct timing + } + } + + NETLIB_DEVICE_IMPL(74365) + NETLIB_DEVICE_IMPL(74365_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_74365.h b/src/lib/netlist/devices/nld_74365.h new file mode 100644 index 00000000000..65bfd1a2a57 --- /dev/null +++ b/src/lib/netlist/devices/nld_74365.h @@ -0,0 +1,44 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_74365.h + * + * SN74365: Hex Bus Driver with 3-State Outputs + * + * +--------------+ + * G1Q |1 ++ 16| VCC + * A1 |2 15| G2Q + * Y1 |3 14| A6 + * A2 |4 74365 13| Y6 + * Y2 |5 12| A5 + * A3 |6 11| Y5 + * Y3 |7 10| A4 + * GND |8 9| Y4 + * +--------------+ + * + * Naming conventions follow Texas Instruments datasheet + * + * Note: Currently the netlist system does not support proper tristate output, so this + * is not a "real" bus driver, it simply outputs 0 if the chip is not enabled. + */ + +#ifndef NLD_74365_H_ +#define NLD_74365_H_ + +#include "nl_setup.h" + +#define TTL_74365(name, cG1Q, cG2Q, cA1, cA2, cA3, cA4, cA5, cA6) \ + NET_REGISTER_DEV(TTL_74365, name) \ + NET_CONNECT(name, G1Q, cG1Q) \ + NET_CONNECT(name, G2Q, cG2Q) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, A5, cA5) \ + NET_CONNECT(name, A6, cA6) + +#define TTL_74365_DIP(name) \ + NET_REGISTER_DEV(TTL_74365_DIP, name) + +#endif /* NLD_74365_H_ */ diff --git a/src/lib/netlist/devices/nld_82S126.cpp b/src/lib/netlist/devices/nld_82S126.cpp index 29c2813c751..20fc1371c90 100644 --- a/src/lib/netlist/devices/nld_82S126.cpp +++ b/src/lib/netlist/devices/nld_82S126.cpp @@ -30,7 +30,7 @@ namespace netlist logic_input_t m_CE2Q; object_array_t m_O; - param_rom_t m_ROM; // 1024 bits, 32x32, used as 256x4 + param_ptr_t m_ROM; // 1024 bits, 32x32, used as 256x4 }; NETLIB_OBJECT_DERIVED(82S126_dip, 82S126) @@ -68,12 +68,26 @@ namespace netlist for (std::size_t i=0; i<8; i++) a |= (m_A[i]() << i); - o = m_ROM()[a]; + if (m_ROM() != nullptr) + o = ((std::uint_fast8_t*)(m_ROM()))[a]; delay = NLTIME_FROM_NS(50); } - - // FIXME: Outputs are tristate. This needs to be properly implemented +#if 0 + printf("CE1Q%d CE2Q%d %d%d%d%d%d%d%d%d %x\n", + m_CE1Q() ? 1 : 0, + m_CE2Q() ? 1 : 0, + m_A[0]() ? 1 : 0, + m_A[1]() ? 1 : 0, + m_A[2]() ? 1 : 0, + m_A[3]() ? 1 : 0, + m_A[4]() ? 1 : 0, + m_A[5]() ? 1 : 0, + m_A[6]() ? 1 : 0, + m_A[7]() ? 1 : 0, + o); +#endif + // FIXME: Outputs are tristate. This needs to be properly implemented for (std::size_t i=0; i<4; i++) m_O[i].push((o >> i) & 1, delay); } diff --git a/src/lib/netlist/devices/nld_tristate.cpp b/src/lib/netlist/devices/nld_tristate.cpp new file mode 100644 index 00000000000..571f5f8c334 --- /dev/null +++ b/src/lib/netlist/devices/nld_tristate.cpp @@ -0,0 +1,76 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_tristate.cpp + * + */ + +#include "nld_tristate.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(tristate) + { + NETLIB_CONSTRUCTOR(tristate) + , m_CEQ(*this, {{ "CEQ1", "CEQ2" }}) + , m_D(*this, {{ "D1", "D2" }}) + , m_Q(*this, "Q") + { + } + + NETLIB_UPDATEI(); + + protected: + object_array_t m_CEQ; + object_array_t m_D; + logic_output_t m_Q; + }; + + NETLIB_OBJECT(tristate3) + { + NETLIB_CONSTRUCTOR(tristate3) + , m_CEQ(*this, {{ "CEQ1", "CEQ2", "CEQ3" }} ) + , m_D(*this, {{ "D1", "D2", "D3" }} ) + , m_Q(*this, "Q") + { + } + + NETLIB_UPDATEI(); + + protected: + object_array_t m_CEQ; + object_array_t m_D; + logic_output_t m_Q; + }; + + NETLIB_UPDATE(tristate) + { + unsigned q = 0; + if (!m_CEQ[0]()) + q |= m_D[0](); + if (!m_CEQ[1]()) + q |= m_D[1](); + + m_Q.push(q, NLTIME_FROM_NS(1)); + } + + NETLIB_UPDATE(tristate3) + { + unsigned q = 0; + if (!m_CEQ[0]()) + q |= m_D[0](); + if (!m_CEQ[1]()) + q |= m_D[1](); + if (!m_CEQ[2]()) + q |= m_D[2](); + + m_Q.push(q, NLTIME_FROM_NS(1)); + } + + NETLIB_DEVICE_IMPL(tristate) + NETLIB_DEVICE_IMPL(tristate3) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_tristate.h b/src/lib/netlist/devices/nld_tristate.h new file mode 100644 index 00000000000..e0e40491d8f --- /dev/null +++ b/src/lib/netlist/devices/nld_tristate.h @@ -0,0 +1,31 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_tristate.h + * + * tristate: Hack to merge two tri-stated outputs together + * + */ + +#ifndef NLD_TRISTATE_H_ +#define NLD_TRISTATE_H_ + +#include "nl_setup.h" + +#define TTL_TRISTATE(name, cCEQ1, cD1, cCEQ2, cD2) \ + NET_REGISTER_DEV(TTL_TRISTATE, name) \ + NET_CONNECT(name, CEQ1, cCEQ1) \ + NET_CONNECT(name, D1, cD1) \ + NET_CONNECT(name, CEQ2, cCEQ2) \ + NET_CONNECT(name, D2, cD2) + +#define TTL_TRISTATE3(name, cCEQ1, cD1, cCEQ2, cD2, cCEQ3, cD3) \ + NET_REGISTER_DEV(TTL_TRISTATE3, name) \ + NET_CONNECT(name, CEQ1, cCEQ1) \ + NET_CONNECT(name, D1, cD1) \ + NET_CONNECT(name, CEQ2, cCEQ2) \ + NET_CONNECT(name, D2, cD2) \ + NET_CONNECT(name, CEQ3, cCEQ3) \ + NET_CONNECT(name, D3, cD3) + +#endif /* NLD_TRISTATE_H_ */ diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index 187dea1dcb5..165ba1c6b48 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -482,7 +482,7 @@ param_template_t::param_template_t(device_t &device, const pstring name, c template class param_template_t; template class param_template_t; template class param_template_t; -template class param_template_t; +template class param_template_t; template class param_template_t; template class param_template_t; diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index e817a32ab83..6d4a001f7fd 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -833,7 +833,7 @@ namespace netlist DOUBLE, INTEGER, LOGIC, - ROM // Special-case which is always initialized at netlist startup time + POINTER // Special-case which is always initialized at MAME startup time }; param_t(const param_type_t atype, device_t &device, const pstring &name); @@ -869,7 +869,7 @@ namespace netlist using param_str_t = param_template_t; using param_logic_t = param_template_t; - using param_rom_t = param_template_t; + using param_ptr_t = param_template_t; class param_model_t : public param_str_t { diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index cd025603be0..b55f662cd79 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -217,8 +217,8 @@ void setup_t::register_and_set_param(pstring name, param_t ¶m) static_cast(param).initial(static_cast(vald)); } break; - case param_t::ROM: - static_cast(param).initial(nullptr); + case param_t::POINTER: + static_cast(param).initial(nullptr); break; case param_t::STRING: case param_t::MODEL: diff --git a/src/lib/netlist/prg/nltool.cpp b/src/lib/netlist/prg/nltool.cpp index 1245f03a391..8241daaa332 100644 --- a/src/lib/netlist/prg/nltool.cpp +++ b/src/lib/netlist/prg/nltool.cpp @@ -201,8 +201,8 @@ struct input_t case netlist::param_t::LOGIC: static_cast(m_param)->setTo(static_cast(m_value)); break; - case netlist::param_t::ROM: - static_cast(m_param)->setTo(nullptr); + case netlist::param_t::POINTER: + static_cast(m_param)->setTo(nullptr); break; } } -- cgit v1.2.3-70-g09d2 From 677aaaec3d0fb3424173d0d0b594aad25f3b51b2 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Thu, 22 Dec 2016 19:39:52 +0100 Subject: -netlist: Added 74165, 74194, 7475, 7485, and DM9322 devices. [Ryan Holtz] --- scripts/src/netlist.lua | 10 +++ src/lib/netlist/build/makefile | 5 ++ src/lib/netlist/devices/net_lib.cpp | 12 +++ src/lib/netlist/devices/net_lib.h | 5 ++ src/lib/netlist/devices/nld_74165.cpp | 107 +++++++++++++++++++++++ src/lib/netlist/devices/nld_74165.h | 50 +++++++++++ src/lib/netlist/devices/nld_74166.cpp | 11 --- src/lib/netlist/devices/nld_74166.h | 1 + src/lib/netlist/devices/nld_74194.cpp | 122 ++++++++++++++++++++++++++ src/lib/netlist/devices/nld_74194.h | 47 ++++++++++ src/lib/netlist/devices/nld_7475.cpp | 156 ++++++++++++++++++++++++++++++++++ src/lib/netlist/devices/nld_7475.h | 62 ++++++++++++++ src/lib/netlist/devices/nld_7485.cpp | 107 +++++++++++++++++++++++ src/lib/netlist/devices/nld_7485.h | 45 ++++++++++ src/lib/netlist/devices/nld_9322.cpp | 102 ++++++++++++++++++++++ src/lib/netlist/devices/nld_9322.h | 42 +++++++++ src/lib/netlist/nl_base.h | 1 + src/mame/drivers/atarittl.cpp | 14 --- 18 files changed, 874 insertions(+), 25 deletions(-) create mode 100644 src/lib/netlist/devices/nld_74165.cpp create mode 100644 src/lib/netlist/devices/nld_74165.h create mode 100644 src/lib/netlist/devices/nld_74194.cpp create mode 100644 src/lib/netlist/devices/nld_74194.h create mode 100644 src/lib/netlist/devices/nld_7475.cpp create mode 100644 src/lib/netlist/devices/nld_7475.h create mode 100644 src/lib/netlist/devices/nld_7485.cpp create mode 100644 src/lib/netlist/devices/nld_7485.h create mode 100644 src/lib/netlist/devices/nld_9322.cpp create mode 100644 src/lib/netlist/devices/nld_9322.h (limited to 'scripts/src/netlist.lua') diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index a0ac5045565..fe383c87445 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -107,8 +107,12 @@ project "netlist" 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_7475.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_7475.h", MAME_DIR .. "src/lib/netlist/devices/nld_7483.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_7483.h", + MAME_DIR .. "src/lib/netlist/devices/nld_7485.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_7485.h", MAME_DIR .. "src/lib/netlist/devices/nld_7490.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_7490.h", MAME_DIR .. "src/lib/netlist/devices/nld_7493.cpp", @@ -121,6 +125,8 @@ project "netlist" 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_74165.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_74165.h", MAME_DIR .. "src/lib/netlist/devices/nld_74166.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_74166.h", MAME_DIR .. "src/lib/netlist/devices/nld_74174.cpp", @@ -131,6 +137,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_74192.h", MAME_DIR .. "src/lib/netlist/devices/nld_74193.cpp", 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_74279.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_74279.h", MAME_DIR .. "src/lib/netlist/devices/nld_74365.cpp", @@ -147,6 +155,8 @@ 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_9322.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_9322.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", diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index 70aacc15244..71d0d4940ce 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -74,18 +74,22 @@ NLOBJS := \ $(NLOBJ)/devices/nld_7450.o \ $(NLOBJ)/devices/nld_7473.o \ $(NLOBJ)/devices/nld_7474.o \ + $(NLOBJ)/devices/nld_7475.o \ $(NLOBJ)/devices/nld_7483.o \ + $(NLOBJ)/devices/nld_7485.o \ $(NLOBJ)/devices/nld_7490.o \ $(NLOBJ)/devices/nld_7493.o \ $(NLOBJ)/devices/nld_74107.o \ $(NLOBJ)/devices/nld_74123.o \ $(NLOBJ)/devices/nld_74153.o \ $(NLOBJ)/devices/nld_74161.o \ + $(NLOBJ)/devices/nld_74165.o \ $(NLOBJ)/devices/nld_74166.o \ $(NLOBJ)/devices/nld_74174.o \ $(NLOBJ)/devices/nld_74175.o \ $(NLOBJ)/devices/nld_74192.o \ $(NLOBJ)/devices/nld_74193.o \ + $(NLOBJ)/devices/nld_74194.o \ $(NLOBJ)/devices/nld_74279.o \ $(NLOBJ)/devices/nld_74365.o \ $(NLOBJ)/devices/nld_74ls629.o \ @@ -94,6 +98,7 @@ NLOBJS := \ $(NLOBJ)/devices/nld_9310.o \ $(NLOBJ)/devices/nld_9312.o \ $(NLOBJ)/devices/nld_9316.o \ + $(NLOBJ)/devices/nld_9322.o \ $(NLOBJ)/devices/nld_am2847.o \ $(NLOBJ)/devices/nld_dm9334.o \ $(NLOBJ)/devices/nld_mm5837.o \ diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index f235766ebcc..ec402ad5137 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -113,7 +113,10 @@ static void initialize_factory(factory_list_t &factory) 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(7475, TTL_7475, "-") + ENTRYX(7477, TTL_7477, "-") ENTRYX(7483, TTL_7483, "+A1,A2,A3,A4,B1,B2,B3,B4,C0") + ENTRYX(7485, TTL_7485, "-") ENTRYX(7490, TTL_7490, "+A,B,R1,R2,R91,R92") ENTRYX(7493, TTL_7493, "+CLKA,CLKB,R1,R2") ENTRYX(74107, TTL_74107, "+CLK,J,K,CLRQ") @@ -121,11 +124,13 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(74123, TTL_74123, "-") ENTRYX(74153, TTL_74153, "+C0,C1,C2,C3,A,B,G") ENTRYX(74161, TTL_74161, "-") + ENTRYX(74165, TTL_74165, "-") ENTRYX(74166, TTL_74166, "-") ENTRYX(74174, TTL_74174, "-") ENTRYX(74175, TTL_74175, "-") ENTRYX(74192, TTL_74192, "-") ENTRYX(74193, TTL_74193, "-") + ENTRYX(74194, TTL_74194, "-") ENTRYX(74365, TTL_74365, "-") ENTRYX(DM9334, TTL_DM9334, "-") //ENTRY(74279, TTL_74279, "-") // only dip available @@ -135,6 +140,7 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(9310, TTL_9310, "-") ENTRYX(9312, TTL_9312, "-") ENTRYX(9316, TTL_9316, "+CLK,ENP,ENT,CLRQ,LOADQ,A,B,C,D") + ENTRYX(9322, TTL_9322, "-") ENTRYX(AM2847, TTL_AM2847, "-") ENTRYX(CD4020, CD4020, "") ENTRYX(CD4066_GATE, CD4066_GATE, "") @@ -153,18 +159,23 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(7473_dip, TTL_7473_DIP, "-") ENTRYX(7473A_dip, TTL_7473A_DIP, "-") ENTRYX(7474_dip, TTL_7474_DIP, "-") + ENTRYX(7475_dip, TTL_7475_DIP, "-") + ENTRYX(7477_dip, TTL_7477_DIP, "-") ENTRYX(7483_dip, TTL_7483_DIP, "-") + ENTRYX(7485_dip, TTL_7485_DIP, "-") ENTRYX(7490_dip, TTL_7490_DIP, "-") ENTRYX(7493_dip, TTL_7493_DIP, "-") ENTRYX(74107_dip, TTL_74107_DIP, "-") ENTRYX(74123_dip, TTL_74123_DIP, "-") ENTRYX(74153_dip, TTL_74153_DIP, "-") ENTRYX(74161_dip, TTL_74161_DIP, "-") + ENTRYX(74165_dip, TTL_74165_DIP, "-") ENTRYX(74166_dip, TTL_74166_DIP, "-") ENTRYX(74174_dip, TTL_74174_DIP, "-") ENTRYX(74175_dip, TTL_74175_DIP, "-") ENTRYX(74192_dip, TTL_74192_DIP, "-") ENTRYX(74193_dip, TTL_74193_DIP, "-") + ENTRYX(74194_dip, TTL_74194_DIP, "-") ENTRYX(74279_dip, TTL_74279_DIP, "-") ENTRYX(74365_dip, TTL_74365_DIP, "-") ENTRYX(82S16_dip, TTL_82S16_DIP, "-") @@ -173,6 +184,7 @@ 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(9322_dip, TTL_9322_DIP, "-") ENTRYX(AM2847_dip, TTL_AM2847_DIP, "-") ENTRYX(DM9334_dip, TTL_DM9334_DIP, "-") ENTRYX(SN74LS629_dip, SN74LS629_DIP, "1.CAP1,2.CAP2") diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index 6e9ba446231..178a3020dec 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -22,18 +22,22 @@ #include "nld_7450.h" #include "nld_7473.h" #include "nld_7474.h" +#include "nld_7475.h" #include "nld_7483.h" +#include "nld_7485.h" #include "nld_7490.h" #include "nld_7493.h" #include "nld_74107.h" #include "nld_74123.h" #include "nld_74153.h" #include "nld_74161.h" +#include "nld_74165.h" #include "nld_74166.h" #include "nld_74174.h" #include "nld_74175.h" #include "nld_74192.h" #include "nld_74193.h" +#include "nld_74194.h" #include "nld_74279.h" #include "nld_74365.h" #include "nld_74ls629.h" @@ -42,6 +46,7 @@ #include "nld_9310.h" #include "nld_9312.h" #include "nld_9316.h" +#include "nld_9322.h" #include "nld_am2847.h" #include "nld_dm9334.h" diff --git a/src/lib/netlist/devices/nld_74165.cpp b/src/lib/netlist/devices/nld_74165.cpp new file mode 100644 index 00000000000..bb263409bf9 --- /dev/null +++ b/src/lib/netlist/devices/nld_74165.cpp @@ -0,0 +1,107 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_74165.cpp + * + */ + +#include "nld_74165.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(74165) + { + NETLIB_CONSTRUCTOR(74165) + , m_DATA(*this, {{ "H", "G", "F", "E", "D", "C", "B", "A" }}) + , m_SER(*this, "SER") + , m_SH_LDQ(*this, "SH_LDQ") + , m_CLK(*this, "CLK") + , m_CLKINH(*this, "CLKINH") + , m_QH(*this, "QH") + , m_QHQ(*this, "QHQ") + , m_shifter(*this, "m_shifter", 0) + , m_last_CLK(*this, "m_last_CLK", 0) + { + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + protected: + object_array_t m_DATA; + logic_input_t m_SER; + logic_input_t m_SH_LDQ; + logic_input_t m_CLK; + logic_input_t m_CLKINH; + logic_output_t m_QH; + logic_output_t m_QHQ; + + state_var m_shifter; + state_var m_last_CLK; + }; + + NETLIB_OBJECT_DERIVED(74165_dip, 74165) + { + NETLIB_CONSTRUCTOR_DERIVED(74165_dip, 74165) + { + register_subalias("1", m_SH_LDQ); + register_subalias("2", m_CLK); + register_subalias("3", m_DATA[4]); + register_subalias("4", m_DATA[5]); + register_subalias("5", m_DATA[6]); + register_subalias("6", m_DATA[7]); + register_subalias("7", m_QHQ); + + register_subalias("9", m_QH); + register_subalias("10", m_SER); + register_subalias("11", m_DATA[0]); + register_subalias("12", m_DATA[1]); + register_subalias("13", m_DATA[2]); + register_subalias("14", m_DATA[3]); + register_subalias("15", m_CLKINH); + + } + }; + + NETLIB_RESET(74165) + { + m_shifter = 0; + m_last_CLK = 0; + } + + // FIXME: Timing + NETLIB_UPDATE(74165) + { + netlist_sig_t old_qh = m_QH.net().Q(); + netlist_sig_t qh = 0; + + if (!m_SH_LDQ()) + { + m_shifter = 0; + for (std::size_t i=0; i<8; i++) + m_shifter |= (m_DATA[i]() << i); + } + else if (!m_CLK() || m_CLKINH()) + { + qh = old_qh; + } + else if (!m_last_CLK) + { + unsigned high_bit = m_SER() ? 0x80 : 0; + m_shifter = high_bit | (m_shifter >> 1); + } + + qh = m_shifter & 1; + + m_last_CLK = m_CLK(); + + m_QH.push(qh, NLTIME_FROM_NS(20)); // FIXME: Timing + } + + NETLIB_DEVICE_IMPL(74165) + NETLIB_DEVICE_IMPL(74165_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_74165.h b/src/lib/netlist/devices/nld_74165.h new file mode 100644 index 00000000000..a724cb81da7 --- /dev/null +++ b/src/lib/netlist/devices/nld_74165.h @@ -0,0 +1,50 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_74165.h + * + * 74165: Parallel-Load 8-Bit Shift Register + * + * +--------------+ + * SH/LDQ |1 ++ 16| VCC + * CLK |2 15| CLKINH + * E |3 14| D + * F |4 74165 13| C + * G |5 12| B + * H |6 11| A + * QHQ |7 10| SER + * GND |8 9| QH + * +--------------+ + * + * SH/LDQ: Shift / !Load + * CLKINH: Clock Inhibit + * SER: Serial In + * + * Naming convention attempts to follow NTE Electronics datasheet + * + */ + +#ifndef NLD_74165_H_ +#define NLD_74165_H_ + +#include "nl_setup.h" + +#define TTL_74165(name, cCLK, cCLKINH, cSH_LDQ, cSER, cA, cB, cC, cD, cE, cF, cG, cH) \ + NET_REGISTER_DEV(TTL_74165, name) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, CLKINH, cCLKINH) \ + NET_CONNECT(name, SH_LDQ, cSH_LDQ) \ + NET_CONNECT(name, SER, cSER) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D, cD) \ + NET_CONNECT(name, E, cE) \ + NET_CONNECT(name, F, cF) \ + NET_CONNECT(name, G, cG) \ + NET_CONNECT(name, H, cH) + +#define TTL_74165_DIP(name) \ + NET_REGISTER_DEV(TTL_74165_DIP, name) + +#endif /* NLD_74165_H_ */ diff --git a/src/lib/netlist/devices/nld_74166.cpp b/src/lib/netlist/devices/nld_74166.cpp index 70b41d432e6..5cb7114ee0f 100644 --- a/src/lib/netlist/devices/nld_74166.cpp +++ b/src/lib/netlist/devices/nld_74166.cpp @@ -74,17 +74,6 @@ namespace netlist m_last_CLK = 0; } -#if 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) - }; -#endif - NETLIB_UPDATE(74166) { netlist_sig_t old_qh = m_QH.net().Q(); diff --git a/src/lib/netlist/devices/nld_74166.h b/src/lib/netlist/devices/nld_74166.h index df2d060eef2..0bd3d7eaadd 100644 --- a/src/lib/netlist/devices/nld_74166.h +++ b/src/lib/netlist/devices/nld_74166.h @@ -18,6 +18,7 @@ * * SH/LDQ: Shift / !Load * CLKINH: Clock Inhibit + * SER: Serial In * * Naming convention attempts to follow Texas Instruments datasheet * diff --git a/src/lib/netlist/devices/nld_74194.cpp b/src/lib/netlist/devices/nld_74194.cpp new file mode 100644 index 00000000000..e951e351e93 --- /dev/null +++ b/src/lib/netlist/devices/nld_74194.cpp @@ -0,0 +1,122 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_74194.cpp + * + */ + +#include "nld_74194.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(74194) + { + NETLIB_CONSTRUCTOR(74194) + , m_DATA(*this, {{"D", "C", "B", "A"}}) + , m_SLIN(*this, "SLIN") + , m_SRIN(*this, "SRIN") + , m_CLK(*this, "CLK") + , m_S0(*this, "S0") + , m_S1(*this, "S1") + , m_CLRQ(*this, "CLRQ") + , m_Q(*this, {{"QD", "QC", "QB", "QA"}}) + , m_last_CLK(*this, "m_last_CLK", 0) + , m_last_Q(*this, "m_last_Q", 0) + { + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + protected: + object_array_t m_DATA; + logic_input_t m_SLIN; + logic_input_t m_SRIN; + logic_input_t m_CLK; + logic_input_t m_S0; + logic_input_t m_S1; + logic_input_t m_CLRQ; + object_array_t m_Q; + + state_var m_last_CLK; + state_var m_last_Q; + }; + + NETLIB_OBJECT_DERIVED(74194_dip, 74194) + { + NETLIB_CONSTRUCTOR_DERIVED(74194_dip, 74194) + { + register_subalias("1", m_CLRQ); + register_subalias("2", m_SRIN); + register_subalias("3", m_DATA[3]); + register_subalias("4", m_DATA[2]); + register_subalias("5", m_DATA[1]); + register_subalias("6", m_DATA[0]); + register_subalias("7", m_SLIN); + + register_subalias("9", m_S0); + register_subalias("10", m_S1); + register_subalias("11", m_CLK); + register_subalias("12", m_Q[0]); + register_subalias("13", m_Q[1]); + register_subalias("14", m_Q[2]); + register_subalias("15", m_Q[3]); + + } + }; + + NETLIB_RESET(74194) + { + m_last_CLK = 0; + m_last_Q = 0; + } + + // FIXME: Timing + NETLIB_UPDATE(74194) + { + unsigned q = m_last_Q; + + if (!m_CLRQ()) + { + q = 0; + } + else + { + if (!m_last_CLK && m_CLK()) + { + unsigned s = (m_S1() << 1) | m_S0(); + switch (s) + { + case 0: // LL: Keep old value + break; + case 1: // LH: Shift right + q >>= 1; + q |= m_SRIN() ? 8 : 0; + break; + case 2: + q <<= 1; + q |= m_SLIN() ? 1 : 0; + break; + case 3: + q = 0; + for (std::size_t i=0; i<4; i++) + q |= m_DATA[i]() << i; + break; + } + } + } + + m_last_Q = q; + m_last_CLK = m_CLK(); + + for (std::size_t i=0; i<4; i++) + m_Q[i].push((q >> i) & 1, NLTIME_FROM_NS(26)); // FIXME: Timing + } + + NETLIB_DEVICE_IMPL(74194) + NETLIB_DEVICE_IMPL(74194_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_74194.h b/src/lib/netlist/devices/nld_74194.h new file mode 100644 index 00000000000..703cf85a916 --- /dev/null +++ b/src/lib/netlist/devices/nld_74194.h @@ -0,0 +1,47 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_74194.h + * + * 74194: Parallel-Load 8-Bit Shift Register + * + * +--------------+ + * CLRQ |1 ++ 16| VCC + * SRIN |2 15| QA + * A |3 14| QB + * B |4 74194 13| QC + * C |5 12| QD + * D |6 11| CLK + * SLIN |7 10| S1 + * GND |8 9| S0 + * +--------------+ + * + * CLR: Clear + * SRIN: Shift Right Serial Input + * SLIN: Shift Left Serial Input + * CLK: Clock + * + */ + +#ifndef NLD_74194_H_ +#define NLD_74194_H_ + +#include "nl_setup.h" + +#define TTL_74194(name, cCLK, cS0, cS1, cSRIN, cA, cB, cC, cD, cSLIN, cCLRQ) \ + NET_REGISTER_DEV(TTL_74194, name) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, S0, cS0) \ + NET_CONNECT(name, S1, cC1) \ + NET_CONNECT(name, SRIN, cSRIN) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D, cD) \ + NET_CONNECT(name, SLIN, cSLIN) \ + NET_CONNECT(name, CLRQ, cCLRQ) + +#define TTL_74194_DIP(name) \ + NET_REGISTER_DEV(TTL_74194_DIP, name) + +#endif /* NLD_74194_H_ */ diff --git a/src/lib/netlist/devices/nld_7475.cpp b/src/lib/netlist/devices/nld_7475.cpp new file mode 100644 index 00000000000..e788824f940 --- /dev/null +++ b/src/lib/netlist/devices/nld_7475.cpp @@ -0,0 +1,156 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_7475.cpp + * + * TODO: Correct timing for clock-induced state changes, rather than assuming timing is always due to data-induced state changes + */ + +#include "nld_7475.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(7477) + { + NETLIB_CONSTRUCTOR(7477) + , m_C1C2(*this, "C1C2") + , m_C3C4(*this, "C3C4") + , m_last_Q(*this, "m_last_Q", 0) + , m_D(*this, {{"D1", "D2", "D3", "D4"}}) + , m_Q(*this, {{"Q1", "Q2", "Q3", "Q4"}}) + { + register_subalias("Q1", m_Q[0]); + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + void update_outputs(std::size_t start, std::size_t end); + + public: + logic_input_t m_C1C2; + logic_input_t m_C3C4; + state_var m_last_Q; + object_array_t m_D; + object_array_t m_Q; + }; + + NETLIB_OBJECT_DERIVED(7475, 7477) + { + NETLIB_CONSTRUCTOR_DERIVED(7475, 7477) + , m_QQ(*this, {{"QQ1", "QQ2", "QQ3", "QQ4"}}) + { + } + + NETLIB_UPDATEI(); + + public: + object_array_t m_QQ; + }; + + NETLIB_OBJECT_DERIVED(7475_dip, 7475) + { + NETLIB_CONSTRUCTOR_DERIVED(7475_dip, 7475) + { + register_subalias("1", m_QQ[0]); + register_subalias("2", m_D[0]); + register_subalias("3", m_D[1]); + register_subalias("4", m_C3C4); + //register_subalias("5", ); ==> VCC + register_subalias("6", m_D[2]); + register_subalias("7", m_D[3]); + register_subalias("8", m_QQ[3]); + + register_subalias("9", m_Q[3]); + register_subalias("10", m_Q[2]); + register_subalias("11", m_QQ[2]); + //register_subalias("12", ); ==> GND + register_subalias("13", m_C1C2); + register_subalias("14", m_QQ[1]); + register_subalias("15", m_Q[1]); + register_subalias("16", m_Q[0]); + } + }; + + NETLIB_OBJECT_DERIVED(7477_dip, 7477) + { + NETLIB_CONSTRUCTOR_DERIVED(7477_dip, 7477) + { + register_subalias("1", m_D[0]); + register_subalias("2", m_D[1]); + register_subalias("3", m_C3C4); + //register_subalias("4", ); ==> VCC + register_subalias("5", m_D[2]); + register_subalias("6", m_D[3]); + //register_subalias("7", ); ==> NC + + register_subalias("8", m_Q[3]); + register_subalias("9", m_Q[2]); + //register_subalias("10", ); ==> NC + //register_subalias("11", ); ==> GND + register_subalias("12", m_C1C2); + register_subalias("13", m_Q[1]); + register_subalias("14", m_Q[0]); + } + }; + + NETLIB_UPDATE(7475) + { + unsigned start_q = m_last_Q; + + NETLIB_PARENT_UPDATE(7477); + + for (std::size_t i=0; i<4; i++) + { + unsigned last_bit = (m_last_Q >> i) & 1; + unsigned start_bit = (start_q >> i) & 1; + if (last_bit != start_bit) + m_QQ[i].push(last_bit ^ 1, last_bit != 0 ? NLTIME_FROM_NS(15) : NLTIME_FROM_NS(40)); + } + } + + void NETLIB_NAME(7477)::update_outputs(std::size_t start, std::size_t end) + { + for (std::size_t i=start; i> i) & 1)) + m_Q[i].push(d, d != 0 ? NLTIME_FROM_NS(30) : NLTIME_FROM_NS(25)); + m_last_Q &= ~(1 << i); + m_last_Q |= d << i; + } + } + + NETLIB_RESET(7477) + { + m_last_Q = 0; + } + + NETLIB_UPDATE(7477) + { + netlist_sig_t c1c2 = m_C1C2(); + netlist_sig_t c3c4 = m_C3C4(); + if (c1c2 && c3c4) + { + update_outputs(0, 4); + } + else if (c1c2) + { + update_outputs(0, 2); + } + else if (c3c4) + { + update_outputs(2, 4); + } + + } + + NETLIB_DEVICE_IMPL(7475) + NETLIB_DEVICE_IMPL(7475_dip) + NETLIB_DEVICE_IMPL(7477) + NETLIB_DEVICE_IMPL(7477_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_7475.h b/src/lib/netlist/devices/nld_7475.h new file mode 100644 index 00000000000..ea7d668acd5 --- /dev/null +++ b/src/lib/netlist/devices/nld_7475.h @@ -0,0 +1,62 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_7475.h + * + * 7475: 4-Bit Bistable Latches with Complementary Outputs + * 7477: 4-Bit Bistable Latches + * + * +----------+ +----------+ + * 1QQ |1 ++ 16| 1Q 1D |1 ++ 14| 1Q + * 1D |2 15| 2Q 2D |2 13| 2Q + * 2D |3 14| 2QQ 3C4C |3 12| 1C2C + * 3C4C |4 7475 13| 1C2C VCC |4 7477 11| GND + * VCC |5 12| GND 3D |5 10| NC + * 3D |6 11| 3QQ 4D |6 9| 3Q + * 4D |7 10| 3Q NC |7 8| 4Q + * 4QQ |8 9| 4Q +----------+ + * +----------+ + * + * + * Function table + * + * +---+---++---+-----+ + * | D | C || Q | QQ | + * +===+===++===+=====+ + * | 0 | 1 || 0 | 1 | + * | 1 | 1 || 1 | 0 | + * | X | 0 || Q0| Q0Q | + * +---+---++---+-----+ + * + * Naming conventions follow Texas instruments datasheet + * + */ + +#ifndef NLD_7475_H_ +#define NLD_7475_H_ + +#include "nl_setup.h" + +#define PARAMS_7475_7477(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) \ + NET_CONNECT(name, C1C2, cC1C2) \ + NET_CONNECT(name, C3C4, cC3C4) \ + NET_CONNECT(name, D1, cD1) \ + NET_CONNECT(name, D2, cD2) \ + NET_CONNECT(name, D3, cD3) \ + NET_CONNECT(name, D4, cD4) + +#define TTL_7475(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) \ + NET_REGISTER_DEV(TTL_7475, name) \ + PARAMS_7475_7477(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) + +#define TTL_7477(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) \ + NET_REGISTER_DEV(TTL_7477, name) \ + PARAMS_7475_7477(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) + +#define TTL_7475_DIP(name) \ + NET_REGISTER_DEV(TTL_7475_DIP, name) + +#define TTL_7477_DIP(name) \ + NET_REGISTER_DEV(TTL_7477_DIP, name) + +#endif /* NLD_7475_H_ */ diff --git a/src/lib/netlist/devices/nld_7485.cpp b/src/lib/netlist/devices/nld_7485.cpp new file mode 100644 index 00000000000..631257ecb4e --- /dev/null +++ b/src/lib/netlist/devices/nld_7485.cpp @@ -0,0 +1,107 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_7485.cpp + * + */ + +#include "nld_7485.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(7485) + { + NETLIB_CONSTRUCTOR(7485) + , m_A(*this, {{"A0", "A1", "A2", "A3"}}) + , m_B(*this, {{"B0", "B1", "B2", "B3"}}) + , m_LTIN(*this, "LTIN") + , m_EQIN(*this, "EQIN") + , m_GTIN(*this, "GTIN") + , m_LTOUT(*this, "LTOUT") + , m_EQOUT(*this, "EQOUT") + , m_GTOUT(*this, "GTOUT") + { + } + + NETLIB_UPDATEI(); + + void update_outputs(unsigned gt, unsigned lt, unsigned eq); + + protected: + object_array_t m_A; + object_array_t m_B; + logic_input_t m_LTIN; + logic_input_t m_EQIN; + logic_input_t m_GTIN; + logic_output_t m_LTOUT; + logic_output_t m_EQOUT; + logic_output_t m_GTOUT; + }; + + NETLIB_OBJECT_DERIVED(7485_dip, 7485) + { + NETLIB_CONSTRUCTOR_DERIVED(7485_dip, 7485) + { + register_subalias("1", m_B[3]); + register_subalias("2", m_LTIN); + register_subalias("3", m_EQIN); + register_subalias("4", m_GTIN); + register_subalias("5", m_GTOUT); + register_subalias("6", m_EQOUT); + register_subalias("7", m_LTOUT); + + register_subalias("9", m_B[0]); + register_subalias("10", m_A[0]); + register_subalias("11", m_B[1]); + register_subalias("12", m_A[1]); + register_subalias("13", m_A[2]); + register_subalias("14", m_B[2]); + register_subalias("15", m_A[3]); + + } + }; + + void NETLIB_NAME(7485)::update_outputs(unsigned gt, unsigned lt, unsigned eq) + { + m_GTOUT.push(gt, NLTIME_FROM_NS(23)); + m_LTOUT.push(lt, NLTIME_FROM_NS(23)); + m_EQOUT.push(eq, NLTIME_FROM_NS(23)); + } + + // FIXME: Timing + NETLIB_UPDATE(7485) + { + for (std::int_fast32_t i = 3; i >= 0; i++) + { + if (m_A[i]() > m_B[i]()) + { + update_outputs(1, 0, 0); + return; + } + else if (m_A[i]() < m_B[i]()) + { + update_outputs(0, 1, 0); + return; + } + } + + // must be == if we got here + if (m_EQIN()) + update_outputs(0, 0, 1); + else if (m_GTIN() && m_LTIN()) + update_outputs(0, 0, 0); + else if (m_GTIN()) + update_outputs(1, 0, 0); + else if (m_LTIN()) + update_outputs(0, 1, 0); + else + update_outputs(1, 1, 0); + } + + NETLIB_DEVICE_IMPL(7485) + NETLIB_DEVICE_IMPL(7485_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_7485.h b/src/lib/netlist/devices/nld_7485.h new file mode 100644 index 00000000000..d97a323e416 --- /dev/null +++ b/src/lib/netlist/devices/nld_7485.h @@ -0,0 +1,45 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_7485.h + * + * DM7485: 4-bit Magnitude Comparators + * + * +------------+ + * B3 |1 ++ 16| VCC + * LTIN |2 15| A3 + * EQIN |3 14| B2 + * GTIN |4 7485 13| A2 + * GTOUT |5 12| A1 + * EQOUT |6 11| B1 + * LTOUT |7 10| A0 + * GND |8 9| B0 + * +------------+ + * + * Naming convention attempts to follow Texas Instruments datasheet + * + */ + +#ifndef NLD_7485_H_ +#define NLD_7485_H_ + +#include "nl_setup.h" + +#define TTL_7485(name, cA0, cA1, cA2, cA3, cB0, cB1, cB2, cB3, cLTIN, cEQIN, cGTIN) \ + NET_REGISTER_DEV(TTL_7485, name) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, B0, cB0) \ + NET_CONNECT(name, B1, cB1) \ + NET_CONNECT(name, B2, cB2) \ + NET_CONNECT(name, B3, cB3) \ + NET_CONNECT(name, LTIN, cLTIN) \ + NET_CONNECT(name, EQIN, cEQIN) \ + NET_CONNECT(name, GTIN, cGTIN) + +#define TTL_7485_DIP(name) \ + NET_REGISTER_DEV(TTL_7485_DIP, name) + +#endif /* NLD_7485_H_ */ diff --git a/src/lib/netlist/devices/nld_9322.cpp b/src/lib/netlist/devices/nld_9322.cpp new file mode 100644 index 00000000000..afecca03e63 --- /dev/null +++ b/src/lib/netlist/devices/nld_9322.cpp @@ -0,0 +1,102 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_9322.cpp + * + */ + +#include "nld_9322.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(9322_selector) + { + NETLIB_CONSTRUCTOR(9322_selector) + , m_A(*this, "A") + , m_B(*this, "B") + , m_Y(*this, "Y") + { + } + + void update_outputs(const netlist_sig_t strobe, const netlist_sig_t select); + + public: + logic_input_t m_A; + logic_input_t m_B; + logic_output_t m_Y; + }; + + // FIXME: Timing + void NETLIB_NAME(9322_selector)::update_outputs(const netlist_sig_t strobe, const netlist_sig_t select) + { + if (strobe) + m_Y.push(0, NLTIME_FROM_NS(21)); + else if (select) + m_Y.push(m_B(), NLTIME_FROM_NS(14)); + else + m_Y.push(m_A(), NLTIME_FROM_NS(14)); + } + + NETLIB_OBJECT(9322) + { + NETLIB_CONSTRUCTOR(9322) + , m_1(*this, "1") + , m_2(*this, "2") + , m_3(*this, "3") + , m_4(*this, "4") + , m_SELECT(*this, "SELECT") + , m_STROBE(*this, "STROBE") + { + } + + NETLIB_UPDATEI(); + + protected: + NETLIB_SUB(9322_selector) m_1; + NETLIB_SUB(9322_selector) m_2; + NETLIB_SUB(9322_selector) m_3; + NETLIB_SUB(9322_selector) m_4; + + logic_input_t m_SELECT; + logic_input_t m_STROBE; + }; + + NETLIB_OBJECT_DERIVED(9322_dip, 9322) + { + NETLIB_CONSTRUCTOR_DERIVED(9322_dip, 9322) + { + register_subalias("1", m_SELECT); + register_subalias("2", m_1.m_A); + register_subalias("3", m_1.m_B); + register_subalias("4", m_1.m_Y); + register_subalias("5", m_2.m_A); + register_subalias("6", m_2.m_B); + register_subalias("7", m_2.m_Y); + + register_subalias("9", m_3.m_Y); + register_subalias("10", m_3.m_B); + register_subalias("11", m_3.m_A); + register_subalias("12", m_4.m_Y); + register_subalias("13", m_4.m_B); + register_subalias("14", m_4.m_A); + register_subalias("15", m_STROBE); + } + }; + + NETLIB_UPDATE(9322) + { + const netlist_sig_t strobe = m_STROBE(); + const netlist_sig_t select = m_SELECT(); + m_1.update_outputs(strobe, select); + m_2.update_outputs(strobe, select); + m_3.update_outputs(strobe, select); + m_4.update_outputs(strobe, select); + } + + NETLIB_DEVICE_IMPL(9322) + NETLIB_DEVICE_IMPL(9322_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_9322.h b/src/lib/netlist/devices/nld_9322.h new file mode 100644 index 00000000000..e47bb9eda32 --- /dev/null +++ b/src/lib/netlist/devices/nld_9322.h @@ -0,0 +1,42 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_9322.h + * + * 9322: Quad 2-Line to 1-Line Data Selectors/Multiplexers + * + * +------------+ + * SELECT |1 ++ 16| VCC + * A1 |2 15| STROBE + * B1 |3 14| A4 + * Y1 |4 9322 13| B4 + * A2 |5 12| Y4 + * B2 |6 11| A3 + * Y2 |7 10| B3 + * GND |8 9| Y3 + * +------------+ + * + */ + +#ifndef NLD_9322_H_ +#define NLD_9322_H_ + +#include "nl_setup.h" + +#define TTL_9322(name, cSELECT, cA1, cB1, cA2, cB2, cA3, cB3, cA4, cB4, cSTROBE) \ + NET_REGISTER_DEV(TTL_9322, name) \ + NET_CONNECT(name, SELECT, cSELECT) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, B1, cB1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, B2, cB2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, B3, cB3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, B4, cB4) \ + NET_CONNECT(name, STROBE, cSTROBE) + +#define TTL_9322_DIP(name) \ + NET_REGISTER_DEV(TTL_9322_DIP, name) + +#endif /* NLD_9322_H_ */ diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 6d4a001f7fd..fe799af4c2c 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -125,6 +125,7 @@ class NETLIB_NAME(name) : public device_t #define NETLIB_SUBXX(chip) std::unique_ptr< nld_ ## chip > #define NETLIB_UPDATE(chip) void NETLIB_NAME(chip) :: update(void) NL_NOEXCEPT +#define NETLIB_PARENT_UPDATE(chip) NETLIB_NAME(chip) :: update(); #define NETLIB_RESET(chip) void NETLIB_NAME(chip) :: reset(void) diff --git a/src/mame/drivers/atarittl.cpp b/src/mame/drivers/atarittl.cpp index 3a07b4cc16e..2f9e10d67eb 100644 --- a/src/mame/drivers/atarittl.cpp +++ b/src/mame/drivers/atarittl.cpp @@ -57,28 +57,14 @@ netlist system per-game: TM-057 (Stunt Cycle) - 4001 Quad 2-Input NOR Gates - 4016 Quad Bilateral Switch 4136 Quad General-Purpose Operational Amplifiers - 7485 4-bit Magnitude Counters - 74165 8-bit Parallel-In/Serial-Out Shift Register - 74194 4-bit Bidirectional Universal Shift Register - 9312 One-of-Eight Line Data Selectors/Multiplexers - 9316 Synchronous 4-bit Counters - 9322 Quad 2-Line to 1-Line Data Selectors/Multiplexers - 9602 Dual Retriggerable, Resettable One Shots TM-055 (Indy 4) 7406 Hex Inverter Buffers/Drivers with O.C. H.V. Outputs (note: Might not be needed, could just clone from 7404) 7414 Hex Schmitt-Trigger Inverters 7417 Hex Buffers/Drivers - 7475 4-bit Bistable Latches - 7485 4-bit Magnitude Comparators 74164 8-bit Serial-In, Parallel-Out Shift Register 9301 1-of-10 Decoder - 9312 One-of-Eight Line Data Selectors/Multiplexers - 9316 Synchronous 4-Bit Counters - 9322 Quad 2-Line to 1-Line Data Selectors/Multiplexers LM339 Quad Comparator ***************************************************************************/ -- cgit v1.2.3-70-g09d2 From f5bc78c2110ef3763319a00c7cfe43c88e087390 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Fri, 23 Dec 2016 14:54:54 +1100 Subject: netlist: Added 4316 bilateral switch pack. --- scripts/src/netlist.lua | 2 + src/lib/netlist/devices/nld_4066.h | 2 +- src/lib/netlist/devices/nld_4316.cpp | 49 ++++++++++++++++++++++ src/lib/netlist/devices/nld_4316.h | 33 +++++++++++++++ src/lib/netlist/macro/nlm_cd4xxx.cpp | 79 +++++++++++++++++++++++++----------- 5 files changed, 140 insertions(+), 25 deletions(-) create mode 100644 src/lib/netlist/devices/nld_4316.cpp create mode 100644 src/lib/netlist/devices/nld_4316.h (limited to 'scripts/src/netlist.lua') diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index fe383c87445..0f2bf3e4599 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -99,6 +99,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_4020.h", MAME_DIR .. "src/lib/netlist/devices/nld_4066.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_4066.h", + MAME_DIR .. "src/lib/netlist/devices/nld_4316.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_4316.h", MAME_DIR .. "src/lib/netlist/devices/nld_7448.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_7448.h", MAME_DIR .. "src/lib/netlist/devices/nld_7450.cpp", diff --git a/src/lib/netlist/devices/nld_4066.h b/src/lib/netlist/devices/nld_4066.h index 570f9ecf16d..fdaa76d65f3 100644 --- a/src/lib/netlist/devices/nld_4066.h +++ b/src/lib/netlist/devices/nld_4066.h @@ -15,7 +15,7 @@ * VSS |7 8| INOUTC * +--------------+ * - * FIXME: These devices are slow (~125 ns). THis is currently not reflected + * FIXME: These devices are slow (~125 ns). This is currently not reflected * * Naming conventions follow National semiconductor datasheet * diff --git a/src/lib/netlist/devices/nld_4316.cpp b/src/lib/netlist/devices/nld_4316.cpp new file mode 100644 index 00000000000..2df93167d18 --- /dev/null +++ b/src/lib/netlist/devices/nld_4316.cpp @@ -0,0 +1,49 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb +/* + * nld_4316.c + * + */ + +#include +#include "analog/nld_twoterm.h" +#include "nld_4316.h" + +namespace netlist { namespace devices { + + NETLIB_OBJECT(CD4316_GATE) + { + NETLIB_CONSTRUCTOR(CD4316_GATE) + NETLIB_FAMILY("CD4XXX") + , m_supply(*this, "PS") + , m_R(*this, "R") + , m_S(*this, "S") + , m_E(*this, "E") + , m_base_r(*this, "BASER", 45.0) + { + } + + NETLIB_RESETI() { } + NETLIB_UPDATEI(); + + public: + NETLIB_SUB(vdd_vss) m_supply; + NETLIB_SUB(R) m_R; + + logic_input_t m_S, m_E; + param_double_t m_base_r; + }; + + NETLIB_UPDATE(CD4316_GATE) + { + m_R.update_dev(); + if (m_S() && !m_E()) + m_R.set_R(m_base_r()); + else + m_R.set_R(NL_FCONST(1.0) / netlist().gmin()); + m_R.m_P.schedule_after(NLTIME_FROM_NS(1)); + } + + NETLIB_DEVICE_IMPL(CD4316_GATE); + +} } // namesapce netlist::devices diff --git a/src/lib/netlist/devices/nld_4316.h b/src/lib/netlist/devices/nld_4316.h new file mode 100644 index 00000000000..8d8ec4f0ae0 --- /dev/null +++ b/src/lib/netlist/devices/nld_4316.h @@ -0,0 +1,33 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb +/* + * nld_4136.h + * + * CD4066: Quad Analog Switch with Level Translation + * + * +--------------+ + * 1Z |1 ++ 16| VCC + * 1Y |2 15| 1S + * 2Y |3 14| 4S + * 2Z |4 4066 13| 4Z + * 2S |5 12| 4Y + * 3S |6 11| 3Y + * /E |7 10| 3Z + * GND |8 9| VEE + * +--------------+ + * + * FIXME: These devices are slow (can be over 200 ns in HC types). This is currently not reflected + * + * Naming conventions follow Texas Instruments datasheet + * + */ + +#ifndef NLD_4316_H_ +#define NLD_4316_H_ + +#include "nl_setup.h" + +#define CD4316_GATE(name) \ + NET_REGISTER_DEV(CD4316_GATE, name) + +#endif /* NLD_4316_H_ */ diff --git a/src/lib/netlist/macro/nlm_cd4xxx.cpp b/src/lib/netlist/macro/nlm_cd4xxx.cpp index 95fff085b9e..d169e2790f5 100644 --- a/src/lib/netlist/macro/nlm_cd4xxx.cpp +++ b/src/lib/netlist/macro/nlm_cd4xxx.cpp @@ -6,6 +6,7 @@ #include "devices/nld_system.h" #include "devices/nld_4020.h" #include "devices/nld_4066.h" +#include "devices/nld_4316.h" /* * CD4001BC: Quad 2-Input NOR Buffered B Series Gate @@ -31,14 +32,14 @@ static NETLIST_START(CD4001_DIP) DUMMY_INPUT(VSS) DUMMY_INPUT(VDD) - DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VSS.I, - s1.B, /* B1 |2 13| A6 */ s4.B, - s1.Q, /* A2 |3 12| Y6 */ s4.A, - s2.Q, /* Y2 |4 4001 11| A5 */ s4.Q, - s2.A, /* A3 |5 10| Y5 */ s3.Q, - s2.B, /* Y3 |6 9| A4 */ s3.B, - VDD.I, /* GND |7 8| Y4 */ s3.A + DIPPINS( /* +--------------+ */ + s1.A, /* A1 |1 ++ 14| VCC */ VSS.I, + s1.B, /* B1 |2 13| A6 */ s4.B, + s1.Q, /* A2 |3 12| Y6 */ s4.A, + s2.Q, /* Y2 |4 4001 11| A5 */ s4.Q, + s2.A, /* A3 |5 10| Y5 */ s3.Q, + s2.B, /* Y3 |6 9| A4 */ s3.B, + VDD.I, /* GND |7 8| Y4 */ s3.A /* +--------------+ */ ) @@ -115,14 +116,14 @@ static NETLIST_START(CD4066_DIP) PARAM(C.BASER, 270.0) PARAM(D.BASER, 270.0) - DIPPINS( /* +--------------+ */ - A.R.1, /* INOUTA |1 ++ 14| VDD */ A.PS.VDD, - A.R.2, /* OUTINA |2 13| CONTROLA */ A.CTL, - B.R.1, /* OUTINB |3 12| CONTROLD */ D.CTL, - B.R.2, /* INOUTB |4 4066 11| INOUTD */ D.R.1, - B.CTL, /* CONTROLB |5 10| OUTIND */ D.R.2, - C.CTL, /* CONTROLC |6 9| OUTINC */ C.R.1, - A.PS.VSS, /* VSS |7 8| INOUTC */ C.R.2 + DIPPINS( /* +--------------+ */ + A.R.1, /* INOUTA |1 ++ 14| VDD */ A.PS.VDD, + A.R.2, /* OUTINA |2 13| CONTROLA */ A.CTL, + B.R.1, /* OUTINB |3 12| CONTROLD */ D.CTL, + B.R.2, /* INOUTB |4 4066 11| INOUTD */ D.R.1, + B.CTL, /* CONTROLB |5 10| OUTIND */ D.R.2, + C.CTL, /* CONTROLC |6 9| OUTINC */ C.R.1, + A.PS.VSS, /* VSS |7 8| INOUTC */ C.R.2 /* +--------------+ */ ) NETLIST_END() @@ -141,18 +142,47 @@ static NETLIST_START(CD4016_DIP) PARAM(C.BASER, 1000.0) PARAM(D.BASER, 1000.0) - DIPPINS( /* +--------------+ */ - A.R.1, /* INOUTA |1 ++ 14| VDD */ A.PS.VDD, - A.R.2, /* OUTINA |2 13| CONTROLA */ A.CTL, - B.R.1, /* OUTINB |3 12| CONTROLD */ D.CTL, - B.R.2, /* INOUTB |4 4016 11| INOUTD */ D.R.1, - B.CTL, /* CONTROLB |5 10| OUTIND */ D.R.2, - C.CTL, /* CONTROLC |6 9| OUTINC */ C.R.1, - A.PS.VSS, /* VSS |7 8| INOUTC */ C.R.2 + DIPPINS( /* +--------------+ */ + A.R.1, /* INOUTA |1 ++ 14| VDD */ A.PS.VDD, + A.R.2, /* OUTINA |2 13| CONTROLA */ A.CTL, + B.R.1, /* OUTINB |3 12| CONTROLD */ D.CTL, + B.R.2, /* INOUTB |4 4016 11| INOUTD */ D.R.1, + B.CTL, /* CONTROLB |5 10| OUTIND */ D.R.2, + C.CTL, /* CONTROLC |6 9| OUTINC */ C.R.1, + A.PS.VSS, /* VSS |7 8| INOUTC */ C.R.2 /* +--------------+ */ ) NETLIST_END() +static NETLIST_START(CD4316_DIP) + CD4316_GATE(A) + CD4316_GATE(B) + CD4316_GATE(C) + CD4316_GATE(D) + + NET_C(A.E, B.E, C.E, D.E) + NET_C(A.PS.VDD, B.PS.VDD, C.PS.VDD, D.PS.VDD) + NET_C(A.PS.VSS, B.PS.VSS, C.PS.VSS, D.PS.VSS) + + PARAM(A.BASER, 45.0) + PARAM(B.BASER, 45.0) + PARAM(C.BASER, 45.0) + PARAM(D.BASER, 45.0) + + DIPPINS( /* +--------------+ */ + A.R.2, /* 1Z |1 ++ 16| VCC */ A.PS.VDD, + A.R.1, /* 1Y |2 15| 1S */ A.S, + B.R.1, /* 2Y |3 14| 4S */ D.S, + B.R.2, /* 2Z |4 4316 13| 4Z */ D.R.2, + B.S, /* 2S |5 12| 4Y */ D.R.1, + C.S, /* 3S |6 11| 3Y */ C.R.1, + A.E, /* /E |7 10| 3Z */ C.R.2, + A.PS.VSS, /* GND |8 9| VEE */ VEE + /* +--------------+ */ + ) + +NETLIST_END() + NETLIST_START(CD4XXX_lib) TRUTHTABLE_START(CD4001_NOR, 2, 1, "") @@ -169,5 +199,6 @@ NETLIST_START(CD4XXX_lib) LOCAL_LIB_ENTRY(CD4020_DIP) LOCAL_LIB_ENTRY(CD4016_DIP) LOCAL_LIB_ENTRY(CD4066_DIP) + LOCAL_LIB_ENTRY(CD4316_DIP) NETLIST_END() -- cgit v1.2.3-70-g09d2 From 9c4c4d0a5b9237b599728c9d1cb5681ecce658bc Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Fri, 23 Dec 2016 20:01:32 +0100 Subject: -netlist: Added 82S126 4kbit (512x8) TTL bipolar PROM. [Ryan Holtz] --- scripts/src/netlist.lua | 2 + src/lib/netlist/build/makefile | 1 + src/lib/netlist/devices/net_lib.cpp | 3 +- src/lib/netlist/devices/net_lib.h | 1 + src/lib/netlist/devices/nld_74107.cpp | 102 +++++++++++++++++++++++++++-- src/lib/netlist/devices/nld_74107.h | 23 ++++--- src/lib/netlist/devices/nld_7473.cpp | 13 ++-- src/lib/netlist/devices/nld_82S115.cpp | 113 +++++++++++++++++++++++++++++++++ src/lib/netlist/devices/nld_82S115.h | 51 +++++++++++++++ src/lib/netlist/devices/nld_82S126.cpp | 19 +----- src/lib/netlist/devices/nld_82S126.h | 8 +-- src/mame/machine/nl_hazelvid.cpp | 2 +- src/mame/machine/nl_stuntcyc.cpp | 85 +++++++++++++++++++++++++ 13 files changed, 385 insertions(+), 38 deletions(-) create mode 100644 src/lib/netlist/devices/nld_82S115.cpp create mode 100644 src/lib/netlist/devices/nld_82S115.h (limited to 'scripts/src/netlist.lua') diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index 0f2bf3e4599..8462bc0a1a0 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -149,6 +149,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_74ls629.h", MAME_DIR .. "src/lib/netlist/devices/nld_82S16.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_82S16.h", + MAME_DIR .. "src/lib/netlist/devices/nld_82S115.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_82S115.h", MAME_DIR .. "src/lib/netlist/devices/nld_82S126.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_82S126.h", MAME_DIR .. "src/lib/netlist/devices/nld_9310.cpp", diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index 0fdc72eff87..04802af0c37 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -95,6 +95,7 @@ NLOBJS := \ $(NLOBJ)/devices/nld_74365.o \ $(NLOBJ)/devices/nld_74ls629.o \ $(NLOBJ)/devices/nld_82S16.o \ + $(NLOBJ)/devices/nld_82S115.o \ $(NLOBJ)/devices/nld_82S126.o \ $(NLOBJ)/devices/nld_9310.o \ $(NLOBJ)/devices/nld_9312.o \ diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index ec402ad5137..092d5239988 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -136,7 +136,8 @@ static void initialize_factory(factory_list_t &factory) //ENTRY(74279, TTL_74279, "-") // only dip available ENTRYX(SN74LS629, SN74LS629, "CAP") ENTRYX(82S16, TTL_82S16, "-") - ENTRYX(82S126, TTL_82S126, "-") + ENTRYX(82S115, PROM_82S115, "-") + ENTRYX(82S126, PROM_82S126, "-") ENTRYX(9310, TTL_9310, "-") ENTRYX(9312, TTL_9312, "-") ENTRYX(9316, TTL_9316, "+CLK,ENP,ENT,CLRQ,LOADQ,A,B,C,D") diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index 178a3020dec..d2140992372 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -42,6 +42,7 @@ #include "nld_74365.h" #include "nld_74ls629.h" #include "nld_82S16.h" +#include "nld_82S115.h" #include "nld_82S126.h" #include "nld_9310.h" #include "nld_9312.h" diff --git a/src/lib/netlist/devices/nld_74107.cpp b/src/lib/netlist/devices/nld_74107.cpp index a0ffcfc3fdd..db343f8b8c5 100644 --- a/src/lib/netlist/devices/nld_74107.cpp +++ b/src/lib/netlist/devices/nld_74107.cpp @@ -64,18 +64,77 @@ namespace netlist }; - NETLIB_OBJECT_DERIVED(74107, 74107A) + NETLIB_OBJECT(74107) { + NETLIB_CONSTRUCTOR(74107) + , m_CLK(*this, "CLK") + , m_J(*this, "J") + , m_K(*this, "K") + , m_CLRQ(*this, "CLRQ") + , m_last_CLK(*this, "m_last_CLK", 0) + , m_q(*this, "m_q", 0) + , m_latched_JK(*this, "m_latched_JK", 0) + , m_Q(*this, "Q") + , m_QQ(*this, "QQ") + { + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + public: - NETLIB_CONSTRUCTOR_DERIVED(74107, 74107A) { } + logic_input_t m_CLK; + logic_input_t m_J; + logic_input_t m_K; + logic_input_t m_CLRQ; + state_var m_last_CLK; + state_var m_q; + state_var m_latched_JK; + + logic_output_t m_Q; + logic_output_t m_QQ; }; + NETLIB_RESET(74107) + { + m_last_CLK = 0; + m_latched_JK = 0; + } + NETLIB_OBJECT(74107_dip) { NETLIB_CONSTRUCTOR(74107_dip) , m_1(*this, "1") , m_2(*this, "2") + { + register_subalias("1", m_1.m_CLK); + register_subalias("2", m_1.m_CLRQ); + register_subalias("3", m_1.m_K); + //register_subalias("4", ); ==> VCC + register_subalias("5", m_2.m_CLK); + register_subalias("6", m_2.m_CLRQ); + register_subalias("7", m_2.m_J); + + register_subalias("8", m_2.m_QQ); + register_subalias("9", m_2.m_Q); + register_subalias("10", m_2.m_K); + //register_subalias("11", ); ==> VCC + register_subalias("12", m_2.m_Q); + register_subalias("13", m_1.m_QQ); + register_subalias("14", m_1.m_J); + } + + private: + NETLIB_SUB(74107) m_1; + NETLIB_SUB(74107) m_2; + }; + + NETLIB_OBJECT(74107A_dip) + { + NETLIB_CONSTRUCTOR(74107A_dip) + , m_1(*this, "1") + , m_2(*this, "2") { register_subalias("1", m_1.m_J); register_subalias("2", m_1.m_sub.m_QQ); @@ -102,8 +161,8 @@ namespace netlist //NETLIB_UPDATEI(); private: - NETLIB_SUB(74107) m_1; - NETLIB_SUB(74107) m_2; + NETLIB_SUB(74107A) m_1; + NETLIB_SUB(74107A) m_2; }; NETLIB_RESET(74107Asub) @@ -173,9 +232,44 @@ namespace netlist m_sub.m_clk.activate_hl(); } + NETLIB_UPDATE(74107) + { + if (m_CLRQ()) + { + if (m_CLK() && !m_last_CLK) + { + m_latched_JK = (m_J() << 1) | m_K(); + } + else if (!m_CLK() && m_last_CLK) + { + switch (m_latched_JK) + { + case 1: // (!m_J) & m_K)) + m_q = 0; + break; + case 2: // (m_J) & !m_K)) + m_q = 1; + break; + case 3: // (m_J) & m_K)) + m_q ^= 1; + break; + default: + case 0: + break; + } + } + } + + m_last_CLK = m_CLK(); + + m_Q.push(m_q, NLTIME_FROM_NS(20)); // FIXME: timing + m_QQ.push(m_q ^ 1, NLTIME_FROM_NS(20)); // FIXME: timing + } + NETLIB_DEVICE_IMPL(74107) NETLIB_DEVICE_IMPL(74107A) NETLIB_DEVICE_IMPL(74107_dip) + NETLIB_DEVICE_IMPL(74107A_dip) } //namespace devices } // namespace netlist diff --git a/src/lib/netlist/devices/nld_74107.h b/src/lib/netlist/devices/nld_74107.h index ea73256e818..132932f0397 100644 --- a/src/lib/netlist/devices/nld_74107.h +++ b/src/lib/netlist/devices/nld_74107.h @@ -61,17 +61,24 @@ #include "nl_setup.h" -#define TTL_74107A(name, cCLK, cJ, cK, cCLRQ) \ - NET_REGISTER_DEV(TTL_74107A, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, J, cJ) \ - NET_CONNECT(name, K, cK) \ +#define PARAMS_74107_74107A(name, cCLK, cJ, cK, cCLRQ) \ + 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(name, cCLK, cJ, cK, cCLRQ) \ + NET_REGISTER_DEV(TTL_74107, name) \ + PARAMS_74107_74107A(name, cCLK, cJ, cK, cCLRQ) -#define TTL_74107_DIP(name) \ +#define TTL_74107A(name, cCLK, cJ, cK, cCLRQ) \ + NET_REGISTER_DEV(TTL_74107A, name) \ + PARAMS_74107_74107A(name, cCLK, cJ, cK, cCLRQ) + +#define TTL_74107_DIP(name) \ NET_REGISTER_DEV(TTL_74107_DIP, name) +#define TTL_74107A_DIP(name) \ + NET_REGISTER_DEV(TTL_74107A_DIP, name) + #endif /* NLD_74107_H_ */ diff --git a/src/lib/netlist/devices/nld_7473.cpp b/src/lib/netlist/devices/nld_7473.cpp index d1daa9b6172..fbddd6d8e86 100644 --- a/src/lib/netlist/devices/nld_7473.cpp +++ b/src/lib/netlist/devices/nld_7473.cpp @@ -20,6 +20,7 @@ namespace netlist , m_CLRQ(*this, "CLRQ") , m_last_CLK(*this, "m_last_CLK", 0) , m_q(*this, "m_q", 0) + , m_latched_JK(*this, "m_latched_JK", 0) , m_Q(*this, "Q") , m_QQ(*this, "QQ") { @@ -36,6 +37,7 @@ namespace netlist state_var m_last_CLK; state_var m_q; + state_var m_latched_JK; logic_output_t m_Q; logic_output_t m_QQ; @@ -107,17 +109,20 @@ namespace netlist NETLIB_RESET(7473) { m_last_CLK = 0; + m_latched_JK = 0; } NETLIB_UPDATE(7473) { - const auto JK = (m_J() << 1) | m_K(); - if (m_CLRQ()) { - if (!m_CLK() && m_last_CLK) + if (m_CLK() && !m_last_CLK) + { + m_latched_JK = (m_J() << 1) | m_K(); + } + else if (!m_CLK() && m_last_CLK) { - switch (JK) + switch (m_latched_JK) { case 1: // (!m_J) & m_K)) m_q = 0; diff --git a/src/lib/netlist/devices/nld_82S115.cpp b/src/lib/netlist/devices/nld_82S115.cpp new file mode 100644 index 00000000000..a4a375ee364 --- /dev/null +++ b/src/lib/netlist/devices/nld_82S115.cpp @@ -0,0 +1,113 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_82S115.cpp + * + */ + +#include "nld_82S115.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(82S115) + { + NETLIB_CONSTRUCTOR(82S115) + , m_A(*this, {{"A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8"}}) + , m_CE1(*this, "CE1") + , m_CE2Q(*this, "CE2Q") + , m_STROBE(*this, "STROBE") + , m_O(*this, {{"O1", "O2", "O3", "O4", "O5", "O6", "O7", "O8"}}) + , m_last_O(*this, "m_last_O", 0) + , m_ROM(*this, "m_ROM", nullptr) + { + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + protected: + object_array_t m_A; + logic_input_t m_CE1; + logic_input_t m_CE2Q; + logic_input_t m_STROBE; + object_array_t m_O; + + state_var m_last_O; + + param_ptr_t m_ROM; // 4096 bits, 512x8 + }; + + NETLIB_OBJECT_DERIVED(82S115_dip, 82S115) + { + NETLIB_CONSTRUCTOR_DERIVED(82S115_dip, 82S115) + { + register_subalias("21", m_A[0]); + register_subalias("22", m_A[1]); + register_subalias("23", m_A[2]); + register_subalias("1", m_A[3]); + register_subalias("2", m_A[4]); + register_subalias("3", m_A[5]); + register_subalias("4", m_A[6]); + register_subalias("5", m_A[7]); + register_subalias("6", m_A[8]); + + register_subalias("20", m_CE1); + register_subalias("19", m_CE2Q); + + // register_subalias("13", m_FE1); + // register_subalias("11", m_FE2); + + register_subalias("18", m_STROBE); + + register_subalias("7", m_O[0]); + register_subalias("8", m_O[1]); + register_subalias("9", m_O[2]); + register_subalias("10", m_O[3]); + register_subalias("14", m_O[4]); + register_subalias("15", m_O[5]); + register_subalias("16", m_O[6]); + register_subalias("17", m_O[7]); + } + }; + + NETLIB_RESET(82S115) + { + m_last_O = 0; + } + + // FIXME: timing! + NETLIB_UPDATE(82S115) + { + unsigned o = 0; + + if (m_CE1() && !m_CE2Q()) + { + if (m_STROBE()) + { + unsigned a = 0; + for (std::size_t i=0; i<9; i++) + a |= (m_A[i]() << i); + + if (m_ROM() != nullptr) + o = ((std::uint_fast8_t*)(m_ROM()))[a]; + } + else + { + o = m_last_O; + } + } + + m_last_O = o; + + // FIXME: Outputs are tristate. This needs to be properly implemented + for (std::size_t i=0; i<8; i++) + m_O[i].push((o >> i) & 1, NLTIME_FROM_NS(40)); // FIXME: Timing + } + + NETLIB_DEVICE_IMPL(82S115) + NETLIB_DEVICE_IMPL(82S115_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_82S115.h b/src/lib/netlist/devices/nld_82S115.h new file mode 100644 index 00000000000..34ab5bf2534 --- /dev/null +++ b/src/lib/netlist/devices/nld_82S115.h @@ -0,0 +1,51 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_82S115.h + * + * 82S115: 4K-bit TTL bipolar PROM (512 x 8) + * + * +--------------+ + * A3 |1 ++ 24| VCC + * A4 |2 23| A2 + * A5 |3 22| A1 + * A6 |4 82S115 21| A0 + * A7 |5 20| CE1Q + * A8 |6 19| CE2 + * O1 |7 18| STROBE + * O2 |8 17| O8 + * O3 |9 16| O7 + * O4 |10 15| O6 + * FE2 |11 14| O5 + * GND |12 13| FE1 + * +--------------+ + * + * + * Naming conventions follow Signetics datasheet + * + */ + +#ifndef NLD_82S115_H_ +#define NLD_82S115_H_ + +#include "nl_setup.h" + +#define PROM_82S115(name, cCE1, cCE2Q, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7, cA8, cSTROBE) \ + NET_REGISTER_DEV(PROM_82S115, name) \ + NET_CONNECT(name, CE1Q, cCE1Q) \ + NET_CONNECT(name, CE2Q, cCE2Q) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, A5, cA5) \ + NET_CONNECT(name, A6, cA6) \ + NET_CONNECT(name, A7, cA7) \ + NET_CONNECT(name, A8, cA8) \ + NET_CONNECT(name, STROBE, cSTROBE) + +#define PROM_82S115_DIP(name) \ + NET_REGISTER_DEV(PROM_82S115_DIP, name) + +#endif /* NLD_82S115_H_ */ diff --git a/src/lib/netlist/devices/nld_82S126.cpp b/src/lib/netlist/devices/nld_82S126.cpp index 027a477806a..9d481a8a877 100644 --- a/src/lib/netlist/devices/nld_82S126.cpp +++ b/src/lib/netlist/devices/nld_82S126.cpp @@ -1,7 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Ryan Holtz /* - * nld_82s126.cpp + * nld_82S126.cpp * */ @@ -62,7 +62,7 @@ namespace netlist unsigned o = 0xf; netlist_time delay = NLTIME_FROM_NS(25); - if (m_CE1Q() && m_CE1Q()) + if (!m_CE1Q() && !m_CE2Q()) { unsigned a = 0; for (std::size_t i=0; i<8; i++) @@ -73,20 +73,7 @@ namespace netlist delay = NLTIME_FROM_NS(50); } -#if 0 - printf("CE1Q%d CE2Q%d %d%d%d%d%d%d%d%d %x\n", - m_CE1Q() ? 1 : 0, - m_CE2Q() ? 1 : 0, - m_A[0]() ? 1 : 0, - m_A[1]() ? 1 : 0, - m_A[2]() ? 1 : 0, - m_A[3]() ? 1 : 0, - m_A[4]() ? 1 : 0, - m_A[5]() ? 1 : 0, - m_A[6]() ? 1 : 0, - m_A[7]() ? 1 : 0, - o); -#endif + // FIXME: Outputs are tristate. This needs to be properly implemented for (std::size_t i=0; i<4; i++) m_O[i].push((o >> i) & 1, delay); diff --git a/src/lib/netlist/devices/nld_82S126.h b/src/lib/netlist/devices/nld_82S126.h index f0ce1cde310..5da2398e3c3 100644 --- a/src/lib/netlist/devices/nld_82S126.h +++ b/src/lib/netlist/devices/nld_82S126.h @@ -26,8 +26,8 @@ #include "nl_setup.h" -#define TTL_82S126(name, cCE1Q, cCE2Q, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7) \ - NET_REGISTER_DEV(TTL_82S126, name) \ +#define PROM_82S126(name, cCE1Q, cCE2Q, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7) \ + NET_REGISTER_DEV(PROM_82S126, name) \ NET_CONNECT(name, CE1Q, cCE1Q) \ NET_CONNECT(name, CE2Q, cCE2Q) \ NET_CONNECT(name, A0, cA0) \ @@ -39,7 +39,7 @@ NET_CONNECT(name, A6, cA6) \ NET_CONNECT(name, A7, cA7) -#define TTL_82S126_DIP(name) \ - NET_REGISTER_DEV(TTL_82S126_DIP, name) +#define PROM_82S126_DIP(name) \ + NET_REGISTER_DEV(PROM_82S126_DIP, name) #endif /* NLD_82S126_H_ */ diff --git a/src/mame/machine/nl_hazelvid.cpp b/src/mame/machine/nl_hazelvid.cpp index 81cc2c22c67..082689097c5 100644 --- a/src/mame/machine/nl_hazelvid.cpp +++ b/src/mame/machine/nl_hazelvid.cpp @@ -48,7 +48,7 @@ NETLIST_START(hazelvid) /* Horizontal/Vertical timing signals */ /* signal lookup PROM */ - TTL_82S126(u71, high, high, u70.QA, u70.QB, u70.QC, u70.QD, u69.QA, u69.QB, u69.QC, low) + PROM_82S126(u71, low, low, u70.QA, u70.QB, u70.QC, u70.QD, u69.QA, u69.QB, u69.QC, low) /* signal decoding */ TTL_DM9334(u72, high, u81.Q1Q, u71.O4, u71.O1, u71.O2, u71.O3) diff --git a/src/mame/machine/nl_stuntcyc.cpp b/src/mame/machine/nl_stuntcyc.cpp index 356931910cb..86895598e16 100644 --- a/src/mame/machine/nl_stuntcyc.cpp +++ b/src/mame/machine/nl_stuntcyc.cpp @@ -24,4 +24,89 @@ NETLIST_START(stuntcyc) MAINCLOCK(main_clk, 14318181.8) ALIAS(Y1, main_clk) +#if 0 + TTL_7404_INVERT(N3_6, main_clk) + ALIAS(HF_CLOCK, N3_6.Q) + + ALIAS(P, high) + ALIAS(GND, low) + + TTL_7474(N4_2, N3_6.Q, N4_2.QQ, P, P) + ALIAS(CLOCKQ, N4_2.QQ) + + TTL_9316(M4, N4_2.Q, P, P, P, J6_1.Q, GND, GND, GND, GND) + TTL_9316(L4, N4_2.Q, M4.RC, P, P, J6_1.Q, GND, GND, GND, GND) + ALIAS( 1H, M4.QA) + ALIAS( 2H, M4.QB) + ALIAS( 4H, M4.QC) + ALIAS( 8H, M4.QD) + ALIAS( 16H, L4.QA) + ALIAS( 32H, L4.QB) + ALIAS( 64H, L4.QC) + ALIAS(128H, L4.QD) + + TTL_74107(K4_1, 128H, P, P, P) + ALIAS(256H, K4_1.Q) + ALIAS(256HQ, K4_1.QQ) + + TTL_7420_NAND(J6_1, 8H, 64H, 128H, 256H) + ALIAS(HRESETQ, J6_1.Q) + + TTL_7404_INVERT(H6_3, HRESETQ) + ALIAS(HRESET, H6_3.Q) + + TTL_7493(L3, HRESET, L3.QA, VRESET, VRESET) + TTL_7493(K3, L3.QD, K3.QA, VRESET, VRESET) + ALIAS( 1V, L3.QA) + ALIAS( 2V, L3.QB) + ALIAS( 4V, L3.QC) + ALIAS( 8V, L3.QD) + ALIAS( 16V, K3.QA) + ALIAS( 32V, K3.QB) + ALIAS( 64V, K3.QC) + ALIAS(128V, K3.QD) + + TTL_74107(K4_2, 128V, P, P, VRESETQ) + ALIAS(256V, K4_2.Q) + ALIAS(256VQ, K4_2.QQ) + + TTL_7410_NAND(M5_3, 256V, 2V, 1V) + TTL_7474(M3_2, HRESET, M5_3.Q, P, P) + ALIAS(VRESET, M3_2.QQ) + ALIAS(VRESETQ, M3_2.Q) + + TTL_7402_NOR(J5_2, H6_3.Q, J5_1.Q) + TTL_7402_NOR(J5_1, 32H, J5_2.Q) + TTL_7402_NOR(J5_3, 8V, J5_4.Q) + TTL_7402_NOR(J5_4, VRESET, J5_3.Q) + ALIAS(HSYNC, J5_1.Q) + ALIAS(HSYNCQ, J5_2.Q) + ALIAS(VSYNC, J5_3.Q) + ALIAS(VSYNCQ, J5_4.Q) + + TTL_7486_XOR(J4_1, HSYNC, VSYNCQ) + ALIAS(COMPSYNCQ, J4_1.Q) + + TTL_7474(N4_1, HWINDOW, HSYNC, RAMP_WINDOW_HITQ, N4_1.QQ) + TTL_7474(M3_1, N4_1.Q, M3_1.QQ, CYCLE_RESETQ, P) + ALIAS(DIRECTION, M3_1.Q) + ALIAS(DIRECTIONQ, M3_1.QQ) + + TTL_7404_INVERT(N3_3, 32V) + TTL_7474(J2_2, N3_3.Q, J2_1.Q, P, P) + TTL_7474(J2_1, N4_1.Q, P, J2_2.QQ, P) + + TTL_7408_AND(H5_2, 256VQ, VSYNCQ) + TTL_9316(K1, HSYNC, P, H5_2.Q, V_COUNTER_RESETQ, L2_3.Q, Av, Bv, Cv, Dv) + TTL_9316(K2, HSYNC, K1.RC, J2_2.QQ, V_COUNTER_RESETQ, L2_3.Q, GND, GND, GND, GND) + TTL_7400_NAND(L2_3, K1.RC, K2.RC) + + TTL_7402_NOR(D4_3, DIRECTION, H6) + TTL_7408_AND(B5_1, DIRECTION, H5H6) + TTL_7402_NOR(D4_4, D4_3.Q, B5_1.Q) + TTL_7400_NAND(H2_1, HSYNCQ, D4_4.Q) + TTL_7400_NAND(H2_2, HSYNCQ, H5) + + TTL_9322(J1, HSYNC, V4, P, V3, 4V, V1, 1V, V2, 2V, GND) +#endif NETLIST_END() -- cgit v1.2.3-70-g09d2 From fbb8ee0fe89ed8b56a23418fb38621e74d7bab68 Mon Sep 17 00:00:00 2001 From: MooglyGuy Date: Sat, 24 Dec 2016 22:09:59 +0100 Subject: -netlist: Added 82S123 256-bit (32x8) TTL bipolar PROM. [Ryan Holtz] --- scripts/src/netlist.lua | 2 + src/lib/netlist/build/makefile | 1 + src/lib/netlist/devices/net_lib.cpp | 5 +- src/lib/netlist/devices/net_lib.h | 1 + src/lib/netlist/devices/nld_74192.h | 12 +- src/lib/netlist/devices/nld_82S123.cpp | 84 +++++++++ src/lib/netlist/devices/nld_82S123.h | 42 +++++ src/lib/netlist/devices/nld_9312.h | 16 +- src/mame/machine/nl_stuntcyc.cpp | 301 ++++++++++++++++++++++++++++++++- 9 files changed, 451 insertions(+), 13 deletions(-) create mode 100644 src/lib/netlist/devices/nld_82S123.cpp create mode 100644 src/lib/netlist/devices/nld_82S123.h (limited to 'scripts/src/netlist.lua') diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index 8462bc0a1a0..95b6a652d28 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -151,6 +151,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_82S16.h", MAME_DIR .. "src/lib/netlist/devices/nld_82S115.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_82S115.h", + MAME_DIR .. "src/lib/netlist/devices/nld_82S123.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_82S123.h", MAME_DIR .. "src/lib/netlist/devices/nld_82S126.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_82S126.h", MAME_DIR .. "src/lib/netlist/devices/nld_9310.cpp", diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index 04802af0c37..44c981fd332 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -96,6 +96,7 @@ NLOBJS := \ $(NLOBJ)/devices/nld_74ls629.o \ $(NLOBJ)/devices/nld_82S16.o \ $(NLOBJ)/devices/nld_82S115.o \ + $(NLOBJ)/devices/nld_82S123.o \ $(NLOBJ)/devices/nld_82S126.o \ $(NLOBJ)/devices/nld_9310.o \ $(NLOBJ)/devices/nld_9312.o \ diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index 3e654dab2d1..69c7cf6360b 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -138,6 +138,7 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(SN74LS629, SN74LS629, "CAP") ENTRYX(82S16, TTL_82S16, "-") ENTRYX(82S115, PROM_82S115, "-") + ENTRYX(82S123, PROM_82S123, "-") ENTRYX(82S126, PROM_82S126, "-") ENTRYX(9310, TTL_9310, "-") ENTRYX(9312, TTL_9312, "-") @@ -181,7 +182,9 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(74279_dip, TTL_74279_DIP, "-") ENTRYX(74365_dip, TTL_74365_DIP, "-") ENTRYX(82S16_dip, TTL_82S16_DIP, "-") - ENTRYX(82S126_dip, TTL_82S126_DIP, "-") + ENTRYX(82S115_dip, PROM_82S115_DIP, "-") + ENTRYX(82S123_dip, PROM_82S123_DIP, "-") + ENTRYX(82S126_dip, PROM_82S126_DIP, "-") ENTRYX(9602_dip, TTL_9602_DIP, "-") ENTRYX(9310_dip, TTL_9310_DIP, "-") ENTRYX(9312_dip, TTL_9312_DIP, "-") diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index d2140992372..c9c0b6b3917 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -43,6 +43,7 @@ #include "nld_74ls629.h" #include "nld_82S16.h" #include "nld_82S115.h" +#include "nld_82S123.h" #include "nld_82S126.h" #include "nld_9310.h" #include "nld_9312.h" diff --git a/src/lib/netlist/devices/nld_74192.h b/src/lib/netlist/devices/nld_74192.h index fc5778044eb..1afb152961a 100644 --- a/src/lib/netlist/devices/nld_74192.h +++ b/src/lib/netlist/devices/nld_74192.h @@ -31,8 +31,16 @@ #include "nl_setup.h" -#define TTL_74192(name) \ - NET_REGISTER_DEV(TTL_74192, name) +#define TTL_74192(name, cA, cB, cC, cD, cCLEAR, cLOADQ, cCU, cCD) \ + NET_REGISTER_DEV(TTL_74192, name) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D, cD) \ + NET_CONNECT(name, CLEAR, cCLEAR) \ + NET_CONNECT(name, LOADQ, cLOADQ) \ + NET_CONNECT(name, CU, cCU) \ + NET_CONNECT(name, CD, cCD) #define TTL_74192_DIP(name) \ NET_REGISTER_DEV(TTL_74192_DIP, name) diff --git a/src/lib/netlist/devices/nld_82S123.cpp b/src/lib/netlist/devices/nld_82S123.cpp new file mode 100644 index 00000000000..c4a54dd79c5 --- /dev/null +++ b/src/lib/netlist/devices/nld_82S123.cpp @@ -0,0 +1,84 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_82S123.cpp + * + */ + +#include "nld_82S123.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(82S123) + { + NETLIB_CONSTRUCTOR(82S123) + , m_A(*this, {{"A0", "A1", "A2", "A3", "A4"}}) + , m_CEQ(*this, "CEQ") + , m_O(*this, {{"O1", "O2", "O3", "O4", "O5", "O6", "O7", "O8"}}) + , m_ROM(*this, "m_ROM", nullptr) + { + } + + NETLIB_UPDATEI(); + + protected: + object_array_t m_A; + logic_input_t m_CEQ; + object_array_t m_O; + + param_ptr_t m_ROM; // 256 bits, 32x8 + }; + + NETLIB_OBJECT_DERIVED(82S123_dip, 82S123) + { + NETLIB_CONSTRUCTOR_DERIVED(82S123_dip, 82S123) + { + register_subalias("1", m_O[0]); + register_subalias("2", m_O[1]); + register_subalias("3", m_O[2]); + register_subalias("4", m_O[3]); + register_subalias("5", m_O[4]); + register_subalias("6", m_O[5]); + register_subalias("7", m_O[6]); + register_subalias("8", m_O[7]); + + register_subalias("15", m_CEQ); + + register_subalias("10", m_A[0]); + register_subalias("11", m_A[1]); + register_subalias("12", m_A[2]); + register_subalias("13", m_A[3]); + register_subalias("14", m_A[4]); + } + }; + + // FIXME: timing! + NETLIB_UPDATE(82S123) + { + unsigned o = 0xff; + + netlist_time delay = NLTIME_FROM_NS(35); + if (!m_CEQ()) + { + unsigned a = 0; + for (std::size_t i=0; i<5; i++) + a |= (m_A[i]() << i); + + if (m_ROM() != nullptr) + o = ((std::uint_fast8_t*)(m_ROM()))[a]; + + delay = NLTIME_FROM_NS(50); + } + + // FIXME: Outputs are tristate. This needs to be properly implemented + for (std::size_t i=0; i<8; i++) + m_O[i].push((o >> i) & 1, delay); + } + + NETLIB_DEVICE_IMPL(82S123) + NETLIB_DEVICE_IMPL(82S123_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_82S123.h b/src/lib/netlist/devices/nld_82S123.h new file mode 100644 index 00000000000..08130009ec7 --- /dev/null +++ b/src/lib/netlist/devices/nld_82S123.h @@ -0,0 +1,42 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_82S123.h + * + * 82S23: 256-bit (32x8) TTL bipolar PROM with open-collector outputs + * 82S123: 256-bit (32x8) TTL bipolar PROM with tri-state outputs + * + * +--------------+ + * O1 |1 ++ 16| VCC + * O2 |2 15| CEQ + * O3 |3 14| A4 + * O4 |4 82S123 13| A3 + * O5 |5 12| A2 + * O6 |6 11| A1 + * O7 |7 10| A0 + * GND |8 9| O8 + * +--------------+ + * + * + * Naming conventions follow Philips datasheet + * + */ + +#ifndef NLD_82S123_H_ +#define NLD_82S123_H_ + +#include "nl_setup.h" + +#define PROM_82S123(name, cCEQ, cA0, cA1, cA2, cA3, cA4) \ + NET_REGISTER_DEV(PROM_82S123, name) \ + NET_CONNECT(name, CEQ, cCEQ) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) + +#define PROM_82S123_DIP(name) \ + NET_REGISTER_DEV(PROM_82S123_DIP, name) + +#endif /* NLD_82S123_H_ */ diff --git a/src/lib/netlist/devices/nld_9312.h b/src/lib/netlist/devices/nld_9312.h index a787b38e604..c5f4104edd4 100644 --- a/src/lib/netlist/devices/nld_9312.h +++ b/src/lib/netlist/devices/nld_9312.h @@ -39,8 +39,20 @@ #include "nl_setup.h" -#define TTL_9312(name) \ - NET_REGISTER_DEV(TTL_9312, name) +#define TTL_9312(name, cA, cB, cC, cD0, cD1, cD2, cD3, cD4, cD5, cD6, cD7, cSTROBE) \ + NET_REGISTER_DEV(TTL_9312, name) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D0, cD0) \ + NET_CONNECT(name, D1, cD1) \ + NET_CONNECT(name, D2, cD2) \ + NET_CONNECT(name, D3, cD3) \ + NET_CONNECT(name, D4, cD4) \ + NET_CONNECT(name, D5, cD5) \ + NET_CONNECT(name, D6, cD6) \ + NET_CONNECT(name, D7, cD7) \ + NET_CONNECT(name, STROBE, cSTROBE) #define TTL_9312_DIP(name) \ NET_REGISTER_DEV(TTL_9312_DIP, name) diff --git a/src/mame/machine/nl_stuntcyc.cpp b/src/mame/machine/nl_stuntcyc.cpp index 6d2a335f3db..a1cfbab439a 100644 --- a/src/mame/machine/nl_stuntcyc.cpp +++ b/src/mame/machine/nl_stuntcyc.cpp @@ -67,14 +67,14 @@ NETLIST_START(stuntcyc) ALIAS( 64V, K3.QC) ALIAS(128V, K3.QD) - TTL_74107(K4_2, 128V, P, P, VRESETQ) + TTL_74107(K4_2, 128V, P, P, VRESET_Q) ALIAS(256V, K4_2.Q) ALIAS(256V_Q, K4_2.QQ) TTL_7410_NAND(M5_3, 256V, 2V, 1V) TTL_7474(M3_2, HRESET, M5_3.Q, P, P) ALIAS(VRESET, M3_2.QQ) - ALIAS(VRESETQ, M3_2.Q) + ALIAS(VRESET_Q, M3_2.Q) TTL_7402_NOR(J5_2, H6_3.Q, J5_1.Q) TTL_7402_NOR(J5_1, 32H, J5_2.Q) @@ -89,7 +89,7 @@ NETLIST_START(stuntcyc) ALIAS(COMPSYNC_Q, J4_1.Q) TTL_7474(N4_1, HWINDOW, HSYNC, RAMP_WINDOW_HIT_Q, N4_1.QQ) - TTL_7474(M3_1, N4_1.Q, M3_1.QQ, CYCLE_RESETQ, P) + TTL_7474(M3_1, N4_1.Q, M3_1.QQ, CYCLE_RESET_Q, P) ALIAS(DIRECTION, M3_1.Q) ALIAS(DIRECTION_Q, M3_1.QQ) @@ -98,8 +98,8 @@ NETLIST_START(stuntcyc) TTL_7474(J2_1, N4_1.Q, P, J2_2.QQ, P) TTL_7408_AND(H5_2, 256V_Q, VSYNC_Q) - TTL_9316(K1, HSYNC, P, H5_2.Q, V_COUNTER_RESETQ, L2_3.Q, Av, Bv, Cv, Dv) - TTL_9316(K2, HSYNC, K1.RC, J2_2.QQ, V_COUNTER_RESETQ, L2_3.Q, GND, GND, GND, GND) + TTL_9316(K1, HSYNC, P, H5_2.Q, V_COUNTER_RESET_Q, L2_3.Q, Av, Bv, Cv, Dv) + TTL_9316(K2, HSYNC, K1.RC, J2_2.QQ, V_COUNTER_RESET_Q, L2_3.Q, GND, GND, GND, GND) TTL_7400_NAND(L2_3, K1.RC, K2.RC) TTL_7402_NOR(D4_3, DIRECTION, H6) @@ -117,9 +117,10 @@ NETLIST_START(stuntcyc) TTL_74165(F2, CLOCK, GND, HSYNC_Q, F2.QH, HF1.O1, HF1.O2, HF1.O3, HF1.O4, HF1.O5, HF1.O6, HF1.O7, HF1.O8) TTL_7474(D2_1, CLOCK, F2.QH, OBJECT_ZONE, P) + ALIAS(OBJECTS_Q, D2_1.QQ) - TTL_7450_ANDORINVERT(D1_1, E1.QA, DIRECTION, E2.QD, DIRECTION_Q) - TTL_7474(D2_2, H1, D1_1.Q, P, V_WINDOW) + TTL_7450_ANDORINVERT(D1_2, E1.QA, DIRECTION, E2.QD, DIRECTION_Q) + TTL_7474(D2_2, H1, D1_2.Q, P, V_WINDOW) ALIAS(CYCLE, D2_2.QQ) ALIAS(CYCLE_Q, D2_2.Q) @@ -148,6 +149,50 @@ NETLIST_START(stuntcyc) NET_C(creditsw.1, GND) NET_C(creditsw.2, P) + TTL_7474(F8_1, END_GAME, F8_2.QQ, H9_3.Q, H8_2.QQ) + TTL_7474(F8_2, F8_1.QQ, P, ATTRACT_Q, P) + ALIAS(FREE_COIN, F8_2.Q) + ALIAS(FREE_COIN_Q, F8_2.QQ) + + SWITCH2(freegamesw) + NET_C(freegamesw.1, P) + NET_C(freegamesw.2, GND) + TTL_7410_NAND(H9_3, ATTRACT_Q, freegamesw.Q, FREE_GAME) + + /* Antenna to suppress player attempts at glitching in a credit via a piezo spark */ + /* Has a diode to clamp negative voltages - omitted here */ + + TTL_INPUT(ANTENNA, 0) + + QBJT_SW(Q9, "2N3643") + RES(R9, 330) + RES(R10, 100) + CAP(C3, CAP_U(0.1)) + NET_C(ANTENNA, Q9.B) + NET_C(Q9.E, GND) + + NET_C(R10.1, C3.1, Q9.C, R9.1) + NET_C(R10.2, GND) + NET_C(C3.2, GND) + QBJT_SW(Q10, "2N3643") + NET_C(Q10.B, R10.1) + NET_C(Q10.E, GND) + + DIODE(D2, "1N914") + RES(R7, 100) + RES(R8, 330) + CAP(C2, CAP_U(0.1)) + QBJT_SW(Q11, "2N3644") + + NET_C(D3.A, R8.1, Q10.C) + ALIAS(COIN_Q, D3.K) + + NET_C(R8.2, R7.2, C2.2, Q11.B) + NET_C(R7.1, C2.1, Q11.E, V5) + NET_C(R9.2, Q11.C) + + TTL_7486_XOR(C8_4, Q11.C, P) + /* Start buttons, etc. */ SWITCH(START1) RES(R11, RES_K(1)) @@ -183,7 +228,7 @@ NETLIST_START(stuntcyc) TTL_7474(H8_1, ATTRACT, GND, H9_2.Q, H9_1.Q) ALIAS(2_PLAYER_MODE, H8_1.Q) ALIAS(2_PLAYER_MODE_Q, H8_1.QQ) - TTL_7400_NAND(J8_4, 2_PLAYER_MODE, V_RAMPS) + TTL_7400_NAND(J8_4, 2_PLAYER_MODE, V_RAMP) TTL_7400_NAND(J8_3, START, J8_4.Q) TTL_74193(E8, P, P, P, P, QQ, E8.CARRYQ, COIN_Q, J8_3.Q) @@ -194,5 +239,245 @@ NETLIST_START(stuntcyc) ALIAS(CREDIT_Q, F9_3.Q) TTL_7402_NOR(F9_2, CREDIT_Q, CREDIT_Q) ALIAS(CREDIT, F9_2.Q) + + /* Score Window */ + + TTL_7402_NOR(L1_4, 64V, 128V) + TTL_7410_NAND(H4_1, 16V, 32V, L1_4.Q) + ALIAS(V_SCORE_Q, H4_1.Q) + + TTL_7486_XOR(J4_2, 32H, 256H) + ALIAS(32H_XOR_256H, J4_2.Q) + + TTL_7486_XOR(J4_3, 128H, 256H) + ALIAS(128H_XOR_256H, J4_3.Q) + + TTL_7486_XOR(J4_4, 64H, 256H_Q) + TTL_7410_NAND(H4_3, J4_3.Q, J4_2.Q, J4_4.Q) + ALIAS(H_SCORE_Q, H4_3.Q) + + TTL_7402_NOR(J3_1, V_SCORE_Q, H_SCORE_Q) + ALIAS(SCORE_WINDOW, J3_1.Q) + + /* Video Generation */ + + TTL_7400_NAND(H2_4, 8V, 32V) + TTL_7474(H3_2, VSYNC_Q, P, H2_4.Q, P) + TTL_7474(H3_1, 1V, 32V, P, H3_2.QQ) + TTL_7402_NOR(J3_4, H3_2.QQ, HSYNC) + TTL_7400_NAND(H2_3, J3_4.Q, 128H_XOR_256H) + TTL_7410_NAND(H4_2, 1H, H3_1.QQ, 32V) + ALIAS(ROAD_Q, H4_2.Q) + + TTL_7402_NOR(J3_2, 256H_Q, H2_3.Q) + TTL_7402_NOR(J3_3, H2_3.Q, 256H) + TTL_7486_XOR(C8_3, PLAYER_CONTROL, 256H) + TTL_7450_ANDORINVERT(F3_2, RETURN_THROTTLE, J3_2.Q, J3_3.Q, FREE_PLAY) + TTL_7450_ANDORINVERT(F3_1, RETURN_THROTTLE_Q, J3_2.Q, FREE_PLAY_Q, J3_3.Q) + + TTL_7427_NOR(K5_3, 64H, 32H_XOR_256H, V_SCORE_Q) + TTL_7400_NAND(F4_4, 128H_XOR_256H, K5_3.Q) + + TTL_7402_NOR(D4_1, PLAYER_CONTROL, CYCLE_Q) + TTL_7402_NOR(D4_2, F4_4.Q, C8_3.Q) + TTL_7404_INVERT(D3_3, F3_2.Q) + TTL_7427_NOR(E4_3, D3_3.Q, D4_2.Q, D4_1.Q) + TTL_7410_NAND(E3_1, SCORE_1_Q, OBJECTS_Q, E4_3.Q) + ALIAS(WHITE_VIDEO, E3_1.Q) + + TTL_7402_NOR(F4_2, PLAYER_CONTROL, CYCLE) + TTL_7404_INVERT(D3_1, F4_4.Q) + TTL_7402_NOR(F4_3, C8_3.Q, D3_1.Q) + TTL_7410_NAND(E3_2, F4_2.Q, F4_3.Q, F3_1.Q) + TTL_7400_NAND(F4_1, RAMPS_Q, ROAD_Q) + TTL_7427_NOR(E4_2, F4_1.Q, SCORE_2, E3_2.Q) + ALIAS(BLACK_VIDEO, E4_2.Q) + + RES(R13, RES_K(1)) + NET_C(R13.1, E3_1.Q) + RES(R14, RES_K(1)) + NET_C(R14.1, V5) + RES(R15, RES_K(1)) + NET_C(R15.1, E4_2.Q) + RES(R107, RES_K(1)) + + DIODE(D17, "1N914") + NET_C(D17.K, COMP_SYNC_Q) + NET_C(D17.A, R107.1, R13.2, R14.2, R15.2) + + ALIAS(VIDEO_OUT, R107.2) + + /* Horizontal movement */ + + TTL_7474(C2_1, SPEED_PULSES, P, C2_2.QQ, P) + TTL_7474(C2_2, A3_2.Q, C2_1.Q, P, P) + TTL_7493(C1, C2_1.Q, C1.QA, FLIP, FLIP) + ALIAS(MOTOR_PULSE, C1.QA) + ALIAS(R4, C1.QD) + + TTL_7400_NAND(B2_2, DIRECTION_Q, C2_2.Q) + TTL_9316(C3, HF_CLOCK, P, P, H_COUNTER_RESET_Q, A3_2.Q, C2_2.Q, B2_2.Q, P, P) + TTL_9316(B3, HF_CLOCK, C3.RC, P, H_COUNTER_RESET_Q, A3_2.Q, GND, P, P, GND) + ALIAS(H1, C3.QA) + ALIAS(H2, C3.QB) + ALIAS(H3, C3.QC) + ALIAS(H4, C3.QD) + ALIAS(H5, B3.QA) + ALIAS(H6, B3.QB) + ALIAS(H7, B3.QC) + ALIAS(H8, B3.QD) + + TTL_7408_AND(B5_3, H5, H6) + ALIAS(H5_AND_H6, B5_3.Q) + + TTL_74107(B4_2, B3.RC, P, P, H_COUNTER_RESET_Q) + TTL_74107(B4_1, B4_2.Q, P, P, H_COUNTER_RESET_Q) + + TTL_7410_NAND(C4_1, B4_1.QQ, B3.RC, B4_2.Q) + TTL_7404_INVERT(D3_6, C4_1.Q) + TTL_7400_NAND(A3_2, D3_6.Q, C3.RC) + + TTL_7410_NAND(C4_3, B4_2.Q, H8, B4_1.Q) + TTL_7427_NOR(E4_1, H5_AND_H6, H7, C4_3.Q) + ALIAS(H_WINDOW, E4_1.Q) + + TTL_7474(A4_1, H4, E4_1.Q, P, P) + TTL_7474(A4_2, H2, H4, A4_1.Q, P) + ALIAS(H_WINDOW_DELAYED, A4_1.Q) + + TTL_7402_NOR(A8_4, H4, A4_2.QQ) + TTL_7404_INVERT(D3_4, A8_4.Q) + TTL_7400_NAND(B2_4, DIRECTION, D3_4.Q) + TTL_7400_NAND(B2_1, DIRECTION_Q, D3_4.Q) + ALIAS(MS_1, B2_4.Q) + ALIAS(MS_2, B2_1.Q) + + /* Scoring, etc. logic */ + + TTL_7400_NAND(A3_1, C4_2.Q, CYCLE_RESET_A_Q) + TTL_7410_NAND(C4_2, A3_1.Q, BAD_JUMP_Q, FLIP_Q) + TTL_7410_NAND(D6_3, E5.QA, VRESET, 2PLM_Q) + TTL_7474(C5_1, A3_1.Q, GND, D6_3.Q, COMP_SCORE_Q) + TTL_7400_NAND(D5_3, OUT_OF_SEQ_RESET_Q, C5_1.Q) + + TTL_INPUT(MISS_SW_B0, 1) + TTL_INPUT(MISS_SW_B1, 1) + TTL_INPUT(MISS_SW_B2, 1) + TTL_74193(E5, GND, MISS_SW_B0, MISS_SW_B1, MISS_SW_B2, GND, START_Q, P, D5_3.Q) + ALIAS(END_GAME_Q, E5.BORROWQ) + + TTL_7408_AND(H5_4, ATTRACT_Q, 128V) + TTL_7474(C5_2, GOOD_JUMP_Q, MAX_SCORE_Q, H5_4.Q, P) + + TTL_7402_NOR(A8_2, E5.QA, C5_2.QQ) + TTL_74192(B8, GND, GND, GND, P, GND, START_W, A8_2.Q, P) + TTL_7474(A9_2, B8.CARRYQ, A9_2.QQ, START_Q, P) + TTL_7402_NOR(A8_3, A9_2.Q, B8.QD) + ALIAS(A, B8.QA) + ALIAS(B, B8.QB) + ALIAS(C, B8.QC) + ALIAS(D, B8.QD) + ALIAS(E, A9_2.Q) + ALIAS(F, A8_3.Q) + + TTL_7408_AND(B5_2, E5.QA, C5_2.Q) + TTL_74192(B9, GND, GND, GND, P, GND, START_W, B5_2.Q, P) + TTL_7474(A9_1, B9.CARRYQ, A9_1.QQ, START_Q, P) + TTL_7402_NOR(A8_1, A9_1.Q, B9.QD) + ALIAS(G, B9.QA) + ALIAS(H, B9.QB) + ALIAS(J, B9.QC) + ALIAS(K, B9.QD) + ALIAS(L, A9_1.Q) + ALIAS(M, A8_1.Q) + + TTL_7400_NAND(D5_4, E5.QA, 2_PLAYER_MODE) + TTL_7404_INVERT(H6_4, PLAYER_CONTROL_Q) + ALIAS(PLAYER_CONTROL, H6_4.Q) + + TTL_7404_INVERT(D3_2, 128V) + TTL_7450_ANDORINVERT(D1_1, D3_2.Q, 256H_Q, D5_4.Q, 128V) + + TTL_9322(B7, D1_1.Q, A, G, B, H, D, K, C, J, GND) + TTL_9322(A7, D1_1.Q, E, L, M, F, GND, GND, GND, GND, GND) + ALIAS(S1, B7.Y1) + ALIAS(S2, B7.Y2) + ALIAS(S3, B7.Y4) + ALIAS(S4, B7.Y3) + ALIAS(S5, A7.Y1) + ALIAS(S6, A7.Y2) + + TTL_9322(C7, 16H, S5, S1, S6, S2, GND, S4, GND, S3, GND) + TTL_7448(C6, C7.Y1, C7.Y2, C7.Y4, C7.Y3, P, SCORE_WINDOW, 16H) + TTL_9312(B6, 2H, 4H, 8H, C6.f, GND, GND, C6.b, C6.e, GND, GND, C6.c, 8H) + TTL_9312(A6, 2V, 4V, 8V, C6.a, GND, GND, C6.h, GND, GND, GND, C6.d, 8H) + TTL_7408_AND(B5_4, A6.YQ, B6.YQ) + TTL_7474(A5_1, CLOCK, B5_4.Q, P, P) + ALIAS(COMP_SCORE_Q, A5_1.Q) + + TTL_7400_NAND(M7_2, 128H, A5_1.QQ) + ALIAS(SCORE_1_Q, M7_2.Q) + + TTL_7402_NOR(K6_1, A5_1.Q, 128H) + ALIAS(SCORE_2, K6_1.Q) + + PROM_82S123(D7, GND, S1, S2, S3, S4, S5) + ALIAS(MAX_SCORE_Q, D7.D5) + + TTL_7410_NAND(D6_1, 256H_Q, 128H, 128H) + TTL_7427_NOR(D8_3, 64H, 32H, D6_1.Q) + TTL_7486_XOR(C8_2, D6_1.Q, D7.D4) + ALIAS(FIXED_RAMP_ZONE, D8_3.Q) + + TTL_INPUT(FREESCORE_SW_B0, 0) + TTL_INPUT(FREESCORE_SW_B1, 0) + TTL_INPUT(FREESCORE_SW_B2, 0) + TTL_INPUT(FREESCORE_SW_B3, 1) + TTL_7402_NOR(K6_4, D7.D4, OBJECT_ZONE_Q) + TTL_7485(E6, D7.D0, D7.D1, D7.D2, D7.D3, 8H, 16H, 32H, 64H, GND, C8_2.Q, GND) + TTL_7485(E7, D7.D0, D7.D1, D7.D2, D7.D3, FREESCORE_SW_B0, FREESCORE_SW_B1, FREESCORE_SW_B2, FREESCORE_SW_B3, GND, K6_4.Q, GND) + ALIAS(FREE_GAME, E7.EQOUT) + + TTL_7474(F6_1, CLOCK_Q, E6.EQOUT, 128H_XOR_256H, P) + TTL_9316(H7, 1H, H6_1.Q, P, P, F6_1.QQ, P, P, GND, GND) + TTL_7404_INVERT(H6_1, H7.RC) + TTL_7474(A5_2, H7.RC, P, HRESET_Q, P) + TTL_7474(J7_1, H_WINDOW, A5_2.QQ, BAD_JUMP_Q, P) + TTL_7474(K7_1, JUMP_Q, J7_1.Q, CYCLE_RESET_A_Q, P) + TTL_7474(K7_2, JUMP_Q, J7_1.QQ, CYCLE_RESET_A_Q, OBJECT_HIT_Q) + ALIAS(BAD_JUMP, K7_2.Q) + ALIAS(BAD_JUMP_Q, K7_2.QQ) + + TTL_7404_INVERT(H6_2, FIXED_RAMP_ZONE) + TTL_7474(J7_2, H6_2.Q, V_RAMP, H7.RC, P) + ALIAS(OBJECT_ZONE, J7_2.Q) + ALIAS(OBJECT_ZONE_Q, J7_2.QQ) + ALIAS(FIXED_RAMP_ZONE_Q, H6_2.Q) + + TTL_7408_AND(H5_3, F6_1.QQ, H7.RC) + TTL_7408_AND(H5_1, FIXED_RAMP_ZONE_Q, H7.RC) + + TTL_7486_XOR(M2_2, 1V, H5_3.Q) + TTL_7486_XOR(M2_4, 2V, H5_3.Q) + TTL_7486_XOR(M2_1, 4V, H5_3.Q) + + TTL_7493(N1, 2H, N1.QA, H5_1.Q, H5_1.Q) + TTL_7485(N2, M2_2.Q, M2_4.Q, M2_1.Q, GND, N1.QA, N1.QB, N1.QC, N1.QD, GND, GND, GND) + TTL_7486_XOR(M2_3, N2.GTOUT, H5_3.Q) + TTL_7400_NAND(L2_1, 16V, 64V) + TTL_7402_NOR(L1_1, L2_1.Q, 32V) + TTL_7400_NAND(L2_4, CYCLE_RESET, VRESET) + TTL_7410_NAND(E3_3, 8V, 128V, L1_1.Q) + TTL_7404_INVERT(N3_4, E3_3.Q) + TTL_7474(M1_1, 8V, L1_1.Q, L2_4.Q, M1_1.QQ) + TTL_7474(M1_2, 1H, M2_3.Q, V_RAMP, P) + TTL_7400_NAND(L2_2, M1_1.QQ, L1_1.Q) + TTL_7402_NOR(L1_2, H5_1.Q, M1_2.QQ) + ALIAS(V_RAMP, N3_4.Q) + ALIAS(V_COUNTER_RESET_Q, L2_2.Q) + ALIAS(RAMPS, L1_2.Q) + + TTL_7402_NOR(L1_3, RAMPS, RAMPS) + ALIAS(RAMPS_Q, L1_3.Q) #endif NETLIST_END() -- cgit v1.2.3-70-g09d2 From 63f4e52dae7933b6acc4d5c7473a2b90ed1d2155 Mon Sep 17 00:00:00 2001 From: couriersud Date: Tue, 27 Dec 2016 21:40:03 +0100 Subject: Moved proxy code into separate file. (nw) --- scripts/src/netlist.lua | 2 + src/lib/netlist/build/makefile | 1 + src/lib/netlist/devices/nld_system.cpp | 32 ------ src/lib/netlist/devices/nlid_proxy.cpp | 74 ++++++++++++++ src/lib/netlist/devices/nlid_proxy.h | 180 +++++++++++++++++++++++++++++++++ src/lib/netlist/devices/nlid_system.h | 167 ------------------------------ src/lib/netlist/nl_base.cpp | 1 + src/lib/netlist/nl_base.h | 6 +- src/lib/netlist/nl_setup.cpp | 1 + src/lib/netlist/nl_setup.h | 4 +- 10 files changed, 265 insertions(+), 203 deletions(-) create mode 100644 src/lib/netlist/devices/nlid_proxy.cpp create mode 100644 src/lib/netlist/devices/nlid_proxy.h (limited to 'scripts/src/netlist.lua') diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index 95b6a652d28..b1344e9d924 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -187,6 +187,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_truthtable.h", MAME_DIR .. "src/lib/netlist/devices/nlid_cmos.h", MAME_DIR .. "src/lib/netlist/devices/nlid_system.h", + MAME_DIR .. "src/lib/netlist/devices/nlid_proxy.cpp", + MAME_DIR .. "src/lib/netlist/devices/nlid_proxy.h", MAME_DIR .. "src/lib/netlist/macro/nlm_ttl74xx.cpp", MAME_DIR .. "src/lib/netlist/macro/nlm_ttl74xx.h", MAME_DIR .. "src/lib/netlist/macro/nlm_cd4xxx.cpp", diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index f9710655d26..171ba4cf5bb 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -111,6 +111,7 @@ NLOBJS := \ $(NLOBJ)/devices/nld_legacy.o \ $(NLOBJ)/devices/net_lib.o \ $(NLOBJ)/devices/nld_log.o \ + $(NLOBJ)/devices/nlid_proxy.o \ $(NLOBJ)/devices/nld_system.o \ $(NLOBJ)/devices/nld_truthtable.o \ $(NLOBJ)/macro/nlm_cd4xxx.o \ diff --git a/src/lib/netlist/devices/nld_system.cpp b/src/lib/netlist/devices/nld_system.cpp index e3369e514e5..836e744fc6a 100644 --- a/src/lib/netlist/devices/nld_system.cpp +++ b/src/lib/netlist/devices/nld_system.cpp @@ -86,38 +86,6 @@ namespace netlist { } - // ---------------------------------------------------------------------------------------- - // nld_d_to_a_proxy - // ---------------------------------------------------------------------------------------- - - void nld_d_to_a_proxy::reset() - { - //m_Q.initial(0.0); - m_last_state = -1; - m_RV.do_reset(); - m_is_timestep = m_RV.m_P.net().solver()->has_timestep_devices(); - m_RV.set(NL_FCONST(1.0) / logic_family().m_R_low, logic_family().m_low_V, 0.0); - } - - NETLIB_UPDATE(d_to_a_proxy) - { - const int state = static_cast(m_I()); - if (state != m_last_state) - { - m_last_state = state; - const nl_double R = state ? logic_family().m_R_high : logic_family().m_R_low; - const nl_double V = state ? logic_family().m_high_V : logic_family().m_low_V; - - // We only need to update the net first if this is a time stepping net - if (m_is_timestep) - { - m_RV.update_dev(); - } - m_RV.set(NL_FCONST(1.0) / R, V, 0.0); - m_RV.m_P.schedule_after(NLTIME_FROM_NS(1)); - } - } - // ----------------------------------------------------------------------------- // nld_res_sw diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp new file mode 100644 index 00000000000..d32ba00afe1 --- /dev/null +++ b/src/lib/netlist/devices/nlid_proxy.cpp @@ -0,0 +1,74 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * nlid_proxy.cpp + * + */ + +//#include +#include "nlid_proxy.h" +#include "solver/nld_solver.h" +//#include "plib/pstream.h" +//#include "plib/pfmtlog.h" +//#include "nld_log.h" + +namespace netlist +{ + namespace devices + { + + // ---------------------------------------------------------------------------------------- + // nld_d_to_a_proxy + // ---------------------------------------------------------------------------------------- + + nld_d_to_a_proxy::nld_d_to_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *out_proxied) + : nld_base_d_to_a_proxy(anetlist, name, out_proxied, m_RV.m_P) + , m_GNDHack(*this, "_Q") + , m_RV(*this, "RV") + , m_last_state(*this, "m_last_var", -1) + , m_is_timestep(false) + { + //register_sub(m_RV); + //register_term("1", m_RV.m_P); + //register_term("2", m_RV.m_N); + + register_subalias("Q", m_RV.m_P); + + connect_late(m_RV.m_N, m_GNDHack); + printf("%s %s\n", out_proxied->name().cstr(), out_proxied->device().name().cstr()); + auto x = netlist().setup().find_terminal(out_proxied->name(), detail::device_object_t::type_t::OUTPUT, false); + if (x) printf("==> %s\n", x->name().cstr()); + } + + + void nld_d_to_a_proxy::reset() + { + //m_Q.initial(0.0); + m_last_state = -1; + m_RV.do_reset(); + m_is_timestep = m_RV.m_P.net().solver()->has_timestep_devices(); + m_RV.set(NL_FCONST(1.0) / logic_family().m_R_low, logic_family().m_low_V, 0.0); + } + + NETLIB_UPDATE(d_to_a_proxy) + { + const int state = static_cast(m_I()); + if (state != m_last_state) + { + m_last_state = state; + const nl_double R = state ? logic_family().m_R_high : logic_family().m_R_low; + const nl_double V = state ? logic_family().m_high_V : logic_family().m_low_V; + + // We only need to update the net first if this is a time stepping net + if (m_is_timestep) + { + m_RV.update_dev(); + } + m_RV.set(NL_FCONST(1.0) / R, V, 0.0); + m_RV.m_P.schedule_after(NLTIME_FROM_NS(1)); + } + } + + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nlid_proxy.h b/src/lib/netlist/devices/nlid_proxy.h new file mode 100644 index 00000000000..0138d0f759d --- /dev/null +++ b/src/lib/netlist/devices/nlid_proxy.h @@ -0,0 +1,180 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * nlid_proxy.h + * + * netlist proxy devices + * + * This file contains internal headers + */ + +#ifndef NLID_PROXY_H_ +#define NLID_PROXY_H_ + +#include + +#include "nl_setup.h" +#include "nl_base.h" +#include "nl_factory.h" +#include "analog/nld_twoterm.h" + +namespace netlist +{ + namespace devices + { + + // ----------------------------------------------------------------------------- + // nld_base_proxy + // ----------------------------------------------------------------------------- + + NETLIB_OBJECT(base_proxy) + { + public: + nld_base_proxy(netlist_t &anetlist, const pstring &name, + logic_t *inout_proxied, detail::core_terminal_t *proxy_inout) + : device_t(anetlist, name) + { + m_logic_family = inout_proxied->logic_family(); + m_term_proxied = inout_proxied; + m_proxy_term = proxy_inout; + } + + virtual ~nld_base_proxy() {} + + logic_t &term_proxied() const { return *m_term_proxied; } + detail::core_terminal_t &proxy_term() const { return *m_proxy_term; } + + protected: + const logic_family_desc_t *m_logic_family; + + virtual const logic_family_desc_t &logic_family() const + { + return *m_logic_family; + } + + private: + logic_t *m_term_proxied; + detail::core_terminal_t *m_proxy_term; + }; + + // ----------------------------------------------------------------------------- + // nld_a_to_d_proxy + // ----------------------------------------------------------------------------- + + NETLIB_OBJECT_DERIVED(a_to_d_proxy, base_proxy) + { + public: + nld_a_to_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *in_proxied) + : nld_base_proxy(anetlist, name, in_proxied, &m_I) + , m_I(*this, "I") + , m_Q(*this, "Q") + { + } + + virtual ~nld_a_to_d_proxy() {} + + analog_input_t m_I; + logic_output_t m_Q; + + protected: + + NETLIB_RESETI() { } + + NETLIB_UPDATEI() + { + nl_assert(m_logic_family != nullptr); + if (m_I.Q_Analog() > logic_family().m_high_thresh_V) + m_Q.push(1, NLTIME_FROM_NS(1)); + else if (m_I.Q_Analog() < logic_family().m_low_thresh_V) + m_Q.push(0, NLTIME_FROM_NS(1)); + else + { + // do nothing + } + } + private: + }; + + // ----------------------------------------------------------------------------- + // nld_base_d_to_a_proxy + // ----------------------------------------------------------------------------- + + NETLIB_OBJECT_DERIVED(base_d_to_a_proxy, base_proxy) + { + public: + virtual ~nld_base_d_to_a_proxy() {} + + virtual logic_input_t &in() { return m_I; } + + protected: + nld_base_d_to_a_proxy(netlist_t &anetlist, const pstring &name, + logic_output_t *out_proxied, detail::core_terminal_t &proxy_out) + : nld_base_proxy(anetlist, name, out_proxied, &proxy_out) + , m_I(*this, "I") + { + } + + logic_input_t m_I; + + private: + }; + + NETLIB_OBJECT_DERIVED(d_to_a_proxy, base_d_to_a_proxy) + { + public: + nld_d_to_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *out_proxied); + virtual ~nld_d_to_a_proxy() {} + + protected: + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + private: + analog_output_t m_GNDHack; // FIXME: Long term, we need to connect proxy gnd to device gnd + NETLIB_SUB(twoterm) m_RV; + state_var m_last_state; + bool m_is_timestep; + }; + + + class factory_lib_entry_t : public base_factory_t + { + P_PREVENT_COPYING(factory_lib_entry_t) + public: + + factory_lib_entry_t(setup_t &setup, const pstring &name, const pstring &classname, + const pstring &def_param) + : base_factory_t(name, classname, def_param), m_setup(setup) { } + + class wrapper : public device_t + { + public: + wrapper(const pstring &devname, netlist_t &anetlist, const pstring &name) + : device_t(anetlist, name), m_devname(devname) + { + anetlist.setup().namespace_push(name); + anetlist.setup().include(m_devname); + anetlist.setup().namespace_pop(); + } + protected: + NETLIB_RESETI() { } + NETLIB_UPDATEI() { } + + pstring m_devname; + }; + + plib::owned_ptr Create(netlist_t &anetlist, const pstring &name) override + { + return plib::owned_ptr::Create(this->name(), anetlist, name); + } + + private: + setup_t &m_setup; + }; + + + } //namespace devices +} // namespace netlist + +#endif /* NLD_PROXY_H_ */ diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h index 2a827f6b20e..89251264fa7 100644 --- a/src/lib/netlist/devices/nlid_system.h +++ b/src/lib/netlist/devices/nlid_system.h @@ -413,173 +413,6 @@ namespace netlist state_var m_last_state; }; - // ----------------------------------------------------------------------------- - // nld_base_proxy - // ----------------------------------------------------------------------------- - - NETLIB_OBJECT(base_proxy) - { - public: - nld_base_proxy(netlist_t &anetlist, const pstring &name, - logic_t *inout_proxied, detail::core_terminal_t *proxy_inout) - : device_t(anetlist, name) - { - m_logic_family = inout_proxied->logic_family(); - m_term_proxied = inout_proxied; - m_proxy_term = proxy_inout; - } - - virtual ~nld_base_proxy() {} - - logic_t &term_proxied() const { return *m_term_proxied; } - detail::core_terminal_t &proxy_term() const { return *m_proxy_term; } - - protected: - const logic_family_desc_t *m_logic_family; - - virtual const logic_family_desc_t &logic_family() const - { - return *m_logic_family; - } - - private: - logic_t *m_term_proxied; - detail::core_terminal_t *m_proxy_term; - }; - - // ----------------------------------------------------------------------------- - // nld_a_to_d_proxy - // ----------------------------------------------------------------------------- - - NETLIB_OBJECT_DERIVED(a_to_d_proxy, base_proxy) - { - public: - nld_a_to_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *in_proxied) - : nld_base_proxy(anetlist, name, in_proxied, &m_I) - , m_I(*this, "I") - , m_Q(*this, "Q") - { - } - - virtual ~nld_a_to_d_proxy() {} - - analog_input_t m_I; - logic_output_t m_Q; - - protected: - - NETLIB_RESETI() { } - - NETLIB_UPDATEI() - { - nl_assert(m_logic_family != nullptr); - if (m_I.Q_Analog() > logic_family().m_high_thresh_V) - m_Q.push(1, NLTIME_FROM_NS(1)); - else if (m_I.Q_Analog() < logic_family().m_low_thresh_V) - m_Q.push(0, NLTIME_FROM_NS(1)); - else - { - // do nothing - } - } - private: - }; - - // ----------------------------------------------------------------------------- - // nld_base_d_to_a_proxy - // ----------------------------------------------------------------------------- - - NETLIB_OBJECT_DERIVED(base_d_to_a_proxy, base_proxy) - { - public: - virtual ~nld_base_d_to_a_proxy() {} - - virtual logic_input_t &in() { return m_I; } - - protected: - nld_base_d_to_a_proxy(netlist_t &anetlist, const pstring &name, - logic_output_t *out_proxied, detail::core_terminal_t &proxy_out) - : nld_base_proxy(anetlist, name, out_proxied, &proxy_out) - , m_I(*this, "I") - { - } - - logic_input_t m_I; - - private: - }; - - NETLIB_OBJECT_DERIVED(d_to_a_proxy, base_d_to_a_proxy) - { - public: - nld_d_to_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *out_proxied) - : nld_base_d_to_a_proxy(anetlist, name, out_proxied, m_RV.m_P) - , m_GNDHack(*this, "_Q") - , m_RV(*this, "RV") - , m_last_state(*this, "m_last_var", -1) - , m_is_timestep(false) - { - //register_sub(m_RV); - //register_term("1", m_RV.m_P); - //register_term("2", m_RV.m_N); - - register_subalias("Q", m_RV.m_P); - - connect_late(m_RV.m_N, m_GNDHack); - //printf("%s %s\n", out_proxied->name().cstr(), out_proxied->device().name().cstr()); - } - - virtual ~nld_d_to_a_proxy() {} - - protected: - - NETLIB_RESETI(); - NETLIB_UPDATEI(); - - private: - analog_output_t m_GNDHack; // FIXME: Long term, we need to connect proxy gnd to device gnd - NETLIB_SUB(twoterm) m_RV; - state_var m_last_state; - bool m_is_timestep; - }; - - - class factory_lib_entry_t : public base_factory_t - { - P_PREVENT_COPYING(factory_lib_entry_t) - public: - - factory_lib_entry_t(setup_t &setup, const pstring &name, const pstring &classname, - const pstring &def_param) - : base_factory_t(name, classname, def_param), m_setup(setup) { } - - class wrapper : public device_t - { - public: - wrapper(const pstring &devname, netlist_t &anetlist, const pstring &name) - : device_t(anetlist, name), m_devname(devname) - { - anetlist.setup().namespace_push(name); - anetlist.setup().include(m_devname); - anetlist.setup().namespace_pop(); - } - protected: - NETLIB_RESETI() { } - NETLIB_UPDATEI() { } - - pstring m_devname; - }; - - plib::owned_ptr Create(netlist_t &anetlist, const pstring &name) override - { - return plib::owned_ptr::Create(this->name(), anetlist, name); - } - - private: - setup_t &m_setup; - }; - - } //namespace devices } // namespace netlist diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index 709e41f96f9..c129c21b72b 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -15,6 +15,7 @@ #include "nl_base.h" #include "devices/nlid_system.h" +#include "devices/nlid_proxy.h" namespace netlist { diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 3f315fe603b..01b3875d7a6 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -873,7 +873,7 @@ namespace netlist { public: param_logic_t(device_t &device, const pstring name, const bool val); - const bool operator()() const { return m_param; } + bool operator()() const { return m_param; } void setTo(const bool ¶m) { set(m_param, param); } private: bool m_param; @@ -883,7 +883,7 @@ namespace netlist { public: param_int_t(device_t &device, const pstring name, const int val); - const int operator()() const { return m_param; } + int operator()() const { return m_param; } void setTo(const int ¶m) { set(m_param, param); } private: int m_param; @@ -893,7 +893,7 @@ namespace netlist { public: param_double_t(device_t &device, const pstring name, const double val); - const double operator()() const { return m_param; } + double operator()() const { return m_param; } void setTo(const double ¶m) { set(m_param, param); } private: double m_param; diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index b7c9646c26f..1023f1a0b28 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -18,6 +18,7 @@ #include "devices/net_lib.h" #include "devices/nld_truthtable.h" #include "devices/nlid_system.h" +#include "devices/nlid_proxy.h" #include "analog/nld_twoterm.h" #include "solver/nld_solver.h" diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h index 8c690b36b6d..e560a3b9f79 100644 --- a/src/lib/netlist/nl_setup.h +++ b/src/lib/netlist/nl_setup.h @@ -281,10 +281,12 @@ namespace netlist std::unordered_map m_param_values; std::unordered_map m_terminals; + /* needed by proxy */ + detail::core_terminal_t *find_terminal(const pstring &outname_in, detail::device_object_t::type_t atype, bool required = true); + private: detail::core_terminal_t *find_terminal(const pstring &outname_in, bool required = true); - detail::core_terminal_t *find_terminal(const pstring &outname_in, detail::device_object_t::type_t atype, bool required = true); void merge_nets(detail::net_t &thisnet, detail::net_t &othernet); -- cgit v1.2.3-70-g09d2