From b41f17c83e16213c1574ffd6694c0606816b4388 Mon Sep 17 00:00:00 2001 From: Couriersud Date: Sun, 2 Mar 2014 17:38:15 +0000 Subject: [PATCH] Popeye now has netlist filtering and amplification. [Couriersud] --- src/emu/netlist/nl_setup.c | 3 + src/mame/drivers/popeye.c | 122 +++++++++++++++++++++++++++++++++---- 2 files changed, 112 insertions(+), 13 deletions(-) diff --git a/src/emu/netlist/nl_setup.c b/src/emu/netlist/nl_setup.c index 02bb36bc4ca..2c54a1a34ae 100644 --- a/src/emu/netlist/nl_setup.c +++ b/src/emu/netlist/nl_setup.c @@ -22,6 +22,9 @@ static NETLIST_START(base) 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 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)") + NETLIST_END() diff --git a/src/mame/drivers/popeye.c b/src/mame/drivers/popeye.c index 31f23ed60df..1b72d9c92b0 100644 --- a/src/mame/drivers/popeye.c +++ b/src/mame/drivers/popeye.c @@ -21,6 +21,92 @@ Notes: #include "sound/ay8910.h" #include "sound/flt_rc.h" #include "includes/popeye.h" +#include "machine/netlist.h" +#include "netlist/devices/net_lib.h" + +/* This is the output stage of the audio circuit. + * It is solely an impedance changer and could be left away + */ + +static NETLIST_START(nl_popeye_imp_changer) + RES(R62, 510000) + RES(R63, 100) + RES(R64, 510000) + RES(R65, 2100) + RES(R66, 330) + RES(R67, 51) + + QBJT_EB(Q8, "2SC1815") + QBJT_EB(Q9, "2SA1015") + + NET_C(V5, R62.1, Q8.C, R66.1) + NET_C(R62.2, R64.1, R63.1, C7.2) + NET_C(R63.2, Q8.B) + NET_C(Q8.E, R65.1, Q9.B) + NET_C(R66.2, Q9.E, R67.1) + + NET_C(GND, Q9.C, R65.2, R64.2) +NETLIST_END() + +static NETLIST_START(nl_popeye) + + /* Standard stuff */ + + SOLVER(Solver, 48000) + PARAM(Solver.ACCURACY, 1e-5) + ANALOG_INPUT(V5, 5) + + /* AY 8910 internal resistors */ + + RES(R_AY1_1, 1000); + RES(R_AY1_2, 1000); + RES(R_AY1_3, 1000); + + RES(R52, 2000) + RES(R55, 2000) + RES(R58, 2000) + RES(R53, 2000) + RES(R56, 2000) + RES(R59, 2000) + RES(R51, 20000) + RES(R57, 30000) + RES(R60, 30000) + + RES(R61, 120000) + + RES(ROUT, 5000) + + CAP(C4, 0.047e-6) + CAP(C5, 330e-12) + CAP(C6, 330e-12) + CAP(C7, 3.3e-6) + CAP(C40, 680e-12) + + NET_C(V5, R_AY1_1.1, R_AY1_2.1, R_AY1_3.1) + + NET_C(R_AY1_1.2, R52.1, R53.1) + NET_C(R_AY1_2.2, R55.1, R56.1) + NET_C(R_AY1_3.2, R58.1, R59.1) + + NET_C(R53.2, R51.1, C4.1) + NET_C(R56.2, R57.1, C5.1) + NET_C(R59.2, R60.1, C6.1) + + NET_C(R51.2, R57.2, R60.2, R61.1, C40.1, C7.1) + + NET_C(GND, R52.2, R55.2, R58.2, C4.2, C5.2, C6.2, R61.2, C40.2) + + INCLUDE(nl_popeye_imp_changer) + + /* output resistor (actually located in TV */ + + NET_C(R67.2, ROUT.1) + + NET_C(GND, ROUT.2) + +NETLIST_END() + + INTERRUPT_GEN_MEMBER(popeye_state::popeye_interrupt) { @@ -371,16 +457,16 @@ static const ay8910_interface ay8910_config = }; /* Does Sky Skipper have the same filtering? */ -static const flt_rc_config filter_config = +static const ay8910_interface ay8910_nl_config = { - FLT_RC_LOWPASS, - 2000, - 20000, - 0, - CAP_N(47) + AY8910_RESISTOR_OUTPUT, + AY8910_DEFAULT_LOADS, + DEVCB_INPUT_PORT("DSW0"), + DEVCB_NULL, + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(popeye_state,popeye_portB_w) }; - static MACHINE_CONFIG_START( skyskipr, popeye_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, XTAL_8MHz/2) /* 4 MHz */ @@ -415,13 +501,23 @@ static MACHINE_CONFIG_DERIVED( popeye, skyskipr ) MCFG_SOUND_MODIFY("aysnd") MCFG_SOUND_ROUTES_RESET() - MCFG_SOUND_ROUTE(0, "filter", 1.0) - MCFG_SOUND_ROUTE(1, "mono", 0.40) - MCFG_SOUND_ROUTE(2, "mono", 0.40) + MCFG_SOUND_CONFIG(ay8910_nl_config) + MCFG_SOUND_ROUTE_EX(0, "snd_nl", 1.0, 0) + MCFG_SOUND_ROUTE_EX(1, "snd_nl", 1.0, 1) + MCFG_SOUND_ROUTE_EX(2, "snd_nl", 1.0, 2) - MCFG_FILTER_RC_ADD("filter", 0) - MCFG_SOUND_CONFIG(filter_config) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) + /* NETLIST configuration using internal AY8910 resistor values */ + + MCFG_SOUND_ADD("snd_nl", NETLIST_SOUND, 48000) + MCFG_NETLIST_SETUP(nl_popeye) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_NETLIST_STREAM_INPUT("snd_nl", 0, "R_AY1_1.R") + MCFG_NETLIST_STREAM_INPUT("snd_nl", 1, "R_AY1_2.R") + MCFG_NETLIST_STREAM_INPUT("snd_nl", 2, "R_AY1_3.R") + + MCFG_NETLIST_STREAM_OUTPUT("snd_nl", 0, "ROUT.1") + MCFG_NETLIST_ANALOG_MULT_OFFSET(30000.0, -65000.0) MCFG_VIDEO_START_OVERRIDE(popeye_state,popeye) MACHINE_CONFIG_END