summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2020-08-17 14:12:33 -0700
committer Aaron Giles <aaron@aarongiles.com>2020-10-05 19:21:14 -0700
commit53035dbbf2c68ec926a70ad83fb66775ed8ec96e (patch)
treeb634989947b8e3b33ff2729b3d2c2d03d782e5bc
parenta538585b9892e41a879f1f324c157df75736d162 (diff)
Preliminary Dribbling netlist
-rw-r--r--src/mame/audio/nl_dribling.cpp408
1 files changed, 408 insertions, 0 deletions
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()