1 // license:BSD-3-Clause
2 // copyright-holders:Ryan Holtz
3 
4 //
5 // Netlist for Star Cruiser
6 //
7 // Derived from the schematics in the Star Cruiser manual.
8 //
9 // Known problems/issues:
10 //
11 //    * Uses HLE noise due to abusing a 2N4124 in breakdown as a noise source.
12 //
13 
14 #include "netlist/devices/net_lib.h"
15 
16 //
17 // Main netlist
18 //
19 
20 NETLIST_START(starcrus)
21 
22 	SOLVER(Solver, 48000)
23 	ANALOG_INPUT(V12, 12)
24 	ANALOG_INPUT(V5, 5)
25 	ANALOG_INPUT(VM5, -5)
26 	ALIAS(VCC, V5)
27 
28 	TTL_INPUT(EXPLODE_1, 1) // active low
29 	TTL_INPUT(EXPLODE_2, 1) // active low
30 	TTL_INPUT(LAUNCH_1, 1)  // active low
31 	TTL_INPUT(LAUNCH_2, 1)  // active low
32 	TTL_INPUT(ENGINE_1, 1)  // active low
33 	TTL_INPUT(ENGINE_2, 1)  // active low
34 
35 	NET_C(GND, EXPLODE_1.GND, EXPLODE_2.GND, LAUNCH_1.GND, LAUNCH_2.GND, ENGINE_1.GND, ENGINE_2.GND)
36 	NET_C(V5, EXPLODE_1.VCC, EXPLODE_2.VCC, LAUNCH_1.VCC, LAUNCH_2.VCC, ENGINE_1.VCC, ENGINE_2.VCC)
37 
38 	RES(R22, 470)
39 	POT(R23, RES_K(2.5))
40 	RES(R24, RES_K(10))
41 	RES(R25, RES_K(15))
42 	RES(R26, RES_K(2.2))
43 	RES(R28, RES_K(100))
44 	RES(R29, RES_K(220))
45 	RES(R30, RES_K(220))
46 	RES(R31, RES_K(470))
47 	RES(R32, RES_K(100))
48 	RES(R33, RES_K(2.2))
49 	RES(R34, RES_K(2.2))
50 	RES(R35, RES_K(2.2))
51 	RES(R36, RES_K(2.2))
52 	RES(R37, 220)
53 	RES(R38, RES_K(10))
54 	RES(R39, RES_K(10))
55 	RES(R40, RES_K(56))
56 	RES(R41, RES_K(100))
57 	RES(R42, RES_K(1))
58 	RES(R43, RES_K(100))
59 	RES(R44, RES_K(2.2))
60 	RES(R45, RES_K(2.2))
61 	RES(R46, RES_K(10))
62 	RES(R47, RES_K(3))
63 	RES(R48, RES_K(10))
64 	RES(R49, 220)
65 	RES(R50, RES_K(150))
66 	RES(R51, RES_K(10))
67 	RES(R52, RES_K(10))
68 	RES(R53, RES_K(2.2))
69 	RES(R54, RES_K(10))
70 	RES(R55, 220)
71 	RES(R56, RES_K(2.2))
72 	RES(R57, RES_K(2.2))
73 	RES(R58, RES_K(2.2))
74 	RES(R59, RES_K(10))
75 	RES(R60, RES_K(3))
76 	RES(R61, RES_K(10))
77 	RES(R62, 220)
78 	RES(R63, RES_K(150))
79 	RES(R64, RES_K(10))
80 	RES(R65, RES_K(10))
81 	RES(R66, RES_K(2.2))
82 	RES(R67, RES_K(10))
83 	RES(R68, 220)
84 	RES(R69, RES_K(2.2))
85 	RES(R70, RES_K(47))
86 	RES(R71, RES_K(100))
87 	RES(R72, RES_K(6.8))
88 	RES(R73, RES_K(6.8))
89 	RES(R74, RES_K(3.3))
90 	POT(R75, RES_K(50))
91 	RES(R76, RES_K(22))
92 	RES(R77, 470)
93 
94 	CAP(C12, CAP_U(0.1))
95 	//CAP(C13, CAP_U(3.3))
96 	CAP(C14, CAP_U(0.1))
97 	CAP(C16, CAP_U(1.0))
98 	CAP(C17, CAP_U(0.47))
99 	CAP(C18, CAP_U(39))
100 	CAP(C19, CAP_U(4.7))
101 	CAP(C20, CAP_U(22))
102 	CAP(C21, CAP_U(0.15))
103 	CAP(C22, CAP_U(0.047))
104 	CAP(C23, CAP_U(1.0))
105 	CAP(C24, CAP_U(22))
106 	CAP(C25, CAP_U(0.15))
107 	CAP(C26, CAP_U(0.047))
108 	CAP(C27, CAP_U(1.0))
109 	CAP(C28, CAP_P(470))
110 	CAP(C29, CAP_U(4.7))
111 	CAP(C30, CAP_U(4.7))
112 	CAP(C31, CAP_U(4.7))
113 	CAP(C32, CAP_U(0.1))
114 
115 	QBJT_EB(Q6, "2N4124")
116 	//QBJT_EB(Q7, "2N4124")
117 	QBJT_EB(Q8, "2N4124")
118 	QBJT_EB(Q9, "2N4124")
119 	QBJT_EB(Q10, "2N4126")
120 	QBJT_EB(Q11, "2N4124")
121 	QBJT_EB(Q12, "2N4124")
122 	QBJT_EB(Q13, "2N4124")
123 	QBJT_EB(Q14, "2N4124")
124 	QBJT_EB(Q15, "2N4126")
125 	QBJT_EB(Q16, "2N4124")
126 	QBJT_EB(Q17, "2N4124")
127 	QBJT_EB(Q18, "2N4124")
128 	QBJT_EB(Q19, "2N4126")
129 	QBJT_EB(Q20, "2N4124")
130 	QBJT_EB(Q21, "2N4124")
131 
132 	UA741_DIP8(U1)
133 	UA741_DIP8(U2)
134 	UA741_DIP8(U5)
135 
136 	NE566_DIP(U3)
137 	NE566_DIP(U4)
138 
139 	DIODE(CR29, "1N4154")
140 	DIODE(CR30, "1N4154")
141 	DIODE(CR31, "1N4154")
142 	DIODE(CR32, "1N4154")
143 
144 	TTL_7408_DIP(H6)
145 	NET_C(H6.7, GND)
146 	NET_C(H6.14, V5)
147 	NET_C(ENGINE_1, H6.9)
148 	NET_C(ENGINE_2, H6.10)
149 	NET_C(EXPLODE_1, H6.4)
150 	NET_C(EXPLODE_2, H6.5)
151 	NET_C(LAUNCH_1, H6.1, H6.2)
152 	NET_C(LAUNCH_2, H6.12, H6.13)
153 
154 	TTL_7404_INVERT(F8)
155 	NET_C(F8.GND, GND)
156 	NET_C(F8.VCC, V5)
157 	NET_C(H6.6, F8.A)
158 
159 	// HLE Noise Gen
160 	CLOCK(NOISE_CLOCK, 10000)
161 	NET_C(NOISE_CLOCK.GND, GND)
162 	NET_C(NOISE_CLOCK.VCC, V5)
163 
164 	SYS_NOISE_MT_N(NOISE, 0.05)
165 	NET_C(NOISE.I, NOISE_CLOCK.Q)
166 	NET_C(NOISE.1, R24.2)
167 	NET_C(NOISE.2, Q6.B)
168 
169 	// Engine Sound
170 	NET_C(H6.8, R26.1)
171 	NET_C(R26.2, Q8.B)
172 	NET_C(Q8.E, GND)
173 	NET_C(Q8.C, R25.1, R70.1)
174 	NET_C(R25.2, C14.1)
175 	NET_C(C14.2, R23.2, C12.1)
176 	NET_C(R23.1, R22.1)
177 	NET_C(R22.2, V12)
178 	NET_C(R23.3, R24.1, Q6.C)
179 	//NET_C(R24.2, Q7.E, C13.1)
180 	//NET_C(C13.2, GND)
181 	//NET_C(Q7.B, Q7.C, Q6.B)
182 	NET_C(Q6.E, GND)
183 	NET_C(C12.2, U2.3, R28.1)
184 	NET_C(R28.2, GND)
185 	NET_C(U2.7, V5)
186 	NET_C(U2.4, VM5)
187 	NET_C(U2.2, R29.1)
188 	NET_C(R29.2, C16.1, R30.1)
189 	NET_C(C16.2, GND)
190 	NET_C(R30.2, U2.6, R31.1)
191 	NET_C(R31.2, C17.1, Q12.C, R32.1, U1.3)
192 	NET_C(C17.2, GND)
193 	NET_C(R32.2, GND)
194 	NET_C(U1.7, V5)
195 	NET_C(U1.4, VM5)
196 	NET_C(U1.2, R43.1, R42.1)
197 	NET_C(R43.2, U1.6, R71.1)
198 	NET_C(R42.2, C19.1)
199 	NET_C(C19.2, Q13.C)
200 	NET_C(Q13.E, GND)
201 	NET_C(Q13.B, R41.1, R40.1)
202 	NET_C(R41.2, GND)
203 	NET_C(R40.2, C18.1, R38.1, R37.1)
204 	NET_C(C18.2, GND)
205 	NET_C(R38.2, Q11.B)
206 	NET_C(Q11.E, GND)
207 	NET_C(Q12.E, GND)
208 	NET_C(Q11.C, R39.1, Q12.B)
209 	NET_C(R39.2, V5)
210 	NET_C(R37.2, Q10.C)
211 	NET_C(Q10.E, R35.1, V5)
212 	NET_C(R35.2, Q10.B, R36.1)
213 	NET_C(R36.2, Q9.C)
214 	NET_C(Q9.E, GND)
215 	NET_C(Q9.B, R34.1)
216 	NET_C(R34.2, R33.1, F8.Q)
217 	NET_C(R33.2, V5)
218 
219 	// Launch Sound 1
220 	NET_C(H6.3, R44.1)
221 	NET_C(R44.2, Q14.B)
222 	NET_C(Q14.E, GND)
223 	NET_C(Q14.C, R46.1)
224 	NET_C(R46.2, Q15.B)
225 	NET_C(R46.2, R45.1)
226 	NET_C(R45.2, R47.1)
227 	NET_C(R45.2, Q15.E)
228 	NET_C(R47.2, R48.1)
229 	NET_C(R48.2, GND)
230 	NET_C(R48.1, Q16.B)
231 	NET_C(Q15.C, CR29.A)
232 	NET_C(CR29.K, R49.1)
233 	NET_C(R49.2, Q16.C)
234 	NET_C(Q16.E, R50.1)
235 	NET_C(R50.2, GND)
236 	NET_C(Q15.E, R51.1)
237 	NET_C(Q15.E, V12)
238 	NET_C(Q15.E, U3.8)
239 	NET_C(R51.2, U3.6)
240 	NET_C(Q16.C, C20.1)
241 	NET_C(C20.2, GND)
242 	NET_C(C20.1, U3.5)
243 	NET_C(U3.1, GND)
244 	NET_C(U3.7, C21.1)
245 	NET_C(C21.2, GND)
246 	NET_C(U3.3, C22.1)
247 	NET_C(C22.2, R52.1)
248 	NET_C(R52.2, GND)
249 	NET_C(R52.1, CR30.A)
250 	NET_C(CR30.K, R53.1)
251 	NET_C(R53.2, Q17.C)
252 	NET_C(Q17.E, GND)
253 	NET_C(Q17.B, R56.1)
254 	NET_C(R56.2, R44.1)
255 	NET_C(Q17.C, R54.1)
256 	NET_C(R54.2, R55.1)
257 	NET_C(R55.2, GND)
258 	NET_C(R55.1, C23.1)
259 	NET_C(C23.2, GND)
260 	NET_C(C23.1, R72.1)
261 
262 	// Launch Sound 2
263 	NET_C(H6.11, R57.1)
264 	NET_C(R57.2, Q18.B)
265 	NET_C(Q18.E, GND)
266 	NET_C(Q18.C, R59.1)
267 	NET_C(R59.2, Q19.B)
268 	NET_C(R59.2, R58.1)
269 	NET_C(R58.2, R60.1)
270 	NET_C(R58.2, Q19.E)
271 	NET_C(R60.2, R61.1)
272 	NET_C(R61.2, GND)
273 	NET_C(R61.1, Q20.B)
274 	NET_C(Q19.C, CR31.A)
275 	NET_C(CR31.K, R62.1)
276 	NET_C(R62.2, Q20.C)
277 	NET_C(Q20.E, R63.1)
278 	NET_C(R63.2, GND)
279 	NET_C(Q19.E, R64.1)
280 	NET_C(Q19.E, V12)
281 	NET_C(Q19.E, U4.8)
282 	NET_C(R64.2, U4.6)
283 	NET_C(Q20.C, C24.1)
284 	NET_C(C24.2, GND)
285 	NET_C(C24.1, U4.5)
286 	NET_C(U4.1, GND)
287 	NET_C(U4.7, C25.1)
288 	NET_C(C25.2, GND)
289 	NET_C(U4.3, C26.1)
290 	NET_C(C26.2, R65.1)
291 	NET_C(R65.2, GND)
292 	NET_C(R65.1, CR32.A)
293 	NET_C(CR32.K, R66.1)
294 	NET_C(R66.2, Q21.C)
295 	NET_C(Q21.E, GND)
296 	NET_C(Q21.B, R69.1)
297 	NET_C(R69.2, R57.1)
298 	NET_C(Q21.C, R67.1)
299 	NET_C(R67.2, R68.1)
300 	NET_C(R68.2, GND)
301 	NET_C(R68.1, C27.1)
302 	NET_C(C27.2, GND)
303 	NET_C(C27.1, R73.1)
304 
305 	NET_C(R70.2, R71.2, R72.2, R73.2, R74.1, U5.2, C28.1)
306 
307 	NET_C(R74.2, R75.2, R75.3)
308 	NET_C(C28.2, R75.1, R77.1, U5.6)
309 	NET_C(C29.1, U5.7, V5)
310 	NET_C(C29.2, GND)
311 	NET_C(U5.3, C31.1, R76.1)
312 	NET_C(C31.2, GND)
313 	NET_C(R76.2, GND)
314 	NET_C(U5.4, C30.1, VM5)
315 	NET_C(C30.2, GND)
316 	NET_C(R77.2, C32.1)
317 	NET_C(C32.2, GND)
318 
319 	// Separate each input into the summing network
320 	OPTIMIZE_FRONTIER(R70.1, RES_M(1), 50)
321 	OPTIMIZE_FRONTIER(R71.1, RES_M(1), 50)
322 	OPTIMIZE_FRONTIER(R72.1, RES_M(1), 50)
323 	OPTIMIZE_FRONTIER(R73.1, RES_M(1), 50)
324 
325 NETLIST_END()
326