summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--nl_examples/congoBongo.c109
-rw-r--r--scripts/src/netlist.lua4
-rw-r--r--src/emu/netlist/analog/nld_twoterm.h2
-rw-r--r--src/emu/netlist/devices/net_lib.c5
-rw-r--r--src/emu/netlist/devices/net_lib.h4
-rw-r--r--src/emu/netlist/devices/nld_4020.h2
-rw-r--r--src/emu/netlist/devices/nld_truthtable.h2
-rw-r--r--src/emu/netlist/macro/CD4XXX.c54
-rw-r--r--src/emu/netlist/macro/CD4XXX.h26
-rw-r--r--src/emu/netlist/macro/TTL74XX.c55
-rw-r--r--src/emu/netlist/macro/TTL74XX.h26
-rw-r--r--src/emu/netlist/nl_parser.c32
-rw-r--r--src/emu/netlist/nl_parser.h2
-rw-r--r--src/emu/netlist/nl_setup.c67
-rw-r--r--src/emu/netlist/nl_setup.h7
15 files changed, 272 insertions, 125 deletions
diff --git a/nl_examples/congoBongo.c b/nl_examples/congoBongo.c
index 1a04c0a2ad3..d842356d85f 100644
--- a/nl_examples/congoBongo.c
+++ b/nl_examples/congoBongo.c
@@ -9,24 +9,12 @@
#ifndef __PLIB_PREPROCESSOR__
-#define DM7416_GATE(_name) \
- NET_REGISTER_DEV_X(DM7416_GATE, _name)
-
-#define DM7416_DIP(_name) \
- NET_REGISTER_DEV_X(DM7416_DIP, _name)
-
#define MB3614_DIP(_name) \
NET_REGISTER_DEV_X(MB3614_DIP, _name)
#define LM358_DIP(_name) \
NET_REGISTER_DEV_X(LM358_DIP, _name)
-#define CD4001_NOR(_name) \
- NET_REGISTER_DEV_X(CD4001_NOR, _name)
-
-#define CD4001_DIP(_name) \
- NET_REGISTER_DEV_X(CD4001_DIP, _name)
-
#define G501534_DIP(_name) \
NET_REGISTER_DEV_X(G501534_DIP, _name)
@@ -90,7 +78,7 @@ NETLIST_START(dummy)
INCLUDE(CongoBongo_schematics)
- OPTIMIZE_FRONTIER(C51.1, RES_K(50), 50)
+ OPTIMIZE_FRONTIER(C51.1, RES_K(20), 50)
OPTIMIZE_FRONTIER(R77.2, RES_K(20), 50)
OPTIMIZE_FRONTIER(C25.2, RES_K(240), 50)
@@ -237,7 +225,7 @@ NETLIST_START(CongoBongo_schematics)
CD4001_DIP(XU18)
CD4538_DIP(XU19)
MM5837_DIP(XU20)
- DM7416_DIP(XU6)
+ TTL_7416_DIP(XU6)
NET_C(D1.A, C21.2, R23.1)
NET_C(D1.K, C20.1, R22.1)
NET_C(XU13.1, C37.2, C36.1, R48.1)
@@ -381,7 +369,7 @@ NETLIST_START(opamp_mod)
RES(RP1, 1e6)
CAP(CP1, 0.0318e-6)
#else
- PARAM(G1.G, 0.0002)
+ PARAM(G1.G, 0.002)
PARAM(G1.CURLIM, 0.002)
RES(RP1, 9.5e6)
CAP(CP1, 0.0033e-6)
@@ -423,7 +411,7 @@ NETLIST_START(opamp_mod)
NETLIST_END()
NETLIST_START(MB3614_DIP)
-#if 1
+#if 0
SUBMODEL(opamp_mod, op1)
SUBMODEL(opamp_mod, op2)
SUBMODEL(opamp_mod, op3)
@@ -432,89 +420,37 @@ NETLIST_START(MB3614_DIP)
/* The opamp actually has an FPF of about 500k. This doesn't work here and causes oscillations.
* FPF here therefore about half the Solver clock.
*/
- OPAMP(op1, ".model MB3614 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=11k SLEW=0.6M RI=1000k RO=50 DAB=0.002)")
+ OPAMP(op1, ".model MB3614 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=110k SLEW=0.6M RI=1000k RO=50 DAB=0.002)")
OPAMP(op2, ".model MB3614 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=11k SLEW=0.6M RI=1000k RO=50 DAB=0.002)")
OPAMP(op3, ".model MB3614 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=11k SLEW=0.6M RI=1000k RO=50 DAB=0.002)")
- OPAMP(op4, ".model MB3614 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=11k SLEW=0.6M RI=1000k RO=50 DAB=0.002)")
+ OPAMP(op4, ".model MB3614 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=110k SLEW=0.6M RI=1000k RO=50 DAB=0.002)")
#endif
ALIAS( 1, op1.OUT)
ALIAS( 2, op1.MINUS)
ALIAS( 3, op1.PLUS)
- ALIAS( 7, op2.OUT)
- ALIAS( 6, op2.MINUS)
+ ALIAS( 4, op1.VCC)
+
ALIAS( 5, op2.PLUS)
+ ALIAS( 6, op2.MINUS)
+ ALIAS( 7, op2.OUT)
ALIAS( 8, op3.OUT)
ALIAS( 9, op3.MINUS)
ALIAS(10, op3.PLUS)
- ALIAS(14, op4.OUT)
- ALIAS(13, op4.MINUS)
+ ALIAS(11, op1.GND)
+
ALIAS(12, op4.PLUS)
+ ALIAS(13, op4.MINUS)
+ ALIAS(14, op4.OUT)
NET_C(op1.GND, op2.GND, op3.GND, op4.GND)
NET_C(op1.VCC, op2.VCC, op3.VCC, op4.VCC)
- ALIAS(11, op1.GND)
- ALIAS( 4, op1.VCC)
-NETLIST_END()
-
-
-NETLIST_START(DM7416_DIP)
- DM7416_GATE(s1)
- DM7416_GATE(s2)
- DM7416_GATE(s3)
- DM7416_GATE(s4)
- DM7416_GATE(s5)
- DM7416_GATE(s6)
-
- DUMMY_INPUT(GND)
- DUMMY_INPUT(VCC)
-
- ALIAS( 1, s1.A)
- ALIAS( 2, s1.Q)
- ALIAS( 3, s2.A)
- ALIAS( 4, s2.Q)
- ALIAS( 5, s3.A)
- ALIAS( 6, s3.Q)
- ALIAS( 7, GND.I)
-
- ALIAS( 8, s4.Q)
- ALIAS( 9, s4.A)
- ALIAS(10, s5.Q)
- ALIAS(11, s5.A)
- ALIAS(12, s6.Q)
- ALIAS(13, s6.A)
- ALIAS(14, VCC.I)
NETLIST_END()
-NETLIST_START(CD4001_DIP)
- CD4001_NOR(s1)
- CD4001_NOR(s2)
- CD4001_NOR(s3)
- CD4001_NOR(s4)
-
- DUMMY_INPUT(VSS)
- DUMMY_INPUT(VDD)
-
- ALIAS( 1, s1.A)
- ALIAS( 2, s1.B)
- ALIAS( 3, s1.Q)
- ALIAS( 4, s2.Q)
- ALIAS( 5, s2.A)
- ALIAS( 6, s2.B)
- ALIAS( 7, VDD.I)
-
- ALIAS( 8, s3.A)
- ALIAS( 9, s3.B)
- ALIAS(10, s3.Q)
- ALIAS(11, s4.Q)
- ALIAS(12, s4.A)
- ALIAS(13, s4.B)
- ALIAS(14, VSS.I)
-NETLIST_END()
NETLIST_START(G501534_DIP)
AFUNC(f, 2, "A0 A1 0.2 * *")
@@ -545,26 +481,9 @@ NETLIST_START(G501534_DIP)
NETLIST_END()
NETLIST_START(congob_lib)
- TRUTHTABLE_START(DM7416_GATE, 1, 1, 0, "")
- TT_HEAD(" A | Q ")
- TT_LINE(" 0 | 1 |15")
- TT_LINE(" 1 | 0 |23")
- TT_FAMILY(".model DM7416 FAMILY(IVL=0.8 IVH=2.0 OVL=0.1 OVH=4.95 ORL=10.0 ORH=1.0e8)")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(CD4001_NOR, 2, 1, 0, "")
- TT_HEAD("A , B | Q ")
- TT_LINE("0,0|1|85")
- TT_LINE("X,1|0|120")
- TT_LINE("1,X|0|120")
- TT_FAMILY(".model CD4000 FAMILY(TYPE=CD4000)")
- TRUTHTABLE_END()
-
//LOCAL_LIB_ENTRY(LM324_DIP)
//LOCAL_LIB_ENTRY(LM358_DIP)
- LOCAL_LIB_ENTRY(CD4001_DIP)
- LOCAL_LIB_ENTRY(DM7416_DIP)
LOCAL_LIB_ENTRY(MB3614_DIP)
LOCAL_LIB_ENTRY(G501534_DIP)
diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua
index b45ed49d27b..d1c7555aaf4 100644
--- a/scripts/src/netlist.lua
+++ b/scripts/src/netlist.lua
@@ -152,4 +152,8 @@ project "netlist"
MAME_DIR .. "src/emu/netlist/devices/nld_signal.h",
MAME_DIR .. "src/emu/netlist/devices/nld_truthtable.c",
MAME_DIR .. "src/emu/netlist/devices/nld_truthtable.h",
+ MAME_DIR .. "src/emu/netlist/macro/TTL74XX.c",
+ MAME_DIR .. "src/emu/netlist/macro/TTL74XX.h",
+ MAME_DIR .. "src/emu/netlist/macro/CD4XXX.c",
+ MAME_DIR .. "src/emu/netlist/macro/CD4XXX.h",
}
diff --git a/src/emu/netlist/analog/nld_twoterm.h b/src/emu/netlist/analog/nld_twoterm.h
index 0bc08241658..e441b16a40c 100644
--- a/src/emu/netlist/analog/nld_twoterm.h
+++ b/src/emu/netlist/analog/nld_twoterm.h
@@ -241,7 +241,7 @@ public:
else
{
#if 1
- const nl_double a = std::max((nVd - m_Vd) * m_VtInv, NL_FCONST(1e-1) - NL_FCONST(1.0));
+ const nl_double a = std::max((nVd - m_Vd) * m_VtInv, NL_FCONST(0.5) - NL_FCONST(1.0));
m_Vd = m_Vd + nl_math::e_log1p(a) * m_Vt;
#else
m_Vd = m_Vd + 10.0 * m_Vt * std::tanh((nVd - m_Vd) / 10.0 / m_Vt);
diff --git a/src/emu/netlist/devices/net_lib.c b/src/emu/netlist/devices/net_lib.c
index bd65e11ed92..e5214392cc4 100644
--- a/src/emu/netlist/devices/net_lib.c
+++ b/src/emu/netlist/devices/net_lib.c
@@ -41,6 +41,11 @@ NETLIST_START(bjt_models)
NET_MODEL(".model BC817-25 NPN(IS=9.198E-14 NF=1.003 ISE=4.468E-16 NE=1.65 BF=338.8 IKF=0.4913 VAF=107.9 NR=1.002 ISC=5.109E-15 NC=1.071 BR=29.48 IKR=0.193 VAR=25 RB=1 IRB=1000 RBM=1 RE=0.2126 RC=0.143 XTB=0 EG=1.11 XTI=3 CJE=3.825E-11 VJE=0.7004 MJE=0.364 TF=5.229E-10 XTF=219.7 VTF=3.502 ITF=7.257 PTF=0 CJC=1.27E-11 VJC=0.4431 MJC=0.3983 XCJC=0.4555 TR=7E-11 CJS=0 VJS=0.75 MJS=0.333 FC=0.905 Vceo=45 Icrating=500m mfg=Philips)")
NETLIST_END()
+NETLIST_START(family_models)
+ NET_MODEL(".model 74XXOC FAMILY(IVL=0.8 IVH=2.0 OVL=0.1 OVH=4.95 ORL=10.0 ORH=1.0e8)")
+ NET_MODEL(".model CD4000 FAMILY(TYPE=CD4000)")
+NETLIST_END()
+
#define xstr(s) # s
#define ENTRY1(_nic, _name, _defparam) factory.register_device<_nic>( # _name, xstr(_nic), _defparam );
diff --git a/src/emu/netlist/devices/net_lib.h b/src/emu/netlist/devices/net_lib.h
index 41fccf99f51..403a70b9654 100644
--- a/src/emu/netlist/devices/net_lib.h
+++ b/src/emu/netlist/devices/net_lib.h
@@ -56,6 +56,9 @@
#include "nld_log.h"
+#include "../macro/TTL74XX.h"
+#include "../macro/CD4XXX.h"
+
#include "../analog/nld_bjt.h"
#include "../analog/nld_fourterm.h"
#include "../analog/nld_switches.h"
@@ -67,6 +70,7 @@
NETLIST_EXTERNAL(diode_models)
NETLIST_EXTERNAL(bjt_models)
+NETLIST_EXTERNAL(family_models)
namespace netlist {
void initialize_factory(netlist::factory_list_t &factory);
diff --git a/src/emu/netlist/devices/nld_4020.h b/src/emu/netlist/devices/nld_4020.h
index 67fbb3c902a..28e1983d7c7 100644
--- a/src/emu/netlist/devices/nld_4020.h
+++ b/src/emu/netlist/devices/nld_4020.h
@@ -3,7 +3,7 @@
/*
* nld_4020.h
*
- * CD4020: CMOS Ripple-Carry Binary Counters/Dividers
+ * CD4020: 14-Stage Ripple Carry Binary Counters
*
* +--------------+
* Q12 |1 ++ 16| VDD
diff --git a/src/emu/netlist/devices/nld_truthtable.h b/src/emu/netlist/devices/nld_truthtable.h
index cfb0bed0847..aff146cfb91 100644
--- a/src/emu/netlist/devices/nld_truthtable.h
+++ b/src/emu/netlist/devices/nld_truthtable.h
@@ -36,7 +36,7 @@
ttd->m_desc.add(_x);
#define TT_FAMILY(_x) \
- ttd->m_family = netlist::logic_family_desc_t::from_model(_x);
+ ttd->m_family = netlist::logic_family_desc_t::from_model(setup.get_model_str(_x));
#define TRUTHTABLE_END() \
setup.factory().register_device(ttd); \
diff --git a/src/emu/netlist/macro/CD4XXX.c b/src/emu/netlist/macro/CD4XXX.c
new file mode 100644
index 00000000000..9033ea32836
--- /dev/null
+++ b/src/emu/netlist/macro/CD4XXX.c
@@ -0,0 +1,54 @@
+
+#include "CD4XXX.h"
+#include "devices/nld_truthtable.h"
+#include "devices/nld_system.h"
+
+/*
+ * CD4001BC: Quad 2-Input NOR Buffered B Series Gate
+ *
+ * +--------------+
+ * A1 |1 ++ 14| VCC
+ * B1 |2 13| A6
+ * A2 |3 12| Y6
+ * Y2 |4 4001 11| A5
+ * A3 |5 10| Y5
+ * Y3 |6 9| A4
+ * GND |7 8| Y4
+ * +--------------+
+ *
+ */
+
+NETLIST_START(CD4001_DIP)
+ CD4001_NOR(s1)
+ CD4001_NOR(s2)
+ CD4001_NOR(s3)
+ CD4001_NOR(s4)
+
+ DUMMY_INPUT(VSS)
+ DUMMY_INPUT(VDD)
+
+ DIPPINS( /* +--------------+ */
+ s1.A, /* A1 |1 ++ 14| VCC */ VSS.I,
+ s1.B, /* B1 |2 13| A6 */ s4.B,
+ s1.Q, /* A2 |3 12| Y6 */ s4.A,
+ s2.Q, /* Y2 |4 4001 11| A5 */ s4.Q,
+ s2.A, /* A3 |5 10| Y5 */ s3.Q,
+ s2.B, /* Y3 |6 9| A4 */ s3.B,
+ VDD.I, /* GND |7 8| Y4 */ s3.A
+ /* +--------------+ */
+ )
+
+NETLIST_END()
+
+NETLIST_START(CD4XXX_lib)
+ TRUTHTABLE_START(CD4001_NOR, 2, 1, 0, "")
+ TT_HEAD("A , B | Q ")
+ TT_LINE("0,0|1|85")
+ TT_LINE("X,1|0|120")
+ TT_LINE("1,X|0|120")
+ TT_FAMILY("CD4000")
+ TRUTHTABLE_END()
+
+ LOCAL_LIB_ENTRY(CD4001_DIP)
+
+NETLIST_END()
diff --git a/src/emu/netlist/macro/CD4XXX.h b/src/emu/netlist/macro/CD4XXX.h
new file mode 100644
index 00000000000..c38314178e5
--- /dev/null
+++ b/src/emu/netlist/macro/CD4XXX.h
@@ -0,0 +1,26 @@
+#ifndef NLD_CD4XXX_H_
+#define NLD_CD4XXX_H_
+
+#include "../nl_setup.h"
+
+#ifndef __PLIB_PREPROCESSOR__
+
+/* ----------------------------------------------------------------------------
+ * Netlist Macros
+ * ---------------------------------------------------------------------------*/
+
+#define CD4001_NOR(_name) \
+ NET_REGISTER_DEV_X(CD4001_NOR, _name)
+
+#define CD4001_DIP(_name) \
+ NET_REGISTER_DEV_X(CD4001_DIP, _name)
+
+/* ----------------------------------------------------------------------------
+ * External declarations
+ * ---------------------------------------------------------------------------*/
+
+NETLIST_EXTERNAL(CD4XXX_lib)
+
+#endif
+
+#endif
diff --git a/src/emu/netlist/macro/TTL74XX.c b/src/emu/netlist/macro/TTL74XX.c
new file mode 100644
index 00000000000..fb1952e2583
--- /dev/null
+++ b/src/emu/netlist/macro/TTL74XX.c
@@ -0,0 +1,55 @@
+
+#include "TTL74XX.h"
+#include "devices/nld_truthtable.h"
+#include "devices/nld_system.h"
+
+/*
+ * DM7416: Hex Inverting Buffers with
+ * High Voltage Open-Collector Outputs
+ *
+ * +--------------+
+ * A1 |1 ++ 14| VCC
+ * Y1 |2 13| A6
+ * A2 |3 12| Y6
+ * Y2 |4 7416 11| A5
+ * A3 |5 10| Y5
+ * Y3 |6 9| A4
+ * GND |7 8| Y4
+ * +--------------+
+ *
+ */
+
+NETLIST_START(TTL_7416_DIP)
+ TTL_7416_GATE(s1)
+ TTL_7416_GATE(s2)
+ TTL_7416_GATE(s3)
+ TTL_7416_GATE(s4)
+ TTL_7416_GATE(s5)
+ TTL_7416_GATE(s6)
+
+ DUMMY_INPUT(GND)
+ DUMMY_INPUT(VCC)
+
+ DIPPINS( /* +--------------+ */
+ s1.A, /* A1 |1 ++ 14| VCC */ VCC.I,
+ s1.Q, /* Y1 |2 13| A6 */ s6.A,
+ s2.A, /* A2 |3 12| Y6 */ s6.Q,
+ s2.Q, /* Y2 |4 7416 11| A5 */ s5.A,
+ s3.A, /* A3 |5 10| Y5 */ s5.Q,
+ s3.Q, /* Y3 |6 9| A4 */ s4.A,
+ GND.I, /* GND |7 8| Y4 */ s4.Q
+ /* +--------------+ */
+ )
+NETLIST_END()
+
+NETLIST_START(TTL74XX_lib)
+ TRUTHTABLE_START(TTL_7416_GATE, 1, 1, 0, "")
+ TT_HEAD(" A | Q ")
+ TT_LINE(" 0 | 1 |15")
+ TT_LINE(" 1 | 0 |23")
+ /* Open Collector */
+ TT_FAMILY("74XXOC")
+ TRUTHTABLE_END()
+
+ LOCAL_LIB_ENTRY(TTL_7416_DIP)
+NETLIST_END()
diff --git a/src/emu/netlist/macro/TTL74XX.h b/src/emu/netlist/macro/TTL74XX.h
new file mode 100644
index 00000000000..4ba6da0f660
--- /dev/null
+++ b/src/emu/netlist/macro/TTL74XX.h
@@ -0,0 +1,26 @@
+#ifndef NLD_TTL74XX_H_
+#define NLD_TTL74XX_H_
+
+#include "../nl_setup.h"
+
+#ifndef __PLIB_PREPROCESSOR__
+
+/* ----------------------------------------------------------------------------
+ * Netlist Macros
+ * ---------------------------------------------------------------------------*/
+
+#define TTL_7416_GATE(_name) \
+ NET_REGISTER_DEV_X(TTL_7416_GATE, _name)
+
+#define TTL_7416_DIP(_name) \
+ NET_REGISTER_DEV_X(TTL7416_DIP, _name)
+
+/* ----------------------------------------------------------------------------
+ * External declarations
+ * ---------------------------------------------------------------------------*/
+
+NETLIST_EXTERNAL(TTL74XX_lib)
+
+#endif
+
+#endif
diff --git a/src/emu/netlist/nl_parser.c b/src/emu/netlist/nl_parser.c
index cbd9be4ec5a..efdac63c182 100644
--- a/src/emu/netlist/nl_parser.c
+++ b/src/emu/netlist/nl_parser.c
@@ -50,6 +50,7 @@ bool parser_t::parse(const char *buf, const pstring nlname)
m_tok_comma = register_token(",");
m_tok_ALIAS = register_token("ALIAS");
+ m_tok_DIPPINS = register_token("DIPPINS");
m_tok_NET_C = register_token("NET_C");
m_tok_FRONTIER = register_token("OPTIMIZE_FRONTIER");
m_tok_PARAM = register_token("PARAM");
@@ -120,6 +121,8 @@ void parser_t::parse_netlist(ATTR_UNUSED const pstring &nlname)
if (token.is(m_tok_ALIAS))
net_alias();
+ else if (token.is(m_tok_DIPPINS))
+ dippins();
else if (token.is(m_tok_NET_C))
net_c();
else if (token.is(m_tok_FRONTIER))
@@ -186,7 +189,7 @@ void parser_t::net_truthtable_start()
else if (token.is(m_tok_TT_FAMILY))
{
require_token(m_tok_param_left);
- ttd->m_family = netlist::logic_family_desc_t::from_model(get_string());
+ ttd->m_family = netlist::logic_family_desc_t::from_model(m_setup.get_model_str(get_string()));
require_token(m_tok_param_right);
}
else
@@ -298,6 +301,33 @@ void parser_t::net_c()
}
+void parser_t::dippins()
+{
+ pstring_list_t pins;
+
+ pins.add(get_identifier());
+ require_token(m_tok_comma);
+
+ while (true)
+ {
+ pstring t1 = get_identifier();
+ pins.add(t1);
+ token_t n = get_token();
+ if (n.is(m_tok_param_right))
+ break;
+ if (!n.is(m_tok_comma))
+ error("expected a comma, found <%s>", n.str().cstr());
+ }
+ if ((pins.size() % 2) == 1)
+ error("You must pass an equal number of pins to DIPPINS");
+ unsigned n = pins.size();
+ for (unsigned i = 0; i < n / 2; i++)
+ {
+ m_setup.register_alias(pstring::sprintf("%d", i+1), pins[i*2]);
+ m_setup.register_alias(pstring::sprintf("%d", n-i), pins[i*2 + 1]);
+ }
+}
+
void parser_t::netdev_param()
{
pstring param;
diff --git a/src/emu/netlist/nl_parser.h b/src/emu/netlist/nl_parser.h
index d1e50ad026a..89c2ba4e1e1 100644
--- a/src/emu/netlist/nl_parser.h
+++ b/src/emu/netlist/nl_parser.h
@@ -25,6 +25,7 @@ namespace netlist
void parse_netlist(const pstring &nlname);
void net_alias();
+ void dippins();
void netdev_param();
void net_c();
void frontier();
@@ -51,6 +52,7 @@ namespace netlist
token_id_t m_tok_comma;
token_id_t m_tok_ALIAS;
token_id_t m_tok_NET_C;
+ token_id_t m_tok_DIPPINS;
token_id_t m_tok_FRONTIER;
token_id_t m_tok_PARAM;
token_id_t m_tok_NET_MODEL;
diff --git a/src/emu/netlist/nl_setup.c b/src/emu/netlist/nl_setup.c
index 81bcf9c0c03..de563d27983 100644
--- a/src/emu/netlist/nl_setup.c
+++ b/src/emu/netlist/nl_setup.c
@@ -26,9 +26,15 @@ static NETLIST_START(base)
LOCAL_SOURCE(diode_models)
LOCAL_SOURCE(bjt_models)
+ LOCAL_SOURCE(family_models)
+ LOCAL_SOURCE(TTL74XX_lib)
+ LOCAL_SOURCE(CD4XXX_lib)
INCLUDE(diode_models);
INCLUDE(bjt_models);
+ INCLUDE(family_models);
+ INCLUDE(TTL74XX_lib);
+ INCLUDE(CD4XXX_lib);
NETLIST_END()
@@ -167,6 +173,19 @@ void setup_t::register_alias(const pstring &alias, const pstring &out)
register_alias_nofqn(alias_fqn, out_fqn);
}
+void setup_t::register_dippins_arr(const pstring &terms)
+{
+ pstring_list_t list(terms,", ");
+ if (list.size() == 0 || (list.size() % 2) == 1)
+ netlist().error("You must pass an equal number of pins to DIPPINS");
+ unsigned n = list.size();
+ for (unsigned i = 0; i < n / 2; i++)
+ {
+ register_alias(pstring::sprintf("%d", i+1), list[i * 2]);
+ register_alias(pstring::sprintf("%d", n-i), list[i * 2 + 1]);
+ }
+}
+
pstring setup_t::objtype_as_astr(object_t &in) const
{
switch (in.type())
@@ -193,6 +212,26 @@ pstring setup_t::objtype_as_astr(object_t &in) const
return "Error";
}
+const pstring setup_t::get_model_str(const pstring val) const
+{
+ if (val.startsWith(".model ") || val.find("(") >= 0)
+ {
+ return val;
+ }
+ else
+ {
+ pstring search = (".model " + val + " ").ucase();
+ for (std::size_t i=0; i < m_models.size(); i++)
+ {
+ if (m_models[i].ucase().startsWith(search))
+ return m_models[i];
+ }
+ netlist().error("Model %s not found\n", val.cstr());
+ return ""; /* please compiler */
+ }
+}
+
+
void setup_t::register_object(device_t &dev, const pstring &name, object_t &obj)
{
switch (obj.type())
@@ -255,32 +294,8 @@ void setup_t::register_object(device_t &dev, const pstring &name, object_t &obj)
}
break;
case param_t::MODEL:
- {
- if (val.startsWith(".model "))
- {
- dynamic_cast<param_model_t &>(param).initial(val);
- }
- else
- {
- pstring search = (".model " + val + " ").ucase();
- bool found = false;
- for (std::size_t i=0; i < m_models.size(); i++)
- {
- if (m_models[i].ucase().startsWith(search))
- {
- //int pl=m_models[i].find("(");
- //int pr=m_models[i].find(")");
- //dynamic_cast<netlist_param_model_t &>(param).initial(m_models[i].substr(pl+1,pr-pl-1));
- dynamic_cast<param_model_t &>(param).initial(m_models[i]);
- found = true;
- break;
- }
- }
- if (!found)
- netlist().error("Model %s not found\n", val.cstr());
- }
- }
- break;
+ dynamic_cast<param_model_t &>(param).initial(get_model_str(val));
+ break;
default:
netlist().error("Parameter is not supported %s : %s\n", name.cstr(), val.cstr());
}
diff --git a/src/emu/netlist/nl_setup.h b/src/emu/netlist/nl_setup.h
index 1cfa5a75ece..51800f4c199 100644
--- a/src/emu/netlist/nl_setup.h
+++ b/src/emu/netlist/nl_setup.h
@@ -22,6 +22,9 @@
#define ALIAS(_alias, _name) \
setup.register_alias(# _alias, # _name);
+#define DIPPINS(_pin1, ...) \
+ setup.register_dippins_arr( #_pin1 ", " # __VA_ARGS__);
+
#define NET_REGISTER_DEV(_type, _name) \
setup.register_dev(NETLIB_NAME_STR(_type), # _name);
@@ -153,6 +156,8 @@ namespace netlist
void register_model(const pstring &model);
void register_alias(const pstring &alias, const pstring &out);
+ void register_dippins_arr(const pstring &terms);
+
void register_alias_nofqn(const pstring &alias, const pstring &out);
void register_link_arr(const pstring &terms);
@@ -165,6 +170,8 @@ namespace netlist
void register_frontier(const pstring attach, const double r_IN, const double r_OUT);
void remove_connections(const pstring attach);
+ const pstring get_model_str(const pstring val) const;
+
void register_object(device_t &dev, const pstring &name, object_t &obj);
bool connect(core_terminal_t &t1, core_terminal_t &t2);