From c2a192ec92c8dc1c055e42a7075326332f2685fe Mon Sep 17 00:00:00 2001 From: couriersud Date: Wed, 22 Jul 2015 23:13:01 +0200 Subject: [PATCH] Consolidate the scattered model parsing code. Now models support recursive models,e.g. DIODE("1N914(IS=1e-15)"). Removed ".model" from model definitions. (nw) --- nl_examples/congo_bongo.c | 14 +- nl_examples/kidniki.c | 4 +- nl_examples/msx_mixer_stage.c | 2 +- src/emu/netlist/analog/nld_bjt.c | 16 +- src/emu/netlist/analog/nld_opamps.c | 4 +- src/emu/netlist/analog/nld_twoterm.c | 4 +- src/emu/netlist/devices/net_lib.c | 48 +++--- src/emu/netlist/devices/nld_system.c | 4 +- src/emu/netlist/devices/nld_truthtable.h | 2 +- src/emu/netlist/macro/nlm_opamp.c | 4 +- src/emu/netlist/nl_base.c | 55 ++----- src/emu/netlist/nl_base.h | 23 ++- src/emu/netlist/nl_parser.c | 2 +- src/emu/netlist/nl_setup.c | 190 ++++++++++++++--------- src/emu/netlist/nl_setup.h | 14 +- src/emu/netlist/plib/plists.h | 2 +- src/emu/netlist/plib/pstring.h | 3 + src/mame/audio/irem.c | 2 +- src/mame/audio/nl_kidniki.c | 2 +- 19 files changed, 219 insertions(+), 176 deletions(-) diff --git a/nl_examples/congo_bongo.c b/nl_examples/congo_bongo.c index bb7520b65db..25f8258f290 100644 --- a/nl_examples/congo_bongo.c +++ b/nl_examples/congo_bongo.c @@ -70,16 +70,18 @@ NETLIST_START(dummy) NET_C(RO.2, GND) // FIXME: Same as 1N4148 - NET_MODEL(".model 1S2075 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)") - NET_MODEL(".model 2SC1941 NPN(IS=46.416f BF=210 NF=1.0022 VAF=600 IKF=500m ISE=60f NE=1.5 BR=2.0122 NR=1.0022 VAR=10G IKR=10G ISC=300p NC=2 RB=13.22 IRB=10G RBM=13.22 RE=100m RC=790m CJE=26.52p VJE=900m MJE=518m TF=1.25n XTF=10 VTF=10 ITF=500m PTF=0 CJC=4.89p VJC=750m MJC=237m XCJC=500m TR=100n CJS=0 VJS=750m MJS=500m XTB=1.5 EG=1.11 XTI=3 KF=0 AF=1 FC=500m)") + NET_MODEL("1S2075 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)") + NET_MODEL("2SC1941 NPN(IS=46.416f BF=210 NF=1.0022 VAF=600 IKF=500m ISE=60f NE=1.5 BR=2.0122 NR=1.0022 VAR=10G IKR=10G ISC=300p NC=2 RB=13.22 IRB=10G RBM=13.22 RE=100m RC=790m CJE=26.52p VJE=900m MJE=518m TF=1.25n XTF=10 VTF=10 ITF=500m PTF=0 CJC=4.89p VJC=750m MJC=237m XCJC=500m TR=100n CJS=0 VJS=750m MJS=500m XTB=1.5 EG=1.11 XTI=3 KF=0 AF=1 FC=500m)") INCLUDE(CongoBongo_schematics) /* 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. */ - PARAM(XU16.B.MODEL, "MB3614_SLOW") - PARAM(XU17.C.MODEL, "MB3614_SLOW") + PARAM(XU16.B.MODEL, "MB3614(UGF=11k)") + PARAM(XU17.C.MODEL, "MB3614(UGF=11k)") + //PARAM(XU16.B.MODEL, "MB3614_SLOW") + //PARAM(XU17.C.MODEL, "MB3614_SLOW") OPTIMIZE_FRONTIER(C51.1, RES_K(20), 50) OPTIMIZE_FRONTIER(R77.2, RES_K(20), 50) @@ -390,8 +392,8 @@ NETLIST_START(opamp_mod) NET_C(RP1.1, G1.OP) NET_C(CP1.1, RP1.1) - DIODE(DP,".model tt D(IS=1e-15 N=1)") - DIODE(DN,".model tt D(IS=1e-15 N=1)") + DIODE(DP,"D(IS=1e-15 N=1)") + DIODE(DN,"D(IS=1e-15 N=1)") #if 1 NET_C(DP.K, fUH.Q) NET_C(fUL.Q, DN.A) diff --git a/nl_examples/kidniki.c b/nl_examples/kidniki.c index dfe1b057e5e..9e2b0052dae 100644 --- a/nl_examples/kidniki.c +++ b/nl_examples/kidniki.c @@ -20,8 +20,8 @@ NETLIST_START(dummy) PARAM(Solver.LTE, 1e-1) #endif //FIXME proper models! - NET_MODEL(".model 2SC945 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 1S1588 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("2SC945 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("1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)") //NET_C(R44.1, XU1.7) diff --git a/nl_examples/msx_mixer_stage.c b/nl_examples/msx_mixer_stage.c index 779280fcbc9..ddc1cd70cfd 100644 --- a/nl_examples/msx_mixer_stage.c +++ b/nl_examples/msx_mixer_stage.c @@ -24,7 +24,7 @@ NETLIST_START(msx) ANALOG_INPUT(SOUND, 5) ANALOG_INPUT(SND, 5) - NET_MODEL(".model ss9014 NPN(is=2.87599e-14 bf=377.5 vaf=123 ikf=1.1841 ise=4.7863e-15 ne=1.5 br=4.79 var=11.29 ikr=0.275423 isc=1.44544e-14 nc=1.5 rb=200 irb=1e-5 rbm=10 re=0.56 rc=5 cje=1.7205e-11 vje=0.6905907 mje=0.3193434 tf=5.89463e-10 cjc=6.2956p vjc=0.4164212 mjc=0.2559546 xcjc=0.451391 xtb=1.8881 eg=1.2415 xti=3 fc=0.5 Vceo=45 Icrating=0.1 mfg=Fairchild)") + NET_MODEL("ss9014 NPN(is=2.87599e-14 bf=377.5 vaf=123 ikf=1.1841 ise=4.7863e-15 ne=1.5 br=4.79 var=11.29 ikr=0.275423 isc=1.44544e-14 nc=1.5 rb=200 irb=1e-5 rbm=10 re=0.56 rc=5 cje=1.7205e-11 vje=0.6905907 mje=0.3193434 tf=5.89463e-10 cjc=6.2956p vjc=0.4164212 mjc=0.2559546 xcjc=0.451391 xtb=1.8881 eg=1.2415 xti=3 fc=0.5 Vceo=45 Icrating=0.1 mfg=Fairchild)") RES(R24, RES_K(51)) RES(R23, RES_K(5)) diff --git a/src/emu/netlist/analog/nld_bjt.c b/src/emu/netlist/analog/nld_bjt.c index 14b832ba9b9..57c2d89c870 100644 --- a/src/emu/netlist/analog/nld_bjt.c +++ b/src/emu/netlist/analog/nld_bjt.c @@ -118,9 +118,9 @@ NETLIB_UPDATE(QBJT_switch) NETLIB_UPDATE_PARAM(QBJT_switch) { - nl_double IS = m_model.model_value("IS", 1e-15); - nl_double BF = m_model.model_value("BF", 100); - nl_double NF = m_model.model_value("NF", 1); + nl_double IS = m_model.model_value("IS"); + nl_double BF = m_model.model_value("BF"); + nl_double NF = m_model.model_value("NF"); //nl_double VJE = m_model.dValue("VJE", 0.75); set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP); @@ -230,11 +230,11 @@ NETLIB_UPDATE_TERMINALS(QBJT_EB) NETLIB_UPDATE_PARAM(QBJT_EB) { - nl_double IS = m_model.model_value("IS", 1e-15); - nl_double BF = m_model.model_value("BF", 100); - nl_double NF = m_model.model_value("NF", 1); - nl_double BR = m_model.model_value("BR", 1); - nl_double NR = m_model.model_value("NR", 1); + nl_double IS = m_model.model_value("IS"); + nl_double BF = m_model.model_value("BF"); + nl_double NF = m_model.model_value("NF"); + nl_double BR = m_model.model_value("BR"); + nl_double NR = m_model.model_value("NR"); //nl_double VJE = m_model.dValue("VJE", 0.75); set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP); diff --git a/src/emu/netlist/analog/nld_opamps.c b/src/emu/netlist/analog/nld_opamps.c index 084e1970987..e54883151db 100644 --- a/src/emu/netlist/analog/nld_opamps.c +++ b/src/emu/netlist/analog/nld_opamps.c @@ -121,8 +121,8 @@ NETLIB_RESET(OPAMP) m_EBUF.m_G.setTo(1.0); m_G1.m_RI.setTo(m_model.model_value("RI")); m_EBUF.m_RO.setTo(m_model.model_value("RO")); - m_DP.m_model.setTo(".model tt D(IS=1e-15 N=1)"); - m_DN.m_model.setTo(".model tt D(IS=1e-15 N=1)"); + m_DP.m_model.setTo("D(IS=1e-15 N=1)"); + m_DN.m_model.setTo("D(IS=1e-15 N=1)"); double CP = m_model.model_value("DAB") / m_model.model_value("SLEW"); double RP = 0.5 / 3.1459 / CP / m_model.model_value("FPF"); diff --git a/src/emu/netlist/analog/nld_twoterm.c b/src/emu/netlist/analog/nld_twoterm.c index be0925fc826..88f1cfaf257 100644 --- a/src/emu/netlist/analog/nld_twoterm.c +++ b/src/emu/netlist/analog/nld_twoterm.c @@ -273,8 +273,8 @@ NETLIB_START(D) NETLIB_UPDATE_PARAM(D) { - nl_double Is = m_model.model_value("Is", 1e-15); - nl_double n = m_model.model_value("N", 1); + nl_double Is = m_model.model_value("IS"); + nl_double n = m_model.model_value("N"); m_D.set_param(Is, n, netlist().gmin()); } diff --git a/src/emu/netlist/devices/net_lib.c b/src/emu/netlist/devices/net_lib.c index 3d88895e279..89829620448 100644 --- a/src/emu/netlist/devices/net_lib.c +++ b/src/emu/netlist/devices/net_lib.c @@ -13,37 +13,45 @@ #include "../nl_factory.h" 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("D _(IS=1e-15 N=1)") + + NET_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("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("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("1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)") + NET_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("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("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("LedWhite D(Is=0.27n Rs=5.65 N=6.79 Cjo=42p Iave=30m Vpk=5 type=LED)") NETLIST_END() NETLIST_START(bjt_models) - 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("NPN _(IS=1e-15 BF=100 NF=1 BR=1 NR=1)") + NET_MODEL("PNP _(IS=1e-15 BF=100 NF=1 BR=1 NR=1)") - 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)") + NET_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("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("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("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("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)") // 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("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("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)") + NET_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("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("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 CD4XXX FAMILY(TYPE=CD4XXX)") + NET_MODEL("FAMILY _(TYPE=CUSTOM IVL=0.8 IVH=2.0 OVL=0.1 OVH=4.0 ORL=1.0 ORH=130.0)") + NET_MODEL("OPAMP _()") + + NET_MODEL("74XXOC FAMILY(IVL=0.8 IVH=2.0 OVL=0.1 OVH=4.95 ORL=10.0 ORH=1.0e8)") + NET_MODEL("CD4XXX FAMILY(TYPE=CD4XXX)") NETLIST_END() diff --git a/src/emu/netlist/devices/nld_system.c b/src/emu/netlist/devices/nld_system.c index c4ecbaba454..a0c21ee6a2a 100644 --- a/src/emu/netlist/devices/nld_system.c +++ b/src/emu/netlist/devices/nld_system.c @@ -134,8 +134,8 @@ NETLIB_UPDATE(extclock) NETLIB_START(logic_input) { /* make sure we get the family first */ - register_param("FAMILY", m_FAMILY, ".model FAMILY(TYPE=TTL)"); - set_logic_family(logic_family_desc_t::from_model(m_FAMILY.Value())); + register_param("FAMILY", m_FAMILY, "FAMILY(TYPE=TTL)"); + set_logic_family(netlist().setup().family_from_model(m_FAMILY.Value())); register_output("Q", m_Q); register_param("IN", m_IN, 0); diff --git a/src/emu/netlist/devices/nld_truthtable.h b/src/emu/netlist/devices/nld_truthtable.h index aff146cfb91..fdf2aa58fe2 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(setup.get_model_str(_x)); + ttd->m_family = setup.family_from_model(_x); #define TRUTHTABLE_END() \ setup.factory().register_device(ttd); \ diff --git a/src/emu/netlist/macro/nlm_opamp.c b/src/emu/netlist/macro/nlm_opamp.c index 143f4d8cfec..62e2312a3a8 100644 --- a/src/emu/netlist/macro/nlm_opamp.c +++ b/src/emu/netlist/macro/nlm_opamp.c @@ -39,8 +39,8 @@ NETLIST_END() NETLIST_START(OPAMP_lib) LOCAL_LIB_ENTRY(opamp_layout_4_4_11) - NET_MODEL(".model MB3614 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=500k SLEW=0.6M RI=1000k RO=50 DAB=0.002)") - NET_MODEL(".model MB3614_SLOW OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=11k SLEW=0.6M RI=1000k RO=50 DAB=0.002)") + NET_MODEL("MB3614 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=500k SLEW=0.6M RI=1000k RO=50 DAB=0.002)") + NET_MODEL("MB3614_SLOW OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=11k SLEW=0.6M RI=1000k RO=50 DAB=0.002)") LOCAL_LIB_ENTRY(MB3614_DIP) diff --git a/src/emu/netlist/nl_base.c b/src/emu/netlist/nl_base.c index c63ddc61a00..129bdd2db44 100644 --- a/src/emu/netlist/nl_base.c +++ b/src/emu/netlist/nl_base.c @@ -87,36 +87,6 @@ public: logic_family_desc_t *netlist_family_TTL = palloc(logic_family_ttl_t); logic_family_desc_t *netlist_family_CD4XXX = palloc(logic_family_cd4xxx_t); -class logic_family_std_proxy_t : public logic_family_desc_t -{ -public: - logic_family_std_proxy_t() { } - virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(logic_output_t *proxied) const - { - return palloc(devices::nld_d_to_a_proxy(proxied)); - } -}; - -logic_family_desc_t *logic_family_desc_t::from_model(const pstring &model) -{ - if (setup_t::model_value_str(model, "TYPE", "") == "TTL") - return netlist_family_TTL; - if (setup_t::model_value_str(model, "TYPE", "") == "CD4XXX") - return netlist_family_CD4XXX; - - logic_family_std_proxy_t *ret = palloc(logic_family_std_proxy_t); - - ret->m_low_thresh_V = setup_t::model_value(model, "IVL", 0.8); - ret->m_high_thresh_V = setup_t::model_value(model, "IVH", 2.0); - ret->m_low_V = setup_t::model_value(model, "OVL", 0.1); - ret->m_high_V = setup_t::model_value(model, "OVH", 4.0); - ret->m_R_low = setup_t::model_value(model, "ORL", 1.0); - ret->m_R_high = setup_t::model_value(model, "ORH", 130.0); - - return ret; -} - - // ---------------------------------------------------------------------------------------- // netlist_queue_t // ---------------------------------------------------------------------------------------- @@ -1065,27 +1035,26 @@ ATTR_COLD param_t::param_t(const param_type_t atype) { } -ATTR_COLD const pstring param_model_t::model_type() const +ATTR_COLD const pstring param_model_t::model_type() { - pstring tmp = this->Value(); - // .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) - int p = tmp.find("("); - int p1 = p; - while (--p >= 0 && tmp[p] != ' ') - ; - - return tmp.substr(p+1, p1-p-1).ucase(); + if (m_map.size() == 0) + netlist().setup().model_parse(this->Value(), m_map); + return m_map["COREMODEL"]; } -ATTR_COLD const pstring param_model_t::model_value_str(const pstring &entity, const pstring defval) const +ATTR_COLD const pstring param_model_t::model_value_str(const pstring &entity) { - return setup_t::model_value_str(this->Value(), entity, defval); + if (m_map.size() == 0) + netlist().setup().model_parse(this->Value(), m_map); + return netlist().setup().model_value_str(m_map, entity); } -ATTR_COLD nl_double param_model_t::model_value(const pstring &entity, const nl_double defval) const +ATTR_COLD nl_double param_model_t::model_value(const pstring &entity) { - return setup_t::model_value(this->Value(), entity, defval); + if (m_map.size() == 0) + netlist().setup().model_parse(this->Value(), m_map); + return netlist().setup().model_value(m_map, entity); } } // namespace diff --git a/src/emu/netlist/nl_base.h b/src/emu/netlist/nl_base.h index bd8ef6b48be..d1329a5e5d6 100644 --- a/src/emu/netlist/nl_base.h +++ b/src/emu/netlist/nl_base.h @@ -305,6 +305,12 @@ namespace netlist class core_device_t; class param_model_t; + // ----------------------------------------------------------------------------- + // model_map_t + // ----------------------------------------------------------------------------- + + typedef phashmap_t model_map_t; + // ----------------------------------------------------------------------------- // netlist_output_family_t // ----------------------------------------------------------------------------- @@ -324,8 +330,6 @@ namespace netlist nl_double m_R_high; bool m_is_static; - - static logic_family_desc_t *from_model(const pstring &model); }; class logic_family_t @@ -946,6 +950,7 @@ namespace netlist param_t::save_register(); } + virtual void changed() { } C m_param; private: }; @@ -968,9 +973,16 @@ namespace netlist ATTR_COLD param_model_t() : param_template_t() { } /* these should be cached! */ - ATTR_COLD nl_double model_value(const pstring &entity, const nl_double defval = 0.0) const; - ATTR_COLD const pstring model_value_str(const pstring &entity, const pstring defval = "") const; - ATTR_COLD const pstring model_type() const; + ATTR_COLD nl_double model_value(const pstring &entity); + ATTR_COLD const pstring model_value_str(const pstring &entity); + ATTR_COLD const pstring model_type(); + protected: + void changed() + { + m_map.clear(); + } + private: + model_map_t m_map; }; // ----------------------------------------------------------------------------- @@ -1284,6 +1296,7 @@ namespace netlist if (m_param != param) { m_param = param; + changed(); device().update_param(); } } diff --git a/src/emu/netlist/nl_parser.c b/src/emu/netlist/nl_parser.c index 06ff0c8e932..dbdabbff725 100644 --- a/src/emu/netlist/nl_parser.c +++ b/src/emu/netlist/nl_parser.c @@ -196,7 +196,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(m_setup.get_model_str(get_string())); + ttd->m_family = m_setup.family_from_model(get_string()); require_token(m_tok_param_right); } else diff --git a/src/emu/netlist/nl_setup.c b/src/emu/netlist/nl_setup.c index f8f9cf6943f..1628c9236e3 100644 --- a/src/emu/netlist/nl_setup.c +++ b/src/emu/netlist/nl_setup.c @@ -137,9 +137,15 @@ device_t *setup_t::register_dev(const pstring &classname, const pstring &name) } } -void setup_t::register_model(const pstring &model) +void setup_t::register_model(const pstring &model_in) { - m_models.add(model); + int pos = model_in.find(' '); + if (pos < 0) + netlist().error("Unable to parse model: %s", model_in.cstr()); + pstring model = model_in.left(pos).trim().ucase(); + pstring def = model_in.substr(pos + 1).trim(); + if (!m_models.add(model, def)) + netlist().error("Model already exists: %s", model_in.cstr()); } void setup_t::register_alias_nofqn(const pstring &alias, const pstring &out) @@ -194,25 +200,6 @@ 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) { @@ -276,7 +263,8 @@ void setup_t::register_object(device_t &dev, const pstring &name, object_t &obj) } break; case param_t::MODEL: - dynamic_cast(param).initial(get_model_str(val)); + //dynamic_cast(param).initial(val); + dynamic_cast(param).initial(val); break; default: netlist().error("Parameter is not supported %s : %s\n", name.cstr(), val.cstr()); @@ -763,13 +751,9 @@ void setup_t::resolve_inputs() core_terminal_t *t2 = find_terminal(t2s); if (connect(*t1, *t2)) - { m_links.remove_at(li); - } else - { li++; - } } tries--; } @@ -893,66 +877,130 @@ void setup_t::print_stats() const } // ---------------------------------------------------------------------------------------- -// Static +// Model / family // ---------------------------------------------------------------------------------------- -const pstring setup_t::model_value_str(const pstring &model_str, const pstring &entity, const pstring defval) +class logic_family_std_proxy_t : public logic_family_desc_t { - pstring tmp = model_str; - // .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) - int p = tmp.ucase().find(entity.ucase() + "="); - if (p>=0) +public: + logic_family_std_proxy_t() { } + virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(logic_output_t *proxied) const { - int pblank = tmp.find(" ", p); - if (pblank < 0) pblank = tmp.len() + 1; - tmp = tmp.substr(p, pblank - p); - if (tmp.right(1) == ")") - tmp = tmp.left(tmp.len()-1); - int pequal = tmp.find("=", 0); - if (pequal < 0) - fatalerror_e("parameter %s misformat in model %s temp %s\n", entity.cstr(), model_str.cstr(), tmp.cstr()); - tmp = tmp.substr(pequal+1); - return tmp; + return palloc(devices::nld_d_to_a_proxy(proxied)); } +}; + +logic_family_desc_t *setup_t::family_from_model(const pstring &model) +{ + model_map_t map; + model_parse(model, map); + + if (setup_t::model_value_str(map, "TYPE") == "TTL") + return netlist_family_TTL; + if (setup_t::model_value_str(map, "TYPE") == "CD4XXX") + return netlist_family_CD4XXX; + + logic_family_std_proxy_t *ret = palloc(logic_family_std_proxy_t); + + ret->m_low_thresh_V = setup_t::model_value(map, "IVL"); + ret->m_high_thresh_V = setup_t::model_value(map, "IVH"); + ret->m_low_V = setup_t::model_value(map, "OVL"); + ret->m_high_V = setup_t::model_value(map, "OVH"); + ret->m_R_low = setup_t::model_value(map, "ORL"); + ret->m_R_high = setup_t::model_value(map, "ORH"); + + return ret; +} + +static pstring model_string(model_map_t &map) +{ + pstring ret = map["COREMODEL"] + "("; + for (unsigned i=0; i= 0) break; + + key = model.ucase(); + if (!m_models.contains(key)) + netlist().error("Model %s not found\n", model.cstr()); + model = m_models[key]; + } + pstring xmodel = model.left(pos); + + if (xmodel.equals("_")) + map["COREMODEL"] = key; else { - //netlist().log("Entity %s not found in model %s\n", entity.cstr(), tmp.cstr()); - //printf("Entity %s not found in model %s\n", entity.cstr(), tmp.cstr()); - return defval; + if (m_models.contains(xmodel)) + model_parse(xmodel, map); + else + netlist().error("Model doesn't exist %s\n", xmodel.cstr()); + } + + pstring remainder=model.substr(pos+1).trim(); + if (!remainder.endsWith(")")) + netlist().error("Model error %s\n", model.cstr()); + remainder = remainder.left(remainder.len() - 1); + pstring_list_t pairs(remainder," ", true); + for (unsigned i=0; i '9') - fatalerror_e("Unknown number factor <%c> in: %s", numfac, entity.cstr()); - } - if (factor != NL_FCONST(1.0)) - tmp = tmp.left(tmp.len() - 1); - return tmp.as_double() * factor; - } - else - { - //netlist().log("Entity %s not found in model %s\n", entity.cstr(), tmp.cstr()); - return defval; + case 'M': factor = 1e6; break; + case 'k': factor = 1e3; break; + case 'm': factor = 1e-3; break; + case 'u': factor = 1e-6; break; + case 'n': factor = 1e-9; break; + case 'p': factor = 1e-12; break; + case 'f': factor = 1e-15; break; + case 'a': factor = 1e-18; break; + default: + if (numfac < '0' || numfac > '9') + fatalerror_e("Unknown number factor <%c> in: %s", numfac, entity.cstr()); } + if (factor != NL_FCONST(1.0)) + tmp = tmp.left(tmp.len() - 1); + return tmp.as_double() * factor; } // ---------------------------------------------------------------------------------------- diff --git a/src/emu/netlist/nl_setup.h b/src/emu/netlist/nl_setup.h index 0bcf9c541ae..a38aa7229ef 100644 --- a/src/emu/netlist/nl_setup.h +++ b/src/emu/netlist/nl_setup.h @@ -143,7 +143,7 @@ namespace netlist void register_lib_entry(const pstring &name); - void register_model(const pstring &model); + void register_model(const pstring &model_in); void register_alias(const pstring &alias, const pstring &out); void register_dippins_arr(const pstring &terms); @@ -159,8 +159,6 @@ 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); @@ -192,11 +190,13 @@ namespace netlist void print_stats() const; - /* static support functions */ + /* model / family related */ - static const pstring model_value_str(const pstring &model_str, const pstring &entity, const pstring defval); - static nl_double model_value(const pstring &model_str, const pstring &entity, const nl_double defval); + logic_family_desc_t *family_from_model(const pstring &model); + const pstring model_value_str(model_map_t &map, const pstring &entity); + nl_double model_value(model_map_t &map, const pstring &entity); + void model_parse(const pstring &model, model_map_t &map); protected: private: @@ -224,7 +224,7 @@ namespace netlist factory_list_t *m_factory; - plist_t m_models; + phashmap_t m_models; int m_proxy_cnt; diff --git a/src/emu/netlist/plib/plists.h b/src/emu/netlist/plib/plists.h index 669c3f34ad9..8f4914145b5 100644 --- a/src/emu/netlist/plib/plists.h +++ b/src/emu/netlist/plib/plists.h @@ -799,7 +799,7 @@ public: V& value_at(const unsigned pos) { return m_values[pos].m_value; } const V& value_at(const unsigned pos) const { return m_values[pos].m_value; } - V& key_at(const unsigned pos) const { return m_values[pos].m_key; } + V& key_at(const unsigned pos) { return m_values[pos].m_key; } private: int get_idx(const K &key) const diff --git a/src/emu/netlist/plib/pstring.h b/src/emu/netlist/plib/pstring.h index 88a8922e98b..7a7b536e98a 100644 --- a/src/emu/netlist/plib/pstring.h +++ b/src/emu/netlist/plib/pstring.h @@ -81,6 +81,9 @@ public: bool startsWith(const pstring &arg) const { return (pcmp(cstr(), arg.cstr(), arg.len()) == 0); } bool startsWith(const char *arg) const; + bool endsWith(const pstring &arg) const { return (this->right(arg.len()) == arg); } + bool endsWith(const char *arg) const { return endsWith(pstring(arg)); } + pstring replace(const pstring &search, const pstring &replace) const; // these return nstring ... diff --git a/src/mame/audio/irem.c b/src/mame/audio/irem.c index 06de09520d7..67fe2b27de3 100644 --- a/src/mame/audio/irem.c +++ b/src/mame/audio/irem.c @@ -452,7 +452,7 @@ NETLIST_START(kidniki_interface) ALIAS(I_SINH0, SINH_DUMMY.2) #endif - NET_MODEL(".model AY8910PORT FAMILY(OVL=0.05 OVH=4.95 ORL=100.0 ORH=0.5k)") + NET_MODEL("AY8910PORT FAMILY(OVL=0.05 OVH=4.95 ORL=100.0 ORH=0.5k)") LOGIC_INPUT(I_SD0, 1, "AY8910PORT") //CLOCK(I_SD0, 5) diff --git a/src/mame/audio/nl_kidniki.c b/src/mame/audio/nl_kidniki.c index 71f6ea1a14a..b7b46a1cd10 100644 --- a/src/mame/audio/nl_kidniki.c +++ b/src/mame/audio/nl_kidniki.c @@ -473,7 +473,7 @@ NETLIST_START(kidniki_lib) 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)") + TT_FAMILY("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)