1 // license:CC0
2 // copyright-holders:Aaron Giles
3 
4 //NL_CONTAINS starcas wotw
5 
6 //
7 // Netlist for Star Castle/War of the Worlds
8 //
9 // Derived from the schematics and parts list in the Star Castle
10 // manual.
11 //
12 // War of the Worlds uses effectively the same sound board, but
13 // with a swizzled set of inputs.
14 //
15 // Special thanks to:
16 //    * Frank Palazzolo for creating a schematic of the War of the
17 //       Worlds signal mapping
18 //
19 // Known problems/issues:
20 //
21 //    * The VCOs require high solver frequencies (100x+) to reach the
22 //       correct pitches. For this reason, HLE'ed versions are
23 //       provided that work correctly even at 48kHz.
24 //
25 
26 #include "netlist/devices/net_lib.h"
27 #include "nl_cinemat_common.h"
28 
29 
30 //
31 // Optimizations
32 //
33 
34 #define HLE_BACKGROUND_VCO (1)
35 #define HLE_LASER_VCO (1)
36 #define ENABLE_FRONTIERS (1)
37 
38 
39 //
40 // Initial compilation includes this section.
41 //
42 
43 #ifndef SOUND_VARIANT
44 
45 
46 //
47 // Now include ourselves twice, once for Star Castle and
48 // once for War of the Worlds
49 //
50 
51 #define VARIANT_STARCASTLE  0
52 #define VARIANT_WOTW        1
53 
54 #define SOUND_VARIANT       (VARIANT_STARCASTLE)
55 #include "nl_starcas.cpp"
56 
57 #undef SOUND_VARIANT
58 #define SOUND_VARIANT       (VARIANT_WOTW)
59 #include "nl_starcas.cpp"
60 
61 
62 #else
63 
64 
65 //
66 // Main netlist
67 //
68 
69 #if (SOUND_VARIANT == VARIANT_STARCASTLE)
70 NETLIST_START(starcas)
71 #else // (SOUND_VARIANT == VARIANT_WOTW)
72 NETLIST_START(wotw)
73 #endif
74 
75 	// 192k is not high enough to make the laser and background pitches high enough
76 #if (HLE_BACKGROUND_VCO && HLE_LASER_VCO)
77 	SOLVER(Solver, 1000)
78 #else
79 	SOLVER(Solver, 4800000)
80 #endif
81 	PARAM(Solver.DYNAMIC_TS, 1)
82 	PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 2e-5)
83 
84 	TTL_INPUT(I_OUT_0, 0)       // active low
85 	TTL_INPUT(I_OUT_1, 1)       // active low
86 	TTL_INPUT(I_OUT_2, 1)       // active low
87 	TTL_INPUT(I_OUT_3, 1)       // active low
88 	TTL_INPUT(I_OUT_4, 0)       // active low
89 	TTL_INPUT(I_OUT_7, 0)       // active low
90 
91 	NET_C(GND, I_OUT_0.GND, I_OUT_1.GND, I_OUT_2.GND, I_OUT_3.GND, I_OUT_4.GND, I_OUT_7.GND)
92 	NET_C(I_V5, I_OUT_0.VCC, I_OUT_1.VCC, I_OUT_2.VCC, I_OUT_3.VCC, I_OUT_4.VCC, I_OUT_7.VCC)
93 
94 	CINEMAT_LOCAL_MODELS
95 
96 	ANALOG_INPUT(I_V5, 5)
97 	ANALOG_INPUT(I_V15, 15)
98 	ANALOG_INPUT(I_VM15, -15)
99 
100 	RES(R1, RES_K(1))
101 	RES(R2, 160)
102 	RES(R3, RES_K(1))
103 	RES(R4, RES_K(1))
104 	RES(R5, RES_K(2))
105 	RES(R6, RES_K(2))
106 	RES(R7, RES_K(4.7))
107 	RES(R8, RES_K(3.3))
108 	RES(R9, 820)
109 	RES(R10, RES_M(3.3))
110 	RES(R11, RES_M(3.3))
111 	RES(R12, RES_M(5.1))
112 	RES(R13, RES_M(1.6))
113 	RES(R14, RES_K(2))
114 	RES(R15, RES_K(18))
115 	RES(R16, RES_K(10))
116 	RES(R17, RES_K(10))
117 	RES(R18, RES_K(91))
118 	RES(R19, RES_K(10))
119 	RES(R20, RES_K(1))
120 	RES(R21, RES_K(2))
121 	RES(R22, RES_K(1))
122 	RES(R24, RES_K(200))
123 	RES(R25, RES_K(30))
124 	RES(R26, RES_K(200))
125 	RES(R27, RES_K(51))
126 	RES(R28, RES_M(1))
127 	RES(R29, 430)
128 	RES(R30, 560)
129 	RES(R31, RES_K(3.3))
130 	RES(R32, RES_K(2))
131 	RES(R33, RES_K(130))
132 	RES(R34, RES_K(4.7))
133 	RES(R35, RES_K(2.7))
134 	RES(R36, RES_K(1))
135 	RES(R37, RES_K(39))
136 	RES(R38, RES_K(12))
137 	RES(R39, RES_K(51))
138 	RES(R40, RES_K(2.4))
139 	RES(R41, RES_K(270))
140 	RES(R42, RES_M(1))
141 	RES(R43, RES_K(4.3))
142 	RES(R44, RES_K(10))
143 	RES(R45, RES_K(1))
144 	RES(R46, RES_K(2))
145 	RES(R47, RES_K(82))
146 	RES(R48, RES_K(39))
147 	RES(R49, RES_K(20))
148 	RES(R50, RES_K(1))
149 	RES(R51, RES_K(12))
150 	RES(R52, RES_K(4.7))
151 	RES(R53, RES_K(1))
152 	RES(R54, RES_K(39))
153 	RES(R55, RES_K(12))
154 	RES(R56, RES_K(1))
155 	RES(R57, RES_K(100))
156 	RES(R58, RES_K(18))
157 	RES(R59, RES_K(15))
158 	RES(R60, RES_K(7.5))
159 	RES(R61, 430)
160 	RES(R62, 430)
161 	RES(R63, RES_K(4.7))
162 	RES(R64, RES_K(1))
163 	RES(R65, RES_K(39))
164 	RES(R66, RES_K(12))
165 	RES(R67, RES_K(1))
166 	RES(R68, RES_K(100))
167 	RES(R69, RES_K(6.8))
168 	RES(R70, RES_K(18))
169 	RES(R71, RES_K(47))
170 	RES(R72, 390)
171 	RES(R73, 390)
172 	RES(R74, RES_K(4.7))
173 	RES(R75, RES_K(2.7))
174 	RES(R76, RES_K(4.7))
175 	RES(R77, RES_K(39))
176 	RES(R78, RES_K(12))
177 	RES(R79, RES_K(1))
178 	RES(R80, RES_K(200))
179 	RES(R81, RES_K(300))
180 	RES(R82, RES_K(240))
181 	RES(R83, 200)
182 	RES(R84, 200)
183 	RES(R85, RES_K(4.7))
184 	RES(R86, RES_K(2.7))
185 	RES(R87, RES_K(4.7))
186 	RES(R88, RES_K(1))
187 	RES(R89, RES_K(1.8))
188 	RES(R90, RES_K(3.9))
189 	RES(R91, RES_K(39))
190 	RES(R92, RES_K(12))
191 	RES(R93, 620)
192 	RES(R94, RES_K(360))
193 	RES(R95, RES_K(27))
194 	RES(R96, RES_K(33))
195 	RES(R97, 47)
196 	RES(R98, 47)
197 	RES(R99, RES_K(4.7))
198 	RES(R100, RES_K(2.7))
199 	RES(R101, RES_K(4.7))
200 	RES(R102, RES_K(39))
201 	RES(R103, RES_K(12))
202 	RES(R104, RES_K(1))
203 	RES(R105, RES_K(36))
204 	RES(R106, RES_K(36))
205 	RES(R107, RES_K(8.2))
206 	RES(R108, RES_K(47))
207 	RES(R109, RES_K(22))
208 	RES(R110, RES_K(1))
209 	RES(R111, RES_K(1))
210 	RES(R112, RES_K(10))
211 	RES(R113, RES_K(160))
212 	RES(R114, RES_K(39))
213 	RES(R115, RES_K(47))
214 	RES(R116, RES_K(3.9))
215 	RES(R117, RES_K(5.1))
216 	RES(R118, RES_K(820))
217 	RES(R119, RES_K(100))
218 //  RES(R120, RES_K(390)) -- part of final amp (not emulated)
219 //  RES(R121, RES_K(15))  -- part of final amp (not emulated)
220 //  RES(R122, 150)        -- part of final amp (not emulated)
221 //  RES(R123, RES_K(22))  -- part of final amp (not emulated)
222 //  RES(R124, 150)        -- part of final amp (not emulated)
223 	RES(R125, RES_K(8.2))
224 	RES(R126, RES_K(20))
225 	RES(R127, RES_K(30))
226 	POT(R128, RES_K(10))
227 	PARAM(R128.DIAL, 0.500000)
228 
229 //  CAP(C2, CAP_U(25))      // electrolytic
230 //  CAP(C4, CAP_U(25))      // electrolytic
231 //  CAP(C5, CAP_U(25))      // electrolytic
232 //  CAP(C7, CAP_U(25))      // electrolytic
233 //  CAP(C9, CAP_U(25))      // electrolytic
234 	CAP(C11, CAP_U(0.68))   // film
235 	CAP(C12, CAP_U(0.001))  // disk
236 	CAP(C13, CAP_U(0.0022)) // film
237 	CAP(C14, CAP_U(0.1))    // film
238 	CAP(C15, CAP_U(0.1))    // film
239 	CAP(C16, CAP_U(0.1))    // disk*
240 	CAP(C17, CAP_U(100))    // electrolytic
241 	CAP(C18, CAP_U(0.1))    // film
242 	CAP(C19, CAP_U(0.1))    // disk*
243 	CAP(C20, CAP_U(0.1))    // film
244 	CAP(C21, CAP_U(0.01))   // disk
245 	CAP(C22, CAP_U(0.68))   // film
246 	CAP(C23, CAP_U(0.001))  // disk
247 	CAP(C24, CAP_U(0.0047)) // film
248 	CAP(C25, CAP_U(0.1))    // film
249 	CAP(C26, CAP_U(0.1))    // film
250 	CAP(C27, CAP_U(2.2))    // electrolytic
251 	CAP(C28, CAP_U(0.22))   // film
252 	CAP(C29, CAP_U(0.1))    // film
253 	CAP(C30, CAP_U(4.7))    // electrolytic
254 	CAP(C31, CAP_U(0.1))    // film
255 	CAP(C32, CAP_U(0.01))   // film
256 	CAP(C33, CAP_U(0.68))   // film
257 	CAP(C34, CAP_U(3.3))    // electrolytic
258 	CAP(C35, CAP_U(0.22))   // film
259 	CAP(C36, CAP_U(0.33))   // film
260 	CAP(C37, CAP_U(0.47))   // film
261 	CAP(C38, CAP_U(0.01))   // disk
262 	CAP(C39, CAP_U(0.68))   // film
263 	CAP(C40, CAP_U(0.1))    // film
264 	CAP(C41, CAP_U(0.01))   // disk
265 	CAP(C42, CAP_U(0.1))    // film
266 //  CAP(C43, CAP_U(0.68))   // film -- part of final amp (not emulated)
267 //  CAP(C44, CAP_P(470))    // disk -- part of final amp (not emulated)
268 //  CAP(C45, CAP_P(470))    // disk -- part of final amp (not emulated)
269 //  CAP(C46, CAP_P(470))    // disk -- part of final amp (not emulated)
270 //  CAP(C47, CAP_U(0.005))  // disk -- part of final amp (not emulated)
271 	CAP(C48, CAP_U(0.33))   // film
272 
273 //  D_1N4003(D1)            // not needed
274 //  D_1N4003(D2)            // not needed
275 //  D_1N4003(D3)            // not needed
276 //  D_1N4003(D4)            // not needed
277 	D_1N5240B(D5)
278 	D_1N5236B(D6)
279 	D_1N914B(D7)
280 	D_1N914B(D8)
281 	D_1N914B(D9)
282 	D_1N914B(D10)
283 
284 #if !(HLE_BACKGROUND_VCO)
285 	Q_2N3904(Q1)            // NPN
286 #endif
287 	Q_2N3904(Q2)            // NPN
288 	Q_2N3906(Q3)            // PNP
289 	Q_2N3904(Q4)            // NPN
290 #if !(HLE_LASER_VCO)
291 	Q_2N3904(Q5)            // NPN
292 #endif
293 	Q_2N3906(Q6)            // PNP
294 	Q_2N3906(Q7)            // PNP
295 	Q_2N3906(Q8)            // PNP
296 	Q_2N3906(Q9)            // PNP
297 	Q_2N3906(Q10)           // PNP
298 	Q_2N3906(Q11)           // PNP
299 	Q_2N3906(Q12)           // PNP
300 	Q_2N3906(Q13)           // PNP
301 	Q_2N3906(Q14)           // PNP
302 	Q_2N3906(Q15)           // PNP
303 	Q_2N3906(Q16)           // PNP
304 //  Q_2N6107(Q17)           // PNP -- part of final amp (not emulated)
305 //  Q_2N6292(Q18)           // NPN -- part of final amp (not emulated)
306 
307 	TTL_7414_DIP(IC1)       // Hex Inverter
308 	NET_C(IC1.7, GND)
309 	NET_C(IC1.14, I_V5)
310 
311 	TTL_74LS164_DIP(IC2)    // 8-bit Shift Reg.
312 	NET_C(IC2.7, GND)
313 	NET_C(IC2.14, I_V5)
314 
315 	TTL_74LS377_DIP(IC3)    // Octal D Flip Flop
316 	NET_C(IC3.10, GND)
317 	NET_C(IC3.20, I_V5)
318 
319 //  TTL_7815_DIP(IC4)       // +15V Regulator -- not needed
320 //  TTL_7915_DIP(IC5)       // -15V Regulator -- not needed
321 
322 	TTL_7406_DIP(IC6)       // Hex Inverter -- currently using a clone of 7416, no open collector behavior
323 	NET_C(IC6.7, GND)
324 	NET_C(IC6.14, I_V5)
325 
326 	TL081_DIP(IC7)          // Op. Amp.
327 	NET_C(IC7.7, I_V15)
328 	NET_C(IC7.4, I_VM15)
329 
330 	TL081_DIP(IC8)          // Op. Amp.
331 	NET_C(IC8.7, I_V15)
332 	NET_C(IC8.4, I_VM15)
333 
334 #if (!HLE_BACKGROUND_VCO)
335 	LM566_DIP(IC9)          // 566 VCO
336 #endif
337 
338 	TTL_74LS163_DIP(IC10)   // Binary Counter (schems say can sub a 74161)
339 	NET_C(IC10.8, GND)
340 	NET_C(IC10.16, I_V5)
341 
342 	TTL_74LS163_DIP(IC11)   // Binary Counter (schems say can sub a 74161)
343 	NET_C(IC11.8, GND)
344 	NET_C(IC11.16, I_V5)
345 
346 	TTL_74LS393_DIP(IC12)   // Dual 4 Bit B.C.
347 	NET_C(IC12.7, GND)
348 	NET_C(IC12.14, I_V5)
349 
350 	TTL_74LS393_DIP(IC13)   // Dual 4 Bit B.C.
351 	NET_C(IC13.7, GND)
352 	NET_C(IC13.14, I_V5)
353 
354 	AMI_S2688(IC14)         // Noise generator
355 
356 	TL081_DIP(IC15)         // Op. Amp.
357 	NET_C(IC15.7, I_V15)
358 	NET_C(IC15.4, I_VM15)
359 
360 	LM555_DIP(IC16)         // Timer
361 
362 #if (!HLE_LASER_VCO)
363 	LM566_DIP(IC17)         // 566 VCO
364 #endif
365 
366 	CA3080_DIP(IC18)        // Trnscndt. Op. Amp.
367 	NET_C(IC18.7, I_V15)
368 	NET_C(IC18.4, I_VM15)
369 
370 	CA3080_DIP(IC19)        // Trnscndt. Op. Amp.
371 	NET_C(IC19.7, I_V15)
372 	NET_C(IC19.4, I_VM15)
373 
374 	CA3080_DIP(IC20)        // Trnscndt. Op. Amp.
375 	NET_C(IC20.7, I_V15)
376 	NET_C(IC20.4, I_VM15)
377 
378 	CA3080_DIP(IC21)        // Trnscndt. Op. Amp.
379 	NET_C(IC21.7, I_V15)
380 	NET_C(IC21.4, I_VM15)
381 
382 	CA3080_DIP(IC22)        // Trnscndt. Op. Amp.
383 	NET_C(IC22.7, I_V15)
384 	NET_C(IC22.4, I_VM15)
385 
386 	LM555_DIP(IC23)         // Timer
387 
388 	LM555_DIP(IC24)         // Timer
389 
390 //  TL081_DIP(IC25)         // Op. Amp. -- part of final amp (not emulated)
391 //  NET_C(IC25.7, I_V15)
392 //  NET_C(IC25.4, I_VM15)
393 
394 	TL081_DIP(IC26)         // Op. Amp.
395 	NET_C(IC26.7, I_V15)
396 	NET_C(IC26.4, I_VM15)
397 
398 	TL081_DIP(IC27)         // Op. Amp.
399 	NET_C(IC27.7, I_V15)
400 	NET_C(IC27.4, I_VM15)
401 
402 	TTL_74LS107_DIP(IC28)   // Dual J-K Flip Flop
403 	NET_C(IC28.7, GND)
404 	NET_C(IC28.14, I_V5)
405 
406 	//
407 	// Sheet 1, shift register (top left)
408 	//
409 
410 	NET_C(I_V5, R1.1)
411 	ALIAS(HI, R1.2)
412 
413 	NET_C(R1.2, IC2.9, IC2.2)
414 	NET_C(I_OUT_7, IC1.13)
415 	NET_C(IC1.12, IC1.1)
416 	NET_C(IC1.2, IC2.1)
417 	NET_C(I_OUT_4, IC1.9)
418 	NET_C(IC1.8, IC1.5)
419 	NET_C(IC1.6, IC2.8)
420 	NET_C(I_OUT_0, IC1.11)
421 	NET_C(IC1.10, IC1.3)
422 	NET_C(IC1.4, IC3.11)
423 
424 	NET_C(IC2.3, IC3.3)
425 	NET_C(IC2.4, IC3.4)
426 	NET_C(IC2.5, IC3.7)
427 	NET_C(IC2.6, IC3.8)
428 	NET_C(IC2.10, IC3.13)
429 	NET_C(IC2.11, IC3.14)
430 	NET_C(IC2.12, IC3.17)
431 	NET_C(IC2.13, IC3.18)
432 	NET_C(GND, IC3.1)
433 
434 #if (SOUND_VARIANT == VARIANT_STARCASTLE)
435 
436 	ALIAS(FIREBALL_EN, IC3.2)
437 	ALIAS(SHIELD_EN, IC3.5)
438 	ALIAS(STAR_EN, IC3.6)
439 	ALIAS(THRUST_EN, IC3.9)
440 	ALIAS(BACKGROUND_EN, IC3.12)
441 	ALIAS(BL2, IC3.15)
442 	ALIAS(BL1, IC3.16)
443 	ALIAS(BL0, IC3.19)
444 
445 #else // (SOUND_VARIANT == VARIANT_WOTW)
446 
447 	ALIAS(BACKGROUND_EN, IC3.2)
448 	ALIAS(BL2, IC3.6)
449 	ALIAS(BL1, IC3.6)
450 	ALIAS(BL0, IC3.6)
451 	ALIAS(SHIELD_EN, IC3.9)
452 	ALIAS(FIREBALL_EN, IC3.12)
453 	RES(REXTRA, RES_K(1))
454 	NET_C(IC3.16, IC6.3)
455 	NET_C(IC6.4, REXTRA.1)
456 	NET_C(REXTRA.2, I_V5)
457 	ALIAS(STAR_EN, IC6.4)
458 	ALIAS(THRUST_EN, IC3.19)
459 
460 #endif
461 
462 	//
463 	// Sheet 1, BACKGROUND (top portion)
464 	//
465 
466 	NET_C(GND, D5.A, D6.K, R13.1, R16.1, R17.1, IC7.3)
467 	NET_C(I_V15, R2.1)
468 	NET_C(I_VM15, R12.1, R18.1)
469 	NET_C(R2.2, D5.K, R3.1, R5.1, R7.1)
470 	NET_C(BL2, IC6.9)
471 	NET_C(IC6.8, R3.2, R4.1)
472 	NET_C(BL1, IC6.11)
473 	NET_C(IC6.10, R5.2, R6.1)
474 	NET_C(BL0, IC6.13)
475 	NET_C(IC6.12, R7.2, R8.1)
476 	NET_C(R4.2, R6.2, R8.2, IC7.2, R9.1)
477 	NET_C(IC7.6, R9.2, R10.1)
478 	NET_C(R10.2, IC8.2, R11.1, C11.1)
479 	NET_C(R12.2, R13.2, IC8.3)
480 	NET_C(IC8.6, C11.2, R11.2, R14.1)
481 	NET_C(R14.2, D6.A, R15.1)
482 
483 #if (HLE_BACKGROUND_VCO)
484 	//
485 	// The background clock is a VCO controlled via a 566 timer.
486 	// Getting the frequency high enough to not miss clocking
487 	// the downstream dividers requires increasing the solver
488 	// frequency too much for realtime.
489 	//
490 	// Instead, clip out the circuit from the control voltage
491 	// coming into IC9 (pin 5), through the TTL converter, and
492 	// directly output the clock into IC10 pin 2. The equation
493 	// for the clock frequency is computed from running the
494 	// full emulation at 1000x frequency and fitting a curve
495 	// to the resulting dataset.
496 	//
497 	VARCLOCK(BGCLK, 1, "max(0.000001,min(0.1,(0.00000215073*A0*A0*A0*A0) + (0.0000224782*A0*A0*A0) + (0.000090697*A0*A0) + (0.000175878*A0) + 0.000163685))")
498 	NET_C(BGCLK.GND, GND)
499 	NET_C(BGCLK.VCC, I_V5)
500 	NET_C(R17.2, R15.2, R18.2, BGCLK.A0, C12.2)
501 	NET_C(C12.1, R16.2)
502 	ALIAS(CLK, BGCLK.Q)
503 	NET_C(C13.1, C13.2, C14.1, C14.2, R19.1, R19.2, R20.1, R20.2, R21.1, R21.2, D7.A, D7.K, D8.A, D8.K, GND)
504 #else
505 	NET_C(GND, IC9.8, D7.A, D8.A)
506 	NET_C(I_V5, R20.1)
507 	NET_C(I_VM15, IC9.1, C13.2, R21.1)
508 	NET_C(R17.2, R15.2, R18.2, IC9.5, C12.2)
509 	NET_C(C13.1, IC9.7)
510 	NET_C(C12.1, IC9.6, R16.2)
511 	NET_C(IC9.3, C14.1)
512 	NET_C(C14.2, D7.K, R19.1)
513 	NET_C(R19.2, Q1.B)
514 	NET_C(Q1.E, R21.2, D8.K)
515 	NET_C(Q1.C, R20.2)
516 	ALIAS(CLK, R20.2)
517 #endif
518 
519 	//
520 	// Sheet 1, BACKGROUND (bottom portion)
521 	//
522 
523 	NET_C(GND, R27.1, IC10.4, IC10.5, IC10.6, IC11.3, IC11.4, IC12.12, IC13.12, IC28.4)
524 	NET_C(I_V5, R22.1)
525 	NET_C(CLK, IC10.2, IC11.2, IC13.1, IC28.12)
526 	NET_C(BACKGROUND_EN, IC6.1, IC13.2)
527 	NET_C(IC6.2, R22.2, IC10.1, IC11.1)
528 	NET_C(HI, IC10.3, IC10.7, IC10.10, IC11.5, IC11.6, IC11.7)
529 	NET_C(IC10.15, IC11.10)
530 	NET_C(IC11.15, IC28.1, IC28.13)
531 	NET_C(IC28.2, IC11.9, IC10.9, IC12.13)
532 	NET_C(IC12.11, R24.1)
533 	NET_C(R24.2, C15.1, R26.2, R27.2)
534 	NET_C(IC13.6, IC13.13)
535 	NET_C(IC13.9, R26.1)
536 	NET_C(C15.2, R25.1)
537 	ALIAS(SJ, R25.2)
538 
539 	//
540 	// Sheet 2, NOISE GENERATOR
541 	//
542 
543 	NET_C(GND, C16.2, C17.2, R28.1, IC14.1, IC14.2)
544 	NET_C(I_V15, C16.1, C17.1, IC14.4)
545 	NET_C(IC14.3, C18.2)
546 	NET_C(C18.1, R28.2, IC15.3)
547 	NET_C(IC15.6, IC15.2)
548 	ALIAS(NOISE, IC15.6)
549 
550 	//
551 	// Sheet 2, +2.2V
552 	//
553 
554 	NET_C(GND, C19.2, R30.1, R31.1)
555 	NET_C(I_V5, R29.1, Q2.C)
556 	NET_C(R30.2, R29.2, Q2.B)
557 	NET_C(R31.2, Q2.E, C19.1)
558 	ALIAS(V2_2, Q2.E)
559 
560 	//
561 	// Sheet 2, SQUARE WAVE
562 	//
563 
564 	NET_C(GND, C20.2, C21.2, IC16.1)
565 	NET_C(I_V5, R32.1, IC16.4, IC16.8)
566 	NET_C(R32.2, R33.1, IC16.7)
567 	NET_C(R33.2, IC16.6, IC16.2, C20.1)
568 	NET_C(C21.1, IC16.5)
569 	ALIAS(SQUAREWAVE, IC16.3)
570 
571 	//
572 	// Sheet 2, LASER VCO
573 	//
574 
575 	NET_C(GND, C22.2, C24.2, Q4.E, R38.1, R42.1, R50.1)
576 	NET_C(I_V5, R34.1, R36.1, Q3.E)
577 	NET_C(I_V15, R39.1, R43.1)
578 	NET_C(I_VM15, R37.1)
579 	NET_C(I_OUT_3, IC6.5, IC12.2)
580 	NET_C(IC6.6, R36.2, R35.1)
581 	NET_C(R35.2, Q3.B, R34.2)
582 	NET_C(Q3.C, R37.2, R38.2, R40.1)
583 	NET_C(R40.2, Q4.B)
584 	NET_C(R39.2, R41.1, C22.1, R42.2, C23.2)
585 	NET_C(Q4.C, R41.2)
586 	NET_C(C23.1, R43.2)
587 
588 #if (HLE_LASER_VCO)
589 	//
590 	// The laser VCO is the same story as the background VCO,
591 	// requiring a large multiplier to the solver frequency
592 	// to clock downstream gates. Again, just replace it
593 	// with a VARCLOCK tuned based on output from running
594 	// the full simulation.
595 	//
596 	VARCLOCK(LASERCLK, 1, "max(0.000001,min(0.1,(0.00000385462*A0*A0*A0*A0) - (0.000195567*A0*A0*A0) + (0.00372371*A0*A0) - (0.0315254*A0) + 0.100119))")
597 	NET_C(LASERCLK.GND, GND)
598 	NET_C(LASERCLK.VCC, I_V5)
599 	NET_C(C23.2, LASERCLK.A0)
600 	NET_C(LASERCLK.Q, IC12.1)
601 	NET_C(GND, C24.1, C25.1, C25.2, D9.A, D9.K, D10.A, D10.K, R44.1, R44.2, R45.1, R45.2, R46.1, R46.2)
602 #else
603 	NET_C(GND, D9.A, D10.A, IC17.1)
604 	NET_C(I_V15, IC17.8)
605 	NET_C(C23.2, IC17.5)
606 	NET_C(C23.1, IC17.6)
607 	NET_C(C24.1, IC17.7)
608 	NET_C(IC17.3, C25.1)
609 	NET_C(C25.2, D9.K, R44.1)
610 	NET_C(R44.2, Q5.B)
611 	NET_C(I_VM15, R46.1)
612 	NET_C(Q5.E, D10.K, R46.2)
613 	NET_C(I_V5, R45.1)
614 	NET_C(Q5.C, R45.2, IC12.1)
615 #endif
616 
617 	NET_C(IC12.3, R47.1)
618 	NET_C(IC12.4, R48.1)
619 	NET_C(IC12.6, R49.1)
620 	NET_C(R47.2, R48.2, R49.2, R50.2, R51.1)
621 	NET_C(R51.2, C26.1)
622 	NET_C(C26.2, SJ)
623 
624 	//
625 	// Sheet 2, SOFT EXPLOSION
626 	//
627 
628 	NET_C(GND, C28.2, C29.2, R55.1, R56.1, R61.2, R62.1)
629 	NET_C(I_V5, R52.1)
630 	NET_C(I_VM15, C27.2, R54.1)
631 	NET_C(I_OUT_2, R52.2, R53.1)
632 	NET_C(R53.2, Q6.B)
633 	NET_C(Q6.E, V2_2)
634 	NET_C(Q6.C, R54.2, R55.2, Q7.E)
635 	NET_C(R56.2, Q7.B)
636 	NET_C(Q7.C, C27.1, R57.1)
637 	NET_C(R57.2, IC18.5)
638 	NET_C(NOISE, R58.1)
639 	NET_C(R58.2, C28.1, R59.1)
640 	NET_C(R59.2, C29.1, R60.1)
641 	NET_C(R60.2, R61.1, IC18.2)
642 	NET_C(R62.2, IC18.3)
643 
644 	//
645 	// Sheet 2, LOUD EXPLOSION
646 	//
647 
648 	NET_C(GND, C31.2, C32.2, R66.1, R67.1, R72.2, R73.1)
649 	NET_C(I_V5, R63.1)
650 	NET_C(I_VM15, C30.2, R65.1)
651 	NET_C(I_OUT_1, R63.2, R64.1)
652 	NET_C(R64.2, Q8.B)
653 	NET_C(Q8.E, V2_2)
654 	NET_C(Q8.C, R65.2, R66.2, Q9.E)
655 	NET_C(R67.2, Q9.B)
656 	NET_C(Q9.C, C30.1, R68.1)
657 	NET_C(R68.2, IC19.5)
658 	NET_C(NOISE, R69.1)
659 	NET_C(R69.2, C31.1, R70.1)
660 	NET_C(R70.2, C32.1, R71.1)
661 	NET_C(R71.2, R72.1, IC19.2)
662 	NET_C(R73.2, IC19.3)
663 
664 	//
665 	// Sheet 2, FIREBALL
666 	//
667 
668 	NET_C(GND, R78.1, R79.1, R83.1, R84.1)
669 	NET_C(I_V5, Q10.E, R74.1, R76.1)
670 	NET_C(I_VM15, C33.2, R77.1)
671 	NET_C(FIREBALL_EN, R74.2, R75.1)
672 	NET_C(R75.2, R76.2, Q10.B)
673 	NET_C(Q10.C, R77.2, R78.2, Q11.E)
674 	NET_C(R79.2, Q11.B)
675 	NET_C(Q11.C, C33.1, R80.1)
676 	NET_C(R80.2, IC20.5)
677 	NET_C(NOISE, R81.1)
678 	NET_C(SQUAREWAVE, R82.1)
679 	NET_C(R81.2, R82.2, R83.2, IC20.2)
680 	NET_C(R84.2, IC20.3)
681 
682 	//
683 	// Sheet 2, SHIELD
684 	//
685 
686 	NET_C(GND, R92.1, R93.1, R97.1, R98.1)
687 	NET_C(I_V5, R85.1, R87.1, R88.1, Q12.E)
688 	NET_C(I_VM15, R91.1)
689 	NET_C(SHIELD_EN, R85.2, R86.1)
690 	NET_C(R86.2, R87.2, Q12.B)
691 	NET_C(Q12.C, R90.1, Q13.E)
692 	NET_C(SQUAREWAVE, R88.2, R89.1)
693 	NET_C(R89.2, R90.2, Q13.B)
694 	NET_C(Q13.C, R91.2, R92.2, Q14.E)
695 	NET_C(R93.2, Q14.B)
696 	NET_C(Q14.C, R94.1)
697 	NET_C(R94.2, IC21.5)
698 	NET_C(SQUAREWAVE, R96.1)
699 	NET_C(NOISE, R95.1)
700 	NET_C(R96.2, R95.2, R97.2, IC21.2)
701 	NET_C(R98.2, IC21.3)
702 
703 	//
704 	// Sheet 2, THRUST
705 	//
706 
707 	NET_C(GND, R103.1, R104.1, C35.2, C36.2, R110.1, R111.1)
708 	NET_C(I_V5, R99.1, R101.1, Q15.E)
709 	NET_C(I_VM15, C34.2, R102.1)
710 	NET_C(THRUST_EN, R99.2, R100.1)
711 	NET_C(R100.2, R101.2, Q15.B)
712 	NET_C(Q15.C, R102.2, R103.2, Q16.E)
713 	NET_C(R104.2, Q16.B)
714 	NET_C(Q16.C, R105.1)
715 	NET_C(R105.2, C34.1, R106.1)
716 	NET_C(R106.2, IC22.5)
717 	NET_C(NOISE, R107.1)
718 	NET_C(R107.2, C35.1, R108.1)
719 	NET_C(R108.2, C36.1, R109.1)
720 	NET_C(R109.2, R110.2, IC22.2)
721 	NET_C(R111.2, IC22.3)
722 
723 	//
724 	// Sheet 2, STAR SOUND
725 	//
726 
727 	NET_C(GND, C37.1, C38.1, C39.1, C40.1, C41.1, R119.1, IC23.1, IC24.1)
728 	NET_C(I_V5, R112.1, R117.1, IC23.8, IC24.8)
729 	NET_C(STAR_EN, IC23.4, IC24.4)
730 	NET_C(R112.2, IC23.7, R113.1)
731 	NET_C(R113.2, IC23.2, IC23.6, C37.2)
732 	NET_C(C38.2, IC23.5)
733 	NET_C(IC23.3, R114.1)
734 	NET_C(R114.2, C39.2, R115.1)
735 	NET_C(R115.2, C40.2, IC24.6, IC24.2, R116.1)
736 	NET_C(R116.2, IC24.7, R117.2)
737 	NET_C(C41.2, IC24.5)
738 	NET_C(IC24.3, R119.2, R118.1)
739 	NET_C(R118.2, C42.1)
740 	NET_C(C42.2, SJ)
741 
742 	//
743 	// Sheet 2, preamp
744 	//
745 
746 	NET_C(GND, R127.1, IC27.3, R128.1)
747 	NET_C(IC18.6, IC19.6, IC20.6, IC21.6, IC22.6, R127.2, IC26.3)
748 	NET_C(IC26.2, IC26.6, C48.1)
749 	NET_C(C48.2, R125.1)
750 	NET_C(R125.2, SJ, IC27.2, R126.1)
751 	NET_C(R126.2, IC27.6, R128.3)
752 
753 	//
754 	// Sheet 2, final amp
755 	//
756 
757 	ALIAS(OUTPUT, R126.2)
758 
759 	//
760 	// Unconnected inputs
761 	//
762 
763 	NET_C(GND, IC28.8, IC28.9, IC28.10, IC28.11)
764 #if (SOUND_VARIANT == VARIANT_STARCASTLE)
765 	NET_C(GND, IC6.3)
766 #endif
767 
768 	//
769 	// Unconnected outputs
770 	//
771 
772 	HINT(IC28.3, NC)
773 	HINT(IC28.5, NC)
774 	HINT(IC28.6, NC)
775 
776 #if (SOUND_VARIANT == VARIANT_STARCASTLE)
777 	HINT(IC6.4, NC)
778 #endif
779 	HINT(IC10.11, NC)
780 	HINT(IC10.12, NC)
781 	HINT(IC10.13, NC)
782 	HINT(IC10.14, NC)
783 	HINT(IC11.11, NC)
784 	HINT(IC11.12, NC)
785 	HINT(IC11.13, NC)
786 	HINT(IC11.14, NC)
787 	HINT(IC12.5, NC)
788 	HINT(IC12.8, NC)
789 	HINT(IC12.9, NC)
790 	HINT(IC12.10, NC)
791 	HINT(IC13.3, NC)
792 	HINT(IC13.4, NC)
793 	HINT(IC13.5, NC)
794 	HINT(IC13.8, NC)
795 	HINT(IC13.10, NC)
796 	HINT(IC13.11, NC)
797 
798 #if (ENABLE_FRONTIERS)
799 	//
800 	// Disconnect noise source from consumers
801 	//
802 	OPTIMIZE_FRONTIER(IC15.3, RES_M(1), 50)
803 
804 	//
805 	// Split noise outputs from output outputs before the mixer
806 	//
807 	OPTIMIZE_FRONTIER(IC26.3, RES_M(1), 50)
808 #endif
809 
810 NETLIST_END()
811 
812 #endif
813