summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@arcor.de>2015-07-01 02:41:46 +0200
committer couriersud <couriersud@arcor.de>2015-07-01 02:41:58 +0200
commite6298552371a636a8b587ef33e71f98f0f791ea9 (patch)
tree0ac53d17d49f465ebdae425c47f81443cfac0f0a
parentae0fd9f1a54e4f91f01660bbcc5eafe7d87198fb (diff)
Added macro object registration and dynamic includes to netlist. This
allows the creation of macro libraries going forward. Any IC which can be described by a truthtable and a package wrapper can now be entirely described in netlist syntax. [Couriersud]
-rw-r--r--src/emu/netlist/devices/net_lib.c13
-rw-r--r--src/emu/netlist/devices/nld_system.h40
-rw-r--r--src/emu/netlist/nl_parser.c99
-rw-r--r--src/emu/netlist/nl_parser.h2
-rw-r--r--src/emu/netlist/nl_setup.c26
-rw-r--r--src/emu/netlist/nl_setup.h25
-rw-r--r--src/mame/audio/irem.c24
-rw-r--r--src/mame/audio/nl_kidniki.c128
8 files changed, 243 insertions, 114 deletions
diff --git a/src/emu/netlist/devices/net_lib.c b/src/emu/netlist/devices/net_lib.c
index 88238cbca1a..534ef33d782 100644
--- a/src/emu/netlist/devices/net_lib.c
+++ b/src/emu/netlist/devices/net_lib.c
@@ -14,26 +14,31 @@
NETLIST_START(diode_models)
NET_MODEL(".model 1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
+ NET_MODEL(".model 1N4001 D(Is=14.11n N=1.984 Rs=33.89m Ikf=94.81 Xti=3 Eg=1.11 Cjo=25.89p M=.44 Vj=.3245 Fc=.5 Bv=75 Ibv=10u Tt=5.7u Iave=1 Vpk=50 mfg=GI type=silicon)")
NET_MODEL(".model 1N4148 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
+ NET_MODEL(".model 1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)")
NET_MODEL(".model LedRed D(IS=93.2p RS=42M N=3.73 BV=4 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=4 type=LED)")
NET_MODEL(".model LedGreen D(IS=93.2p RS=42M N=4.61 BV=4 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=4 type=LED)")
NET_MODEL(".model LedBlue D(IS=93.2p RS=42M N=7.47 BV=5 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=5 type=LED)")
NET_MODEL(".model LedWhite D(Is=0.27n Rs=5.65 N=6.79 Cjo=42p Iave=30m Vpk=5 type=LED)")
- NET_MODEL(".model 1N4001 D(Is=14.11n N=1.984 Rs=33.89m Ikf=94.81 Xti=3 Eg=1.11 Cjo=25.89p M=.44 Vj=.3245 Fc=.5 Bv=75 Ibv=10u Tt=5.7u Iave=1 Vpk=50 mfg=GI type=silicon)")
+
NETLIST_END()
NETLIST_START(bjt_models)
- NET_MODEL(".model BC237B NPN(IS=1.8E-14 ISE=5.0E-14 ISC=1.72E-13 XTI=3 BF=400 BR=35.5 IKF=0.14 IKR=0.03 XTB=1.5 VAF=80 VAR=12.5 VJE=0.58 VJC=0.54 RE=0.6 RC=0.25 RB=0.56 CJE=13E-12 CJC=4E-12 XCJC=0.75 FC=0.5 NF=0.9955 NR=1.005 NE=1.46 NC=1.27 MJE=0.33 MJC=0.33 TF=0.64E-9 TR=50.72E-9 EG=1.11 KF=0 AF=1 VCEO=45V ICRATING=100M MFG=ZETEX)")
- NET_MODEL(".model BC556B PNP(IS=3.83E-14 NF=1.008 ISE=1.22E-14 NE=1.528 BF=344.4 IKF=0.08039 VAF=21.11 NR=1.005 ISC=2.85E-13 NC=1.28 BR=14.84 IKR=0.047 VAR=32.02 RB=1 IRB=1.00E-06 RBM=1 RE=0.6202 RC=0.5713 XTB=0 EG=1.11 XTI=3 CJE=1.23E-11 VJE=0.6106 MJE=0.378 TF=5.60E-10 XTF=3.414 VTF=5.23 ITF=0.1483 PTF=0 CJC=1.08E-11 VJC=0.1022 MJC=0.3563 XCJC=0.6288 TR=1.00E-32 CJS=0 VJS=0.75 MJS=0.333 FC=0.8027 Vceo=65 Icrating=100m mfg=Philips)")
NET_MODEL(".model 2SA1015 PNP(Is=295.1E-18 Xti=3 Eg=1.11 Vaf=100 Bf=110 Xtb=1.5 Br=10.45 Rc=15 Cjc=66.2p Mjc=1.054 Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n Tf=1.661n VCEO=45V ICrating=150M MFG=Toshiba)")
NET_MODEL(".model 2SC1815 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ikf=20m Xtb=1.5 Br=3.377 Rc=1 Cjc=1p Mjc=.3333 Vjc=.75 Fc=.5 Cje=25p Mje=.3333 Vje=.75 Tr=450n Tf=20n Itf=0 Vtf=0 Xtf=0 VCEO=45V ICrating=150M MFG=Toshiba)")
+
NET_MODEL(".model 2N3643 NPN(IS=14.34E-15 ISE=14.34E-15 ISC=0 XTI=3 BF=255.9 BR=6.092 IKF=0.2847 IKR=0 XTB=1.5 VAF=74.03 VAR=28 VJE=0.65 VJC=0.65 RE=0.1 RC=1 RB=10 CJE=22.01E-12 CJC=7.306E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.307 NC=2 MJE=0.377 MJC=0.3416 TF=411.1E-12 TR=46.91E-9 ITF=0.6 VTF=1.7 XTF=3 EG=1.11 KF=0 AF=1 VCEO=30 ICRATING=500m MFG=NSC)")
NET_MODEL(".model 2N3645 PNP(IS=650.6E-18 ISE=54.81E-15 ISC=0 XTI=3 BF=231.7 BR=3.563 IKF=1.079 IKR=0 XTB=1.5 VAF=115.7 VAR=35 VJE=0.65 VJC=0.65 RE=0.15 RC=0.715 RB=10 CJE=19.82E-12 CJC=14.76E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.829 NC=2 MJE=0.3357 MJC=0.5383 TF=603.7E-12 TR=111.3E-9 ITF=0.65 VTF=5 XTF=1.7 EG=1.11 KF=0 AF=1 VCEO=60 ICRATING=500m MFG=NSC)")
// 3644 = 3645 Difference between 3644 and 3645 is voltage rating. 3644: VCBO=45, 3645: VCBO=60
NET_MODEL(".model 2N3644 PNP(IS=650.6E-18 ISE=54.81E-15 ISC=0 XTI=3 BF=231.7 BR=3.563 IKF=1.079 IKR=0 XTB=1.5 VAF=115.7 VAR=35 VJE=0.65 VJC=0.65 RE=0.15 RC=0.715 RB=10 CJE=19.82E-12 CJC=14.76E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.829 NC=2 MJE=0.3357 MJC=0.5383 TF=603.7E-12 TR=111.3E-9 ITF=0.65 VTF=5 XTF=1.7 EG=1.11 KF=0 AF=1 VCEO=60 ICRATING=500m MFG=NSC)")
- 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)")
// 2N5190 = BC817-25
NET_MODEL(".model 2N5190 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)")
+ NET_MODEL(".model 2SC945 NPN(IS=3.577E-14 BF=2.382E+02 NF=1.01 VAF=1.206E+02 IKF=3.332E-01 ISE=3.038E-16 NE=1.205 BR=1.289E+01 NR=1.015 VAR=1.533E+01 IKR=2.037E-01 ISC=3.972E-14 NC=1.115 RB=3.680E+01 IRB=1.004E-04 RBM=1 RE=8.338E-01 RC=1.557E+00 CJE=1.877E-11 VJE=7.211E-01 MJE=3.486E-01 TF=4.149E-10 XTF=1.000E+02 VTF=9.956 ITF=5.118E-01 PTF=0 CJC=6.876p VJC=3.645E-01 MJC=3.074E-01 TR=5.145E-08 XTB=1.5 EG=1.11 XTI=3 FC=0.5 Vceo=50 Icrating=100m MFG=NEC)")
+
+ NET_MODEL(".model BC237B NPN(IS=1.8E-14 ISE=5.0E-14 ISC=1.72E-13 XTI=3 BF=400 BR=35.5 IKF=0.14 IKR=0.03 XTB=1.5 VAF=80 VAR=12.5 VJE=0.58 VJC=0.54 RE=0.6 RC=0.25 RB=0.56 CJE=13E-12 CJC=4E-12 XCJC=0.75 FC=0.5 NF=0.9955 NR=1.005 NE=1.46 NC=1.27 MJE=0.33 MJC=0.33 TF=0.64E-9 TR=50.72E-9 EG=1.11 KF=0 AF=1 VCEO=45V ICRATING=100M MFG=ZETEX)")
+ NET_MODEL(".model BC556B PNP(IS=3.83E-14 NF=1.008 ISE=1.22E-14 NE=1.528 BF=344.4 IKF=0.08039 VAF=21.11 NR=1.005 ISC=2.85E-13 NC=1.28 BR=14.84 IKR=0.047 VAR=32.02 RB=1 IRB=1.00E-06 RBM=1 RE=0.6202 RC=0.5713 XTB=0 EG=1.11 XTI=3 CJE=1.23E-11 VJE=0.6106 MJE=0.378 TF=5.60E-10 XTF=3.414 VTF=5.23 ITF=0.1483 PTF=0 CJC=1.08E-11 VJC=0.1022 MJC=0.3563 XCJC=0.6288 TR=1.00E-32 CJS=0 VJS=0.75 MJS=0.333 FC=0.8027 Vceo=65 Icrating=100m mfg=Philips)")
+ 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()
diff --git a/src/emu/netlist/devices/nld_system.h b/src/emu/netlist/devices/nld_system.h
index 736187468d7..93e536fc7b3 100644
--- a/src/emu/netlist/devices/nld_system.h
+++ b/src/emu/netlist/devices/nld_system.h
@@ -11,6 +11,7 @@
#include "../nl_setup.h"
#include "../nl_base.h"
+#include "../nl_factory.h"
#include "../analog/nld_twoterm.h"
// -----------------------------------------------------------------------------
@@ -417,6 +418,45 @@ private:
bool m_is_timestep;
};
+
+class factory_lib_entry_t : public base_factory_t
+{
+ P_PREVENT_COPYING(factory_lib_entry_t)
+public:
+
+ ATTR_COLD factory_lib_entry_t(setup_t &setup, const pstring &name, const pstring &classname,
+ const pstring &def_param)
+ : base_factory_t(name, classname, def_param), m_setup(setup) { }
+
+ class dummy : public device_t
+ {
+ public:
+ dummy(const pstring &dev_name) : device_t(), m_dev_name(dev_name) { }
+ protected:
+ virtual void init(netlist_t &anetlist, const pstring &aname)
+ {
+ anetlist.setup().namespace_push(aname);
+ anetlist.setup().include(m_dev_name);
+ anetlist.setup().namespace_pop();
+ }
+ void start() { }
+ void reset() { }
+ void update() { }
+
+ pstring m_dev_name;
+ };
+
+ ATTR_COLD device_t *Create()
+ {
+ device_t *r = palloc(dummy(this->name()));
+ return r;
+ }
+
+private:
+ setup_t &m_setup;
+};
+
+
NETLIB_NAMESPACE_DEVICES_END()
#endif /* NLD_SYSTEM_H_ */
diff --git a/src/emu/netlist/nl_parser.c b/src/emu/netlist/nl_parser.c
index 4b6f2f51bbd..dc219323a41 100644
--- a/src/emu/netlist/nl_parser.c
+++ b/src/emu/netlist/nl_parser.c
@@ -56,6 +56,7 @@ bool parser_t::parse(const char *buf, const pstring nlname)
m_tok_NET_MODEL = register_token("NET_MODEL");
m_tok_INCLUDE = register_token("INCLUDE");
m_tok_LOCAL_SOURCE = register_token("LOCAL_SOURCE");
+ m_tok_LOCAL_LIB_ENTRY = register_token("LOCAL_LIB_ENTRY");
m_tok_SUBMODEL = register_token("SUBMODEL");
m_tok_NETLIST_START = register_token("NETLIST_START");
m_tok_NETLIST_END = register_token("NETLIST_END");
@@ -63,6 +64,7 @@ bool parser_t::parse(const char *buf, const pstring nlname)
m_tok_TRUTHTABLE_END = register_token("TRUTHTABLE_END");
m_tok_TT_HEAD = register_token("TT_HEAD");
m_tok_TT_LINE = register_token("TT_LINE");
+ m_tok_TT_FAMILY = register_token("TT_FAMILY");
bool in_nl = false;
@@ -134,6 +136,11 @@ void parser_t::parse_netlist(ATTR_UNUSED const pstring &nlname)
net_local_source();
else if (token.is(m_tok_TRUTHTABLE_START))
net_truthtable_start();
+ else if (token.is(m_tok_LOCAL_LIB_ENTRY))
+ {
+ m_setup.register_lib_entry(get_identifier());
+ require_token(m_tok_param_right);
+ }
else if (token.is(m_tok_NETLIST_END))
{
netdev_netlist_end();
@@ -176,6 +183,12 @@ void parser_t::net_truthtable_start()
ttd->m_desc.add(get_string());
require_token(m_tok_param_right);
}
+ 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());
+ require_token(m_tok_param_right);
+ }
else
{
require_token(token, m_tok_TRUTHTABLE_END);
@@ -307,55 +320,65 @@ void parser_t::netdev_param()
void parser_t::device(const pstring &dev_type)
{
- pstring devname;
- base_factory_t *f = m_setup.factory().factory_by_name(dev_type, m_setup);
- device_t *dev;
- pstring_list_t termlist = f->term_param_list();
- pstring_list_t def_params = f->def_params();
-
- std::size_t cnt;
+ if (m_setup.is_library_item(dev_type))
+ {
+ pstring devname = get_identifier();
+ m_setup.namespace_push(devname);
+ m_setup.include(dev_type);
+ m_setup.namespace_pop();
+ require_token(m_tok_param_right);
+ }
+ else
+ {
+ base_factory_t *f = m_setup.factory().factory_by_name(dev_type, m_setup);
+ device_t *dev;
+ pstring_list_t termlist = f->term_param_list();
+ pstring_list_t def_params = f->def_params();
- devname = get_identifier();
+ std::size_t cnt;
- dev = f->Create();
- m_setup.register_dev(dev, devname);
+ pstring devname = get_identifier();
- NL_VERBOSE_OUT(("Parser: IC: %s\n", devname.cstr()));
+ dev = f->Create();
+ m_setup.register_dev(dev, devname);
- cnt = 0;
- while (cnt < def_params.size())
- {
- pstring paramfq = devname + "." + def_params[cnt];
+ NL_VERBOSE_OUT(("Parser: IC: %s\n", devname.cstr()));
- NL_VERBOSE_OUT(("Defparam: %s\n", paramfq.cstr()));
- require_token(m_tok_comma);
- token_t tok = get_token();
- if (tok.is_type(STRING))
+ cnt = 0;
+ while (cnt < def_params.size())
{
- m_setup.register_param(paramfq, tok.str());
- }
- else
- {
- nl_double val = eval_param(tok);
- m_setup.register_param(paramfq, val);
+ pstring paramfq = devname + "." + def_params[cnt];
+
+ NL_VERBOSE_OUT(("Defparam: %s\n", paramfq.cstr()));
+ require_token(m_tok_comma);
+ token_t tok = get_token();
+ if (tok.is_type(STRING))
+ {
+ m_setup.register_param(paramfq, tok.str());
+ }
+ else
+ {
+ nl_double val = eval_param(tok);
+ m_setup.register_param(paramfq, val);
+ }
+ cnt++;
}
- cnt++;
- }
- token_t tok = get_token();
- cnt = 0;
- while (tok.is(m_tok_comma) && cnt < termlist.size())
- {
- pstring output_name = get_identifier();
+ token_t tok = get_token();
+ cnt = 0;
+ while (tok.is(m_tok_comma) && cnt < termlist.size())
+ {
+ pstring output_name = get_identifier();
- m_setup.register_link(devname + "." + termlist[cnt], output_name);
+ m_setup.register_link(devname + "." + termlist[cnt], output_name);
- cnt++;
- tok = get_token();
+ cnt++;
+ tok = get_token();
+ }
+ if (cnt != termlist.size())
+ m_setup.netlist().error("netlist: input count mismatch for %s - expected %" SIZETFMT " found %" SIZETFMT "\n", devname.cstr(), termlist.size(), cnt);
+ require_token(tok, m_tok_param_right);
}
- if (cnt != termlist.size())
- m_setup.netlist().error("netlist: input count mismatch for %s - expected %" SIZETFMT " found %" SIZETFMT "\n", devname.cstr(), termlist.size(), cnt);
- require_token(tok, m_tok_param_right);
}
diff --git a/src/emu/netlist/nl_parser.h b/src/emu/netlist/nl_parser.h
index 885d62449fb..d1e50ad026a 100644
--- a/src/emu/netlist/nl_parser.h
+++ b/src/emu/netlist/nl_parser.h
@@ -59,10 +59,12 @@ namespace netlist
token_id_t m_tok_SUBMODEL;
token_id_t m_tok_INCLUDE;
token_id_t m_tok_LOCAL_SOURCE;
+ token_id_t m_tok_LOCAL_LIB_ENTRY;
token_id_t m_tok_TRUTHTABLE_START;
token_id_t m_tok_TRUTHTABLE_END;
token_id_t m_tok_TT_HEAD;
token_id_t m_tok_TT_LINE;
+ token_id_t m_tok_TT_FAMILY;
setup_t &m_setup;
diff --git a/src/emu/netlist/nl_setup.c b/src/emu/netlist/nl_setup.c
index b7ebc9ca5e8..5b5eb7ccfb1 100644
--- a/src/emu/netlist/nl_setup.c
+++ b/src/emu/netlist/nl_setup.c
@@ -102,12 +102,30 @@ device_t *setup_t::register_dev(device_t *dev, const pstring &name)
return dev;
}
+void setup_t::register_lib_entry(const pstring &name)
+{
+ if (m_lib.contains(name))
+ netlist().warning("Lib entry collection already contains %s. IGNORED", name.cstr());
+ else
+ m_lib.add(name);
+}
+
device_t *setup_t::register_dev(const pstring &classname, const pstring &name)
{
- device_t *dev = factory().new_device_by_classname(classname);
- if (dev == NULL)
- netlist().error("Class %s not found!\n", classname.cstr());
- return register_dev(dev, name);
+ if (m_lib.contains(classname))
+ {
+ namespace_push(name);
+ include(classname);
+ namespace_pop();
+ return NULL;
+ }
+ else
+ {
+ device_t *dev = factory().new_device_by_classname(classname);
+ if (dev == NULL)
+ netlist().error("Class %s not found!\n", classname.cstr());
+ return register_dev(dev, name);
+ }
}
void setup_t::remove_dev(const pstring &name)
diff --git a/src/emu/netlist/nl_setup.h b/src/emu/netlist/nl_setup.h
index 88bd0b1504a..1cfa5a75ece 100644
--- a/src/emu/netlist/nl_setup.h
+++ b/src/emu/netlist/nl_setup.h
@@ -49,23 +49,27 @@
#define NETLIST_NAME(_name) netlist ## _ ## _name
-#define NETLIST_EXTERNAL(_name) \
+#define NETLIST_EXTERNAL(_name) \
ATTR_COLD void NETLIST_NAME(_name)(netlist::setup_t &setup);
-#define NETLIST_START(_name) \
-ATTR_COLD void NETLIST_NAME(_name)(netlist::setup_t &setup) \
+#define NETLIST_START(_name) \
+ATTR_COLD void NETLIST_NAME(_name)(netlist::setup_t &setup) \
{
#define NETLIST_END() }
-#define LOCAL_SOURCE(_name) \
+#define LOCAL_SOURCE(_name) \
setup.register_source(palloc(netlist::source_proc_t(# _name, &NETLIST_NAME(_name))));
-#define INCLUDE(_name) \
+#define LOCAL_LIB_ENTRY(_name) \
+ LOCAL_SOURCE(_name) \
+ setup.register_lib_entry(# _name);
+
+#define INCLUDE(_name) \
setup.include(# _name);
-#define SUBMODEL(_model, _name) \
- setup.namespace_push(# _name); \
- NETLIST_NAME(_model)(setup); \
+#define SUBMODEL(_model, _name) \
+ setup.namespace_push(# _name); \
+ NETLIST_NAME(_model)(setup); \
setup.namespace_pop();
// ----------------------------------------------------------------------------------------
@@ -145,6 +149,8 @@ namespace netlist
device_t *register_dev(const pstring &classname, const pstring &name);
void remove_dev(const pstring &name);
+ void register_lib_entry(const pstring &name);
+
void register_model(const pstring &model);
void register_alias(const pstring &alias, const pstring &out);
void register_alias_nofqn(const pstring &alias, const pstring &out);
@@ -186,6 +192,8 @@ namespace netlist
factory_list_t &factory() { return *m_factory; }
const factory_list_t &factory() const { return *m_factory; }
+ bool is_library_item(const pstring &name) const { return m_lib.contains(name); }
+
/* not ideal, but needed for save_state */
tagmap_terminal_t m_terminals;
@@ -215,6 +223,7 @@ namespace netlist
pstack_t<pstring> m_stack;
source_t::list_t m_sources;
+ plist_t<pstring> m_lib;
void connect_terminals(core_terminal_t &in, core_terminal_t &out);
diff --git a/src/mame/audio/irem.c b/src/mame/audio/irem.c
index be8b2c2c8e8..06de09520d7 100644
--- a/src/mame/audio/irem.c
+++ b/src/mame/audio/irem.c
@@ -415,22 +415,8 @@ NETLIST_START(kidniki_interface)
PARAM(Solver.PARALLEL, 0)
#endif
- NET_MODEL(".model 2SC945 NPN(IS=3.577E-14 BF=2.382E+02 NF=1.01 VAF=1.206E+02 IKF=3.332E-01 ISE=3.038E-16 NE=1.205 BR=1.289E+01 NR=1.015 VAR=1.533E+01 IKR=2.037E-01 ISC=3.972E-14 NC=1.115 RB=3.680E+01 IRB=1.004E-04 RBM=1 RE=8.338E-01 RC=1.557E+00 CJE=1.877E-11 VJE=7.211E-01 MJE=3.486E-01 TF=4.149E-10 XTF=1.000E+02 VTF=9.956 ITF=5.118E-01 PTF=0 CJC=6.876p VJC=3.645E-01 MJC=3.074E-01 TR=5.145E-08 XTB=1.5 EG=1.11 XTI=3 FC=0.5 Vceo=50 Icrating=100m MFG=NEC)")
- // Equivalent to 1N914
- NET_MODEL(".model 1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)")
-
LOCAL_SOURCE(kidniki_schematics)
- /*
- * Workaround: The simplified opamp model does not correctly
- * model the internals of the inputs.
- */
-
- ANALOG_INPUT(VWORKAROUND, 2.061)
- RES(RWORKAROUND, RES_K(27))
- NET_C(VWORKAROUND.Q, RWORKAROUND.1)
- NET_C(XU1.6, RWORKAROUND.2)
-
ANALOG_INPUT(I_V5, 5)
//ANALOG_INPUT(I_V0, 0)
ALIAS(I_V0.Q, GND)
@@ -481,16 +467,6 @@ NETLIST_START(kidniki_interface)
INCLUDE(kidniki_schematics)
- CAP(C26, CAP_U(1))
- RES(R25, 560)
- RES(R26, RES_K(47))
- CAP(C29, CAP_U(0.01))
-
- NET_C(RV1.2, C26.1)
- NET_C(C26.2, R25.1)
- NET_C(R25.2, R26.1, C29.1)
- NET_C(R26.2, C29.2, GND)
-
#if (USE_FRONTIERS)
OPTIMIZE_FRONTIER(C63.2, RES_K(27), RES_K(1))
OPTIMIZE_FRONTIER(R31.2, RES_K(5.1), 50)
diff --git a/src/mame/audio/nl_kidniki.c b/src/mame/audio/nl_kidniki.c
index 5a2f5604d1d..21a81e80ffb 100644
--- a/src/mame/audio/nl_kidniki.c
+++ b/src/mame/audio/nl_kidniki.c
@@ -9,45 +9,35 @@
#define USE_FIXED_STV 0
#endif
-NETLIST_EXTERNAL(LM324_DIP)
-NETLIST_EXTERNAL(LM358_DIP)
+/* ----------------------------------------------------------------------------
+ * Library section header START
+ * ---------------------------------------------------------------------------*/
#ifndef __PLIB_PREPROCESSOR__
-#define MC14584B_GATE(_name) \
+
+#define MC14584B_GATE(_name) \
NET_REGISTER_DEV_X(MC14584B_GATE, _name)
-#endif
-NETLIST_START(kidniki_lib)
- TRUTHTABLE_START(MC14584B_GATE, 1, 1, 0, "A,B")
- TT_HEAD(" A | Q ")
- TT_LINE(" 0 | 1 |100")
- TT_LINE(" 1 | 0 |100")
- TT_FAMILY(".model MC14584B FAMILY(IVL=2.1 IVH=2.7 OVL=0.05 OVH=4.95 ORL=10.0 ORH 10.0)")
- TRUTHTABLE_END()
-NETLIST_END()
+#define MC14584B_DIP(_name) \
+ NET_REGISTER_DEV_X(MC14584B_DIP, _name)
-NETLIST_START(MC14584B_DIP)
- MC14584B_GATE(s1)
- MC14584B_GATE(s2)
- MC14584B_GATE(s3)
- MC14584B_GATE(s4)
- MC14584B_GATE(s5)
- MC14584B_GATE(s6)
+#define LM324_DIP(_name) \
+ NET_REGISTER_DEV_X(LM324_DIP, _name)
- ALIAS( 1, s1.A)
- ALIAS( 2, s1.Q)
- ALIAS( 3, s2.A)
- ALIAS( 4, s2.Q)
- ALIAS( 5, s3.A)
- ALIAS( 6, s3.Q)
+#define LM358_DIP(_name) \
+ NET_REGISTER_DEV_X(LM358_DIP, _name)
- ALIAS( 8, s4.Q)
- ALIAS( 9, s4.A)
- ALIAS(10, s5.Q)
- ALIAS(11, s5.A)
- ALIAS(12, s6.Q)
- ALIAS(13, s6.A)
-NETLIST_END()
+NETLIST_EXTERNAL(kidniki_lib)
+
+#endif
+
+/* ----------------------------------------------------------------------------
+ * Library section header END
+ * ---------------------------------------------------------------------------*/
+
+/* ----------------------------------------------------------------------------
+ * Kidniki schematics
+ * ---------------------------------------------------------------------------*/
NETLIST_START(kidniki_schematics)
// EESCHEMA NETLIST VERSION 1.1 (SPICE FORMAT) CREATION DATE: SAT 06 JUN 2015 01:06:26 PM CEST
@@ -58,9 +48,18 @@ NETLIST_START(kidniki_schematics)
// .END
LOCAL_SOURCE(kidniki_lib)
-
INCLUDE(kidniki_lib)
+ /*
+ * Workaround: The simplified opamp model does not correctly
+ * model the internals of the inputs.
+ */
+
+ ANALOG_INPUT(VWORKAROUND, 2.061)
+ RES(RWORKAROUND, RES_K(27))
+ NET_C(VWORKAROUND.Q, RWORKAROUND.1)
+ NET_C(XU1.6, RWORKAROUND.2)
+
CAP(C200, CAP_N(100))
CAP(C28, CAP_U(1))
CAP(C31, CAP_N(470))
@@ -118,10 +117,12 @@ NETLIST_START(kidniki_schematics)
QBJT_EB(Q7, "2SC945")
QBJT_EB(Q9, "2SC945")
- SUBMODEL(LM324_DIP,XU1)
- SUBMODEL(LM358_DIP,XU2)
+ LM324_DIP(XU1)
+ LM358_DIP(XU2)
+ //SUBMODEL(LM324_DIP,XU1)
+ //SUBMODEL(LM358_DIP,XU2)
- SUBMODEL(MC14584B_DIP, XU3)
+ MC14584B_DIP(XU3)
RES(R100, RES_K(560))
RES(R101, RES_K(150))
@@ -309,8 +310,25 @@ NETLIST_START(kidniki_schematics)
NET_C(I_MSM3K0.Q, R200.2)
NET_C(I_MSM2K0.Q, R201.2)
NET_C(R200.1, R201.1, C200.1)
+
+ /* Amplifier stage */
+
+ CAP(C26, CAP_U(1))
+ RES(R25, 560)
+ RES(R26, RES_K(47))
+ CAP(C29, CAP_U(0.01))
+
+ NET_C(RV1.2, C26.1)
+ NET_C(C26.2, R25.1)
+ NET_C(R25.2, R26.1, C29.1)
+ NET_C(R26.2, C29.2, GND)
+
NETLIST_END()
+/* ----------------------------------------------------------------------------
+ * Library section body START
+ * ---------------------------------------------------------------------------*/
+
NETLIST_START(opamp)
/* Opamp model from
@@ -426,3 +444,41 @@ NETLIST_START(LM358_DIP)
ALIAS( 4, op1.GND)
ALIAS( 8, op1.VCC)
NETLIST_END()
+
+NETLIST_START(MC14584B_DIP)
+ MC14584B_GATE(s1)
+ MC14584B_GATE(s2)
+ MC14584B_GATE(s3)
+ MC14584B_GATE(s4)
+ MC14584B_GATE(s5)
+ MC14584B_GATE(s6)
+
+ 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( 8, s4.Q)
+ ALIAS( 9, s4.A)
+ ALIAS(10, s5.Q)
+ ALIAS(11, s5.A)
+ ALIAS(12, s6.Q)
+ ALIAS(13, s6.A)
+NETLIST_END()
+
+NETLIST_START(kidniki_lib)
+ TRUTHTABLE_START(MC14584B_GATE, 1, 1, 0, "")
+ TT_HEAD(" A | Q ")
+ TT_LINE(" 0 | 1 |100")
+ TT_LINE(" 1 | 0 |100")
+ TT_FAMILY(".model MC14584B FAMILY(IVL=2.1 IVH=2.7 OVL=0.05 OVH=4.95 ORL=10.0 ORH 10.0)")
+ TRUTHTABLE_END()
+
+ LOCAL_LIB_ENTRY(LM324_DIP)
+ LOCAL_LIB_ENTRY(LM358_DIP)
+ LOCAL_LIB_ENTRY(MC14584B_DIP)
+
+NETLIST_END()
+