diff options
author | couriersud <couriersud@arcor.de> | 2015-07-01 02:41:46 +0200 |
---|---|---|
committer | couriersud <couriersud@arcor.de> | 2015-07-01 02:41:58 +0200 |
commit | e6298552371a636a8b587ef33e71f98f0f791ea9 (patch) | |
tree | 0ac53d17d49f465ebdae425c47f81443cfac0f0a | |
parent | ae0fd9f1a54e4f91f01660bbcc5eafe7d87198fb (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.c | 13 | ||||
-rw-r--r-- | src/emu/netlist/devices/nld_system.h | 40 | ||||
-rw-r--r-- | src/emu/netlist/nl_parser.c | 99 | ||||
-rw-r--r-- | src/emu/netlist/nl_parser.h | 2 | ||||
-rw-r--r-- | src/emu/netlist/nl_setup.c | 26 | ||||
-rw-r--r-- | src/emu/netlist/nl_setup.h | 25 | ||||
-rw-r--r-- | src/mame/audio/irem.c | 24 | ||||
-rw-r--r-- | src/mame/audio/nl_kidniki.c | 128 |
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() + |