summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-05-17 01:13:42 +0200
committer couriersud <couriersud@gmx.org>2020-05-17 01:34:16 +0200
commit7035821f877510a58d4c92864847a6895b2647b6 (patch)
treec83d2ef4fcca85514e928bbcaeaa61997f21ba4e /src/lib/netlist
parentaed37668aac1387bf79e7d969c64589ff0e3d1bf (diff)
netlist: rewrite rom devices from scratch. [Couriersud]
Thanks to Aaron Giles who made me think about a different approach. This is a rewrite from scratch for rom devices. It uses a generic template to implement rom devices which is used together with a description struct to define a rom device. This leads to highly efficient code since all information is available at compile time. This is also a step forward to support tristate outputs. All rom devices covered by this approach have tristate or open collector outputs and thus all code changes to support tristate outputs can now be made consistently in one file.
Diffstat (limited to 'src/lib/netlist')
-rw-r--r--src/lib/netlist/build/makefile5
-rw-r--r--src/lib/netlist/devices/net_lib.cpp4
-rw-r--r--src/lib/netlist/devices/net_lib.h7
-rw-r--r--src/lib/netlist/devices/nld_2716.cpp110
-rw-r--r--src/lib/netlist/devices/nld_2716.h54
-rw-r--r--src/lib/netlist/devices/nld_82S123.cpp93
-rw-r--r--src/lib/netlist/devices/nld_82S123.h44
-rw-r--r--src/lib/netlist/devices/nld_82S126.cpp97
-rw-r--r--src/lib/netlist/devices/nld_82S126.h47
-rw-r--r--src/lib/netlist/devices/nld_devinc.h1361
-rw-r--r--src/lib/netlist/devices/nld_roms.cpp185
-rw-r--r--src/lib/netlist/devices/nld_roms.h29
-rw-r--r--src/lib/netlist/devices/nlid_truthtable.h20
-rw-r--r--src/lib/netlist/macro/nlm_base.cpp2
-rw-r--r--src/lib/netlist/macro/nlm_opamp.h10
-rw-r--r--src/lib/netlist/macro/nlm_roms.cpp203
-rw-r--r--src/lib/netlist/macro/nlm_roms.h44
-rw-r--r--src/lib/netlist/nl_base.h167
-rw-r--r--src/lib/netlist/nl_create_mame_solvers.sh2
-rw-r--r--src/lib/netlist/nl_errstr.h2
-rwxr-xr-xsrc/lib/netlist/nl_setup.cpp8
-rw-r--r--src/lib/netlist/nl_setup.h2
-rw-r--r--src/lib/netlist/plib/ptime.h7
-rw-r--r--src/lib/netlist/plib/ptypes.h23
-rw-r--r--src/lib/netlist/prg/nltool.cpp43
25 files changed, 1523 insertions, 1046 deletions
diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile
index d18a65605aa..ed2be27c651 100644
--- a/src/lib/netlist/build/makefile
+++ b/src/lib/netlist/build/makefile
@@ -142,7 +142,6 @@ NLOBJS := \
$(NLOBJ)/analog/nlid_twoterm.o \
$(NLOBJ)/analog/nld_opamps.o \
$(NLOBJ)/devices/nld_2102A.o \
- $(NLOBJ)/devices/nld_2716.o \
$(NLOBJ)/devices/nld_tms4800.o \
$(NLOBJ)/devices/nld_4006.o \
$(NLOBJ)/devices/nld_4013.o \
@@ -180,8 +179,6 @@ 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_9316.o \
$(NLOBJ)/devices/nld_9322.o \
@@ -191,6 +188,7 @@ NLOBJS := \
$(NLOBJ)/devices/nld_mm5837.o \
$(NLOBJ)/devices/nld_ne555.o \
$(NLOBJ)/devices/nld_r2r_dac.o \
+ $(NLOBJ)/devices/nld_roms.o \
$(NLOBJ)/devices/nld_tristate.o \
$(NLOBJ)/devices/nld_schmitt.o \
$(NLOBJ)/devices/nld_legacy.o \
@@ -203,6 +201,7 @@ NLOBJS := \
$(NLOBJ)/macro/nlm_cd4xxx.o \
$(NLOBJ)/macro/nlm_opamp.o \
$(NLOBJ)/macro/nlm_other.o \
+ $(NLOBJ)/macro/nlm_roms.o \
$(NLOBJ)/macro/nlm_ttl74xx.o \
$(NLOBJ)/solver/nld_solver.o \
$(NLOBJ)/solver/nld_matrix_solver.o \
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp
index ae380e6804b..9caf89afdc1 100644
--- a/src/lib/netlist/devices/net_lib.cpp
+++ b/src/lib/netlist/devices/net_lib.cpp
@@ -71,7 +71,6 @@ namespace devices
LIB_ENTRY(2102A)
LIB_ENTRY(2102A_dip)
LIB_ENTRY(2716)
- LIB_ENTRY(2716_dip)
#if !(NL_USE_TRUTHTABLE_7448)
LIB_ENTRY(7448)
LIB_ENTRY(7448_dip)
@@ -138,6 +137,7 @@ namespace devices
LIB_ENTRY(82S115)
LIB_ENTRY(82S123)
LIB_ENTRY(82S126)
+ LIB_ENTRY(74S287)
LIB_ENTRY(9310)
LIB_ENTRY(9314)
LIB_ENTRY(9316)
@@ -172,8 +172,6 @@ namespace devices
LIB_ENTRY(74365_dip)
LIB_ENTRY(82S16_dip)
LIB_ENTRY(82S115_dip)
- LIB_ENTRY(82S123_dip)
- LIB_ENTRY(82S126_dip)
LIB_ENTRY(9602_dip)
LIB_ENTRY(9310_dip)
LIB_ENTRY(9314_dip)
diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h
index 12f55858111..9d36c9a48ad 100644
--- a/src/lib/netlist/devices/net_lib.h
+++ b/src/lib/netlist/devices/net_lib.h
@@ -35,6 +35,7 @@
#include "netlist/macro/nlm_opamp.h"
#include "netlist/macro/nlm_other.h"
#include "netlist/macro/nlm_ttl74xx.h"
+#include "netlist/macro/nlm_roms.h"
#include "nld_7448.h"
@@ -46,7 +47,6 @@
#include "nld_system.h"
#include "nld_2102A.h"
-#include "nld_2716.h"
#include "nld_4006.h"
#include "nld_4013.h"
#include "nld_4020.h"
@@ -79,8 +79,6 @@
#include "nld_7497.h"
#include "nld_74ls629.h"
#include "nld_82S115.h"
-#include "nld_82S123.h"
-#include "nld_82S126.h"
#include "nld_82S16.h"
#include "nld_9310.h"
#include "nld_9316.h"
@@ -96,6 +94,8 @@
#include "nld_r2r_dac.h"
+#include "nld_roms.h"
+
#include "nld_schmitt.h"
#include "nld_tristate.h"
@@ -106,6 +106,7 @@
#include "netlist/macro/nlm_opamp.h"
#include "netlist/macro/nlm_other.h"
#include "netlist/macro/nlm_ttl74xx.h"
+#include "netlist/macro/nlm_roms.h"
#include "netlist/analog/nld_bjt.h"
#include "netlist/analog/nld_fourterm.h"
diff --git a/src/lib/netlist/devices/nld_2716.cpp b/src/lib/netlist/devices/nld_2716.cpp
deleted file mode 100644
index 2e2899ce96e..00000000000
--- a/src/lib/netlist/devices/nld_2716.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Ryan Holtz
-/*
- * nld_2716.cpp
- *
- */
-
-#include "nld_2716.h"
-#include "netlist/nl_base.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_D(*this, { "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7" })
- , m_last_EPQ(*this, "m_last_EPQ", 1)
- , m_ROM(*this, "ROM")
- , m_power_pins(*this)
- {
- }
-
- NETLIB_UPDATEI();
-
- friend class NETLIB_NAME(2716_dip);
- private:
- object_array_t<logic_input_t, 11> m_A;
- logic_input_t m_GQ;
- logic_input_t m_EPQ;
- object_array_t<logic_output_t, 8> m_D;
-
- state_var<unsigned> m_last_EPQ;
-
- param_rom_t<uint8_t, 11, 8> m_ROM; // 16 Kbits, used as 2 Kbit x 8
- nld_power_pins m_power_pins;
- };
-
- NETLIB_OBJECT(2716_dip)
- {
- NETLIB_CONSTRUCTOR(2716_dip)
- , A(*this, "A")
- {
- register_subalias("8", A.m_A[0]);
- register_subalias("7", A.m_A[1]);
- register_subalias("6", A.m_A[2]);
- register_subalias("5", A.m_A[3]);
- register_subalias("4", A.m_A[4]);
- register_subalias("3", A.m_A[5]);
- register_subalias("2", A.m_A[6]);
- register_subalias("1", A.m_A[7]);
- register_subalias("23", A.m_A[8]);
- register_subalias("22", A.m_A[9]);
- register_subalias("19", A.m_A[10]);
-
- register_subalias("20", A.m_GQ);
- register_subalias("18", A.m_EPQ);
-
- register_subalias("9", A.m_D[0]);
- register_subalias("10", A.m_D[1]);
- register_subalias("11", A.m_D[2]);
- register_subalias("13", A.m_D[3]);
- register_subalias("14", A.m_D[4]);
- register_subalias("15", A.m_D[5]);
- register_subalias("16", A.m_D[6]);
- register_subalias("17", A.m_D[7]);
-
- register_subalias("12", "A.GND");
- register_subalias("24", "A.VCC");
- }
- NETLIB_RESETI() {}
- NETLIB_UPDATEI() {}
- private:
- NETLIB_SUB(2716) A;
- };
-
- // FIXME: timing!
- NETLIB_UPDATE(2716)
- {
- unsigned d = 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);
-
- d = 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_D[i].push((d >> i) & 1, delay);
- }
-
- NETLIB_DEVICE_IMPL(2716, "EPROM_2716", "+GQ,+EPQ,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+A9,+A10,@VCC,@GND")
- NETLIB_DEVICE_IMPL(2716_dip, "EPROM_2716_DIP", "")
-
- } //namespace devices
-} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_2716.h b/src/lib/netlist/devices/nld_2716.h
deleted file mode 100644
index c5e039e1421..00000000000
--- a/src/lib/netlist/devices/nld_2716.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// 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| D7
- * D0 |9 16| D6
- * D1 |10 15| D5
- * D2 |11 14| D4
- * VSS |12 13| D3
- * +----------------+
- *
- *
- * Naming conventions follow STMicro datasheet
- *
- */
-
-#ifndef NLD_2716_H_
-#define NLD_2716_H_
-
-#include "netlist/nl_setup.h"
-
-#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, GND, GND) \
- NET_CONNECT(name, VCC, VCC) \
- 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_82S123.cpp b/src/lib/netlist/devices/nld_82S123.cpp
deleted file mode 100644
index 83a0074d134..00000000000
--- a/src/lib/netlist/devices/nld_82S123.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Ryan Holtz
-/*
- * nld_82S123.cpp
- *
- */
-
-#include "nld_82S123.h"
-#include "netlist/nl_base.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, "ROM")
- , m_power_pins(*this)
- {
- }
-
- NETLIB_UPDATEI();
-
- friend class NETLIB_NAME(82S123_dip);
- private:
- object_array_t<logic_input_t, 5> m_A;
- logic_input_t m_CEQ;
- object_array_t<logic_output_t, 8> m_O;
-
- param_rom_t<uint8_t, 5, 8> m_ROM; // 256 bits, 32x8
- nld_power_pins m_power_pins;
- };
-
- NETLIB_OBJECT(82S123_dip)
- {
- NETLIB_CONSTRUCTOR(82S123_dip)
- , A(*this, "A")
- {
- register_subalias("1", A.m_O[0]);
- register_subalias("2", A.m_O[1]);
- register_subalias("3", A.m_O[2]);
- register_subalias("4", A.m_O[3]);
- register_subalias("5", A.m_O[4]);
- register_subalias("6", A.m_O[5]);
- register_subalias("7", A.m_O[6]);
- register_subalias("8", "A.GND");
-
- register_subalias("9", A.m_O[7]);
- register_subalias("10", A.m_A[0]);
- register_subalias("11", A.m_A[1]);
- register_subalias("12", A.m_A[2]);
- register_subalias("13", A.m_A[3]);
- register_subalias("14", A.m_A[4]);
- register_subalias("15", A.m_CEQ);
- register_subalias("16", "A.VCC");
- }
- NETLIB_RESETI() {}
- NETLIB_UPDATEI() {}
- private:
- NETLIB_SUB(82S123) A;
- };
-
- // 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);
-
- 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<8; i++)
- m_O[i].push((o >> i) & 1, delay);
- }
-
- NETLIB_DEVICE_IMPL(82S123, "PROM_82S123", "+CEQ,+A0,+A1,+A2,+A3,+A4,@VCC,@GND")
- NETLIB_DEVICE_IMPL(82S123_dip, "PROM_82S123_DIP", "")
-
- } //namespace devices
-} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_82S123.h b/src/lib/netlist/devices/nld_82S123.h
deleted file mode 100644
index 69088b03f6b..00000000000
--- a/src/lib/netlist/devices/nld_82S123.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// 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 "netlist/nl_setup.h"
-
-#define PROM_82S123(name, cCEQ, cA0, cA1, cA2, cA3, cA4) \
- NET_REGISTER_DEV(PROM_82S123, name) \
- NET_CONNECT(name, GND, GND) \
- NET_CONNECT(name, VCC, VCC) \
- 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_82S126.cpp b/src/lib/netlist/devices/nld_82S126.cpp
deleted file mode 100644
index 99bf3920a60..00000000000
--- a/src/lib/netlist/devices/nld_82S126.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Ryan Holtz
-/*
- * nld_82S126.cpp
- *
- */
-
-#include "nld_82S126.h"
-#include "netlist/nl_base.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, "ROM")
- , m_power_pins(*this)
- {
- }
-
- NETLIB_UPDATEI();
-
- friend class NETLIB_NAME(82S126_dip);
- private:
- object_array_t<logic_input_t, 8> m_A;
- logic_input_t m_CE1Q;
- logic_input_t m_CE2Q;
- object_array_t<logic_output_t, 4> m_O;
-
- param_rom_t<uint8_t, 8, 4> m_ROM; // 1024 bits, 32x32, used as 256x4
- nld_power_pins m_power_pins;
- };
-
- NETLIB_OBJECT(82S126_dip)
- {
- NETLIB_CONSTRUCTOR(82S126_dip)
- , A(*this, "A")
- {
- register_subalias("5", A.m_A[0]);
- register_subalias("6", A.m_A[1]);
- register_subalias("7", A.m_A[2]);
- register_subalias("4", A.m_A[3]);
- register_subalias("3", A.m_A[4]);
- register_subalias("2", A.m_A[5]);
- register_subalias("1", A.m_A[6]);
- register_subalias("15", A.m_A[7]);
-
- register_subalias("13", A.m_CE1Q);
- register_subalias("14", A.m_CE2Q);
-
- register_subalias("12", A.m_O[0]);
- register_subalias("11", A.m_O[1]);
- register_subalias("10", A.m_O[2]);
- register_subalias("9", A.m_O[3]);
-
- register_subalias("8", "A.GND");
- register_subalias("16", "A.VCC");
- }
- NETLIB_RESETI() {}
- NETLIB_UPDATEI() {}
- private:
- NETLIB_SUB(82S126) A;
- };
-
- // FIXME: timing!
- NETLIB_UPDATE(82S126)
- {
- unsigned o = 0xf;
-
- netlist_time delay = NLTIME_FROM_NS(25);
- if (!m_CE1Q() && !m_CE2Q())
- {
- 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, "PROM_82S126", "+CE1Q,+CE2Q,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,@VCC,@GND")
- NETLIB_DEVICE_IMPL(82S126_dip, "PROM_82S126_DIP", "")
-
- } //namespace devices
-} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_82S126.h b/src/lib/netlist/devices/nld_82S126.h
deleted file mode 100644
index 35f2c0dd725..00000000000
--- a/src/lib/netlist/devices/nld_82S126.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// 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 "netlist/nl_setup.h"
-
-#define PROM_82S126(name, cCE1Q, cCE2Q, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7) \
- NET_REGISTER_DEV(PROM_82S126, name) \
- NET_CONNECT(name, GND, GND) \
- NET_CONNECT(name, VCC, VCC) \
- 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)
-
-#define PROM_82S126_DIP(name) \
- NET_REGISTER_DEV(PROM_82S126_DIP, name)
-
-#endif /* NLD_82S126_H_ */
diff --git a/src/lib/netlist/devices/nld_devinc.h b/src/lib/netlist/devices/nld_devinc.h
index aff6c92d630..421379899df 100644
--- a/src/lib/netlist/devices/nld_devinc.h
+++ b/src/lib/netlist/devices/nld_devinc.h
@@ -12,989 +12,1304 @@
// ---------------------------------------------------------------------
// Source: src/lib/netlist/analog/nlid_twoterm.cpp
// ---------------------------------------------------------------------
-#define RES(name, pR) \
- NET_REGISTER_DEVEXT(RES, name, pR)
+// usage : RES(name, pR)
+#define RES(...) \
+ NET_REGISTER_DEVEXT(RES, __VA_ARGS__)
-#define POT(name, pR) \
- NET_REGISTER_DEVEXT(POT, name, pR)
+// usage : POT(name, pR)
+#define POT(...) \
+ NET_REGISTER_DEVEXT(POT, __VA_ARGS__)
-#define POT2(name, pR) \
- NET_REGISTER_DEVEXT(POT2, name, pR)
+// usage : POT2(name, pR)
+#define POT2(...) \
+ NET_REGISTER_DEVEXT(POT2, __VA_ARGS__)
-#define CAP(name, pC) \
- NET_REGISTER_DEVEXT(CAP, name, pC)
+// usage : CAP(name, pC)
+#define CAP(...) \
+ NET_REGISTER_DEVEXT(CAP, __VA_ARGS__)
-#define IND(name, pL) \
- NET_REGISTER_DEVEXT(IND, name, pL)
+// usage : IND(name, pL)
+#define IND(...) \
+ NET_REGISTER_DEVEXT(IND, __VA_ARGS__)
-#define DIODE(name, pMODEL) \
- NET_REGISTER_DEVEXT(DIODE, name, pMODEL)
+// usage : DIODE(name, pMODEL)
+#define DIODE(...) \
+ NET_REGISTER_DEVEXT(DIODE, __VA_ARGS__)
-#define ZDIODE(name, pMODEL) \
- NET_REGISTER_DEVEXT(ZDIODE, name, pMODEL)
+// usage : ZDIODE(name, pMODEL)
+#define ZDIODE(...) \
+ NET_REGISTER_DEVEXT(ZDIODE, __VA_ARGS__)
-#define VS(name, pV) \
- NET_REGISTER_DEVEXT(VS, name, pV)
+// usage : VS(name, pV)
+#define VS(...) \
+ NET_REGISTER_DEVEXT(VS, __VA_ARGS__)
-#define CS(name, pI) \
- NET_REGISTER_DEVEXT(CS, name, pI)
+// usage : CS(name, pI)
+#define CS(...) \
+ NET_REGISTER_DEVEXT(CS, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/analog/nlid_fourterm.cpp
// ---------------------------------------------------------------------
-#define VCVS(name, pG) \
- NET_REGISTER_DEVEXT(VCVS, name, pG)
+// usage : VCVS(name, pG)
+#define VCVS(...) \
+ NET_REGISTER_DEVEXT(VCVS, __VA_ARGS__)
-#define VCCS(name, pG) \
- NET_REGISTER_DEVEXT(VCCS, name, pG)
+// usage : VCCS(name, pG)
+#define VCCS(...) \
+ NET_REGISTER_DEVEXT(VCCS, __VA_ARGS__)
-#define CCCS(name, pG) \
- NET_REGISTER_DEVEXT(CCCS, name, pG)
+// usage : CCCS(name, pG)
+#define CCCS(...) \
+ NET_REGISTER_DEVEXT(CCCS, __VA_ARGS__)
-#define CCVS(name, pG) \
- NET_REGISTER_DEVEXT(CCVS, name, pG)
+// usage : CCVS(name, pG)
+#define CCVS(...) \
+ NET_REGISTER_DEVEXT(CCVS, __VA_ARGS__)
-#define LVCCS(name) \
- NET_REGISTER_DEVEXT(LVCCS, name)
+// usage : LVCCS(name)
+#define LVCCS(...) \
+ NET_REGISTER_DEVEXT(LVCCS, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/analog/nld_opamps.cpp
// ---------------------------------------------------------------------
-#define OPAMP(name, pMODEL) \
- NET_REGISTER_DEVEXT(OPAMP, name, pMODEL)
+// usage : OPAMP(name, pMODEL)
+#define OPAMP(...) \
+ NET_REGISTER_DEVEXT(OPAMP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_system.cpp
// ---------------------------------------------------------------------
-#define NC_PIN(name) \
- NET_REGISTER_DEVEXT(NC_PIN, name)
+// usage : NC_PIN(name)
+#define NC_PIN(...) \
+ NET_REGISTER_DEVEXT(NC_PIN, __VA_ARGS__)
-#define FRONTIER_DEV(name, pI, pG, pQ) \
- NET_REGISTER_DEVEXT(FRONTIER_DEV, name, pI, pG, pQ)
+// usage : FRONTIER_DEV(name, pI, pG, pQ)
+#define FRONTIER_DEV(...) \
+ NET_REGISTER_DEVEXT(FRONTIER_DEV, __VA_ARGS__)
-#define AFUNC(name, pN, pFUNC) \
- NET_REGISTER_DEVEXT(AFUNC, name, pN, pFUNC)
+// usage : AFUNC(name, pN, pFUNC)
+#define AFUNC(...) \
+ NET_REGISTER_DEVEXT(AFUNC, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/analog/nld_bjt.cpp
// ---------------------------------------------------------------------
-#define QBJT_EB(name, pMODEL) \
- NET_REGISTER_DEVEXT(QBJT_EB, name, pMODEL)
+// usage : QBJT_EB(name, pMODEL)
+#define QBJT_EB(...) \
+ NET_REGISTER_DEVEXT(QBJT_EB, __VA_ARGS__)
-#define QBJT_SW(name, pMODEL) \
- NET_REGISTER_DEVEXT(QBJT_SW, name, pMODEL)
+// usage : QBJT_SW(name, pMODEL)
+#define QBJT_SW(...) \
+ NET_REGISTER_DEVEXT(QBJT_SW, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/analog/nld_mosfet.cpp
// ---------------------------------------------------------------------
-#define MOSFET(name, pMODEL) \
- NET_REGISTER_DEVEXT(MOSFET, name, pMODEL)
+// usage : MOSFET(name, pMODEL)
+#define MOSFET(...) \
+ NET_REGISTER_DEVEXT(MOSFET, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_system.cpp
// ---------------------------------------------------------------------
-#define TTL_INPUT(name, pIN) \
- NET_REGISTER_DEVEXT(TTL_INPUT, name, pIN)
+// usage : TTL_INPUT(name, pIN)
+#define TTL_INPUT(...) \
+ NET_REGISTER_DEVEXT(TTL_INPUT, __VA_ARGS__)
-#define LOGIC_INPUT(name, pIN, pMODEL) \
- NET_REGISTER_DEVEXT(LOGIC_INPUT, name, pIN, pMODEL)
+// usage : LOGIC_INPUT(name, pIN, pMODEL)
+#define LOGIC_INPUT(...) \
+ NET_REGISTER_DEVEXT(LOGIC_INPUT, __VA_ARGS__)
-#define LOGIC_INPUT8(name, pIN, pMODEL) \
- NET_REGISTER_DEVEXT(LOGIC_INPUT8, name, pIN, pMODEL)
+// usage : LOGIC_INPUT8(name, pIN, pMODEL)
+#define LOGIC_INPUT8(...) \
+ NET_REGISTER_DEVEXT(LOGIC_INPUT8, __VA_ARGS__)
-#define ANALOG_INPUT(name, pIN) \
- NET_REGISTER_DEVEXT(ANALOG_INPUT, name, pIN)
+// usage : ANALOG_INPUT(name, pIN)
+#define ANALOG_INPUT(...) \
+ NET_REGISTER_DEVEXT(ANALOG_INPUT, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_log.cpp
// ---------------------------------------------------------------------
-#define LOG(name, pI) \
- NET_REGISTER_DEVEXT(LOG, name, pI)
+// usage : LOG(name, pI)
+#define LOG(...) \
+ NET_REGISTER_DEVEXT(LOG, __VA_ARGS__)
-#define LOGD(name, pI, pI2) \
- NET_REGISTER_DEVEXT(LOGD, name, pI, pI2)
+// usage : LOGD(name, pI, pI2)
+#define LOGD(...) \
+ NET_REGISTER_DEVEXT(LOGD, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_system.cpp
// ---------------------------------------------------------------------
-#define CLOCK(name, pFREQ) \
- NET_REGISTER_DEVEXT(CLOCK, name, pFREQ)
+// usage : CLOCK(name, pFREQ)
+#define CLOCK(...) \
+ NET_REGISTER_DEVEXT(CLOCK, __VA_ARGS__)
-#define VARCLOCK(name, pFUNC) \
- NET_REGISTER_DEVEXT(VARCLOCK, name, pFUNC)
+// usage : VARCLOCK(name, pFUNC)
+#define VARCLOCK(...) \
+ NET_REGISTER_DEVEXT(VARCLOCK, __VA_ARGS__)
-#define EXTCLOCK(name, pFREQ, pPATTERN) \
- NET_REGISTER_DEVEXT(EXTCLOCK, name, pFREQ, pPATTERN)
+// usage : EXTCLOCK(name, pFREQ, pPATTERN)
+#define EXTCLOCK(...) \
+ NET_REGISTER_DEVEXT(EXTCLOCK, __VA_ARGS__)
-#define MAINCLOCK(name, pFREQ) \
- NET_REGISTER_DEVEXT(MAINCLOCK, name, pFREQ)
+// usage : MAINCLOCK(name, pFREQ)
+#define MAINCLOCK(...) \
+ NET_REGISTER_DEVEXT(MAINCLOCK, __VA_ARGS__)
-#define GNDA(name) \
- NET_REGISTER_DEVEXT(GNDA, name)
+// usage : GNDA(name)
+#define GNDA(...) \
+ NET_REGISTER_DEVEXT(GNDA, __VA_ARGS__)
-#define PARAMETER(name) \
- NET_REGISTER_DEVEXT(PARAMETER, name)
+// usage : PARAMETER(name)
+#define PARAMETER(...) \
+ NET_REGISTER_DEVEXT(PARAMETER, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/solver/nld_solver.cpp
// ---------------------------------------------------------------------
-#define SOLVER(name, pFREQ) \
- NET_REGISTER_DEVEXT(SOLVER, name, pFREQ)
+// usage : SOLVER(name, pFREQ)
+#define SOLVER(...) \
+ NET_REGISTER_DEVEXT(SOLVER, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_system.cpp
// ---------------------------------------------------------------------
-#define SYS_DSW(name, pI, p1, p2) \
- NET_REGISTER_DEVEXT(SYS_DSW, name, pI, p1, p2)
+// usage : SYS_DSW(name, pI, p1, p2)
+#define SYS_DSW(...) \
+ NET_REGISTER_DEVEXT(SYS_DSW, __VA_ARGS__)
-#define SYS_DSW2(name) \
- NET_REGISTER_DEVEXT(SYS_DSW2, name)
+// usage : SYS_DSW2(name)
+#define SYS_DSW2(...) \
+ NET_REGISTER_DEVEXT(SYS_DSW2, __VA_ARGS__)
-#define SYS_COMPD(name) \
- NET_REGISTER_DEVEXT(SYS_COMPD, name)
+// usage : SYS_COMPD(name)
+#define SYS_COMPD(...) \
+ NET_REGISTER_DEVEXT(SYS_COMPD, __VA_ARGS__)
-#define SYS_NOISE_MT_U(name, pSIGMA) \
- NET_REGISTER_DEVEXT(SYS_NOISE_MT_U, name, pSIGMA)
+// usage : SYS_NOISE_MT_U(name, pSIGMA)
+#define SYS_NOISE_MT_U(...) \
+ NET_REGISTER_DEVEXT(SYS_NOISE_MT_U, __VA_ARGS__)
-#define SYS_NOISE_MT_N(name, pSIGMA) \
- NET_REGISTER_DEVEXT(SYS_NOISE_MT_N, name, pSIGMA)
+// usage : SYS_NOISE_MT_N(name, pSIGMA)
+#define SYS_NOISE_MT_N(...) \
+ NET_REGISTER_DEVEXT(SYS_NOISE_MT_N, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/analog/nld_switches.cpp
// ---------------------------------------------------------------------
-#define SWITCH(name) \
- NET_REGISTER_DEVEXT(SWITCH, name)
+// usage : SWITCH(name)
+#define SWITCH(...) \
+ NET_REGISTER_DEVEXT(SWITCH, __VA_ARGS__)
-#define SWITCH2(name) \
- NET_REGISTER_DEVEXT(SWITCH2, name)
+// usage : SWITCH2(name)
+#define SWITCH2(...) \
+ NET_REGISTER_DEVEXT(SWITCH2, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_legacy.cpp
// ---------------------------------------------------------------------
-#define NETDEV_RSFF(name) \
- NET_REGISTER_DEVEXT(NETDEV_RSFF, name)
+// usage : NETDEV_RSFF(name)
+#define NETDEV_RSFF(...) \
+ NET_REGISTER_DEVEXT(NETDEV_RSFF, __VA_ARGS__)
-#define NETDEV_DELAY(name) \
- NET_REGISTER_DEVEXT(NETDEV_DELAY, name)
+// usage : NETDEV_DELAY(name)
+#define NETDEV_DELAY(...) \
+ NET_REGISTER_DEVEXT(NETDEV_DELAY, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_2102A.cpp
// ---------------------------------------------------------------------
-#define RAM_2102A(name, pCEQ, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pA9, pRWQ, pDI)\
- NET_REGISTER_DEVEXT(RAM_2102A, name, pCEQ, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pA9, pRWQ, pDI)
+// usage : RAM_2102A(name, pCEQ, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pA9, pRWQ, pDI)
+// auto connect: VCC, GND
+#define RAM_2102A(...) \
+ NET_REGISTER_DEVEXT(RAM_2102A, __VA_ARGS__)
-#define RAM_2102A_DIP(name) \
- NET_REGISTER_DEVEXT(RAM_2102A_DIP, name)
+// usage : RAM_2102A_DIP(name)
+#define RAM_2102A_DIP(...) \
+ NET_REGISTER_DEVEXT(RAM_2102A_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_2716.cpp
// ---------------------------------------------------------------------
-#define EPROM_2716(name, pGQ, pEPQ, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pA9, pA10)\
- NET_REGISTER_DEVEXT(EPROM_2716, name, pGQ, pEPQ, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pA9, pA10)
+// usage : EPROM_2716(name, pGQ, pEPQ, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pA9, pA10)
+// auto connect: VCC, GND
+#define EPROM_2716(...) \
+ NET_REGISTER_DEVEXT(EPROM_2716, __VA_ARGS__)
-#define EPROM_2716_DIP(name) \
- NET_REGISTER_DEVEXT(EPROM_2716_DIP, name)
+// usage : EPROM_2716_DIP(name)
+#define EPROM_2716_DIP(...) \
+ NET_REGISTER_DEVEXT(EPROM_2716_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7448.cpp
// ---------------------------------------------------------------------
-#define TTL_7448(name, pA, pB, pC, pD, pLTQ, pBIQ, pRBIQ) \
- NET_REGISTER_DEVEXT(TTL_7448, name, pA, pB, pC, pD, pLTQ, pBIQ, pRBIQ)
+// usage : TTL_7448(name, pA, pB, pC, pD, pLTQ, pBIQ, pRBIQ)
+// auto connect: VCC, GND
+#define TTL_7448(...) \
+ NET_REGISTER_DEVEXT(TTL_7448, __VA_ARGS__)
-#define TTL_7448_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7448_DIP, name)
+// usage : TTL_7448_DIP(name)
+#define TTL_7448_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7448_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7442.cpp
// ---------------------------------------------------------------------
-#define TTL_7442(name, pA, pB, pC, pD) \
- NET_REGISTER_DEVEXT(TTL_7442, name, pA, pB, pC, pD)
+// usage : TTL_7442(name, pA, pB, pC, pD)
+// auto connect: VCC, GND
+#define TTL_7442(...) \
+ NET_REGISTER_DEVEXT(TTL_7442, __VA_ARGS__)
-#define TTL_7442_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7442_DIP, name)
+// usage : TTL_7442_DIP(name)
+#define TTL_7442_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7442_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7450.cpp
// ---------------------------------------------------------------------
-#define TTL_7450_ANDORINVERT(name, pA, pB, pC, pD) \
- NET_REGISTER_DEVEXT(TTL_7450_ANDORINVERT, name, pA, pB, pC, pD)
+// usage : TTL_7450_ANDORINVERT(name, pA, pB, pC, pD)
+// auto connect: VCC, GND
+#define TTL_7450_ANDORINVERT(...) \
+ NET_REGISTER_DEVEXT(TTL_7450_ANDORINVERT, __VA_ARGS__)
-#define TTL_7450_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7450_DIP, name)
+// usage : TTL_7450_DIP(name)
+#define TTL_7450_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7450_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7473.cpp
// ---------------------------------------------------------------------
-#define TTL_7473(name, pCLK, pJ, pK, pCLRQ) \
- NET_REGISTER_DEVEXT(TTL_7473, name, pCLK, pJ, pK, pCLRQ)
+// usage : TTL_7473(name, pCLK, pJ, pK, pCLRQ)
+// auto connect: VCC, GND
+#define TTL_7473(...) \
+ NET_REGISTER_DEVEXT(TTL_7473, __VA_ARGS__)
-#define TTL_7473_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7473_DIP, name)
+// usage : TTL_7473_DIP(name)
+#define TTL_7473_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7473_DIP, __VA_ARGS__)
-#define TTL_7473A(name, pCLK, pJ, pK, pCLRQ) \
- NET_REGISTER_DEVEXT(TTL_7473A, name, pCLK, pJ, pK, pCLRQ)
+// usage : TTL_7473A(name, pCLK, pJ, pK, pCLRQ)
+// auto connect: VCC, GND
+#define TTL_7473A(...) \
+ NET_REGISTER_DEVEXT(TTL_7473A, __VA_ARGS__)
-#define TTL_7473A_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7473A_DIP, name)
+// usage : TTL_7473A_DIP(name)
+#define TTL_7473A_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7473A_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7474.cpp
// ---------------------------------------------------------------------
-#define TTL_7474(name, pCLK, pD, pCLRQ, pPREQ) \
- NET_REGISTER_DEVEXT(TTL_7474, name, pCLK, pD, pCLRQ, pPREQ)
+// usage : TTL_7474(name, pCLK, pD, pCLRQ, pPREQ)
+// auto connect: VCC, GND
+#define TTL_7474(...) \
+ NET_REGISTER_DEVEXT(TTL_7474, __VA_ARGS__)
-#define TTL_7474_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7474_DIP, name)
+// usage : TTL_7474_DIP(name)
+#define TTL_7474_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7474_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7475.cpp
// ---------------------------------------------------------------------
-#define TTL_7475(name) \
- NET_REGISTER_DEVEXT(TTL_7475, name)
+// usage : TTL_7475(name)
+#define TTL_7475(...) \
+ NET_REGISTER_DEVEXT(TTL_7475, __VA_ARGS__)
-#define TTL_7475_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7475_DIP, name)
+// usage : TTL_7475_DIP(name)
+#define TTL_7475_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7475_DIP, __VA_ARGS__)
-#define TTL_7477(name) \
- NET_REGISTER_DEVEXT(TTL_7477, name)
+// usage : TTL_7477(name)
+#define TTL_7477(...) \
+ NET_REGISTER_DEVEXT(TTL_7477, __VA_ARGS__)
-#define TTL_7477_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7477_DIP, name)
+// usage : TTL_7477_DIP(name)
+#define TTL_7477_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7477_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7483.cpp
// ---------------------------------------------------------------------
-#define TTL_7483(name, pA1, pA2, pA3, pA4, pB1, pB2, pB3, pB4, pC0) \
- NET_REGISTER_DEVEXT(TTL_7483, name, pA1, pA2, pA3, pA4, pB1, pB2, pB3, pB4, pC0)
+// usage : TTL_7483(name, pA1, pA2, pA3, pA4, pB1, pB2, pB3, pB4, pC0)
+// auto connect: VCC, GND
+#define TTL_7483(...) \
+ NET_REGISTER_DEVEXT(TTL_7483, __VA_ARGS__)
-#define TTL_7483_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7483_DIP, name)
+// usage : TTL_7483_DIP(name)
+#define TTL_7483_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7483_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7485.cpp
// ---------------------------------------------------------------------
-#define TTL_7485(name, pA0, pA1, pA2, pA3, pB0, pB1, pB2, pB3, pLTIN, pEQIN, pGTIN)\
- NET_REGISTER_DEVEXT(TTL_7485, name, pA0, pA1, pA2, pA3, pB0, pB1, pB2, pB3, pLTIN, pEQIN, pGTIN)
+// usage : TTL_7485(name, pA0, pA1, pA2, pA3, pB0, pB1, pB2, pB3, pLTIN, pEQIN, pGTIN)
+// auto connect: VCC, GND
+#define TTL_7485(...) \
+ NET_REGISTER_DEVEXT(TTL_7485, __VA_ARGS__)
-#define TTL_7485_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7485_DIP, name)
+// usage : TTL_7485_DIP(name)
+#define TTL_7485_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7485_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7490.cpp
// ---------------------------------------------------------------------
-#define TTL_7490(name, pA, pB, pR1, pR2, pR91, pR92) \
- NET_REGISTER_DEVEXT(TTL_7490, name, pA, pB, pR1, pR2, pR91, pR92)
+// usage : TTL_7490(name, pA, pB, pR1, pR2, pR91, pR92)
+// auto connect: VCC, GND
+#define TTL_7490(...) \
+ NET_REGISTER_DEVEXT(TTL_7490, __VA_ARGS__)
-#define TTL_7490_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7490_DIP, name)
+// usage : TTL_7490_DIP(name)
+#define TTL_7490_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7490_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7492.cpp
// ---------------------------------------------------------------------
-#define TTL_7492(name, pA, pB, pR1, pR2) \
- NET_REGISTER_DEVEXT(TTL_7492, name, pA, pB, pR1, pR2)
+// usage : TTL_7492(name, pA, pB, pR1, pR2)
+// auto connect: VCC, GND
+#define TTL_7492(...) \
+ NET_REGISTER_DEVEXT(TTL_7492, __VA_ARGS__)
-#define TTL_7492_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7492_DIP, name)
+// usage : TTL_7492_DIP(name)
+#define TTL_7492_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7492_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7493.cpp
// ---------------------------------------------------------------------
-#define TTL_7493(name, pCLKA, pCLKB, pR1, pR2) \
- NET_REGISTER_DEVEXT(TTL_7493, name, pCLKA, pCLKB, pR1, pR2)
+// usage : TTL_7493(name, pCLKA, pCLKB, pR1, pR2)
+// auto connect: VCC, GND
+#define TTL_7493(...) \
+ NET_REGISTER_DEVEXT(TTL_7493, __VA_ARGS__)
-#define TTL_7493_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7493_DIP, name)
+// usage : TTL_7493_DIP(name)
+#define TTL_7493_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7493_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_7497.cpp
// ---------------------------------------------------------------------
-#define TTL_7497(name, pCLK, pSTRBQ, pENQ, pUNITYQ, pCLR, pB0, pB1, pB2, pB3, pB4, pB5)\
- NET_REGISTER_DEVEXT(TTL_7497, name, pCLK, pSTRBQ, pENQ, pUNITYQ, pCLR, pB0, pB1, pB2, pB3, pB4, pB5)
+// usage : TTL_7497(name, pCLK, pSTRBQ, pENQ, pUNITYQ, pCLR, pB0, pB1, pB2, pB3, pB4, pB5)
+// auto connect: VCC, GND
+#define TTL_7497(...) \
+ NET_REGISTER_DEVEXT(TTL_7497, __VA_ARGS__)
-#define TTL_7497_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7497_DIP, name)
+// usage : TTL_7497_DIP(name)
+#define TTL_7497_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7497_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74107.cpp
// ---------------------------------------------------------------------
-#define TTL_74107(name, pCLK, pJ, pK, pCLRQ) \
- NET_REGISTER_DEVEXT(TTL_74107, name, pCLK, pJ, pK, pCLRQ)
+// usage : TTL_74107(name, pCLK, pJ, pK, pCLRQ)
+// auto connect: VCC, GND
+#define TTL_74107(...) \
+ NET_REGISTER_DEVEXT(TTL_74107, __VA_ARGS__)
-#define TTL_74107_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74107_DIP, name)
+// usage : TTL_74107_DIP(name)
+#define TTL_74107_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74107_DIP, __VA_ARGS__)
-#define TTL_74107A(name, pCLK, pJ, pK, pCLRQ) \
- NET_REGISTER_DEVEXT(TTL_74107A, name, pCLK, pJ, pK, pCLRQ)
+// usage : TTL_74107A(name, pCLK, pJ, pK, pCLRQ)
+// auto connect: VCC, GND
+#define TTL_74107A(...) \
+ NET_REGISTER_DEVEXT(TTL_74107A, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74123.cpp
// ---------------------------------------------------------------------
-#define TTL_74123(name) \
- NET_REGISTER_DEVEXT(TTL_74123, name)
+// usage : TTL_74123(name)
+#define TTL_74123(...) \
+ NET_REGISTER_DEVEXT(TTL_74123, __VA_ARGS__)
-#define TTL_74123_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74123_DIP, name)
+// usage : TTL_74123_DIP(name)
+#define TTL_74123_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74123_DIP, __VA_ARGS__)
+
+// ---------------------------------------------------------------------
+// Source: src/lib/netlist/devices/nld_74125.cpp
+// ---------------------------------------------------------------------
+// usage : TTL_74125(name)
+#define TTL_74125(...) \
+ NET_REGISTER_DEVEXT(TTL_74125, __VA_ARGS__)
+
+// usage : TTL_74126(name)
+#define TTL_74126(...) \
+ NET_REGISTER_DEVEXT(TTL_74126, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74153.cpp
// ---------------------------------------------------------------------
-#define TTL_74153(name, pC0, pC1, pC2, pC3, pA, pB, pG) \
- NET_REGISTER_DEVEXT(TTL_74153, name, pC0, pC1, pC2, pC3, pA, pB, pG)
+// usage : TTL_74153(name, pC0, pC1, pC2, pC3, pA, pB, pG)
+// auto connect: VCC, GND
+#define TTL_74153(...) \
+ NET_REGISTER_DEVEXT(TTL_74153, __VA_ARGS__)
-#define TTL_74153_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74153_DIP, name)
+// usage : TTL_74153_DIP(name)
+#define TTL_74153_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74153_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74161.cpp
// ---------------------------------------------------------------------
-#define TTL_74161(name, pA, pB, pC, pD, pCLRQ, pLOADQ, pCLK, pENABLEP, pENABLET)\
- NET_REGISTER_DEVEXT(TTL_74161, name, pA, pB, pC, pD, pCLRQ, pLOADQ, pCLK, pENABLEP, pENABLET)
+// usage : TTL_74161(name, pA, pB, pC, pD, pCLRQ, pLOADQ, pCLK, pENABLEP, pENABLET)
+// auto connect: VCC, GND
+#define TTL_74161(...) \
+ NET_REGISTER_DEVEXT(TTL_74161, __VA_ARGS__)
-#define TTL_74161_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74161_DIP, name)
+// usage : TTL_74161_DIP(name)
+#define TTL_74161_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74161_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_9316.cpp
// ---------------------------------------------------------------------
-#define TTL_74163(name, pCLK, pENP, pENT, pCLRQ, pLOADQ, pA, pB, pC, pD)\
- NET_REGISTER_DEVEXT(TTL_74163, name, pCLK, pENP, pENT, pCLRQ, pLOADQ, pA, pB, pC, pD)
+// usage : TTL_74163(name, pCLK, pENP, pENT, pCLRQ, pLOADQ, pA, pB, pC, pD)
+// auto connect: VCC, GND
+#define TTL_74163(...) \
+ NET_REGISTER_DEVEXT(TTL_74163, __VA_ARGS__)
-#define TTL_74163_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74163_DIP, name)
+// usage : TTL_74163_DIP(name)
+#define TTL_74163_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74163_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74164.cpp
// ---------------------------------------------------------------------
-#define TTL_74164(name, pA, pB, pCLRQ, pCLK) \
- NET_REGISTER_DEVEXT(TTL_74164, name, pA, pB, pCLRQ, pCLK)
+// usage : TTL_74164(name, pA, pB, pCLRQ, pCLK)
+// auto connect: VCC, GND
+#define TTL_74164(...) \
+ NET_REGISTER_DEVEXT(TTL_74164, __VA_ARGS__)
-#define TTL_74164_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74164_DIP, name)
+// usage : TTL_74164_DIP(name)
+#define TTL_74164_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74164_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74165.cpp
// ---------------------------------------------------------------------
-#define TTL_74165(name, pCLK, pCLKINH, pSH_LDQ, pSER, pA, pB, pC, pD, pE, pF, pG, pH)\
- NET_REGISTER_DEVEXT(TTL_74165, name, pCLK, pCLKINH, pSH_LDQ, pSER, pA, pB, pC, pD, pE, pF, pG, pH)
+// usage : TTL_74165(name, pCLK, pCLKINH, pSH_LDQ, pSER, pA, pB, pC, pD, pE, pF, pG, pH)
+// auto connect: VCC, GND
+#define TTL_74165(...) \
+ NET_REGISTER_DEVEXT(TTL_74165, __VA_ARGS__)
-#define TTL_74165_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74165_DIP, name)
+// usage : TTL_74165_DIP(name)
+#define TTL_74165_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74165_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74166.cpp
// ---------------------------------------------------------------------
-#define TTL_74166(name, pCLK, pCLKINH, pSH_LDQ, pSER, pA, pB, pC, pD, pE, pF, pG, pH, pCLRQ)\
- NET_REGISTER_DEVEXT(TTL_74166, name, pCLK, pCLKINH, pSH_LDQ, pSER, pA, pB, pC, pD, pE, pF, pG, pH, pCLRQ)
+// usage : TTL_74166(name, pCLK, pCLKINH, pSH_LDQ, pSER, pA, pB, pC, pD, pE, pF, pG, pH, pCLRQ)
+// auto connect: VCC, GND
+#define TTL_74166(...) \
+ NET_REGISTER_DEVEXT(TTL_74166, __VA_ARGS__)
-#define TTL_74166_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74166_DIP, name)
+// usage : TTL_74166_DIP(name)
+#define TTL_74166_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74166_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74174.cpp
// ---------------------------------------------------------------------
-#define TTL_74174(name, pCLK, pD1, pD2, pD3, pD4, pD5, pD6, pCLRQ) \
- NET_REGISTER_DEVEXT(TTL_74174, name, pCLK, pD1, pD2, pD3, pD4, pD5, pD6, pCLRQ)
+// usage : TTL_74174(name, pCLK, pD1, pD2, pD3, pD4, pD5, pD6, pCLRQ)
+// auto connect: VCC, GND
+#define TTL_74174(...) \
+ NET_REGISTER_DEVEXT(TTL_74174, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74175.cpp
// ---------------------------------------------------------------------
-#define TTL_74175(name, pCLK, pD1, pD2, pD3, pD4, pCLRQ) \
- NET_REGISTER_DEVEXT(TTL_74175, name, pCLK, pD1, pD2, pD3, pD4, pCLRQ)
+// usage : TTL_74175(name, pCLK, pD1, pD2, pD3, pD4, pCLRQ)
+// auto connect: VCC, GND
+#define TTL_74175(...) \
+ NET_REGISTER_DEVEXT(TTL_74175, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74192.cpp
// ---------------------------------------------------------------------
-#define TTL_74192(name, pA, pB, pC, pD, pCLEAR, pLOADQ, pCU, pCD) \
- NET_REGISTER_DEVEXT(TTL_74192, name, pA, pB, pC, pD, pCLEAR, pLOADQ, pCU, pCD)
+// usage : TTL_74192(name, pA, pB, pC, pD, pCLEAR, pLOADQ, pCU, pCD)
+// auto connect: VCC, GND
+#define TTL_74192(...) \
+ NET_REGISTER_DEVEXT(TTL_74192, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74193.cpp
// ---------------------------------------------------------------------
-#define TTL_74193(name, pA, pB, pC, pD, pCLEAR, pLOADQ, pCU, pCD) \
- NET_REGISTER_DEVEXT(TTL_74193, name, pA, pB, pC, pD, pCLEAR, pLOADQ, pCU, pCD)
+// usage : TTL_74193(name, pA, pB, pC, pD, pCLEAR, pLOADQ, pCU, pCD)
+// auto connect: VCC, GND
+#define TTL_74193(...) \
+ NET_REGISTER_DEVEXT(TTL_74193, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74194.cpp
// ---------------------------------------------------------------------
-#define TTL_74194(name, pCLK, pS0, pS1, pSRIN, pA, pB, pC, pD, pSLIN, pCLRQ)\
- NET_REGISTER_DEVEXT(TTL_74194, name, pCLK, pS0, pS1, pSRIN, pA, pB, pC, pD, pSLIN, pCLRQ)
+// usage : TTL_74194(name, pCLK, pS0, pS1, pSRIN, pA, pB, pC, pD, pSLIN, pCLRQ)
+// auto connect: VCC, GND
+#define TTL_74194(...) \
+ NET_REGISTER_DEVEXT(TTL_74194, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74365.cpp
// ---------------------------------------------------------------------
-#define TTL_74365(name, pG1Q, pG2Q, pA1, pA2, pA3, pA4, pA5, pA6) \
- NET_REGISTER_DEVEXT(TTL_74365, name, pG1Q, pG2Q, pA1, pA2, pA3, pA4, pA5, pA6)
+// usage : TTL_74365(name, pG1Q, pG2Q, pA1, pA2, pA3, pA4, pA5, pA6)
+// auto connect: VCC, GND
+#define TTL_74365(...) \
+ NET_REGISTER_DEVEXT(TTL_74365, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74377.cpp
// ---------------------------------------------------------------------
-#define TTL_74377_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_74377_GATE, name)
+// usage : TTL_74377_GATE(name)
+#define TTL_74377_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_74377_GATE, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74393.cpp
// ---------------------------------------------------------------------
-#define TTL_74393(name, pCP, pMR) \
- NET_REGISTER_DEVEXT(TTL_74393, name, pCP, pMR)
+// usage : TTL_74393(name, pCP, pMR)
+// auto connect: VCC, GND
+#define TTL_74393(...) \
+ NET_REGISTER_DEVEXT(TTL_74393, __VA_ARGS__)
-#define TTL_74393_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74393_DIP, name)
+// usage : TTL_74393_DIP(name)
+#define TTL_74393_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74393_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74ls629.cpp
// ---------------------------------------------------------------------
-#define SN74LS629(name, pCAP) \
- NET_REGISTER_DEVEXT(SN74LS629, name, pCAP)
+// usage : SN74LS629(name, pCAP)
+#define SN74LS629(...) \
+ NET_REGISTER_DEVEXT(SN74LS629, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_82S16.cpp
// ---------------------------------------------------------------------
-#define TTL_82S16(name) \
- NET_REGISTER_DEVEXT(TTL_82S16, name)
+// usage : TTL_82S16(name)
+#define TTL_82S16(...) \
+ NET_REGISTER_DEVEXT(TTL_82S16, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_82S115.cpp
// ---------------------------------------------------------------------
-#define PROM_82S115(name, pCE1Q, pCE2, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pSTROBE)\
- NET_REGISTER_DEVEXT(PROM_82S115, name, pCE1Q, pCE2, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pSTROBE)
+// usage : PROM_82S115(name, pCE1Q, pCE2, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pSTROBE)
+// auto connect: VCC, GND
+#define PROM_82S115(...) \
+ NET_REGISTER_DEVEXT(PROM_82S115, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_82S123.cpp
// ---------------------------------------------------------------------
-#define PROM_82S123(name, pCEQ, pA0, pA1, pA2, pA3, pA4) \
- NET_REGISTER_DEVEXT(PROM_82S123, name, pCEQ, pA0, pA1, pA2, pA3, pA4)
+// usage : PROM_82S123(name, pCEQ, pA0, pA1, pA2, pA3, pA4)
+// auto connect: VCC, GND
+#define PROM_82S123(...) \
+ NET_REGISTER_DEVEXT(PROM_82S123, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_82S126.cpp
// ---------------------------------------------------------------------
-#define PROM_82S126(name, pCE1Q, pCE2Q, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7)\
- NET_REGISTER_DEVEXT(PROM_82S126, name, pCE1Q, pCE2Q, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7)
+// usage : PROM_82S126(name, pCE1Q, pCE2Q, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7)
+// auto connect: VCC, GND
+#define PROM_82S126(...) \
+ NET_REGISTER_DEVEXT(PROM_82S126, __VA_ARGS__)
+
+// usage : PROM_74S287(name, pCE1Q, pCE2Q, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7)
+// auto connect: VCC, GND
+#define PROM_74S287(...) \
+ NET_REGISTER_DEVEXT(PROM_74S287, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_9310.cpp
// ---------------------------------------------------------------------
-#define TTL_9310(name, pCLK, pENP, pENT, pCLRQ, pLOADQ, pA, pB, pC, pD)\
- NET_REGISTER_DEVEXT(TTL_9310, name, pCLK, pENP, pENT, pCLRQ, pLOADQ, pA, pB, pC, pD)
+// usage : TTL_9310(name, pCLK, pENP, pENT, pCLRQ, pLOADQ, pA, pB, pC, pD)
+// auto connect: VCC, GND
+#define TTL_9310(...) \
+ NET_REGISTER_DEVEXT(TTL_9310, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_dm9314.cpp
// ---------------------------------------------------------------------
-#define TTL_9314(name, pEQ, pMRQ, pS0Q, pS1Q, pS2Q, pS3Q, pD0, pD1, pD2, pD3)\
- NET_REGISTER_DEVEXT(TTL_9314, name, pEQ, pMRQ, pS0Q, pS1Q, pS2Q, pS3Q, pD0, pD1, pD2, pD3)
+// usage : TTL_9314(name, pEQ, pMRQ, pS0Q, pS1Q, pS2Q, pS3Q, pD0, pD1, pD2, pD3)
+// auto connect: VCC, GND
+#define TTL_9314(...) \
+ NET_REGISTER_DEVEXT(TTL_9314, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_9316.cpp
// ---------------------------------------------------------------------
-#define TTL_9316(name, pCLK, pENP, pENT, pCLRQ, pLOADQ, pA, pB, pC, pD)\
- NET_REGISTER_DEVEXT(TTL_9316, name, pCLK, pENP, pENT, pCLRQ, pLOADQ, pA, pB, pC, pD)
+// usage : TTL_9316(name, pCLK, pENP, pENT, pCLRQ, pLOADQ, pA, pB, pC, pD)
+// auto connect: VCC, GND
+#define TTL_9316(...) \
+ NET_REGISTER_DEVEXT(TTL_9316, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_9322.cpp
// ---------------------------------------------------------------------
-#define TTL_9322(name, pSELECT, pA1, pB1, pA2, pB2, pA3, pB3, pA4, pB4, pSTROBE)\
- NET_REGISTER_DEVEXT(TTL_9322, name, pSELECT, pA1, pB1, pA2, pB2, pA3, pB3, pA4, pB4, pSTROBE)
+// usage : TTL_9322(name, pSELECT, pA1, pB1, pA2, pB2, pA3, pB3, pA4, pB4, pSTROBE)
+// auto connect: VCC, GND
+#define TTL_9322(...) \
+ NET_REGISTER_DEVEXT(TTL_9322, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_dm9334.cpp
// ---------------------------------------------------------------------
-#define TTL_9334(name, pCQ, pEQ, pD, pA0, pA1, pA2) \
- NET_REGISTER_DEVEXT(TTL_9334, name, pCQ, pEQ, pD, pA0, pA1, pA2)
+// usage : TTL_9334(name, pCQ, pEQ, pD, pA0, pA1, pA2)
+// auto connect: VCC, GND
+#define TTL_9334(...) \
+ NET_REGISTER_DEVEXT(TTL_9334, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_am2847.cpp
// ---------------------------------------------------------------------
-#define TTL_AM2847(name, pCP, pINA, pINB, pINC, pIND, pRCA, pRCB, pRCC, pRCD)\
- NET_REGISTER_DEVEXT(TTL_AM2847, name, pCP, pINA, pINB, pINC, pIND, pRCA, pRCB, pRCC, pRCD)
+// usage : TTL_AM2847(name, pCP, pINA, pINB, pINC, pIND, pRCA, pRCB, pRCC, pRCD)
+// auto connect: VSS, VDD
+#define TTL_AM2847(...) \
+ NET_REGISTER_DEVEXT(TTL_AM2847, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_4006.cpp
// ---------------------------------------------------------------------
-#define CD4006(name, pCLOCK, pD1, pD2, pD3, pD4, pD1P4, pD1P4S, pD2P4, pD2P5, pD3P4, pD4P4, pD3P5)\
- NET_REGISTER_DEVEXT(CD4006, name, pCLOCK, pD1, pD2, pD3, pD4, pD1P4, pD1P4S, pD2P4, pD2P5, pD3P4, pD4P4, pD3P5)
+// usage : CD4006(name, pCLOCK, pD1, pD2, pD3, pD4, pD1P4, pD1P4S, pD2P4, pD2P5, pD3P4, pD4P4, pD3P5)
+// auto connect: VCC, GND
+#define CD4006(...) \
+ NET_REGISTER_DEVEXT(CD4006, __VA_ARGS__)
-#define CD4006_DIP(name) \
- NET_REGISTER_DEVEXT(CD4006_DIP, name)
+// usage : CD4006_DIP(name)
+#define CD4006_DIP(...) \
+ NET_REGISTER_DEVEXT(CD4006_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_4020.cpp
// ---------------------------------------------------------------------
-#define CD4020_WI(name, pIP, pRESET, pVDD, pVSS) \
- NET_REGISTER_DEVEXT(CD4020_WI, name, pIP, pRESET, pVDD, pVSS)
+// usage : CD4020_WI(name, pIP, pRESET, pVDD, pVSS)
+#define CD4020_WI(...) \
+ NET_REGISTER_DEVEXT(CD4020_WI, __VA_ARGS__)
-#define CD4020(name) \
- NET_REGISTER_DEVEXT(CD4020, name)
+// usage : CD4020(name)
+#define CD4020(...) \
+ NET_REGISTER_DEVEXT(CD4020, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_4066.cpp
// ---------------------------------------------------------------------
-#define CD4066_GATE(name) \
- NET_REGISTER_DEVEXT(CD4066_GATE, name)
+// usage : CD4066_GATE(name)
+#define CD4066_GATE(...) \
+ NET_REGISTER_DEVEXT(CD4066_GATE, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_4316.cpp
// ---------------------------------------------------------------------
-#define CD4316_GATE(name) \
- NET_REGISTER_DEVEXT(CD4316_GATE, name)
+// usage : CD4316_GATE(name)
+#define CD4316_GATE(...) \
+ NET_REGISTER_DEVEXT(CD4316_GATE, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74123.cpp
// ---------------------------------------------------------------------
-#define CD4538_DIP(name) \
- NET_REGISTER_DEVEXT(CD4538_DIP, name)
+// usage : CD4538_DIP(name)
+#define CD4538_DIP(...) \
+ NET_REGISTER_DEVEXT(CD4538_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_schmitt.cpp
// ---------------------------------------------------------------------
-#define SCHMITT_TRIGGER(name, pSTMODEL) \
- NET_REGISTER_DEVEXT(SCHMITT_TRIGGER, name, pSTMODEL)
+// usage : SCHMITT_TRIGGER(name, pSTMODEL)
+#define SCHMITT_TRIGGER(...) \
+ NET_REGISTER_DEVEXT(SCHMITT_TRIGGER, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_ne555.cpp
// ---------------------------------------------------------------------
-#define NE555(name) \
- NET_REGISTER_DEVEXT(NE555, name)
+// usage : NE555(name)
+#define NE555(...) \
+ NET_REGISTER_DEVEXT(NE555, __VA_ARGS__)
-#define NE555_DIP(name) \
- NET_REGISTER_DEVEXT(NE555_DIP, name)
+// usage : NE555_DIP(name)
+#define NE555_DIP(...) \
+ NET_REGISTER_DEVEXT(NE555_DIP, __VA_ARGS__)
-#define MC1455P(name) \
- NET_REGISTER_DEVEXT(MC1455P, name)
+// usage : MC1455P(name)
+#define MC1455P(...) \
+ NET_REGISTER_DEVEXT(MC1455P, __VA_ARGS__)
-#define MC1455P_DIP(name) \
- NET_REGISTER_DEVEXT(MC1455P_DIP, name)
+// usage : MC1455P_DIP(name)
+#define MC1455P_DIP(...) \
+ NET_REGISTER_DEVEXT(MC1455P_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_tms4800.cpp
// ---------------------------------------------------------------------
-#define ROM_TMS4800(name, pAR, pOE1, pOE2, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pA9, pA10)\
- NET_REGISTER_DEVEXT(ROM_TMS4800, name, pAR, pOE1, pOE2, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pA9, pA10)
+// usage : ROM_TMS4800(name, pAR, pOE1, pOE2, pA0, pA1, pA2, pA3, pA4, pA5, pA6, pA7, pA8, pA9, pA10)
+// auto connect: VCC, GND
+#define ROM_TMS4800(...) \
+ NET_REGISTER_DEVEXT(ROM_TMS4800, __VA_ARGS__)
-#define ROM_TMS4800_DIP(name) \
- NET_REGISTER_DEVEXT(ROM_TMS4800_DIP, name)
+// usage : ROM_TMS4800_DIP(name)
+#define ROM_TMS4800_DIP(...) \
+ NET_REGISTER_DEVEXT(ROM_TMS4800_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_r2r_dac.cpp
// ---------------------------------------------------------------------
-#define R2R_DAC(name, pVIN, pR, pN) \
- NET_REGISTER_DEVEXT(R2R_DAC, name, pVIN, pR, pN)
+// usage : R2R_DAC(name, pVIN, pR, pN)
+#define R2R_DAC(...) \
+ NET_REGISTER_DEVEXT(R2R_DAC, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_tristate.cpp
// ---------------------------------------------------------------------
-#define TTL_TRISTATE(name, pCEQ1, pD1, pCEQ2, pD2) \
- NET_REGISTER_DEVEXT(TTL_TRISTATE, name, pCEQ1, pD1, pCEQ2, pD2)
+// usage : TTL_TRISTATE(name, pCEQ1, pD1, pCEQ2, pD2)
+#define TTL_TRISTATE(...) \
+ NET_REGISTER_DEVEXT(TTL_TRISTATE, __VA_ARGS__)
-#define TTL_TRISTATE3(name) \
- NET_REGISTER_DEVEXT(TTL_TRISTATE3, name)
+// usage : TTL_TRISTATE3(name)
+#define TTL_TRISTATE3(...) \
+ NET_REGISTER_DEVEXT(TTL_TRISTATE3, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74174.cpp
// ---------------------------------------------------------------------
-#define TTL_74174_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74174_DIP, name)
+// usage : TTL_74174_DIP(name)
+#define TTL_74174_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74174_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74175.cpp
// ---------------------------------------------------------------------
-#define TTL_74175_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74175_DIP, name)
+// usage : TTL_74175_DIP(name)
+#define TTL_74175_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74175_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74192.cpp
// ---------------------------------------------------------------------
-#define TTL_74192_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74192_DIP, name)
+// usage : TTL_74192_DIP(name)
+#define TTL_74192_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74192_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74193.cpp
// ---------------------------------------------------------------------
-#define TTL_74193_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74193_DIP, name)
+// usage : TTL_74193_DIP(name)
+#define TTL_74193_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74193_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74194.cpp
// ---------------------------------------------------------------------
-#define TTL_74194_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74194_DIP, name)
+// usage : TTL_74194_DIP(name)
+#define TTL_74194_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74194_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74365.cpp
// ---------------------------------------------------------------------
-#define TTL_74365_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74365_DIP, name)
+// usage : TTL_74365_DIP(name)
+#define TTL_74365_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74365_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_82S16.cpp
// ---------------------------------------------------------------------
-#define TTL_82S16_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_82S16_DIP, name)
+// usage : TTL_82S16_DIP(name)
+#define TTL_82S16_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_82S16_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_82S115.cpp
// ---------------------------------------------------------------------
-#define PROM_82S115_DIP(name) \
- NET_REGISTER_DEVEXT(PROM_82S115_DIP, name)
+// usage : PROM_82S115_DIP(name)
+#define PROM_82S115_DIP(...) \
+ NET_REGISTER_DEVEXT(PROM_82S115_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_82S123.cpp
// ---------------------------------------------------------------------
-#define PROM_82S123_DIP(name) \
- NET_REGISTER_DEVEXT(PROM_82S123_DIP, name)
-
-// ---------------------------------------------------------------------
-// Source: src/lib/netlist/devices/nld_82S126.cpp
-// ---------------------------------------------------------------------
-#define PROM_82S126_DIP(name) \
- NET_REGISTER_DEVEXT(PROM_82S126_DIP, name)
+// usage : PROM_82S123_DIP(name)
+#define PROM_82S123_DIP(...) \
+ NET_REGISTER_DEVEXT(PROM_82S123_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74123.cpp
// ---------------------------------------------------------------------
-#define TTL_9602_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_9602_DIP, name)
+// usage : TTL_9602_DIP(name)
+#define TTL_9602_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_9602_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_9310.cpp
// ---------------------------------------------------------------------
-#define TTL_9310_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_9310_DIP, name)
+// usage : TTL_9310_DIP(name)
+#define TTL_9310_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_9310_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_dm9314.cpp
// ---------------------------------------------------------------------
-#define TTL_9314_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_9314_DIP, name)
+// usage : TTL_9314_DIP(name)
+#define TTL_9314_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_9314_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_9316.cpp
// ---------------------------------------------------------------------
-#define TTL_9316_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_9316_DIP, name)
+// usage : TTL_9316_DIP(name)
+#define TTL_9316_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_9316_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_9322.cpp
// ---------------------------------------------------------------------
-#define TTL_9322_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_9322_DIP, name)
+// usage : TTL_9322_DIP(name)
+#define TTL_9322_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_9322_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_dm9334.cpp
// ---------------------------------------------------------------------
-#define TTL_9334_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_9334_DIP, name)
+// usage : TTL_9334_DIP(name)
+#define TTL_9334_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_9334_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_am2847.cpp
// ---------------------------------------------------------------------
-#define TTL_AM2847_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_AM2847_DIP, name)
+// usage : TTL_AM2847_DIP(name)
+#define TTL_AM2847_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_AM2847_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74ls629.cpp
// ---------------------------------------------------------------------
-#define SN74LS629_DIP(name, p1_CAP1, p2_CAP2) \
- NET_REGISTER_DEVEXT(SN74LS629_DIP, name, p1_CAP1, p2_CAP2)
+// usage : SN74LS629_DIP(name, p1_CAP1, p2_CAP2)
+#define SN74LS629_DIP(...) \
+ NET_REGISTER_DEVEXT(SN74LS629_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_mm5837.cpp
// ---------------------------------------------------------------------
-#define MM5837_DIP(name) \
- NET_REGISTER_DEVEXT(MM5837_DIP, name)
+// usage : MM5837_DIP(name)
+#define MM5837_DIP(...) \
+ NET_REGISTER_DEVEXT(MM5837_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/macro/nlm_ttl74xx.cpp
// ---------------------------------------------------------------------
-#define TTL_7400_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7400_GATE, name)
-
-#define TTL_7400_NAND(name, pA, pB) \
- NET_REGISTER_DEVEXT(TTL_7400_NAND, name, pA, pB)
-
-#define TTL_7402_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7402_GATE, name)
-
-#define TTL_7402_NOR(name, pA, pB) \
- NET_REGISTER_DEVEXT(TTL_7402_NOR, name, pA, pB)
-
-#define TTL_7404_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7404_GATE, name)
-
-#define TTL_7404_INVERT(name, pA) \
- NET_REGISTER_DEVEXT(TTL_7404_INVERT, name, pA)
-
-#define TTL_7406_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7406_GATE, name)
-
-#define TTL_7408_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7408_GATE, name)
-
-#define TTL_7408_AND(name, pA, pB) \
- NET_REGISTER_DEVEXT(TTL_7408_AND, name, pA, pB)
-
-#define TTL_7410_NAND(name, pA, pB, pC) \
- NET_REGISTER_DEVEXT(TTL_7410_NAND, name, pA, pB, pC)
-
-#define TTL_7410_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7410_GATE, name)
-
-#define TTL_7411_AND(name, pA, pB, pC) \
- NET_REGISTER_DEVEXT(TTL_7411_AND, name, pA, pB, pC)
-
-#define TTL_7411_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7411_GATE, name)
-
-#define TTL_7416_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7416_GATE, name)
-
-#define TTL_7420_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7420_GATE, name)
-
-#define TTL_7420_NAND(name, pA, pB, pC, pD) \
- NET_REGISTER_DEVEXT(TTL_7420_NAND, name, pA, pB, pC, pD)
-
-#define TTL_7425_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7425_GATE, name)
-
-#define TTL_7425_NOR(name, pA, pB, pC, pD) \
- NET_REGISTER_DEVEXT(TTL_7425_NOR, name, pA, pB, pC, pD)
+// usage : TTL_7400_GATE(name)
+#define TTL_7400_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7400_GATE, __VA_ARGS__)
+
+// usage : TTL_7400_NAND(name, pA, pB)
+// auto connect: VCC, GND
+#define TTL_7400_NAND(...) \
+ NET_REGISTER_DEVEXT(TTL_7400_NAND, __VA_ARGS__)
+
+// usage : TTL_7402_GATE(name)
+#define TTL_7402_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7402_GATE, __VA_ARGS__)
+
+// usage : TTL_7402_NOR(name, pA, pB)
+// auto connect: VCC, GND
+#define TTL_7402_NOR(...) \
+ NET_REGISTER_DEVEXT(TTL_7402_NOR, __VA_ARGS__)
+
+// usage : TTL_7404_GATE(name)
+#define TTL_7404_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7404_GATE, __VA_ARGS__)
+
+// usage : TTL_7404_INVERT(name, pA)
+// auto connect: VCC, GND
+#define TTL_7404_INVERT(...) \
+ NET_REGISTER_DEVEXT(TTL_7404_INVERT, __VA_ARGS__)
+
+// usage : TTL_7406_GATE(name)
+#define TTL_7406_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7406_GATE, __VA_ARGS__)
+
+// usage : TTL_7408_GATE(name)
+#define TTL_7408_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7408_GATE, __VA_ARGS__)
+
+// usage : TTL_7408_AND(name, pA, pB)
+// auto connect: VCC, GND
+#define TTL_7408_AND(...) \
+ NET_REGISTER_DEVEXT(TTL_7408_AND, __VA_ARGS__)
+
+// usage : TTL_7410_NAND(name, pA, pB, pC)
+// auto connect: VCC, GND
+#define TTL_7410_NAND(...) \
+ NET_REGISTER_DEVEXT(TTL_7410_NAND, __VA_ARGS__)
+
+// usage : TTL_7410_GATE(name)
+#define TTL_7410_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7410_GATE, __VA_ARGS__)
+
+// usage : TTL_7411_AND(name, pA, pB, pC)
+// auto connect: VCC, GND
+#define TTL_7411_AND(...) \
+ NET_REGISTER_DEVEXT(TTL_7411_AND, __VA_ARGS__)
+
+// usage : TTL_7411_GATE(name)
+#define TTL_7411_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7411_GATE, __VA_ARGS__)
+
+// usage : TTL_7416_GATE(name)
+#define TTL_7416_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7416_GATE, __VA_ARGS__)
+
+// usage : TTL_7420_GATE(name)
+#define TTL_7420_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7420_GATE, __VA_ARGS__)
+
+// usage : TTL_7420_NAND(name, pA, pB, pC, pD)
+// auto connect: VCC, GND
+#define TTL_7420_NAND(...) \
+ NET_REGISTER_DEVEXT(TTL_7420_NAND, __VA_ARGS__)
+
+// usage : TTL_7425_GATE(name)
+#define TTL_7425_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7425_GATE, __VA_ARGS__)
+
+// usage : TTL_7425_NOR(name, pA, pB, pC, pD)
+// auto connect: VCC, GND
+#define TTL_7425_NOR(...) \
+ NET_REGISTER_DEVEXT(TTL_7425_NOR, __VA_ARGS__)
+
+// usage : TTL_7427_GATE(name)
+#define TTL_7427_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7427_GATE, __VA_ARGS__)
+
+// usage : TTL_7427_NOR(name, pA, pB, pC)
+// auto connect: VCC, GND
+#define TTL_7427_NOR(...) \
+ NET_REGISTER_DEVEXT(TTL_7427_NOR, __VA_ARGS__)
+
+// usage : TTL_7430_GATE(name)
+#define TTL_7430_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7430_GATE, __VA_ARGS__)
+
+// usage : TTL_7430_NAND(name, pA, pB, pC, pD, pE, pF, pG, pH)
+// auto connect: VCC, GND
+#define TTL_7430_NAND(...) \
+ NET_REGISTER_DEVEXT(TTL_7430_NAND, __VA_ARGS__)
+
+// usage : TTL_7432_GATE(name)
+#define TTL_7432_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7432_GATE, __VA_ARGS__)
+
+// usage : TTL_7432_OR(name, pA, pB)
+// auto connect: VCC, GND
+#define TTL_7432_OR(...) \
+ NET_REGISTER_DEVEXT(TTL_7432_OR, __VA_ARGS__)
+
+// usage : TTL_7437_GATE(name)
+#define TTL_7437_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7437_GATE, __VA_ARGS__)
+
+// usage : TTL_7437_NAND(name, pA, pB)
+#define TTL_7437_NAND(...) \
+ NET_REGISTER_DEVEXT(TTL_7437_NAND, __VA_ARGS__)
+
+// usage : TTL_7486_GATE(name)
+#define TTL_7486_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7486_GATE, __VA_ARGS__)
+
+// usage : TTL_7486_XOR(name, pA, pB)
+// auto connect: VCC, GND
+#define TTL_7486_XOR(...) \
+ NET_REGISTER_DEVEXT(TTL_7486_XOR, __VA_ARGS__)
+
+// usage : TTL_74155A_GATE(name)
+#define TTL_74155A_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_74155A_GATE, __VA_ARGS__)
+
+// usage : TTL_74155B_GATE(name)
+#define TTL_74155B_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_74155B_GATE, __VA_ARGS__)
+
+// usage : TTL_74156A_GATE(name)
+#define TTL_74156A_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_74156A_GATE, __VA_ARGS__)
+
+// usage : TTL_74156B_GATE(name)
+#define TTL_74156B_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_74156B_GATE, __VA_ARGS__)
+
+// usage : TTL_74260_GATE(name)
+#define TTL_74260_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_74260_GATE, __VA_ARGS__)
+
+// usage : TTL_74260_NOR(name, pA, pB, pC, pD, pE)
+// auto connect: VCC, GND
+#define TTL_74260_NOR(...) \
+ NET_REGISTER_DEVEXT(TTL_74260_NOR, __VA_ARGS__)
+
+// usage : TTL_74279A(name)
+#define TTL_74279A(...) \
+ NET_REGISTER_DEVEXT(TTL_74279A, __VA_ARGS__)
+
+// usage : TTL_74279B(name)
+#define TTL_74279B(...) \
+ NET_REGISTER_DEVEXT(TTL_74279B, __VA_ARGS__)
+
+// usage : DM9312(name, pA, pB, pC, pG, pD0, pD1, pD2, pD3, pD4, pD5, pD6, pD7)
+// auto connect: VCC, GND
+#define DM9312(...) \
+ NET_REGISTER_DEVEXT(DM9312, __VA_ARGS__)
+
+// usage : TTL_7400_DIP(name)
+#define TTL_7400_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7400_DIP, __VA_ARGS__)
+
+// usage : TTL_7402_DIP(name)
+#define TTL_7402_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7402_DIP, __VA_ARGS__)
+
+// usage : TTL_7404_DIP(name)
+#define TTL_7404_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7404_DIP, __VA_ARGS__)
-#define TTL_7427_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7427_GATE, name)
+// usage : TTL_7406_DIP(name)
+#define TTL_7406_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7406_DIP, __VA_ARGS__)
-#define TTL_7427_NOR(name, pA, pB, pC) \
- NET_REGISTER_DEVEXT(TTL_7427_NOR, name, pA, pB, pC)
+// usage : TTL_7408_DIP(name)
+#define TTL_7408_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7408_DIP, __VA_ARGS__)
-#define TTL_7430_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7430_GATE, name)
+// usage : TTL_7410_DIP(name)
+#define TTL_7410_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7410_DIP, __VA_ARGS__)
-#define TTL_7430_NAND(name, pA, pB, pC, pD, pE, pF, pG, pH) \
- NET_REGISTER_DEVEXT(TTL_7430_NAND, name, pA, pB, pC, pD, pE, pF, pG, pH)
+// usage : TTL_7411_DIP(name)
+#define TTL_7411_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7411_DIP, __VA_ARGS__)
-#define TTL_7432_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7432_GATE, name)
+// usage : TTL_7414_GATE(name)
+#define TTL_7414_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_7414_GATE, __VA_ARGS__)
-#define TTL_7432_OR(name, pA, pB) \
- NET_REGISTER_DEVEXT(TTL_7432_OR, name, pA, pB)
+// usage : TTL_74LS14_GATE(name)
+#define TTL_74LS14_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_74LS14_GATE, __VA_ARGS__)
-#define TTL_7437_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7437_GATE, name)
+// usage : TTL_7414_DIP(name)
+#define TTL_7414_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7414_DIP, __VA_ARGS__)
-#define TTL_7437_NAND(name, pA, pB) \
- NET_REGISTER_DEVEXT(TTL_7437_NAND, name, pA, pB)
+// usage : TTL_74LS14_DIP(name)
+#define TTL_74LS14_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74LS14_DIP, __VA_ARGS__)
-#define TTL_7486_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7486_GATE, name)
+// usage : TTL_7416_DIP(name)
+#define TTL_7416_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7416_DIP, __VA_ARGS__)
-#define TTL_7486_XOR(name, pA, pB) \
- NET_REGISTER_DEVEXT(TTL_7486_XOR, name, pA, pB)
+// usage : TTL_7420_DIP(name)
+#define TTL_7420_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7420_DIP, __VA_ARGS__)
-#define TTL_74155A_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_74155A_GATE, name)
+// usage : TTL_7425_DIP(name)
+#define TTL_7425_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7425_DIP, __VA_ARGS__)
-#define TTL_74155B_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_74155B_GATE, name)
+// usage : TTL_7427_DIP(name)
+#define TTL_7427_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7427_DIP, __VA_ARGS__)
-#define TTL_74156A_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_74156A_GATE, name)
+// usage : TTL_7430_DIP(name)
+#define TTL_7430_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7430_DIP, __VA_ARGS__)
-#define TTL_74156B_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_74156B_GATE, name)
+// usage : TTL_7432_DIP(name)
+#define TTL_7432_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7432_DIP, __VA_ARGS__)
-#define TTL_74260_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_74260_GATE, name)
+// usage : TTL_7437_DIP(name)
+#define TTL_7437_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7437_DIP, __VA_ARGS__)
-#define TTL_74260_NOR(name, pA, pB, pC, pD, pE) \
- NET_REGISTER_DEVEXT(TTL_74260_NOR, name, pA, pB, pC, pD, pE)
+// usage : TTL_7486_DIP(name)
+#define TTL_7486_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_7486_DIP, __VA_ARGS__)
-#define TTL_74279A(name) \
- NET_REGISTER_DEVEXT(TTL_74279A, name)
+// usage : TTL_74155_DIP(name)
+#define TTL_74155_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74155_DIP, __VA_ARGS__)
-#define TTL_74279B(name) \
- NET_REGISTER_DEVEXT(TTL_74279B, name)
+// usage : TTL_74156_DIP(name)
+#define TTL_74156_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74156_DIP, __VA_ARGS__)
-#define DM9312(name, pA, pB, pC, pG, pD0, pD1, pD2, pD3, pD4, pD5, pD6, pD7)\
- NET_REGISTER_DEVEXT(DM9312, name, pA, pB, pC, pG, pD0, pD1, pD2, pD3, pD4, pD5, pD6, pD7)
+// usage : TTL_74260_DIP(name)
+#define TTL_74260_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74260_DIP, __VA_ARGS__)
-#define TTL_7400_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7400_DIP, name)
+// usage : TTL_74279_DIP(name)
+#define TTL_74279_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74279_DIP, __VA_ARGS__)
-#define TTL_7402_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7402_DIP, name)
+// usage : TTL_74377_DIP(name)
+#define TTL_74377_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74377_DIP, __VA_ARGS__)
-#define TTL_7404_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7404_DIP, name)
+// usage : TTL_74378_DIP(name)
+#define TTL_74378_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74378_DIP, __VA_ARGS__)
-#define TTL_7406_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7406_DIP, name)
+// usage : TTL_74379_DIP(name)
+#define TTL_74379_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74379_DIP, __VA_ARGS__)
-#define TTL_7408_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7408_DIP, name)
-
-#define TTL_7410_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7410_DIP, name)
-
-#define TTL_7411_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7411_DIP, name)
-
-#define TTL_7414_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_7414_GATE, name)
-
-#define TTL_74LS14_GATE(name) \
- NET_REGISTER_DEVEXT(TTL_74LS14_GATE, name)
-
-#define TTL_7414_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7414_DIP, name)
-
-#define TTL_74LS14_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74LS14_DIP, name)
-
-#define TTL_7416_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7416_DIP, name)
-
-#define TTL_7420_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7420_DIP, name)
-
-#define TTL_7425_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7425_DIP, name)
-
-#define TTL_7427_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7427_DIP, name)
-
-#define TTL_7430_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7430_DIP, name)
-
-#define TTL_7432_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7432_DIP, name)
-
-#define TTL_7437_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7437_DIP, name)
-
-#define TTL_7486_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_7486_DIP, name)
-
-#define TTL_74155_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74155_DIP, name)
-
-#define TTL_74156_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74156_DIP, name)
-
-#define TTL_74260_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74260_DIP, name)
-
-#define TTL_74279_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74279_DIP, name)
-
-#define TTL_74377_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74377_DIP, name)
-
-#define TTL_74378_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74378_DIP, name)
-
-#define TTL_74379_DIP(name) \
- NET_REGISTER_DEVEXT(TTL_74379_DIP, name)
-
-#define DM9312_DIP(name) \
- NET_REGISTER_DEVEXT(DM9312_DIP, name)
+// usage : DM9312_DIP(name)
+#define DM9312_DIP(...) \
+ NET_REGISTER_DEVEXT(DM9312_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/macro/nlm_cd4xxx.cpp
// ---------------------------------------------------------------------
-#define CD4001_GATE(name) \
- NET_REGISTER_DEVEXT(CD4001_GATE, name)
+// usage : CD4001_GATE(name)
+#define CD4001_GATE(...) \
+ NET_REGISTER_DEVEXT(CD4001_GATE, __VA_ARGS__)
-#define CD4070_GATE(name) \
- NET_REGISTER_DEVEXT(CD4070_GATE, name)
+// usage : CD4070_GATE(name)
+#define CD4070_GATE(...) \
+ NET_REGISTER_DEVEXT(CD4070_GATE, __VA_ARGS__)
#define CD4069_GATE(name) \
NET_REGISTER_DEVEXT(CD4069_GATE, name)
+// usage : CD4001_DIP(name)
#define CD4001_DIP(name) \
NET_REGISTER_DEVEXT(CD4001_DIP, name)
-#define CD4070_DIP(name) \
- NET_REGISTER_DEVEXT(CD4070_DIP, name)
+// usage : CD4070_DIP(name)
+#define CD4070_DIP(...) \
+ NET_REGISTER_DEVEXT(CD4070_DIP, __VA_ARGS__)
-#define CD4020_DIP(name) \
- NET_REGISTER_DEVEXT(CD4020_DIP, name)
+// usage : CD4020_DIP(name)
+#define CD4020_DIP(...) \
+ NET_REGISTER_DEVEXT(CD4020_DIP, __VA_ARGS__)
-#define CD4016_DIP(name) \
- NET_REGISTER_DEVEXT(CD4016_DIP, name)
+// usage : CD4016_DIP(name)
+#define CD4016_DIP(...) \
+ NET_REGISTER_DEVEXT(CD4016_DIP, __VA_ARGS__)
-#define CD4066_DIP(name) \
- NET_REGISTER_DEVEXT(CD4066_DIP, name)
+// usage : CD4066_DIP(name)
+#define CD4066_DIP(...) \
+ NET_REGISTER_DEVEXT(CD4066_DIP, __VA_ARGS__)
-#define CD4316_DIP(name) \
- NET_REGISTER_DEVEXT(CD4316_DIP, name)
+// usage : CD4316_DIP(name)
+#define CD4316_DIP(...) \
+ NET_REGISTER_DEVEXT(CD4316_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/macro/nlm_opamp.cpp
// ---------------------------------------------------------------------
-#define opamp_layout_4_4_11(name) \
- NET_REGISTER_DEVEXT(opamp_layout_4_4_11, name)
+// usage : opamp_layout_4_4_11(name)
+#define opamp_layout_4_4_11(...) \
+ NET_REGISTER_DEVEXT(opamp_layout_4_4_11, __VA_ARGS__)
-#define opamp_layout_2_8_4(name) \
- NET_REGISTER_DEVEXT(opamp_layout_2_8_4, name)
+// usage : opamp_layout_2_8_4(name)
+#define opamp_layout_2_8_4(...) \
+ NET_REGISTER_DEVEXT(opamp_layout_2_8_4, __VA_ARGS__)
-#define opamp_layout_2_13_9_4(name) \
- NET_REGISTER_DEVEXT(opamp_layout_2_13_9_4, name)
+// usage : opamp_layout_2_13_9_4(name)
+#define opamp_layout_2_13_9_4(...) \
+ NET_REGISTER_DEVEXT(opamp_layout_2_13_9_4, __VA_ARGS__)
-#define opamp_layout_1_7_4(name) \
- NET_REGISTER_DEVEXT(opamp_layout_1_7_4, name)
+// usage : opamp_layout_1_7_4(name)
+#define opamp_layout_1_7_4(...) \
+ NET_REGISTER_DEVEXT(opamp_layout_1_7_4, __VA_ARGS__)
-#define opamp_layout_1_8_5(name) \
- NET_REGISTER_DEVEXT(opamp_layout_1_8_5, name)
+// usage : opamp_layout_1_8_5(name)
+#define opamp_layout_1_8_5(...) \
+ NET_REGISTER_DEVEXT(opamp_layout_1_8_5, __VA_ARGS__)
-#define opamp_layout_1_11_6(name) \
- NET_REGISTER_DEVEXT(opamp_layout_1_11_6, name)
+// usage : opamp_layout_1_11_6(name)
+#define opamp_layout_1_11_6(...) \
+ NET_REGISTER_DEVEXT(opamp_layout_1_11_6, __VA_ARGS__)
-#define MB3614_DIP(name) \
- NET_REGISTER_DEVEXT(MB3614_DIP, name)
+// usage : MB3614_DIP(name)
+#define MB3614_DIP(...) \
+ NET_REGISTER_DEVEXT(MB3614_DIP, __VA_ARGS__)
-#define TL081_DIP(name) \
- NET_REGISTER_DEVEXT(TL081_DIP, name)
+// usage : TL081_DIP(name)
+#define TL081_DIP(...) \
+ NET_REGISTER_DEVEXT(TL081_DIP, __VA_ARGS__)
-#define TL084_DIP(name) \
- NET_REGISTER_DEVEXT(TL084_DIP, name)
+// usage : TL084_DIP(name)
+#define TL084_DIP(...) \
+ NET_REGISTER_DEVEXT(TL084_DIP, __VA_ARGS__)
-#define LM324_DIP(name) \
- NET_REGISTER_DEVEXT(LM324_DIP, name)
+// usage : LM324_DIP(name)
+#define LM324_DIP(...) \
+ NET_REGISTER_DEVEXT(LM324_DIP, __VA_ARGS__)
-#define LM358_DIP(name) \
- NET_REGISTER_DEVEXT(LM358_DIP, name)
+// usage : LM358_DIP(name)
+#define LM358_DIP(...) \
+ NET_REGISTER_DEVEXT(LM358_DIP, __VA_ARGS__)
-#define LM2902_DIP(name) \
- NET_REGISTER_DEVEXT(LM2902_DIP, name)
+// usage : LM2902_DIP(name)
+#define LM2902_DIP(...) \
+ NET_REGISTER_DEVEXT(LM2902_DIP, __VA_ARGS__)
-#define UA741_DIP8(name) \
- NET_REGISTER_DEVEXT(UA741_DIP8, name)
+// usage : UA741_DIP8(name)
+#define UA741_DIP8(...) \
+ NET_REGISTER_DEVEXT(UA741_DIP8, __VA_ARGS__)
-#define UA741_DIP10(name) \
- NET_REGISTER_DEVEXT(UA741_DIP10, name)
+// usage : UA741_DIP10(name)
+#define UA741_DIP10(...) \
+ NET_REGISTER_DEVEXT(UA741_DIP10, __VA_ARGS__)
-#define UA741_DIP14(name) \
- NET_REGISTER_DEVEXT(UA741_DIP14, name)
+// usage : UA741_DIP14(name)
+#define UA741_DIP14(...) \
+ NET_REGISTER_DEVEXT(UA741_DIP14, __VA_ARGS__)
-#define LM747_DIP(name) \
- NET_REGISTER_DEVEXT(LM747_DIP, name)
+// usage : LM747_DIP(name)
+#define LM747_DIP(...) \
+ NET_REGISTER_DEVEXT(LM747_DIP, __VA_ARGS__)
-#define LM747A_DIP(name) \
- NET_REGISTER_DEVEXT(LM747A_DIP, name)
+// usage : LM747A_DIP(name)
+#define LM747A_DIP(...) \
+ NET_REGISTER_DEVEXT(LM747A_DIP, __VA_ARGS__)
-#define LM3900(name) \
- NET_REGISTER_DEVEXT(LM3900, name)
+// usage : LM3900(name)
+#define LM3900(...) \
+ NET_REGISTER_DEVEXT(LM3900, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/macro/nlm_other.cpp
// ---------------------------------------------------------------------
-#define MC14584B_GATE(name) \
- NET_REGISTER_DEVEXT(MC14584B_GATE, name)
+// usage : MC14584B_GATE(name)
+#define MC14584B_GATE(...) \
+ NET_REGISTER_DEVEXT(MC14584B_GATE, __VA_ARGS__)
+
+// usage : MC14584B_DIP(name)
+#define MC14584B_DIP(...) \
+ NET_REGISTER_DEVEXT(MC14584B_DIP, __VA_ARGS__)
-#define MC14584B_DIP(name) \
- NET_REGISTER_DEVEXT(MC14584B_DIP, name)
+// usage : NE566_DIP(name)
+#define NE566_DIP(...) \
+ NET_REGISTER_DEVEXT(NE566_DIP, __VA_ARGS__)
+
+// ---------------------------------------------------------------------
+// Source: src/lib/netlist/macro/nlm_roms.cpp
+// ---------------------------------------------------------------------
+// usage : PROM_82S126_DIP(name)
+#define PROM_82S126_DIP(...) \
+ NET_REGISTER_DEVEXT(PROM_82S126_DIP, __VA_ARGS__)
-#define NE566_DIP(name) \
- NET_REGISTER_DEVEXT(NE566_DIP, name)
+// usage : PROM_74S287_DIP(name)
+#define PROM_74S287_DIP(...) \
+ NET_REGISTER_DEVEXT(PROM_74S287_DIP, __VA_ARGS__)
#endif // __PLIB_PREPROCESSOR__
#endif
diff --git a/src/lib/netlist/devices/nld_roms.cpp b/src/lib/netlist/devices/nld_roms.cpp
new file mode 100644
index 00000000000..5a7bc9fa59b
--- /dev/null
+++ b/src/lib/netlist/devices/nld_roms.cpp
@@ -0,0 +1,185 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_roms.cpp
+ *
+ */
+
+#include "netlist/nl_base.h"
+#include "netlist/nl_setup.h"
+
+template <typename N, typename T>
+constexpr bool TOR(N n, T &a)
+{
+ return (n == 0 ? false : TOR(n-1, a) || a[n-1]());
+}
+
+template <typename T>
+constexpr bool TOR(T &a)
+{
+ return TOR(a.size(), a);
+}
+
+namespace netlist
+{
+ namespace devices
+ {
+
+ template<netlist_time::internal_type value0>
+ struct times_ns1
+ {
+ static constexpr netlist_time value(std::size_t N = 0)
+ {
+ plib::unused_var(N);
+ return NLTIME_FROM_NS(value0);
+ }
+ };
+
+ template <netlist_time::internal_type value0>
+ using time_ns = times_ns1<value0>;
+
+ template<netlist_time::internal_type value0,
+ netlist_time::internal_type value1>
+ struct times_ns2
+ {
+ static constexpr netlist_time value(std::size_t N)
+ {
+ return NLTIME_FROM_NS(N == 0 ? value0 : value1);
+ }
+ };
+
+ template<netlist_time::internal_type value0,
+ netlist_time::internal_type value1,
+ netlist_time::internal_type value2>
+ struct times_ns3
+ {
+ static constexpr netlist_time value(std::size_t N)
+ {
+ return NLTIME_FROM_NS(N == 0 ? value0 :
+ N == 1 ? value1 :
+ value2);
+ }
+ };
+
+ template <typename D>
+ NETLIB_OBJECT(generic_prom)
+ {
+ NETLIB_CONSTRUCTOR(generic_prom)
+ , m_enabled(*this, "m_enabled", true)
+ , m_A(*this, 0, "A{}", NETLIB_DELEGATE(generic_prom, addr))
+ , m_CEQ(*this, 1, D::chip_enable_mask ^ static_cast<size_t>(0xffff), pstring("CE{}"),
+ std::array<nldelegate, 3>{ NETLIB_DELEGATE(generic_prom, ce<0>),
+ NETLIB_DELEGATE(generic_prom, ce<1>),
+ NETLIB_DELEGATE(generic_prom, ce<2>)})
+ , m_O(*this, D::data_name_offset, "O{}")
+ , m_ROM(*this, "ROM")
+ , m_power_pins(*this)
+ {
+ }
+
+ using data_type = typename plib::least_type_for_bits<D::data_width>::type;
+
+ private:
+
+ template <std::size_t N>
+ inline NETLIB_HANDLERI(ce)
+ {
+ using cet = typename D::chip_enable_time;
+ m_enabled = (m_CEQ() == D::chip_enable_mask);
+ const auto delay = m_enabled ? D::access_time::value() : cet::value(N);
+ const data_type o = m_enabled ? m_ROM[m_A()] : (1 << D::data_width) - 1; // FIXME tristate !
+
+ m_O.push(o, delay);
+ }
+
+ inline
+ NETLIB_HANDLERI(addr)
+ {
+ if (m_enabled)
+ {
+ // FIXME: Outputs are tristate. This needs to be properly implemented
+ m_O.push(m_ROM[m_A()], D::access_time::value());
+ }
+ }
+
+ NETLIB_UPDATEI()
+ {
+ ce<0>(); // only called during setup
+ }
+
+ state_var<bool> m_enabled;
+ object_array_t<logic_input_t, D::address_width> m_A;
+ object_array_t<logic_input_t, D::chip_enable_inputs> m_CEQ;
+ object_array_t<typename D::output_type, D::data_width> m_O;
+
+ param_rom_t<uint8_t, D::address_width, D::data_width> m_ROM;
+ nld_power_pins m_power_pins;
+ };
+
+ struct desc_82S126
+ {
+ static constexpr const size_t address_width = 8;
+ static constexpr const size_t data_width = 4;
+ static constexpr const size_t data_name_offset = 1; // O1, O2, ..
+ static constexpr const size_t chip_enable_inputs = 2;
+ // MATCH_MASK : all 0 ==> all bits inverted
+ static constexpr const size_t chip_enable_mask = 0x00;
+
+ using chip_enable_time = times_ns2<25, 25>;
+ using access_time = time_ns<40>;
+
+ using output_type = logic_output_t;
+ };
+
+ struct desc_74S287 : public desc_82S126
+ {
+ using chip_enable_time = times_ns2<15, 15>;
+ using access_time = time_ns<35>;
+ };
+
+ struct desc_82S123
+ {
+ // FIXME: tristate outputs, add 82S23 (open collector)
+ static constexpr const size_t address_width = 5;
+ static constexpr const size_t data_width = 8;
+ static constexpr const size_t data_name_offset = 1; // O1, O2, ..
+ static constexpr const size_t chip_enable_inputs = 1;
+ // MATCH_MASK : all 0 ==> all bits inverted
+ static constexpr const size_t chip_enable_mask = 0x00;
+
+ using chip_enable_time = times_ns1<35>;
+ using access_time = time_ns<45>;
+
+ using output_type = logic_output_t;
+ };
+
+ struct desc_2716
+ {
+ // FIXME: tristate outputs
+ static constexpr const size_t address_width = 11;
+ static constexpr const size_t data_width = 8;
+ static constexpr const size_t data_name_offset = 0; // O0, O1, ..
+
+ static constexpr const size_t chip_enable_inputs = 2;
+ // MATCH_MASK : all 0 ==> all bits inverted
+ static constexpr const size_t chip_enable_mask = 0x00;
+
+ using chip_enable_time = times_ns2<450, 100>; //CE, OE
+ using access_time = time_ns<450>;
+
+ using output_type = logic_output_t;
+ };
+
+
+ using NETLIB_NAME(82S123) = NETLIB_NAME(generic_prom)<desc_82S123>; // 256 bits, 32x8, used as 256x4
+ using NETLIB_NAME(82S126) = NETLIB_NAME(generic_prom)<desc_82S126>; // 1024 bits, 32x32, used as 256x4
+ using NETLIB_NAME(74S287) = NETLIB_NAME(generic_prom)<desc_74S287>; // 1024 bits, 32x32, used as 256x4
+ using NETLIB_NAME(2716) = NETLIB_NAME(generic_prom)<desc_2716>; // CE2Q = OE, CE1Q = CE
+
+ NETLIB_DEVICE_IMPL(82S126, "PROM_82S126", "+CE1Q,+CE2Q,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,@VCC,@GND")
+ NETLIB_DEVICE_IMPL(74S287, "PROM_74S287", "+CE1Q,+CE2Q,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,@VCC,@GND")
+ NETLIB_DEVICE_IMPL(82S123, "PROM_82S123", "+CEQ,+A0,+A1,+A2,+A3,+A4,@VCC,@GND")
+ NETLIB_DEVICE_IMPL(2716, "EPROM_2716", "+CE2Q,+CE1Q,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+A9,+A10,@VCC,@GND")
+
+ } //namespace devices
+} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_roms.h b/src/lib/netlist/devices/nld_roms.h
new file mode 100644
index 00000000000..0ebd6b832b6
--- /dev/null
+++ b/src/lib/netlist/devices/nld_roms.h
@@ -0,0 +1,29 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_roms.h
+ *
+ */
+
+#ifndef NLD_ROMS_H_
+#define NLD_ROMS_H_
+
+#include "netlist/nl_setup.h"
+
+// PROM_82S126(name, cCE1Q, cCE2Q, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7)
+#define PROM_82S126(...) \
+ NET_REGISTER_DEVEXT(PROM_82S126, __VA_ARGS__)
+
+// PROM_74S287(name, cCE1Q, cCE2Q, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7)
+#define PROM_74S287(...) \
+ NET_REGISTER_DEVEXT(PROM_74S287, __VA_ARGS__)
+
+// PROM_82S123(name, cCEQ, cA0, cA1, cA2, cA3, cA4)
+#define PROM_82S123(...) \
+ NET_REGISTER_DEVEXT(PROM_82S123, __VA_ARGS__)
+
+// EPROM_2716(name, cGQ, cEPQ, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7, cA8, cA9, cA10)
+#define EPROM_2716(...) \
+ NET_REGISTER_DEVEXT(EPROM_2716, __VA_ARGS__)
+
+#endif /* NLD_ROMS_H_ */
diff --git a/src/lib/netlist/devices/nlid_truthtable.h b/src/lib/netlist/devices/nlid_truthtable.h
index bee8912dfa6..41cd5c309d2 100644
--- a/src/lib/netlist/devices/nlid_truthtable.h
+++ b/src/lib/netlist/devices/nlid_truthtable.h
@@ -11,6 +11,7 @@
#include "netlist/devices/nlid_system.h"
#include "netlist/nl_base.h"
#include "netlist/nl_setup.h"
+#include "plib/ptypes.h"
#include "plib/putil.h"
#define USE_TT_ALTERNATIVE (0)
@@ -20,29 +21,12 @@ namespace netlist
namespace devices
{
- template<unsigned bits>
- struct need_bytes_for_bits
- {
- enum { value =
- bits <= 8 ? 1 :
- bits <= 16 ? 2 :
- bits <= 32 ? 4 :
- 8
- };
- };
-
- template<unsigned bits> struct uint_for_size;
- template<> struct uint_for_size<1> { using type = uint_least8_t; };
- template<> struct uint_for_size<2> { using type = uint_least16_t; };
- template<> struct uint_for_size<4> { using type = uint_least32_t; };
- template<> struct uint_for_size<8> { using type = uint_least64_t; };
-
template<std::size_t m_NI, std::size_t m_NO>
class NETLIB_NAME(truthtable_t) : public device_t
{
public:
- using type_t = typename uint_for_size<need_bytes_for_bits<m_NO + m_NI>::value>::type;
+ using type_t = typename plib::least_type_for_bits<m_NO + m_NI>::type;
static constexpr const std::size_t m_num_bits = m_NI;
static constexpr const std::size_t m_size = (1 << (m_num_bits));
diff --git a/src/lib/netlist/macro/nlm_base.cpp b/src/lib/netlist/macro/nlm_base.cpp
index 83089a53ee7..b399a2c360c 100644
--- a/src/lib/netlist/macro/nlm_base.cpp
+++ b/src/lib/netlist/macro/nlm_base.cpp
@@ -110,6 +110,7 @@ NETLIST_START(base)
LOCAL_SOURCE(CD4XXX_lib)
LOCAL_SOURCE(OPAMP_lib)
LOCAL_SOURCE(otheric_lib)
+ LOCAL_SOURCE(ROMS_lib)
INCLUDE(diode_models)
INCLUDE(bjt_models)
@@ -119,6 +120,7 @@ NETLIST_START(base)
INCLUDE(CD4XXX_lib)
INCLUDE(OPAMP_lib)
INCLUDE(otheric_lib)
+ INCLUDE(ROMS_lib)
NETLIST_END()
diff --git a/src/lib/netlist/macro/nlm_opamp.h b/src/lib/netlist/macro/nlm_opamp.h
index 7fc2fa3ab83..06c31acc71b 100644
--- a/src/lib/netlist/macro/nlm_opamp.h
+++ b/src/lib/netlist/macro/nlm_opamp.h
@@ -39,19 +39,19 @@
#define LM3900(name) \
NET_REGISTER_DEV(LM3900, name)
-#define UA741_DIP8(name) \
+#define UA741_DIP8(name) \
NET_REGISTER_DEV(UA741_DIP8, name)
-#define UA741_DIP10(name) \
+#define UA741_DIP10(name) \
NET_REGISTER_DEV(UA741_DIP10, name)
-#define UA741_DIP14(name) \
+#define UA741_DIP14(name) \
NET_REGISTER_DEV(UA741_DIP14, name)
-#define LM747_DIP(name) \
+#define LM747_DIP(name) \
NET_REGISTER_DEV(LM747_DIP, name)
-#define LM747A_DIP(name) \
+#define LM747A_DIP(name) \
NET_REGISTER_DEV(LM747A_DIP, name)
#endif // NL_AUTO_DEVICES
diff --git a/src/lib/netlist/macro/nlm_roms.cpp b/src/lib/netlist/macro/nlm_roms.cpp
new file mode 100644
index 00000000000..a9dc0d1fc85
--- /dev/null
+++ b/src/lib/netlist/macro/nlm_roms.cpp
@@ -0,0 +1,203 @@
+// license:CC0
+// copyright-holders:Couriersud
+
+#include "netlist/devices/net_lib.h"
+
+
+//- Identifier: PROM_82S126_DIP
+//- Title: 82S126 1K-bit TTL bipolar PROM
+//- Description: The 82S126 and 82S129 are field programmable, which means that
+//- custom patterns are immediately available by following the Signetics
+//- Generic I fusing procedure. The 82S126 and 82S129 devices are supplied
+//- with all outputs at logical Low. Outputs are programmed to a logic High
+//- level at any specified address by fusing the Ni-Cr link matrix.
+//-
+//- These devices include on-chip decoding and 2 Chip Enable inputs for ease
+//- of memory expansion. They feature either open collector or 3-State outputs
+//- for optimization of word expansion in bused organizations.
+//-
+//.
+//- Pinalias: A6,A5,A4,A3,A0,A1,A2,GND,O3,O2,O1,O0,CE1Q,CE2Q,A7,VCC
+//- Package: DIP
+//- NamingConvention: Naming conventions follow Philips Components-Signetics datasheet
+//- Limitations:
+//- Currently neither OC nor Tristate is supported.
+//-
+//- Example: 82S126.cpp,82S126_example
+//- FunctionTable:
+//- http://pdf.datasheetcatalog.com/datasheet/philips/82S129.pdf
+//-
+
+static NETLIST_START(PROM_82S126_DIP)
+
+ PROM_82S126(A)
+
+ DEFPARAM(ROM, "unknown")
+ PARAM(A.ROM, "$(@.ROM)")
+ ALIAS(1, A.A6)
+ ALIAS(2, A.A5)
+ ALIAS(3, A.A4)
+ ALIAS(4, A.A3)
+ ALIAS(5, A.A0)
+ ALIAS(6, A.A1)
+ ALIAS(7, A.A2)
+ ALIAS(8, A.GND)
+ ALIAS(9, A.O3)
+ ALIAS(10, A.O2)
+ ALIAS(11, A.O1)
+ ALIAS(12, A.O0)
+ ALIAS(13, A.CE1Q)
+ ALIAS(14, A.CE2Q)
+ ALIAS(15, A.A7)
+ ALIAS(16, A.VCC)
+NETLIST_END()
+
+static NETLIST_START(PROM_74S287_DIP)
+
+ PROM_74S287(A)
+
+ DEFPARAM(ROM, "unknown")
+ PARAM(A.ROM, "$(@.ROM)")
+ ALIAS(1, A.A6)
+ ALIAS(2, A.A5)
+ ALIAS(3, A.A4)
+ ALIAS(4, A.A3)
+ ALIAS(5, A.A0)
+ ALIAS(6, A.A1)
+ ALIAS(7, A.A2)
+ ALIAS(8, A.GND)
+ ALIAS(9, A.O3)
+ ALIAS(10, A.O2)
+ ALIAS(11, A.O1)
+ ALIAS(12, A.O0)
+ ALIAS(13, A.CE1Q)
+ ALIAS(14, A.CE2Q)
+ ALIAS(15, A.A7)
+ ALIAS(16, A.VCC)
+NETLIST_END()
+
+//- Identifier: PROM_82S123_DIP
+//- Title: 82S123 256 bit TTL bipolar PROM
+//- Description: The 82S123 and 82S23 are field programmable, which means that
+//- custom patterns are immediately available by following the Signetics
+//- Generic I fusing procedure. The 82S123 and 82S23 devices are supplied
+//- with all outputs at logical Low. Outputs are programmed to a logic High
+//- level at any specified address by fusing the Ni-Cr link matrix.
+//-
+//- These devices include on-chip decoding and 1 Chip Enable inputs for
+//- memory expansion. They feature either open collector or 3-State outputs
+//- for optimization of word expansion in bused organizations.
+//-
+//.
+//- Pinalias: O1,O2,O3,O4,O5,O6,O7,GND,O8,A0,A1,A2,A3,A4,CEQ,VCC
+//- Package: DIP
+//- NamingConvention: Naming conventions follow Philips Components-Signetics datasheet
+//- Limitations:
+//- Currently neither OC nor Tristate is supported.
+//-
+//- Example: 82S123.cpp,82S123_example
+//- FunctionTable:
+//- http://pdf.datasheetcatalog.com/datasheet/philips/82S123.pdf
+//-
+
+static NETLIST_START(PROM_82S123_DIP)
+
+ PROM_82S123(A)
+
+ DEFPARAM(ROM, "unknown")
+ PARAM(A.ROM, "$(@.ROM)")
+ ALIAS(1, A.O0)
+ ALIAS(2, A.O1)
+ ALIAS(3, A.O2)
+ ALIAS(4, A.O3)
+ ALIAS(5, A.O4)
+ ALIAS(6, A.O5)
+ ALIAS(7, A.O6)
+ ALIAS(8, A.GND)
+
+ ALIAS(9, A.O7)
+ ALIAS(10, A.A0)
+ ALIAS(11, A.A1)
+ ALIAS(12, A.A2)
+ ALIAS(13, A.A3)
+ ALIAS(14, A.A4)
+ ALIAS(15, A.CEQ)
+ ALIAS(16, A.VCC)
+NETLIST_END()
+
+//- Identifier: EPROM_2716_DIP
+//- Title: 2716 16K (2K x 8) UV ERASABLE PROM
+//- Description: The Intel®2716 is a 16,384-bit ultraviolet erasable and
+//- electrically programmable read-only memory (EPROM). The 2716 operates
+//- from a single 5-volt power supply, has a static standby mode, and
+//- features fast single address location programming. It makes designing
+//- with EPROMs faster, easier and more economical.
+//-
+//- The 2716, with its single 5-volt supply and with an access time up
+//- to 350 ns, is ideal for use with the newer high performance
+//- +5V microprocessors such as Intel's 8085 and 8086. A selected
+//- 2716-5 and 2716-6 is available for slower speed applications.
+//- The 2716 is also the first EPROM with a static standby mode which reduces
+//- the power dissipation without increasing access time. The maximum
+//- active power dissipation is 525 mW while the maximum standby power
+//- dissipation is only 132 mW, a 75% savings.
+//-
+//- The 2716 has the simplest and fastest method yet devised for
+//- programming EPROMs - single pulse TTL level programming. No need for high
+//- voltage pulsing because all programming controls are handled by
+//- TTL signals. Program any location at any time-either individually,
+//- sequentially or at random, with the 2716's single address location
+//- programming. Total programming time for all 16,384 bits is only 100 seconds
+//-
+//- Pinalias: A7,A6,A6,A4,A4,A2,A1,A0,O0,O1,O2,GND,O3,O4,O5,O6,O7,CE1Q/CE,A10,CE2Q/OE,VPP,A9,A8,VCC
+//- Package: DIP
+//- NamingConvention: Naming conventions follow Intel datasheet
+//- Limitations:
+//- Currently Tristate is not supported.
+//-
+//- Example: 2716.cpp,2716_example
+//- FunctionTable:
+//- http://pdf.datasheetcatalog.com/datasheets/400/500340_DS.pdf
+//-
+static NETLIST_START(EPROM_2716_DIP)
+
+ EPROM_2716(A)
+
+ DEFPARAM(ROM, "unknown")
+ PARAM(A.ROM, "$(@.ROM)")
+ ALIAS(1, A.A7)
+ ALIAS(2, A.A6)
+ ALIAS(3, A.A5)
+ ALIAS(4, A.A4)
+ ALIAS(5, A.A3)
+ ALIAS(6, A.A2)
+ ALIAS(7, A.A1)
+ ALIAS(8, A.A0)
+ ALIAS(9, A.D0)
+ ALIAS(10, A.D1)
+ ALIAS(11, A.D2)
+ ALIAS(12, A.GND)
+
+ ALIAS(13, A.D3)
+ ALIAS(14, A.D4)
+ ALIAS(15, A.D5)
+ ALIAS(16, A.D6)
+ ALIAS(17, A.D7)
+ ALIAS(18, A.CE1Q) // CEQ
+ ALIAS(19, A.A10)
+ ALIAS(20, A.CE2Q) // OEQ
+ ALIAS(22, A.A9)
+ ALIAS(23, A.A8)
+ ALIAS(24, A.VCC)
+NETLIST_END()
+
+
+NETLIST_START(ROMS_lib)
+
+ LOCAL_LIB_ENTRY(PROM_82S123_DIP)
+ LOCAL_LIB_ENTRY(PROM_82S126_DIP)
+ LOCAL_LIB_ENTRY(PROM_74S287_DIP)
+ LOCAL_LIB_ENTRY(EPROM_2716_DIP)
+
+ NETLIST_END()
+
diff --git a/src/lib/netlist/macro/nlm_roms.h b/src/lib/netlist/macro/nlm_roms.h
new file mode 100644
index 00000000000..1900e693e04
--- /dev/null
+++ b/src/lib/netlist/macro/nlm_roms.h
@@ -0,0 +1,44 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+
+#ifndef NLM_ROMS_H_
+#define NLM_ROMS_H_
+
+///
+/// \file nlm_roms.h
+///
+
+#include "netlist/nl_setup.h"
+
+#ifndef __PLIB_PREPROCESSOR__
+
+/* ----------------------------------------------------------------------------
+ * Netlist Macros
+ * ---------------------------------------------------------------------------*/
+
+#if !NL_AUTO_DEVICES
+
+#define PROM_82S126_DIP(name) \
+ NET_REGISTER_DEV(PROM_82S126_DIP, name)
+
+#define PROM_82S123_DIP(name) \
+ NET_REGISTER_DEV(PROM_82S123_DIP, name)
+
+#define PROM_74S287_DIP(name) \
+ NET_REGISTER_DEV(PROM_74S287_DIP, name)
+
+#define EPROM_2716_DIP(name) \
+ NET_REGISTER_DEV(EPROM_2716_DIP, name)
+
+#endif // NL_AUTO_DEVICES
+
+
+/* ----------------------------------------------------------------------------
+ * External declarations
+ * ---------------------------------------------------------------------------*/
+
+NETLIST_EXTERNAL(ROMS_lib)
+
+#endif // __PLIB_PREPROCESSOR__
+
+#endif
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index 90f1ea88d2e..6d52fed38ea 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -24,6 +24,7 @@
#include "plib/pstonum.h"
#include "plib/pstream.h"
#include "plib/ptime.h"
+#include "plib/ptypes.h"
#include "nl_errstr.h"
#include "nltypes.h"
@@ -174,7 +175,7 @@ class NETLIB_NAME(name) : public delegator_t<base_device_t>
#define NETLIB_DELEGATE(chip, name) nldelegate(&NETLIB_NAME(chip) :: name, this)
#define NETLIB_UPDATE_TERMINALSI() virtual void update_terminals() noexcept override
-#define NETLIB_HANDLERI(name) virtual void name() noexcept
+#define NETLIB_HANDLERI(name) void name() noexcept
#define NETLIB_UPDATEI() virtual void update() noexcept override
#define NETLIB_UPDATE_PARAMI() virtual void update_param() noexcept override
#define NETLIB_RESETI() virtual void reset() override
@@ -1879,12 +1880,12 @@ namespace netlist
// Support classes for devices
// -----------------------------------------------------------------------------
- template<class C, int N>
- class object_array_t : public plib::uninitialised_array_t<C, N>
+ template<class C, std::size_t N>
+ class object_array_base_t : public plib::uninitialised_array_t<C, N>
{
public:
template<class D, typename... Args>
- object_array_t(D &dev, const std::initializer_list<const char *> &names, Args&&... args)
+ object_array_base_t(D &dev, const std::initializer_list<const char *> &names, Args&&... args)
{
passert_always_msg(names.size() == N, "initializer_list size mismatch");
std::size_t i = 0;
@@ -1892,20 +1893,170 @@ namespace netlist
this->emplace(i++, dev, pstring(n), std::forward<Args>(args)...);
}
+#if 0
template<class D, typename... Args>
- object_array_t(D &dev, const pstring &fmt, Args&&... args)
+ object_array_base_t(D &dev, const pstring &fmt, Args&&... args)
{
for (std::size_t i = 0; i<N; i++)
- this->emplace(i, dev, plib::pfmt(fmt)(i), std::forward<Args>(args)...);
+ this->emplace(i, dev, formatted(fmt, i), std::forward<Args>(args)...);
}
template<class D, typename... Args>
- object_array_t(D &dev, std::size_t offset, const pstring &fmt, Args&&... args)
+ object_array_base_t(D &dev, std::size_t offset, const pstring &fmt, Args&&... args)
{
for (std::size_t i = 0; i<N; i++)
- this->emplace(i, dev, plib::pfmt(fmt)(i+offset), std::forward<Args>(args)...);
+ this->emplace(i, dev, formatted(fmt, i+offset), std::forward<Args>(args)...);
}
+ template<class D, typename... Args>
+ object_array_base_t(D &dev, std::size_t offset, std::size_t qmask, const pstring &fmt, Args&&... args)
+ {
+ for (std::size_t i = 0; i<N; i++)
+ {
+ pstring name(formatted(fmt, i+offset));
+ if ((qmask >> i) & 1)
+ name += "Q";
+ this->emplace(i, dev, name, std::forward<Args>(args)...);
+ }
+ }
+#else
+ template<class D>
+ object_array_base_t(D &dev, const pstring &fmt)
+ {
+ for (std::size_t i = 0; i<N; i++)
+ this->emplace(i, dev, formatted(fmt, i));
+ }
+
+ template<class D>
+ object_array_base_t(D &dev, std::size_t offset, const pstring &fmt)
+ {
+ for (std::size_t i = 0; i<N; i++)
+ this->emplace(i, dev, formatted(fmt, i+offset));
+ }
+
+ template<class D>
+ object_array_base_t(D &dev, std::size_t offset, const pstring &fmt, nldelegate &&delegate)
+ {
+ for (std::size_t i = 0; i<N; i++)
+ this->emplace(i, dev, formatted(fmt, i+offset), std::move(delegate));
+ }
+
+ template<class D>
+ object_array_base_t(D &dev, std::size_t offset, std::size_t qmask, const pstring &fmt)
+ {
+ for (std::size_t i = 0; i<N; i++)
+ {
+ pstring name(formatted(fmt, i+offset));
+ if ((qmask >> i) & 1)
+ name += "Q";
+ this->emplace(i, dev, name);
+ }
+ }
+ protected:
+ object_array_base_t() = default;
+#endif
+
+ protected:
+ static pstring formatted(const pstring &fmt, std::size_t n)
+ {
+ if (N != 1)
+ return plib::pfmt(fmt)(n);
+ else
+ return plib::pfmt(fmt)("");
+ }
+ };
+
+ template<class C, std::size_t N>
+ class object_array_t : public object_array_base_t<C, N>
+ {
+ public:
+ using base_type = object_array_base_t<C, N>;
+ using base_type::base_type;
+ };
+
+ template<std::size_t N>
+ class object_array_t<logic_input_t,N> : public object_array_base_t<logic_input_t, N>
+ {
+ public:
+ using base_type = object_array_base_t<logic_input_t, N>;
+ using base_type::base_type;
+
+ template<class D, std::size_t ND>
+ object_array_t(D &dev, std::size_t offset, std::size_t qmask,
+// const pstring &fmt, std::initializer_list<nldelegate> &delegates)
+ const pstring &fmt, std::array<nldelegate, ND> &&delegates)
+ {
+ passert_always_msg(delegates.size() >= N, "initializer_list size mismatch");
+ std::size_t i = 0;
+ for (auto &e : delegates)
+ {
+ if (i < N)
+ {
+ pstring name(this->formatted(fmt, i+offset));
+ if ((qmask >> i) & 1)
+ name += "Q";
+ this->emplace(i, dev, name, e);
+ }
+ i++;
+ }
+ }
+
+
+ using value_type = typename plib::least_type_for_bits<N>::type;
+
+ value_type operator ()()
+ {
+ if (N <= 8)
+ return tobits(N, *this);
+ else
+ {
+ value_type r(0);
+ for (std::size_t i = 0; i < N; i++)
+ r = static_cast<value_type>((*this)[i]() << (N-1)) | (r >> 1);
+ return r;
+ }
+ }
+
+ private:
+ template <typename T>
+ static constexpr value_type tobits(std::size_t n, T &a)
+ {
+ return (n == 0 ? 0 : (tobits(n-1, a) | static_cast<value_type>(a[n-1]() << (n-1))));
+ }
+ };
+
+ template<std::size_t N>
+ class object_array_t<logic_output_t,N> : public object_array_base_t<logic_output_t, N>
+ {
+ public:
+ using base_type = object_array_base_t<logic_output_t, N>;
+ using base_type::base_type;
+
+ using value_type = typename plib::least_type_for_bits<N>::type;
+
+ void push(value_type v, netlist_time t)
+ {
+ if (N <= 8)
+ rpush(N, *this, v, t);
+ else
+ {
+ for (std::size_t i = 0; i < N; v = v >> 1, i++)
+ (*this)[i].push(v & 1, t);
+ }
+ }
+
+ private:
+ template <typename A, typename V, typename X>
+ static V rpush(std::size_t n, A &a, V value, X time)
+ {
+ if (n > 0)
+ {
+ value = rpush(n-1, a, value, time);
+ a[n-1].push((value & 1), time);
+ return value >> 1;
+ }
+ return value;
+ }
};
// -----------------------------------------------------------------------------
diff --git a/src/lib/netlist/nl_create_mame_solvers.sh b/src/lib/netlist/nl_create_mame_solvers.sh
index ada19512af9..3d72e1c1bc7 100644
--- a/src/lib/netlist/nl_create_mame_solvers.sh
+++ b/src/lib/netlist/nl_create_mame_solvers.sh
@@ -1,7 +1,7 @@
#!/bin/sh
GENERATED=src/lib/netlist/generated/static_solvers.cpp
-FILES=`ls src/mame/machine/nl_*.cpp src/mame/audio/nl_*.cpp | grep -v pongdoubles`
+FILES=`ls src/mame/machine/nl_*.cpp src/mame/audio/nl_*.cpp | grep -v pongdoubles`
OUTDIR=/tmp/static_syms
diff --git a/src/lib/netlist/nl_errstr.h b/src/lib/netlist/nl_errstr.h
index 290110560e8..243b7c0812f 100644
--- a/src/lib/netlist/nl_errstr.h
+++ b/src/lib/netlist/nl_errstr.h
@@ -87,7 +87,7 @@ namespace netlist
PERRMSGV(MF_MODEL_NUMBER_CONVERSION_ERROR, 4, "Can't convert {1}={2} to {3} for model {4}")
PERRMSGV(MF_NOT_FOUND_IN_SOURCE_COLLECTION, 1, "unable to find {1} in sources collection")
- PERRMSGV(MW_OVERWRITING_PARAM_1_OLD_2_NEW_3, 3, "Overwriting {1} old <{2}> new <{3}>")
+ PERRMSGV(MI_OVERWRITING_PARAM_1_OLD_2_NEW_3, 3, "Overwriting {1} old <{2}> new <{3}>")
PERRMSGV(MW_CONNECTING_1_TO_ITSELF, 1, "Connecting net {1} to itself.")
PERRMSGV(MW_CONNECTING_1_TO_2_SAME_NET, 3, "Connecting terminals {1} and {2} which are already both on net {3}")
PERRMSGV(ME_NC_PIN_1_WITH_CONNECTIONS, 1, "Found NC (not connected) terminal {1} with connections")
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index 675cbae5360..1fb515f346a 100755
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -218,8 +218,12 @@ namespace netlist
}
else
{
- log().warning(MW_OVERWRITING_PARAM_1_OLD_2_NEW_3(fqn, idx->second,
- val));
+ if (idx->second.find("$(") == pstring::npos)
+ {
+ //* There may be reason ... so make it an INFO
+ log().info(MI_OVERWRITING_PARAM_1_OLD_2_NEW_3(fqn,
+ idx->second, val));
+ }
m_abstract.m_param_values[fqn] = val;
}
}
diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h
index f86326be8c4..efbf16d339c 100644
--- a/src/lib/netlist/nl_setup.h
+++ b/src/lib/netlist/nl_setup.h
@@ -8,7 +8,7 @@
#ifndef NLSETUP_H_
#define NLSETUP_H_
-#define NL_AUTO_DEVICES 1
+#define NL_AUTO_DEVICES 0
#include "plib/ppreprocessor.h"
#include "plib/pstream.h"
diff --git a/src/lib/netlist/plib/ptime.h b/src/lib/netlist/plib/ptime.h
index 3cdb9f30d33..839b8e95dbd 100644
--- a/src/lib/netlist/plib/ptime.h
+++ b/src/lib/netlist/plib/ptime.h
@@ -110,6 +110,13 @@ namespace plib
return static_cast<mult_type>(m_time / rhs.m_time);
}
+ template <typename T>
+ constexpr typename std::enable_if<std::is_integral<T>::value, ptime>::type
+ operator/(const T &rhs) const noexcept
+ {
+ return ptime(m_time / rhs);
+ }
+
friend constexpr bool operator<(const ptime &lhs, const ptime &rhs) noexcept
{
return (lhs.m_time < rhs.m_time);
diff --git a/src/lib/netlist/plib/ptypes.h b/src/lib/netlist/plib/ptypes.h
index 6bceb764b10..dc762a51107 100644
--- a/src/lib/netlist/plib/ptypes.h
+++ b/src/lib/netlist/plib/ptypes.h
@@ -88,6 +88,29 @@ namespace plib
};
#endif
+ template<unsigned bits>
+ struct least_size_for_bits
+ {
+ enum { value =
+ bits <= 8 ? 1 :
+ bits <= 16 ? 2 :
+ bits <= 32 ? 4 :
+ 8
+ };
+ };
+
+ template<unsigned N> struct least_type_for_size;
+ template<> struct least_type_for_size<1> { using type = uint_least8_t; };
+ template<> struct least_type_for_size<2> { using type = uint_least16_t; };
+ template<> struct least_type_for_size<4> { using type = uint_least32_t; };
+ template<> struct least_type_for_size<8> { using type = uint_least64_t; };
+
+ template<unsigned bits>
+ struct least_type_for_bits
+ {
+ using type = typename least_type_for_size<least_size_for_bits<bits>::value>::type;
+ };
+
//============================================================
// Avoid unused variable warnings
//============================================================
diff --git a/src/lib/netlist/prg/nltool.cpp b/src/lib/netlist/prg/nltool.cpp
index 0ac02df201c..99b90d611e5 100644
--- a/src/lib/netlist/prg/nltool.cpp
+++ b/src/lib/netlist/prg/nltool.cpp
@@ -263,24 +263,6 @@ public:
for (const auto & r : roms)
parser().register_source<netlist_data_folder_t>(r);
-#if 0
- using a = plib::psource_str_t<plib::psource_t>;
-#if USE_EVAL
- const pstring content =
- "#define RES_R(res) (res) \n"
- "#define RES_K(res) ((res) * 1e3) \n"
- "#define RES_M(res) ((res) * 1e6) \n"
- "#define CAP_U(cap) ((cap) * 1e-6) \n"
- "#define CAP_N(cap) ((cap) * 1e-9) \n"
- "#define CAP_P(cap) ((cap) * 1e-12) \n"
- "#define IND_U(ind) ((ind) * 1e-6) \n"
- "#define IND_N(ind) ((ind) * 1e-9) \n"
- "#define IND_P(ind) ((ind) * 1e-12) \n";
- setup().add_include(plib::make_unique<a>("netlist/devices/net_lib.h", content));
-#else
- setup().add_include(plib::make_unique<a>("netlist/devices/net_lib.h",""));
-#endif
-#endif
for (const auto & i : includes)
parser().add_include<netlist_data_folder_t>(i);
@@ -745,9 +727,9 @@ static doc_ext read_docsrc(const pstring &fname, const pstring &id)
pstring v(a.size() < 2 ? "" : plib::trim(a[1]));
if (n == "Identifier")
{
- ret.id = v;
- if (!r.readline(l))
+ if (!r.readline(l) || ret.id == id)
return (ret.id == id ? ret : doc_ext());
+ ret.id = v;
}
else
{
@@ -821,24 +803,19 @@ void tool_app_t::header_entry(const netlist::factory::element_t *e)
{
auto v = plib::psplit(e->param_desc(), ",");
pstring vs;
+ pstring avs;
for (const auto &s : v)
if (!plib::startsWith(s, "@"))
vs += ", p" + plib::replace_all(plib::replace_all(s, "+", ""), ".", "_");
- mac_out("#define " + e->name() + "(name" + vs + ")");
-
- vs = "";
+ else
+ avs += ", " + s.substr(1);
- for (const auto &s : v)
- {
- if (!plib::startsWith(s, "@"))
- {
- // @ gets automatically connected
- const pstring r(plib::replace_all(plib::replace_all(plib::replace_all(s, "+", ""), ".", "_"), "@",""));
- vs += ", p" + r;
- }
- }
+ mac_out("// usage : " + e->name() + "(name" + vs + ")", false);
+ if (avs != "")
+ mac_out("// auto connect: " + avs.substr(2), false);
- mac_out("\tNET_REGISTER_DEVEXT(" + e->name() +", name" + vs + ")", false);
+ mac_out("#define " + e->name() + "(...)");
+ mac_out("\tNET_REGISTER_DEVEXT(" + e->name() +", __VA_ARGS__)", false);
mac_out("", false);
}