From 808ec55f338ee8ddac08df45938e6f6bcd368d57 Mon Sep 17 00:00:00 2001 From: couriersud Date: Sat, 13 Apr 2019 18:30:18 +0200 Subject: zaccaria: Route speech and DAC through netlist filtering. Also hook up all potentiometers so they can be adjusted from within the MAME UI. --- src/lib/netlist/macro/nlm_base.cpp | 2 + src/mame/audio/nl_zac1b11142.cpp | 86 ++++++++++++++++++++++++++++++++++---- src/mame/audio/zaccaria.cpp | 30 ++++++++++++- 3 files changed, 109 insertions(+), 9 deletions(-) diff --git a/src/lib/netlist/macro/nlm_base.cpp b/src/lib/netlist/macro/nlm_base.cpp index b876cd51c94..3a8e2b5eb0d 100644 --- a/src/lib/netlist/macro/nlm_base.cpp +++ b/src/lib/netlist/macro/nlm_base.cpp @@ -58,6 +58,8 @@ static NETLIST_START(bjt_models) 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("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("2N4401 NPN(IS=26.03f XTI=3 EG=1.11 VAF=90.7 BF=4.292K NE=1.244 ISE=26.03f IKF=0.2061 XTB=1.5 BR=1.01 NC=2 ISC=0 IKR=0 RC=0.5 CJC=11.01p MJC=0.3763 VJC=0.75 FC=0.5 CJE=24.07p MJE=0.3641 VJE=0.75 TR=233.7n TF=466.5p ITF=0 VTF=0 XTF=0 RB=10 VCEO=40)") 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("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=45 ICRATING=100M MFG=ZETEX)") diff --git a/src/mame/audio/nl_zac1b11142.cpp b/src/mame/audio/nl_zac1b11142.cpp index 41af8233c1d..85f26984de4 100644 --- a/src/mame/audio/nl_zac1b11142.cpp +++ b/src/mame/audio/nl_zac1b11142.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Vas Crabb +// copyright-holders:Vas Crabb, Couriersud #include "audio/nl_zac1b11142.h" #include "netlist/devices/net_lib.h" @@ -277,19 +277,88 @@ NETLIST_START(zac1b11142_schematics) NETLIST_END() +NETLIST_START(zac1b11142_schematics_speech) + + CS(I_SP, 0) // Fed through stream ... + + LM3900(U5D4) + CAP(C31, CAP_U(0.22)) + CAP(C33, CAP_P(470)) + CAP(C30, CAP_P(47)) + CAP(C8, CAP_U(0.1)) + RES(R63, RES_K(2.2)) + RES(R62, RES_K(220)) + RES(R61, RES_K(860)) + RES(R50, RES_K(820)) + RES(R49, RES_K(820)) + RES(R11, RES_K(2.2)) + RES(R4, RES_K(10)) + POT(P2, RES_K(10)) + + NET_C(GND, C31.2, R63.2, R50.2, P2.3, U5D4.GND) + NET_C(VCC, U5D4.VCC, I_SP.1) + + NET_C(C31.1, I_SP.2, R63.1, R62.1) + NET_C(R62.2, C33.1) + NET_C(C33.2, R61.1) + NET_C(R61.2, R49.1, C30.1, U5D4.MINUS) + NET_C(R50.1, U5D4.PLUS) + NET_C(R49.2, C30.2, R11.1, U5D4.OUT) + NET_C(R11.2, P2.1) + NET_C(P2.2, R4.1) + NET_C(R4.2, C8.1) + + NET_C(C8.2, R1.1) + +NETLIST_END() + +NETLIST_START(zac1b11142_schematics_dac) + + CS(I_DAC, 0) // Fed through stream ... + + QBJT_EB(T4, "2N4401") + + CAP(C20, CAP_U(0.01)) + CAP(C21, CAP_U(0.1)) + RES(R13, RES_M(3.3)) + RES(R15, RES_K(3.3)) + RES(R16, RES_K(2.2)) + RES(R17, RES_K(3.3)) + RES(R18, RES_K(10)) + POT(P3, RES_K(10)) + + NET_C(GND, T4.B, R17.2, C20.2, P3.3) + NET_C(VCC, R15.1) + NET_C(I_M5, R13.1, I_DAC.2) + NET_C(I_DAC.1, T4.E, R13.2) + NET_C(T4.C, R15.2, R17.1, C20.1, R16.2) + NET_C(R16.1, P3.1) + NET_C(P3.2, R18.1) + NET_C(R18.2, C21.1) + NET_C(C21.2, C8.2) +NETLIST_END() NETLIST_START(zac1b11142) SOLVER(Solver, 48000) + #if (USE_FRONTIERS) PARAM(Solver.ACCURACY, 1e-7) PARAM(Solver.NR_LOOPS, 300) PARAM(Solver.METHOD, "MAT_CR") PARAM(Solver.PARALLEL, 4) PARAM(Solver.DYNAMIC_TS, 0) - PARAM(Solver.DYNAMIC_LTE, 5e-2) - PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 1e-7) - + #else + PARAM(Solver.ACCURACY, 1e-6) + PARAM(Solver.NR_LOOPS, 300) + PARAM(Solver.METHOD, "MAT_CR") + PARAM(Solver.PARALLEL, 0) + PARAM(Solver.DYNAMIC_TS, 0) + PARAM(Solver.DYNAMIC_LTE, 5e-1) + PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 1e-6) + #endif LOCAL_SOURCE(zac1b11142_schematics) + LOCAL_SOURCE(zac1b11142_schematics_speech) + LOCAL_SOURCE(zac1b11142_schematics_dac) ANALOG_INPUT(I_P12, 11.3) // +12V dropped with a 1N4004 ANALOG_INPUT(I_P5, 5) @@ -333,6 +402,8 @@ NETLIST_START(zac1b11142) ALIAS(ANAL6, R_AY4H_C.2) INCLUDE(zac1b11142_schematics) + INCLUDE(zac1b11142_schematics_speech) + INCLUDE(zac1b11142_schematics_dac) RES(R1, RES_K(100)) RES(R3, RES_K(10)) @@ -343,9 +414,6 @@ NETLIST_START(zac1b11142) NET_C(C7.2, R1.1) // Connect to Pin 2 - also other sounds are mixed in here <- sound out NET_C(R1.2, GND) // Actually connected to ~6V from pin 3 of TDA1510 - // FIXME: connect other sounds to netlist as well for proper mixing - // FIXME: make P1 controllable by mame ui (see pong for an example) - #if (USE_FRONTIERS) OPTIMIZE_FRONTIER(R124.1, RES_K(39), 50) OPTIMIZE_FRONTIER(R105.1, RES_K(56), 50) @@ -357,4 +425,8 @@ NETLIST_START(zac1b11142) OPTIMIZE_FRONTIER(R96.1, RES_K(4.7), 50) #endif + // Reverse so that volume raises with raising percentage in ui + PARAM(P1.REVERSE, 1) + PARAM(P2.REVERSE, 1) + PARAM(P3.REVERSE, 1) NETLIST_END() diff --git a/src/mame/audio/zaccaria.cpp b/src/mame/audio/zaccaria.cpp index 666fc5351eb..2c671c070d4 100644 --- a/src/mame/audio/zaccaria.cpp +++ b/src/mame/audio/zaccaria.cpp @@ -159,6 +159,14 @@ INPUT_PORTS_START(zac1b11142_ioports) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("P1") PORT_CHANGED_MEMBER(DEVICE_SELF, zac1b11142_audio_device, p1_changed, 0) // test button? generates NMI on master CPU + + PORT_START("VP1") + PORT_ADJUSTER( 50, "VP1 - Music volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "pot1") + PORT_START("VP2") + PORT_ADJUSTER( 50, "VP2 - Speech volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "pot2") + PORT_START("VP3") + PORT_ADJUSTER( 50, "VP3 - DAC volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "pot3") + INPUT_PORTS_END @@ -430,7 +438,8 @@ void zac1b11142_audio_device::device_add_mconfig(machine_config &config) m_pia_1i->writepa_handler().set(m_speech, FUNC(tms5220_device::data_w)); m_pia_1i->writepb_handler().set(FUNC(zac1b11142_audio_device::pia_1i_portb_w)); - MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, *this, 0.30, AUTO_ALLOC_INPUT, 0); // mc1408.1f + //MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, *this, 0.30, AUTO_ALLOC_INPUT, 0); // mc1408.1f + MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, "sound_nl", 1.0, 7); // mc1408.1f voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); @@ -440,7 +449,8 @@ void zac1b11142_audio_device::device_add_mconfig(machine_config &config) TMS5200(config, m_speech, 649200); // ROMCLK pin measured at 162.3Khz, OSC is exactly *4 of that) m_speech->irq_cb().set(m_pia_1i, FUNC(pia6821_device::cb1_w)); m_speech->ready_cb().set(m_pia_1i, FUNC(pia6821_device::ca2_w)); - m_speech->add_route(ALL_OUTPUTS, *this, 0.60, AUTO_ALLOC_INPUT, 0); + m_speech->add_route(0, "sound_nl", 1.0, 6); + //m_speech->add_route(ALL_OUTPUTS, *this, 0.60, AUTO_ALLOC_INPUT, 0); netlist_mame_sound_device &sound_nl(NETLIST_SOUND(config, "sound_nl", 48000)); sound_nl.set_constructor(netlist_zac1b11142); @@ -461,8 +471,24 @@ void zac1b11142_audio_device::device_add_mconfig(machine_config &config) NETLIST_STREAM_INPUT(config, "sound_nl:cin3", 3, "R_AY4H_A.R"); NETLIST_STREAM_INPUT(config, "sound_nl:cin4", 4, "R_AY4H_B.R"); NETLIST_STREAM_INPUT(config, "sound_nl:cin5", 5, "R_AY4H_C.R"); + /* Speech + * The 5200 output is a current source providing between 0 and 1.5mA. + * This is explained in detail in the datasheet. + */ + NETLIST_STREAM_INPUT(config, "sound_nl:cin6", 6, "I_SP.I").set_mult_offset(750e-6 / 16384.0, 750e-6); + /* DAC + * The 1408 output is a current sink providing between 0 and 2.0mA. + * This is explained in detail in the datasheet. + */ + NETLIST_STREAM_INPUT(config, "sound_nl:cin7", 7, "I_DAC.I").set_mult_offset(1e-3 / 32768.0, 1e-3); NETLIST_STREAM_OUTPUT(config, "sound_nl:cout0", 0, "C7.2").set_mult_offset(3000.0 * 10.0, 0.0); // FIXME: no clue what numbers to use here + + // Potentiometers + NETLIST_ANALOG_INPUT(config, "sound_nl:pot1", "P1.DIAL"); + NETLIST_ANALOG_INPUT(config, "sound_nl:pot2", "P2.DIAL"); + NETLIST_ANALOG_INPUT(config, "sound_nl:pot3", "P3.DIAL"); + } ioport_constructor zac1b11142_audio_device::device_input_ports() const -- cgit v1.2.3