From 03fc8e3cde8d90d90ba950bceb2946fc41c1c521 Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Mon, 17 Aug 2020 14:12:33 -0700 Subject: Preliminary Dribbling netlist --- src/mame/audio/nl_dribling.cpp | 408 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 408 insertions(+) create mode 100644 src/mame/audio/nl_dribling.cpp diff --git a/src/mame/audio/nl_dribling.cpp b/src/mame/audio/nl_dribling.cpp new file mode 100644 index 00000000000..d0ca101124f --- /dev/null +++ b/src/mame/audio/nl_dribling.cpp @@ -0,0 +1,408 @@ +// license:BSD-3-Clause +// copyright-holders:Aaron Giles + +// +// Netlist for Dribbling +// +// Derived from the schematics in the Dribbling manual. +// A lot of guesses involved! +// +// Known problems/issues: +// +// * WIP. +// + +#include "netlist/devices/net_lib.h" + + +// +// Optimizations +// + + + +// +// Main netlist +// + +#define Q_BC239(name) QBJT_EB(name, "NPN(IS=1.5813e-15 BF=113.32 NF=1.0653 VAF=12.331 IKF=1.4907 ISE=4.637e-14 NE=1.4254 BR=86.718 NR=1.8047 VAR=31.901 IKR=0.033605 ISC=8.0864e-18 NC=1.8821 RB=1.0078 IRB=0.00083992 RBM=0 RE=0.22081 RC=0.01636 CJE=3.3904e-14 VJE=0.71518 MJE=0.36824 TF=2.0691e-11 XTF=0.31338 VTF=0.10174 ITF=0.0045579 PTF=0 CJC=2.9774e-12 VJC=1.1381 MJC=0.31461 XCJC=0.02899 TR=1.0033e-09 CJS= 0 VJS=0.75 MJS=0 XTB=0 EG=1.11 XTI=3 FC=0.99886)") + +#define Q_BC309(name) QBJT_EB(name, "PNP(IS=1.0366e-15 BF=80 NF=1.0313 VAF=8.4866 IKF=0.47497 ISE=1.6295e-14 NE=1.3702 BR=16.116 NR=1.2907 VAR=9.5149 IKR=0.012081 ISC=9.4971e-17 NC=1.038 RB=3.2133 IRB=0.00046855 RBM=2.0822 RE=1.9597 RC=1.1393 CJE=2.0636e-14 VJE=0.84456 MJE=0.68352 TF=5.4303e-11 XTF=0.27447 VTF=0.19311 ITF=0.0030573 PTF=0 CJC=2.6904e-12 VJC=1.0282 MJC=0.5401 XCJC=0.075977 TR=3.4233e-10 CJS= 0 VJS=0.75 MJS=0 XTB=0 EG=1.11 XTI=3 FC=0.54298)") + + +NETLIST_START(dribling) + + SOLVER(Solver, 1000) + PARAM(Solver.DYNAMIC_TS, 1) + PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 2e-5) + + TTL_INPUT(I_FOLLA_B, 0) + TTL_INPUT(I_FOLLA_M, 0) + TTL_INPUT(I_FOLLA_A, 0) + TTL_INPUT(I_CALCIO_B, 0) + TTL_INPUT(I_FISCHIO, 0) + TTL_INPUT(I_CALCIO_A, 0) + TTL_INPUT(I_CONTRASTO, 0) + TTL_INPUT(I_STOP_PALLA, 0) + TTL_INPUT(I_PB, 0) // 8 bits + + NET_C(GND, I_FOLLA_B.GND, I_FOLLA_M.GND, I_FOLLA_A.GND, I_CALCIO_B.GND, I_FISCHIO.GND, I_CALCIO_A.GND, I_CONTRASTO.GND, I_STOP_PALLA.GND, I_PB.GND) + NET_C(I_V5, I_FOLLA_B.VCC, I_FOLLA_M.VCC, I_FOLLA_A.VCC, I_CALCIO_B.VCC, I_FISCHIO.VCC, I_CALCIO_A.VCC, I_CONTRASTO.VCC, I_STOP_PALLA.VCC, I_PB.VCC) + + ANALOG_INPUT(I_V5, 5) + ANALOG_INPUT(I_V15, 15) + ANALOG_INPUT(I_VM15, -15) + + RES(R1, RES_K(68)) + RES(R2, RES_K(39)) + RES(R3, RES_K(100)) + RES(R4, RES_K(12)) + RES(R5, RES_K(1)) + RES(R6, RES_K(160)) + RES(R7, RES_K(150)) + RES(R8, RES_K(10)) + RES(R9, RES_K(2.2)) + RES(R10, 420) + RES(R11, RES_K(8.2)) + RES(R12, RES_K(56)) + RES(R13, RES_K(56)) + RES(R14, RES_M(1)) + RES(R15, RES_K(68)) + RES(R16, RES_K(82)) + RES(R17, RES_K(220)) + RES(R18, RES_K(10)) + RES(R19, RES_K(100)) + RES(R20, RES_K(10)) + RES(R21, RES_K(3.9)) + POT(R22, RES_K(2.2)) + RES(R23, RES_K(220)) + RES(R24, RES_K(100)) + RES(R25, RES_K(100)) + RES(R26, RES_K(100)) + RES(R27, RES_K(47)) + RES(R28, RES_K(10)) + RES(R29, RES_K(10)) + RES(R31, RES_K(2.2)) + RES(R32, RES_K(1)) + RES(R33, RES_K(220)) + RES(R34, RES_K(100)) + RES(R35, RES_K(56)) + RES(R36, RES_K(1)) + RES(R37, RES_K(10)) + RES(R38, RES_M(1)) + RES(R39, RES_K(100)) + RES(R40, RES_K(1)) + RES(R41, RES_K(220)) + RES(R42, RES_K(150)) + RES(R43, RES_K(2.2)) + RES(R44, RES_K(1)) + RES(R45, 420) + RES(R46, RES_K(8.2)) + RES(R47, RES_K(390)) + RES(R48, RES_K(220)) + RES(R49, RES_K(56)) + RES(R50, RES_K(56)) + RES(R51, RES_M(1)) + RES(R52, RES_K(68)) + RES(R53, RES_K(82)) + POT(R54, RES_K(2.2)) + RES(R55, RES_K(10)) + RES(R56, RES_K(100)) + RES(R57, RES_K(10)) + RES(R58, RES_K(3.9)) + + CAP(C1, CAP_P(330)) + CAP(C2, CAP_P(330)) + CAP(C3, CAP_U(1.2)) + CAP(C4, CAP_U(2.2)) // 2k2? + CAP(C5, CAP_U(1)) + CAP(C6, CAP_U(1)) + CAP(C7, CAP_U(22)) // 22K? + CAP(C8, CAP_U(22)) // 22K? + CAP(C9, CAP_U(4.7)) + CAP(C10, CAP_U(150)) // 150K? + CAP(C11, CAP_U(4.2)) + CAP(C12, CAP_U(0.1)) + CAP(C13, CAP_U(10)) // 10K? + CAP(C14, CAP_U(1)) + CAP(C15, CAP_U(1)) + CAP(C16, CAP_U(1)) + CAP(C17, CAP_U(1)) + CAP(C18, CAP_U(1)) + CAP(C19, CAP_U(10)) + CAP(C20, CAP_U(0.1)) + CAP(C21, CAP_U(10)) // 10K? + CAP(C22, CAP_U(22)) // 22K? + CAP(C23, CAP_U(0.1)) + CAP(C24, CAP_U(10)) + CAP(C25, CAP_U(0.1)) + CAP(C26, CAP_U(0.47)) + CAP(C27, CAP_U(2.2)) + CAP(C28, CAP_U(1)) + CAP(C29, CAP_U(4.2)) + CAP(C30, CAP_U(68)) // 68K? + CAP(C31, CAP_U(150)) // 150K? + CAP(C32, CAP_U(4.7)) + CAP(C33, CAP_U(42)) // 42K? + + Q_BC309(Q1) + Q_BC239(Q2) + Q_BC239(Q3) + Q_BC239(Q4) + Q_BC309(Q5) + Q_2N3812(Q6) + Q_2N3812(Q7) + Q_BC239(Q9) + + TTL_74LS164_DIP(IC_7A) + + TTL_7404_DIP(IC_B7) // inverter, unspecified + + TTL_74LS107_DIP(IC_C7) + + TTL_74LS161_DIP(IC_D7) + + TTL_74LS161_DIP(IC_E7) + + TTL_74LS164_DIP(IC_8A) + + TTL_74LS86_DIP(IC_8B) + + LM324_DIP(IC_C8) + + TTL_7408_DIP(IC_E8) // AND gate, unspecified + + LM339_DIP(IC_B9) + + TTL_7404_DIP(IC_L9) // inverter, unspecified + + TTL_74393_DIP(IC_M9) + + NE556_DIP(IC_N9) // VCO + + NE556_DIP(IC_Q9) // VCO + + // + // Top-left (USCITA_TOS) + // + + NET_C(C1.1, GND) + NET_C(C1.2, IC_B7.10, IC_E7.9, IC_D7.9) + NET_C(IC_B7.11, IC_E7.15, UC_C7.8, IC_C7.11) + NET_C(I_PB.7, IC_E7.6) + NET_C(I_PB.6, IC_E7.5) + NET_C(I_PB.5, IC_E7.4) + NET_C(I_PB.4, IC_E7.3) + NET_C(IC_E7.7, IC_E7.10, IC_D7.15) + NET_C(I_PB.3, IC_D7.6) + NET_C(I_PB.2, IC_D7.5) + NET_C(I_PB.1, IC_D7.4) + NET_C(I_PB.0, IC_D7.3) + NET_C(IC_E7.2, IC_D7.2, IC_B7.12) + NET_C(IC_B7.1, C2.2, IC_B7.8, IC_C7.5) + NET_C(C2.1, GND) + NET_C(IC_B7.9, I_32H) + NET_C(IC_E7.15, IC_B7.11, IC_C7.8, IC_C7.11) + NET_C(IC_C7.10, I_V5) + ALIAS(IC_C7.5, USCITA_TOS) + + // + // Top-left (FISCHIO) + // + + NET_C(I_FISCHIO, IC_M9.2, IC_M9.12) + NET_C(IC_M9.4, IC_N9.?) + NET_C(IC_M9.6, ICM9.13, IC_L9.8) + NET_C(IC_L9.9, IC_N9.4, IC_N9.10) + NET_C(R1.2, I_V5) + NET_C(R1.1, R3.1, IC_N9.1, IC_N9.2, _C_N9.6, C3.2) + NET_C(C3.1, GND) + NET_C(R3.2, R4.2, IC_N9.12, IC_N9.8, C4.2) + NET_C(C4.1, GND) + NET_C(IC_N9.13, R4.1, R2.1) + NET_C(R2.2, I_V5) + ALIAS(FISCHIO, IC_N9.9) + + // + // Middle-left (STOP_PALLA) + // + + NET_C(I_STOP_PALLA, R5.1) + NET_C(R2.2, Q1.B) + NET_C(Q1.E, I_V5) + NET_C(Q1.C, C5.2, R7.2, R6.1) + NET_C(C5.1, GND) + NET_C(R7.1, GND) + NET_C(R6.2, IC_B9.5, D1.A) + NET_C(D1.K, R9.1, B9.2, R8.2) + ALIAS_(IC_B9.2, STOP_PALLA) + NET_C(IC_B9.4, C6.2, R8.1) + NET_C(C6.1, GND) + NET_C(R9.2, I_V5) + + // + // Middle-left (CALCIO_A) + // + + NET_C(I_CALCIO_A, R11.1, R10.2) + NET_C(R10.1, GND) + NET_C(R11.2, C7.2, C8.1) + NET_C(C7.1, R12.1, C9.1) + NET_C(C82.2, R13.2, R14.1, Q2.B) + NET_C(R12.2, R13.1, C33.2) + NET_C(C33.1, GND) + NET_C(C9.2, R15.1, R14.2, R16.1, Q2.C) + NET_C(Q2.E, R22.2) + NET_C(R15.2, I_V12) + NET_C(R16.2, C10.1) + NET_C(C10.2, R17.1, R19.2, Q3.B) + NET_C(R17.2, I_V12) + NET_C(R19.1, GND) + NET_C(Q3.C, R18.1) + ALIAS(CALCIO_A, Q3.C) + NET_C(R18.2, I_V12) + NET_C(Q3.E, R20.2, C11.2) + NET_C(R20.1, GND) + NET_C(C11.1, R21.2) + NET_C(R21.1, GND) + + // + // Bottom-left (mix) + // + + NET_C(TOS, C12.1) + NET_C(C12.2, R23.1) + NET_C(FOLLA, C13.1) + NET_C(C13.2, R24.1) + NET_C(FISCHIO, C14.1) + NET_C(C14.2, R25.1) + NET_C(STOP_PALLA, C15.1) + NET_C(C15.2, R26.1) + NET_C(PARATA, C16.1) + NET_C(C16.2, R27.1) + NET_C(CALCIO_A, C17.1) + NET_C(C17.2, R28.1) + NET_C(CALCIO_B, C18.1) + NET_C(C18.2, R29.1) + NET_C(R23.2, R24.2, R25.2, R26.2, R27.2, R28.2, R29.2) + ALIAS(OUTPUT, R26.2) + + // + // Top-right (FOLLA)) + // + + NET_C(IC_8B.1, IC_7B.4) + NET_C(IC_8B.2, IC_8A.3) + NET_C(IC_8B.3, IC_8A.1, IC_8A.2) + NET_C(IC_8B.9, IC_7A.9, I_V5) + NET_C(IC_8A.8, IC_7A.8, R32.1, IC_B7.6) + NET_C(IC_8A.13, IC_7A.1, IC_7A.2) + NET_C(IC_7A.12, IC_7B.3) + NET_C(R32.2, IC_B7.5, C20.2) + NET_C(C20.1, GND) + ALIAS(NOISE, IC_7A.13) + + NET_C(I_FOLLA_B, IC_E8.10) + NET_C(I_FOLLA_M, IC_E8.12) + NET_C(I_FOLLA_A, IC_E8.1) + NET_C(IC_E8.9, IC_E8.13, E8.2, NOISE) + NET_C(IC_E8.8, R33.1) + NET_C(IC_E8.11, R35.1) + NET_C(IC_E8.3, R36.1) + NET_C(R33.2, R34.2, R35.2, R36.2, C23.2, C22.1, C21.1) + NET_C(C21.2, R47.2, IC_C8.14) + ALIAS(IC_C8.14, FOLLA) + NET_C(R37.2, I_V5) + NET_C(C22.2, R47.1, IC_C8.13) + NET_C(R37.1, C24.2, IC_C8.12) + NET_C(C24.1, GND) + + // + // Middle-right (CONTRASTO) + // + + NET_C(I_CONTRASTO, IC_Q9.6) + NET_C(IC_Q9.1, IC_Q9.2, R38.1, C25.2) + NET_C(R38.2, I_V5) + NET_C(C25.1, GND) + NET_C(IC_Q9.5, IC_Q9.10) + NET_C(IC_Q9.8, C26.2, IC_Q9.12, IC_Q9.13, R39.1) + NET_C(C26.1, GND) + NET_C(R39.2, I_V5) + NET_C(IC_Q9.9, C23.1) + + // + // Middle-right (PARATA) + // + + NET_C(I_PARATA, R40.1) + NET_C(R40.2, Q5.B) + NET_C(Q5.E, I_V5) + NET_C(Q5.C, C27.2, R41.2, R42.1) + NET_C(C27.1, GND) + NET_C(R41.1, GND) + NET_C(R42.2, D2.1, IC_B9.11) + NET_C(IC_B9.10, C28.2, Q6.S, Q7.G) // unsure of S/D + NET_C(C28.1, GND) + NET_C(D2.K, R43.1, Q6.D, IC_B9.13, Q6.G) + NET_C(R43.2, I_V5) + NET_C(Q7.D, I_V5) // unsure of S/D + NET_C(Q7.S, R44.2) + ALIAS(PARATA, Q7.S) + NET_C(R44.1, GND) + + // + // Bottom-right (CALCIO B) + // + + NET_C(I_CALCIO_B, R45.2, R46.1) + NET_C(R45.1, GND) + NET_C(R46.2, C33.2, C34.1) + NET_C(C33.1, R49.1, C29.1) + NET_C(C34.2, R50.2, R51.1, Q8.B) + NET_C(R49.2, C30.2, R50.1) + NET_C(C30.1, GND) + NET_C(C29.2, R52.1, R51.2, R53.1, Q8.C) + NET_C(R52.2, I_V5) + NET_C(Q8.E, R54.2) + NET_C(R54.1, GND) + NET_C(R53.2, C31.1) + NET_C(C31.2, R48.1, R56.2, Q9.B) + NET_C(R48.2, I_V5) + NET_C(R56.1, GND) + NET_C(Q9.C, R55.1) + ALIAS(Q9.C, CALCIO_B) + NET_C(R5.2, I_V5) + NET_C(Q9.E, R57.2, C32.2) + NET_C(R57.1, GND) + NET_C(C32.1, R58.2) + NET_C_R58.1, GND) + + // + // Unconnected inputs + // + + NET_C(GND, U2.3, U2.5, U2.11) + + // + // Frontier optimizations + // + +#if (ENABLE_FRONTIERS) + // Separate each input into the summing network + OPTIMIZE_FRONTIER(R13.1, RES_M(1), 50) + OPTIMIZE_FRONTIER(R15.1, RES_M(1), 50) + OPTIMIZE_FRONTIER(R41.1, RES_M(1), 50) + OPTIMIZE_FRONTIER(R37.1, RES_M(1), 50) + + // Decouple the Darlington BJTs from the sounds they enable + OPTIMIZE_FRONTIER(R27.1, RES_M(1), 50) + OPTIMIZE_FRONTIER(R11.2, RES_M(1), 50) + + // Decouple the noise source from the downstream filters + OPTIMIZE_FRONTIER(C3.1, RES_M(1), 50) + OPTIMIZE_FRONTIER(R24.1, RES_M(1), 50) + OPTIMIZE_FRONTIER(R38.2, RES_M(1), 50) +#endif + +NETLIST_END() -- cgit v1.2.3