mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
zaccaria: Route speech and DAC through netlist filtering.
Also hook up all potentiometers so they can be adjusted from within the MAME UI.
This commit is contained in:
parent
d1602bd9f1
commit
808ec55f33
@ -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)")
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user