1 // license:BSD-3-Clause
2 // copyright-holders:Ryan Holtz
3 //
4 // Netlist for Car Polo audio
5 //
6 // Derived from the schematics in the Car Polo manual.
7 //
8 // Known problems/issues:
9 //
10 //    * Uses HLE noise due to abusing a 2N3904 in breakdown as a noise source.
11 //    * Very slow
12 //
13 
14 #include "netlist/devices/net_lib.h"
15 
16 #define HLE_NOISE (1)
17 
18 //
19 // Player Crash netlist
20 //
21 
22 static NETLIST_START(PLAYER_CRASH)
23 	ALIAS(V15, R200.1)
24 	ALIAS(VCC, 4C.VCC)
25 	ALIAS(GND, R210.2)
26 	ALIAS(CRASH_IN, 4C.A)
27 	ALIAS(AUDIO_OUT, R217.1)
28 	ALIAS(NOISE_IN, CR10.K)
29 
30 	TTL_7407_GATE(4C)
31 	NET_C(4C.GND, GND)
32 
33 	RES(R200, RES_K(1.2))
34 	RES(R202, RES_K(150))
35 	RES(R203, RES_K(550))
36 	RES(R204, RES_K(100))
37 	RES(R205, RES_K(270))
38 	RES(R210, RES_K(33))
39 	RES(R212, RES_K(1))
40 	RES(R213, RES_K(10))
41 	RES(R216, RES_K(47))
42 	RES(R217, RES_K(5))
43 
44 	CAP(C89, CAP_U(0.1))
45 	CAP(C90, CAP_U(0.01))
46 	CAP(C91, CAP_U(0.01))
47 	CAP(C92, CAP_U(6.8))
48 	CAP(C93, CAP_U(2.2))
49 
50 	DIODE(CR10, "1N4454")
51 	DIODE(CR11, "1N4454")
52 	DIODE(CR14, "1N4454")
53 
54 	QBJT_EB(Q6, "2N3904")
55 
56 	NET_C(R200.1, R212.1, R216.1)
57 	NET_C(R200.2, 4C.Y, CR11.A)
58 	NET_C(CR11.K, C93.1, R204.1, R205.1)
59 	NET_C(C93.2, R205.2, Q6.E, R217.1, R210.2, C92.2)
60 	NET_C(R204.2, R203.1, R202.1, CR10.A)
61 	NET_C(R202.2, C89.1)
62 	NET_C(C89.2, C90.1, R203.2, Q6.B)
63 	NET_C(C90.2, R210.1, C91.1)
64 	NET_C(C91.2, Q6.C, CR14.K, R213.1)
65 	NET_C(R213.2, R212.2, C92.1)
66 	NET_C(R217.2, CR14.A, R216.2)
67 NETLIST_END()
68 
69 //
70 // Main netlist
71 //
72 
73 NETLIST_START(carpolo)
74 
75 	SOLVER(Solver, 48000)
76 	ANALOG_INPUT(V15, 15)
77 	ANALOG_INPUT(V7_5, 7.5)
78 	ANALOG_INPUT(V5, 5)
79 	ALIAS(VCC, V5)
80 
81 	TTL_INPUT(PL1_CRASH, 1) // active high
82 	TTL_INPUT(PL2_CRASH, 0) // active high
83 	TTL_INPUT(PL3_CRASH, 0) // active high
84 	TTL_INPUT(PL4_CRASH, 0) // active high
85 
86 	LOCAL_SOURCE(PLAYER_CRASH)
87 
88 	NET_C(GND, PL1_CRASH.GND, PL2_CRASH.GND, PL3_CRASH.GND, PL4_CRASH.GND)
89 	NET_C(VCC, PL1_CRASH.VCC, PL2_CRASH.VCC, PL3_CRASH.VCC, PL4_CRASH.VCC)
90 
91 	// HLE Noise Gen
92 	CLOCK(NOISE_CLOCK, 10000)
93 	NET_C(NOISE_CLOCK.GND, GND)
94 	NET_C(NOISE_CLOCK.VCC, VCC)
95 
96 	SYS_NOISE_MT_N(NOISE, 0.1)
97 	NET_C(NOISE.I, NOISE_CLOCK.Q)
98 
99 	// White Noise
100 #if HLE_NOISE
101 	NET_C(NOISE.1, V7_5)
102 	ALIAS(WHITE_NOISE, NOISE.2)
103 #else
104 	RES(R240, RES_K(1.2))
105 	RES(R241, RES_M(1))
106 	RES(R242, 100)
107 	RES(R243, RES_M(1))
108 	RES(R244, RES_K(47))
109 	RES(R245, RES_K(10))
110 	RES(R246, RES_K(1))
111 	RES(R247, RES_K(10))
112 	RES(R248, RES_M(1))
113 
114 	CAP(C99,  CAP_U(2.2))
115 	//CAP(C100, CAP_P(100))
116 	CAP(C101, CAP_U(6.8))
117 	CAP(C102, CAP_U(2.2))
118 	CAP(C103, CAP_U(6.8))
119 
120 	//QBJT_EB(Q8, "2N3904") // Used as a reverse-biased noise source.
121 	QBJT_EB(Q9, "2N3904")
122 
123 	OPAMP(1A, "LM748")
124 	NET_C(1A.GND, GND)
125 	NET_C(1A.VCC, C101.1, R241.1, R240.1)
126 
127 	DIODE(CR22, "1N4454")
128 
129 	NET_C(NOISE.1, R241.2, 1A.PLUS)
130 	NET_C(NOISE.2, C99.1, GND)
131 
132 	// White Noise
133 	NET_C(V15, R240.2, R246.1)
134 	NET_C(C99.2, R242.1)
135 	NET_C(R242.2, R243.1, CR22.K, 1A.MINUS)
136 	NET_C(CR22.A, R244.1)
137 	NET_C(R243.2, R244.2, 1A.OUT, R245.1)
138 	NET_C(C101.2, GND)
139 	NET_C(R245.2, C102.1)
140 	NET_C(C102.2, R248.1, Q9.B)
141 	NET_C(Q9.E, GND)
142 	NET_C(Q9.C, R248.2, R247.1)
143 	NET_C(R247.2, R246.2, C103.1)
144 	NET_C(C103.2, GND)
145 	ALIAS(WHITE_NOISE, Q9.C)
146 #endif
147 
148 	SUBMODEL(PLAYER_CRASH, PLAYER_1_CRASH)
149 	NET_C(PLAYER_1_CRASH.NOISE_IN, WHITE_NOISE)
150 	NET_C(PLAYER_1_CRASH.CRASH_IN, PL1_CRASH.Q)
151 	NET_C(PLAYER_1_CRASH.V15, V15)
152 	NET_C(PLAYER_1_CRASH.VCC, VCC)
153 	NET_C(PLAYER_1_CRASH.GND, GND)
154 NETLIST_END()
155