1 // license:CC0
2 // copyright-holders:Aaron Giles
3 
4 //NL_CONTAINS elim zektor
5 
6 //
7 // Netlist for Eliminator/Zektor
8 //
9 // Derived from the schematics in the Eliminator and Zektor manuals.
10 //
11 // Known problems/issues:
12 //
13 //    * The noise signal (WBN) is connected into the TORPEDO_2 sound
14 //       but seems to make no audible difference, either in the
15 //       simulation or in recordings. Disabling it gives a nice speedup.
16 //
17 //    * Torpedo sounds don't retrigger until they're complete. This means
18 //       you can fire several times before the next firing sound triggers.
19 //       In recordings of games this doesn't appear to be the case.
20 //
21 
22 #include "netlist/devices/net_lib.h"
23 #include "nl_elim.h"
24 
25 
26 //
27 // Optimizations
28 //
29 
30 #define UNDERCLOCK_NOISE_GEN (1)
31 #define HLE_BACKGROUND_VCO (1)
32 #define HLE_TORPEDO1_VCO (1)
33 #define HLE_TORPEDO2_VCO (1)
34 #define HLE_SKITTER_VCO (1)
35 #define ENABLE_FRONTIERS (1)
36 
37 
38 
39 //
40 // Hacks
41 //
42 
43 #define ADD_CLIPPING_DIODES (1)
44 #define DISABLE_TORPEDO2_NOISE (1)
45 
46 
47 
48 //
49 // Initial compilation includes this section.
50 //
51 
52 #ifndef SOUND_VARIANT
53 
54 
55 #define D_1N914(name) DIODE(name, "1N914")
56 #define D_1N4002(name) DIODE(name, "1N4002")
57 
58 #define Q_2N4403(name) QBJT_EB(name, "2N4403")
59 
60 #define LM555_DIP NE555_DIP
61 #define LM566_DIP NE566_DIP
62 
63 #define TTL_74LS00_DIP TTL_7400_DIP
64 
65 //
66 // DIP mappings use the submodels below for CA3080
67 //
68 #define CA3080_DIP(name) SUBMODEL(_CA3080_FAST_DIP, name)
69 static NETLIST_START(_CA3080_FAST_DIP)
70 	ALIAS(2, F.A0) // -
71 	ALIAS(3, F.A1) // +
72 	ALIAS(4, F.A2) // V-
73 	ALIAS(5, RIABC.1) // IB
74 	ALIAS(6, VO.OP)  // FIXME
75 	ALIAS(7, F.A4) // V+
76 
77 	RES(RI, 26000)
78 	NET_C(RI.1, F.A0)
79 	NET_C(RI.2, F.A1)
80 	// Delivers I0
81 	AFUNC(F, 5, "max(-0.5e-3, min(0.5e-3, 19.2 * (A3 - A2) * A0))")
82 	RES(RIABC, 1)
83 	NET_C(RIABC.2, F.A2)
84 	NET_C(RIABC.1, F.A3) // IB
85 	VCCS(VO, 1)
86 	ANALOG_INPUT(XGND, 0)
87 	NET_C(XGND, VO.IN, VO.ON) // FIXME: assume symmetric supply
88 	NET_C(F.Q, VO.IP)
89 NETLIST_END()
90 
91 
92 
93 //
94 // Now include ourselves twice, once for Eliminator and
95 // once for Zektor
96 //
97 
98 #define VARIANT_ELIMINATOR  0
99 #define VARIANT_ZEKTOR      1
100 
101 #define SOUND_VARIANT       (VARIANT_ELIMINATOR)
102 #include "nl_elim.cpp"
103 
104 #undef SOUND_VARIANT
105 #define SOUND_VARIANT       (VARIANT_ZEKTOR)
106 #include "nl_elim.cpp"
107 
108 
109 #else
110 
111 
112 //
113 // Main netlist
114 //
115 
116 #if (SOUND_VARIANT == VARIANT_ELIMINATOR)
117 NETLIST_START(elim)
118 #else // (SOUND_VARIANT == VARIANT_ZEKTOR)
119 NETLIST_START(zektor)
120 #endif
121 
122 	SOLVER(Solver, 1000)
123 	PARAM(Solver.DYNAMIC_TS, 1)
124 	PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 2e-5)
125 
126 	// Overwrite model - the default model uses minimum datasheet
127 	// specifications for 5V. These are for 10V and thus closer to the
128 	// 12V used in this circuit.
129 	NET_MODEL("CD4XXX FAMILY(TYPE=CMOS IVL=0.3 IVH=0.7 OVL=0.05 OVH=0.05 ORL=384 ORH=384)")
130 
131 	LOCAL_SOURCE(_CA3080_FAST_DIP)
132 
133 //  TTL_INPUT(I_LO_D0, 0)
134 	TTL_INPUT(I_LO_D1, 0)
135 	ALIAS(I_FIREBALL, I_LO_D1)
136 	TTL_INPUT(I_LO_D2, 0)
137 	ALIAS(I_EXPLOSION_1, I_LO_D2)
138 	TTL_INPUT(I_LO_D3, 0)
139 	ALIAS(I_EXPLOSION_2, I_LO_D3)
140 	TTL_INPUT(I_LO_D4, 0)
141 	ALIAS(I_EXPLOSION_3, I_LO_D4)
142 	TTL_INPUT(I_LO_D5, 0)
143 	ALIAS(I_BOUNCE, I_LO_D5)
144 	TTL_INPUT(I_LO_D6, 0)
145 	ALIAS(I_TORPEDO_1, I_LO_D6)
146 	TTL_INPUT(I_LO_D7, 0)
147 	ALIAS(I_TORPEDO_2, I_LO_D7)
148 
149 	NET_C(GND, I_LO_D1.GND, I_LO_D2.GND, I_LO_D3.GND, I_LO_D4.GND, I_LO_D5.GND, I_LO_D6.GND, I_LO_D7.GND)
150 	NET_C(I_V5, I_LO_D1.VCC, I_LO_D2.VCC, I_LO_D3.VCC, I_LO_D4.VCC, I_LO_D5.VCC, I_LO_D6.VCC, I_LO_D7.VCC)
151 
152 	TTL_INPUT(I_HI_D0, 0)
153 	ALIAS(I_THRUST_LOW, I_HI_D0)
154 	TTL_INPUT(I_HI_D1, 0)
155 	ALIAS(I_THRUST_HI, I_HI_D1)
156 	TTL_INPUT(I_HI_D2, 0)
157 	ALIAS(I_THRUST_LSB, I_HI_D2)
158 	TTL_INPUT(I_HI_D3, 0)
159 	ALIAS(I_THRUST_MSB, I_HI_D3)
160 	TTL_INPUT(I_HI_D4, 0)
161 	ALIAS(I_SKITTER, I_HI_D4)
162 	TTL_INPUT(I_HI_D5, 0)
163 	ALIAS(I_ENEMY_SHIP, I_HI_D5)
164 	TTL_INPUT(I_HI_D6, 0)
165 	ALIAS(I_BACKGROUND_LSB, I_HI_D6)
166 	TTL_INPUT(I_HI_D7, 0)
167 	ALIAS(I_BACKGROUND_MSB, I_HI_D7)
168 
169 	NET_C(GND, I_HI_D0.GND, I_HI_D1.GND, I_HI_D2.GND, I_HI_D3.GND, I_HI_D4.GND, I_HI_D5.GND, I_HI_D6.GND, I_HI_D7.GND)
170 	NET_C(I_V5, I_HI_D0.VCC, I_HI_D1.VCC, I_HI_D2.VCC, I_HI_D3.VCC, I_HI_D4.VCC, I_HI_D5.VCC, I_HI_D6.VCC, I_HI_D7.VCC)
171 
172 	RES(R_PSG_1, 1000)
173 	RES(R_PSG_2, 1000)
174 	RES(R_PSG_3, 1000)
175 	NET_C(I_V5, R_PSG_1.1, R_PSG_2.1, R_PSG_3.1)
176 
177 	ANALOG_INPUT(I_V5, 5)
178 	ANALOG_INPUT(I_V12, 12)
179 	ANALOG_INPUT(I_VM12, -12)
180 
181 	//
182 	// Part differences between Eliminator and Zektor
183 	//
184 	//  Ref Des         ELIMINATOR      ZEKTOR
185 	//  R5              10K             4.7K
186 	//  R9              33K             12K
187 	//  R71             270K            100K
188 	//  R79             2 MEG           unused
189 	//  R122            220K            390K
190 	//  R132            220K            100K
191 	//  C9              0.01uF          0.0047uF
192 	//  C46             0.022uF         0.047uF
193 	//
194 
195 //  RES(R1, RES_K(100))     -- part of final amp (not emulated)
196 //  RES(R2, RES_M(1))       -- part of final amp (not emulated)
197 //  RES(R3, RES_K(22))      -- part of final amp (not emulated)
198 //  RES(R4, RES_K(2.2))     -- part of final amp (not emulated)
199 #if (SOUND_VARIANT == VARIANT_ELIMINATOR)
200 //  RES(R5, RES_K(10))      -- part of final amp (not emulated)
201 #else // (SOUND_VARIANT == VARIANT_ZEKTOR)
202 //  RES(R5, RES_K(4.7))     -- part of final amp (not emulated)
203 #endif
204 	RES(R6, RES_K(220))
205 	RES(R7, RES_K(220))
206 	RES(R8, RES_K(10))
207 #if (SOUND_VARIANT == VARIANT_ELIMINATOR)
208 	RES(R9, RES_K(33))
209 #else // (SOUND_VARIANT == VARIANT_ZEKTOR)
210 	RES(R9, RES_K(12))
211 #endif
212 	RES(R10, RES_K(10))
213 //  RES(R11, RES_K(2.2))    -- part of final amp (not emulated)
214 //  RES(R12, RES_M(1))      -- part of final amp (not emulated)
215 //  RES(R13, RES_K(330))    -- part of final amp (not emulated)
216 	RES(R14, RES_K(470))
217 	RES(R15, RES_K(100))
218 	RES(R16, RES_K(100))
219 	RES(R17, RES_K(10))
220 	RES(R18, RES_K(10))
221 	RES(R19, RES_K(1))
222 	RES(R20, RES_K(10))
223 	RES(R21, RES_K(100))
224 	RES(R22, RES_K(10))
225 	RES(R23, RES_K(4.7))
226 // R24??
227 	RES(R25, RES_K(220))
228 	RES(R26, RES_K(470))
229 	RES(R27, RES_K(470))
230 	RES(R28, RES_K(33))
231 	RES(R29, RES_K(68))
232 	RES(R30, RES_K(22))
233 	RES(R31, RES_K(1))
234 	RES(R32, RES_K(47))
235 	RES(R33, RES_K(82))
236 	RES(R34, RES_K(22))
237 	RES(R35, RES_K(1))
238 	RES(R36, RES_M(1.5))
239 	RES(R37, RES_K(6.8))
240 	RES(R38, RES_K(33))
241 	RES(R39, RES_K(22))
242 	RES(R40, RES_K(1))
243 	RES(R41, RES_M(2.2))
244 	RES(R42, RES_M(2.2))
245 	RES(R43, RES_K(1))
246 	RES(R44, RES_K(10))
247 	RES(R45, RES_K(47))
248 	RES(R46, RES_K(22))
249 	RES(R47, RES_K(2))
250 	RES(R48, RES_K(6.8))
251 	RES(R49, RES_K(33))
252 	RES(R50, RES_K(22))
253 	RES(R51, RES_K(1))
254 	RES(R52, RES_K(1))
255 	RES(R53, RES_K(1))
256 	RES(R54, RES_K(2))
257 	RES(R55, RES_K(1))
258 	RES(R56, RES_K(1))
259 	RES(R57, RES_K(1))
260 	RES(R58, RES_K(33))
261 	RES(R59, RES_K(2))
262 	RES(R60, RES_K(10))
263 	RES(R61, RES_K(47))
264 	RES(R62, RES_K(220))
265 	RES(R63, RES_K(1))
266 	RES(R64, RES_K(150))
267 	RES(R65, RES_K(390))
268 	RES(R66, RES_K(33))
269 	RES(R67, RES_K(100))
270 	RES(R68, RES_K(100))
271 	RES(R69, RES_K(1))
272 	RES(R70, RES_K(470))
273 #if (SOUND_VARIANT == VARIANT_ELIMINATOR)
274 	RES(R71, RES_K(270))
275 #else // (SOUND_VARIANT == VARIANT_ZEKTOR)
276 	RES(R71, RES_K(100))
277 #endif
278 	RES(R72, RES_K(1))
279 	RES(R73, RES_K(680))
280 	RES(R74, RES_K(390))
281 	RES(R75, RES_K(150))
282 	RES(R76, RES_K(10))
283 	RES(R77, RES_K(10))
284 	RES(R78, RES_K(10))
285 #if (SOUND_VARIANT == VARIANT_ELIMINATOR)
286 	RES(R79, RES_M(2))
287 #endif
288 	RES(R80, RES_K(1))
289 	RES(R81, RES_M(1.5))
290 	RES(R82, 470)
291 	RES(R83, 470)
292 	RES(R84, RES_K(2.2))
293 	RES(R85, RES_K(2.2))
294 	RES(R86, RES_K(2.2))
295 	RES(R87, RES_K(2.2))
296 	RES(R88, RES_K(2.2))
297 	RES(R89, RES_K(2.2))
298 	RES(R90, RES_K(15))
299 	RES(R91, RES_M(1))
300 	RES(R92, RES_K(22))
301 	RES(R93, RES_M(1))
302 	RES(R94, RES_K(10))
303 	RES(R95, RES_K(10))
304 	RES(R96, RES_K(22))
305 	RES(R97, RES_K(39))
306 	RES(R98, RES_K(82))
307 	RES(R99, RES_K(10))
308 	RES(R100, RES_K(10))
309 	RES(R101, 910)
310 	RES(R102, RES_K(6.8))
311 	RES(R103, RES_K(9.1))  // RES_K(2.2))
312 	RES(R104, RES_K(15))
313 	RES(R105, RES_K(10))
314 	RES(R106, RES_K(680))
315 	RES(R107, RES_K(4.7))
316 	RES(R108, RES_K(4.7))
317 	RES(R109, RES_K(2.2))
318 	RES(R110, RES_K(2.2))
319 	RES(R111, RES_K(100))
320 	RES(R112, RES_M(2.2))
321 	RES(R113, RES_M(1))
322 	RES(R114, RES_K(100))
323 	RES(R115, RES_M(1))
324 	RES(R116, RES_M(1))
325 	RES(R117, RES_M(1))
326 	RES(R118, RES_K(100))
327 	RES(R119, RES_K(100))
328 	RES(R120, RES_K(100))
329 	RES(R121, RES_M(2.2))
330 #if (SOUND_VARIANT == VARIANT_ELIMINATOR)
331 	RES(R122, RES_K(220))
332 #else // (SOUND_VARIANT == VARIANT_ZEKTOR)
333 	RES(R122, RES_K(390))
334 #endif
335 	RES(R123, RES_K(100))
336 	RES(R124, RES_M(2.2))
337 	RES(R125, RES_K(100))
338 	RES(R126, RES_K(10))
339 	RES(R127, RES_K(22))
340 	RES(R128, RES_K(39))
341 	RES(R129, RES_K(82))
342 	RES(R130, RES_K(22))
343 	RES(R131, RES_K(1))
344 #if (SOUND_VARIANT == VARIANT_ELIMINATOR)
345 	RES(R132, RES_K(220))
346 #else // (SOUND_VARIANT == VARIANT_ZEKTOR)
347 	RES(R132, RES_K(100))
348 #endif
349 	RES(R133, 680)
350 	RES(R134, RES_K(10))
351 	RES(R135, RES_K(10))
352 	RES(R136, RES_K(680))
353 	RES(R137, RES_K(10))
354 	RES(R138, RES_K(10))
355 	RES(R139, RES_K(330))
356 	RES(R140, RES_K(270))
357 	RES(R141, RES_K(220))
358 	RES(R142, RES_K(330))
359 	RES(R143, RES_K(680))
360 	RES(R144, RES_K(100))
361 	RES(R145, RES_K(68))
362 	RES(R146, RES_K(22))
363 	RES(R147, RES_K(2.2))
364 
365 //  CAP(C1, CAP_U(4.7))     -- part of final amp (not emulated)
366 //  CAP(C2, CAP_U(0.1))
367 //  CAP(C3, CAP_U(0.1))
368 //  CAP(C4, CAP_U(10))      -- part of final amp (not emulated)
369 	CAP(C5, CAP_U(0.1))
370 	CAP(C6, CAP_U(0.1))
371 	CAP(C7, CAP_U(0.001))
372 	CAP(C8, CAP_U(10))
373 #if (SOUND_VARIANT == VARIANT_ELIMINATOR)
374 	CAP(C9, CAP_U(0.01))
375 #else // (SOUND_VARIANT == VARIANT_ZEKTOR)
376 	CAP(C9, CAP_U(0.0047))
377 #endif
378 	CAP(C10, CAP_U(0.068))
379 	CAP(C11, CAP_U(0.068))
380 	CAP(C12, CAP_U(0.1))
381 	CAP(C13, CAP_U(0.1))
382 	CAP(C14, CAP_U(0.1))
383 	CAP(C15, CAP_U(0.068))
384 	CAP(C16, CAP_U(0.068))
385 	CAP(C17, CAP_U(0.068))
386 	CAP(C18, CAP_U(0.068))
387 	CAP(C19, CAP_U(0.068))
388 	CAP(C20, CAP_U(0.068))
389 	CAP(C21, CAP_U(2.2))
390 //  CAP(C22, CAP_U(0.1))
391 //  CAP(C23, CAP_U(0.1))
392 //  CAP(C24, CAP_U(0.1))
393 //  CAP(C25, CAP_U(0.1))
394 //  CAP(C26, CAP_U(0.1))
395 //  CAP(C27, CAP_U(0.1))
396 	CAP(C28, CAP_U(0.1))
397 	CAP(C29, CAP_U(0.1))
398 	CAP(C30, CAP_U(0.022))
399 //  CAP(C31, CAP_U(0.1))
400 //  CAP(C32, CAP_U(0.1))
401 	CAP(C33, CAP_U(0.1))
402 	CAP(C34, CAP_U(0.1))
403 	CAP(C35, CAP_U(1))
404 	CAP(C36, CAP_U(2.2))
405 	CAP(C37, CAP_U(10))
406 	CAP(C38, CAP_U(4.7))
407 	CAP(C39, CAP_U(0.1))
408 //  CAP(C40, CAP_U(0.1))
409 //  CAP(C41, CAP_U(0.1))
410 // C42??
411 	CAP(C43, CAP_U(0.033))
412 	CAP(C44, CAP_U(0.1))
413 	CAP(C45, CAP_U(0.1))
414 #if (SOUND_VARIANT == VARIANT_ELIMINATOR)
415 	CAP(C46, CAP_U(0.022))
416 #else // (SOUND_VARIANT == VARIANT_ZEKTOR)
417 	CAP(C46, CAP_U(0.047))
418 #endif
419 	CAP(C47, CAP_U(0.047))
420 	CAP(C48, CAP_U(0.05))
421 	CAP(C49, CAP_U(0.1))
422 	CAP(C50, CAP_U(0.05))
423 	CAP(C51, CAP_U(0.05))
424 	CAP(C52, CAP_U(0.05))
425 	CAP(C53, CAP_U(0.1))
426 	CAP(C54, CAP_U(0.1))
427 	CAP(C55, CAP_U(0.1))
428 	CAP(C56, CAP_U(33))
429 	CAP(C57, CAP_U(0.1))
430 	CAP(C58, CAP_U(0.1))
431 	CAP(C59, CAP_U(0.1))
432 	CAP(C60, CAP_U(0.001))
433 	CAP(C61, CAP_U(0.068))
434 //  CAP(C62, CAP_U(0.1))
435 	CAP(C63, CAP_P(100))
436 	CAP(C64, CAP_U(0.1))
437 	CAP(C65, CAP_U(0.01))
438 	CAP(C66, CAP_U(0.022))
439 	CAP(C67, CAP_U(0.047))
440 	CAP(C68, CAP_U(0.01))
441 	CAP(C69, CAP_U(0.1))
442 //  CAP(C70, CAP_U(0.1))
443 //  CAP(C71, CAP_U(0.1))
444 //  CAP(C72, CAP_U(0.1))
445 //  CAP(C73, CAP_U(10))
446 //  CAP(C74, CAP_U(0.1))
447 	CAP(C75, CAP_U(0.1))
448 	CAP(C76, CAP_U(0.1))
449 	CAP(C77, CAP_U(0.1))
450 
451 	D_1N914(D1)
452 	D_1N914(D2)
453 	D_1N914(D3)
454 	D_1N914(D4)
455 	D_1N914(D5)
456 	D_1N914(D6)
457 	D_1N914(D7)
458 	D_1N4002(D8)
459 
460 //  Q_2N4093(Q1)        -- part of final amp (not emulated)
461 	Q_2N4403(Q2)
462 	Q_2N4403(Q3)
463 	Q_2N4403(Q4)
464 	Q_2N4403(Q5)
465 	Q_2N4403(Q6)
466 	Q_2N4403(Q7)
467 	Q_2N4403(Q8)
468 	Q_2N4403(Q9)
469 	Q_2N4403(Q10)
470 	Q_2N4403(Q11)
471 
472 	TL081_DIP(U1)           // Op. Amp.
473 	NET_C(U1.7, I_V12)
474 	NET_C(U1.4, I_VM12)
475 
476 //  TL082_DIP(U2)           // Op. Amp. -- part of final amp (not emulated)
477 //  NET_C(U2.8, I_V12)
478 //  NET_C(U2.4, I_VM12)
479 
480 	TL081_DIP(U3)           // Op. Amp.
481 	NET_C(U3.7, I_V12)
482 	NET_C(U3.4, I_VM12)
483 
484 	MM5837_DIP(U4)          // Noise Generator
485 #if (UNDERCLOCK_NOISE_GEN)
486 	PARAM(U4.FREQ, 24000)
487 #endif
488 
489 	LM555_DIP(U5)           // Timer
490 
491 	CA3080_DIP(U6)          // Op. Amp.
492 	NET_C(U6.4, I_VM12)
493 	NET_C(U6.7, I_V12)
494 
495 	CA3080_DIP(U7)          // Op. Amp.
496 	NET_C(U7.4, I_VM12)
497 	NET_C(U7.7, I_V12)
498 
499 	CA3080_DIP(U8)          // Op. Amp.
500 	NET_C(U8.4, I_VM12)
501 	NET_C(U8.7, I_V12)
502 
503 	CA3080_DIP(U9)          // Op. Amp.
504 	NET_C(U9.4, I_VM12)
505 	NET_C(U9.7, I_V12)
506 
507 	CA3080_DIP(U10)         // Op. Amp.
508 	NET_C(U10.4, I_VM12)
509 	NET_C(U10.7, I_V12)
510 
511 	CA3080_DIP(U11)         // Op. Amp.
512 	NET_C(U11.4, I_VM12)
513 	NET_C(U11.7, I_V12)
514 
515 	TL081_DIP(U12)          // Op. Amp.
516 	NET_C(U12.7, I_V12)
517 	NET_C(U12.4, I_VM12)
518 
519 	LM555_DIP(U13)          // Timer
520 
521 	CA3080_DIP(U14)         // Op. Amp.
522 	NET_C(U14.4, I_VM12)
523 	NET_C(U14.7, I_V12)
524 
525 	CA3080_DIP(U15)         // Op. Amp.
526 	NET_C(U15.4, I_VM12)
527 	NET_C(U15.7, I_V12)
528 
529 	TL082_DIP(U16)          // Op. Amp.
530 	NET_C(U16.8, I_V12)
531 	NET_C(U16.4, I_VM12)
532 
533 	CD4011_DIP(U17)         // Quad 2-Input NAND Gates
534 	NET_C(U17.7, GND)
535 	NET_C(U17.14, I_V12)
536 
537 	CD4011_DIP(U18)         // Quad 2-Input NAND Gates
538 	NET_C(U18.7, GND)
539 	NET_C(U18.14, I_V12)
540 
541 	CD4011_DIP(U19)         // Quad 2-Input NAND Gates
542 	NET_C(U19.7, GND)
543 	NET_C(U19.14, I_V12)
544 
545 	TL082_DIP(U20)          // Op. Amp.
546 	NET_C(U20.8, I_V12)
547 	NET_C(U20.4, I_VM12)
548 
549 	CD4024_DIP(U21)         // 7-Stage Ripple Binary Counter
550 	NET_C(U21.7, GND)
551 	NET_C(U21.14, I_V12)
552 
553 	CD4011_DIP(U22)         // Quad 2-Input NAND Gates
554 	NET_C(U22.7, GND)
555 	NET_C(U22.14, I_V12)
556 
557 	CD4024_DIP(U23)         // 7-Stage Ripple Binary Counter
558 	NET_C(U23.7, GND)
559 	NET_C(U23.14, I_V12)
560 
561 	TTL_7406_DIP(U24)       // Hex inverter -- currently using a clone of 7416, no open collector behavior
562 	NET_C(U24.7, GND)
563 	NET_C(U24.14, I_V5)
564 
565 #if (!HLE_BACKGROUND_VCO)
566 	LM566_DIP(U25)          // Voltage-Controlled Oscillator
567 #endif
568 
569 	TTL_74LS00_DIP(U26)     // Quad 4-Input NAND Gate
570 	NET_C(U26.7, GND)
571 	NET_C(U26.14, I_V5)
572 
573 	TTL_7407_DIP(U27)       // Hex Buffers with High Votage Open-Collector Outputs
574 	NET_C(U27.7, GND)
575 	NET_C(U27.14, I_V5)
576 
577 	TTL_7407_DIP(U28)       // Hex Buffers with High Votage Open-Collector Outputs
578 	NET_C(U28.7, GND)
579 	NET_C(U28.14, I_V5)
580 
581 	TL081_DIP(U29)          // Op. Amp.
582 	NET_C(U29.7, I_V12)
583 	NET_C(U29.4, I_VM12)
584 
585 //  AY_3_8912_DIP(U30)      // PSG -- emulated by MAME
586 
587 	CD4069_DIP(U31)         // Hex Inverter
588 	NET_C(U31.7, GND)
589 	NET_C(U31.14, I_V12)
590 
591 	CD4069_DIP(U32)         // Hex Inverter
592 	NET_C(U32.7, GND)
593 	NET_C(U32.14, I_V12)
594 
595 //  TTL_74LS125_DIP(U33)    // Quad 3-state buffer
596 //  NET_C(U33.7, GND)
597 //  NET_C(U33.14, I_V5)
598 
599 //  TTL_74LS374_DIP(U34)    // Octal D-Type Transparent Latches And Edge-Triggered Flip-Flop
600 //  NET_C(U34.10, GND)
601 //  NET_C(U34.20, I_V5)
602 //
603 //  TTL_74LS374_DIP(U35)    // Octal D-Type Transparent Latches And Edge-Triggered Flip-Flop
604 //  NET_C(U34.10, GND)
605 //  NET_C(U34.20, I_V5)
606 
607 //  TTL_74LS74_DIP(U36)     // Dual D Flip Flop
608 //  NET_C(U36.7, GND)
609 //  NET_C(U36.14, I_V5)
610 
611 //  TTL_74LS10_DIP(U37)     // Triple 3-Input NAND Gate
612 //  NET_C(U37.7, GND)
613 //  NET_C(U37.14, I_V5)
614 
615 //  TTL_74LS14_DIP(U38)
616 //  NET_C(U38.7, GND)
617 //  NET_C(U38.14, I_V5)
618 
619 //  TTL_74LS08_DIP(U39)     // Quad 2-Input AND Gates
620 //  NET_C(U39.7, GND)
621 //  NET_C(U39.14, I_V5)
622 
623 //  TTL_74LS30_DIP(U40)     // 8-Input NAND Gate
624 //  NET_C(U40.7, GND)
625 //  NET_C(U40.14, I_V5)
626 
627 //  TTL_74LS14_DIP(U41)
628 //  NET_C(U41.7, GND)
629 //  NET_C(U41.14, I_V5)
630 
631 	//
632 	// Sheet 7, top-left/middle (Thrust)
633 	//
634 
635 	NET_C(R58.1, GND)
636 	NET_C(R58.2, U12.3, U10.6, U11.6, U15.6)
637 	ALIAS(SUM_VCA, R58.2)
638 	NET_C(U12.2, R75.1, R76.2)
639 	NET_C(R76.1, GND)
640 	NET_C(R75.2, U12.6)
641 	ALIAS(BUFFER, U12.6)
642 
643 	NET_C(I_V12, U4.4, C75.2)
644 	NET_C(C75.1, GND)
645 	NET_C(U4.1, GND)
646 	NET_C(U4.2, I_VM12, C76.2)
647 	NET_C(C76.1, GND)
648 	NET_C(U4.3, C77.1)
649 	NET_C(C77.2, R27.2, U3.3)
650 	NET_C(R27.1, GND)
651 	NET_C(U3.2, U3.6, R28.1, R32.1)
652 	ALIAS(WBN, U3.6)
653 
654 	NET_C(R28.2, C17.2, R29.1)
655 	NET_C(C17.1, GND)
656 	NET_C(R29.2, C18.2, R30.1)
657 	NET_C(C18.1, GND)
658 	NET_C(R30.2, R31.2, U10.2)
659 	NET_C(R31.1, GND)
660 	NET_C(U10.3, R56.2)
661 	NET_C(R56.1, GND)
662 
663 	NET_C(I_THRUST_LOW, U24.5)
664 	NET_C(U24.6, R99.1, R70.1)
665 	NET_C(R99.2, I_V12)
666 	NET_C(R70.2, R71.2, Q4.E)
667 	NET_C(I_THRUST_HI, U24.3)
668 	NET_C(U24.4, R100.1, R71.1)
669 	NET_C(R100.2, I_V12)
670 	NET_C(Q4.B, GND)
671 	NET_C(Q4.C, R69.1)
672 	NET_C(R69.2, U10.5)
673 
674 	NET_C(R32.2, C19.2, R33.1)
675 	NET_C(C19.1, GND)
676 	NET_C(R33.2, C20.2, R34.1)
677 	NET_C(C20.1, GND)
678 	NET_C(R34.2, R35.2, U11.2)
679 	NET_C(R35.1, GND)
680 	NET_C(U11.3, R57.2)
681 	NET_C(R57.1, GND)
682 
683 	NET_C(I_THRUST_LSB, U24.1)
684 	NET_C(U24.2, R77.1, R73.1)
685 	NET_C(R77.2, I_V12)
686 	NET_C(R73.2, R74.2, Q5.E)
687 	NET_C(I_THRUST_MSB, U24.13)
688 	NET_C(U24.12, R78.1, R74.1)
689 	NET_C(R78.2, I_V12)
690 	NET_C(Q5.B, GND)
691 	NET_C(Q5.C, R72.1)
692 	NET_C(R72.2, U11.5)
693 
694 	//
695 	// Sheet 7, top-right (Skitter)
696 	//
697 
698 	NET_C(I_SKITTER, U24.9)
699 	NET_C(U24.8, R25.2, D1.K, R17.1)
700 	NET_C(R17.2, I_V12)
701 	NET_C(D1.A, C21.1, R26.2, R25.1, Q3.B)
702 	NET_C(C21.2, GND)
703 	NET_C(R26.1, GND)
704 	NET_C(Q3.C, GND, Q2.C)
705 	NET_C(Q3.E, R23.1)
706 	NET_C(R23.2, R22.2)
707 	NET_C(R22.1, Q2.E)
708 
709 #if (HLE_SKITTER_VCO)
710 	//
711 	// U1 is basically a standalone oscillator. Simulation at high
712 	// frequency puts it at around 45Hz. Samples from real machines
713 	// show it to be about 35Hz.
714 	//
715 	CLOCK(SKITTERCLK, 45)
716 	NET_C(SKITTERCLK.GND, GND)
717 	NET_C(SKITTERCLK.VCC, I_V12)
718 	AFUNC(SKITTERENV, 1, "if(A0<6,2,18)")
719 	NET_C(SKITTERENV.A0, SKITTERCLK.Q)
720 	NET_C(SKITTERENV.Q, Q2.B)
721 	NET_C(GND, C5.1, C5.2, C47.1, C47.2, R14.1, R14.2, R15.1, R15.2, R16.1, R16.2, R19.1, R19.2, U1.2, U1.3)
722 #else
723 	NET_C(Q2.B, R19.1)
724 	NET_C(R19.2, C5.1)
725 	NET_C(C5.2, C47.2, U1.2, R16.1)
726 	NET_C(C47.1, GND)
727 	NET_C(U1.3, R15.1, R14.2)
728 	NET_C(R14.1, GND)
729 	NET_C(R15.2, U1.6, R16.2)
730 #endif
731 
732 	NET_C(C9.2, R21.1)
733 	NET_C(C9.1, GND)
734 	NET_C(R21.2, R18.1)
735 	NET_C(R18.2, I_V12)
736 	NET_C(I_V12, C8.1)
737 	NET_C(C8.2, GND)
738 	NET_C(U5.7, R18.1)
739 	NET_C(U5.5, R23.2)
740 	NET_C(U5.4, U24.8)
741 	NET_C(U5.2, U5.6, R21.1)
742 	NET_C(U5.8, I_V12)
743 	NET_C(U5.1, GND)
744 	NET_C(U5.3, R20.1)
745 	NET_C(R20.2, C7.2, C6.1)
746 	NET_C(C7.1, GND)
747 	ALIAS(SKITTER, C6.2)
748 
749 	//
750 	// Sheet 7, middle-right (Enemy Ship)
751 	//
752 
753 	NET_C(I_ENEMY_SHIP, U24.11)
754 	NET_C(U24.10, R60.1, U13.4)
755 	NET_C(R60.2, I_V12)
756 	NET_C(U13.7, R59.1, R61.2)
757 	NET_C(R59.2, I_V12)
758 	NET_C(R61.1, U13.2, U13.6, C30.2)
759 	NET_C(C30.1, GND)
760 	NET_C(U13.5, R145.1, R144.1)
761 	ALIAS(_10HZ, R144.2)
762 	NET_C(U13.1, GND)
763 	NET_C(U13.8, I_V12, C29.2)
764 	NET_C(C29.1, GND)
765 	NET_C(U13.3, C28.1)
766 	ALIAS(ENEMY_SHIP, C28.2)
767 
768 	ALIAS(_100HZ, R135.1)
769 	NET_C(R145.2, R135.1)
770 	ALIAS(_50HZ, R134.1)
771 	ALIAS(_200HZA, R137.1)
772 	ALIAS(_200HZB, R138.1)
773 	NET_C(R138.2, R137.2, R134.2, R135.2, C61.2, R136.1)
774 	NET_C(C61.1, GND)
775 	NET_C(R136.2, Q11.E, U27.6)
776 	NET_C(U27.5, U26.8)
777 	NET_C(Q11.B, GND)
778 	NET_C(Q11.C, R131.1)
779 	NET_C(R131.2, U15.5)
780 	NET_C(U15.2, R106.2, R83.2)
781 	NET_C(R83.1, GND)
782 	NET_C(U15.3, R82.2)
783 	NET_C(R82.1, GND)
784 
785 	//
786 	// Sheet 7, bottom-right (Background)
787 	//
788 
789 	NET_C(I_BACKGROUND_LSB, U27.1, U26.10)
790 	NET_C(U27.2, R107.1, R108.1)
791 	NET_C(R107.2, I_V12)
792 	NET_C(R108.2, R101.1, U16.6, R109.2)
793 	NET_C(I_BACKGROUND_MSB, U27.3, U26.9)
794 	NET_C(U27.4, R110.1, R109.1)
795 	NET_C(R110.2, I_V12)
796 	NET_C(U16.5, GND)
797 	NET_C(U16.7, R101.2, R104.1)
798 	NET_C(R104.2, U16.2, R105.1, C56.2)
799 	NET_C(U16.3, R102.2, R103.1)
800 	NET_C(R103.2, I_V12)
801 	NET_C(R102.1, GND)
802 	NET_C(U16.1, R105.2, C56.1, C60.1)
803 	NET_C(C60.2, R130.1)
804 	NET_C(R130.2, D8.K, C59.1)
805 	NET_C(D8.A, I_V12)
806 	NET_C(C59.2, GND)
807 
808 #if (HLE_BACKGROUND_VCO)
809 	//
810 	//    R2 = 0.96310: HP = (0.000237231*A0) - 0.000561399
811 	//    R2 = 0.99617: HP = (0.0000527091*A0*A0) - (0.000501828*A0) + 0.00197538
812 	//    R2 = 0.99867: HP = (0.0000174335*A0*A0*A0) - (0.000309878*A0*A0) + (0.00198163*A0) - 0.00362162
813 	//    R2 = 0.99898: HP = (0.00000748879*A0*A0*A0*A0) - (0.000189174*A0*A0*A0) + (0.00180942*A0*A0) - (0.00759439*A0) + 0.0124560
814 	//    R2 = 0.99899: HP = (0.00000135301*A0*A0*A0*A0*A0) - (0.0000390321*A0*A0*A0*A0) + (0.000446417*A0*A0*A0) - (0.00250299*A0*A0) + (0.00693360*A0) - 0.00698302
815 	//
816 	VARCLOCK(BGCLK, 1, "max(0.000001,min(0.1,(0.00000748879*A0*A0*A0*A0) - (0.000189174*A0*A0*A0) + (0.00180942*A0*A0) - (0.00759439*A0) + 0.0124560))")
817 	NET_C(BGCLK.GND, GND)
818 	NET_C(BGCLK.VCC, I_V5)
819 	NET_C(BGCLK.A0, U16.1)
820 	NET_C(BGCLK.Q, BGENV.A0)
821 	NET_C(GND, C57.1, C57.2, C58.1, C58.2)
822 	AFUNC(BGENV, 1, "if(A0>2.5,2.5,-2.5)")
823 	NET_C(BGENV.Q, R106.1)
824 #else
825 	NET_C(U16.1, U25.5)
826 	NET_C(C60.2, U25.6)
827 	NET_C(R130.2, U25.8)
828 	NET_C(U25.7, C58.2)
829 	NET_C(C58.1, GND)
830 	NET_C(U25.1, GND)
831 	NET_C(U25.3, C57.1)
832 	NET_C(C57.2, R106.1)
833 #endif
834 
835 	//
836 	// Sheet 7, PSG input
837 	//
838 
839 	NET_C(R_PSG_1.2, R_PSG_2.2, R_PSG_3.2, R133.2, C64.1)
840 	NET_C(R133.1, GND)
841 	NET_C(C64.2, R132.1)
842 	NET_C(R132.2, U29.2, R122.1, C63.1)
843 	NET_C(U29.3, GND)
844 	NET_C(C63.2, R122.2, U29.6)
845 	ALIAS(PSG, U29.6)
846 
847 	//
848 	// Sheet 8, oscillators
849 	//
850 	// Pairs of CD4069 are used together with resistors and capacitors
851 	// to create oscillators. The formula for the frequency is
852 	// 1/(1.39*R*C). The following are simulated here:
853 	//
854 	// _200HZA: R142=330K, C68=0.01uF,  Freq=218.01Hz
855 	// _200HZB: R139=330K, C65=0.01uF,  Freq=218.01Hz
856 	//   _10HZ: R143=680K, C69=0.1uF,   Freq=10.58Hz
857 	//   _50HZ: R141=220K, C67=0.047uF, Freq=69.58Hz
858 	//  _100HZ: R140=270K, C66=0.022uF, Freq=121.12Hz
859 	//
860 
861 	CLOCK(_200HZACLK, 218.01)
862 	NET_C(_200HZACLK.VCC, I_V12)
863 	NET_C(_200HZACLK.GND, GND)
864 	NET_C(_200HZA, _200HZACLK.Q)
865 	NET_C(R142.1, R142.2, C68.1, C68.2, U32.5, U32.9, GND)
866 	HINT(U32.6, NC)
867 	HINT(U32.8, NC)
868 
869 	CLOCK(_200HZBCLK, 217.98)   // tweak frequency so this is out of phase
870 	NET_C(_200HZBCLK.VCC, I_V12)
871 	NET_C(_200HZBCLK.GND, GND)
872 	NET_C(_200HZB, _200HZBCLK.Q)
873 	NET_C(R139.1, R139.2, C65.1, C65.2, U32.13, U32.11, GND)
874 	HINT(U32.12, NC)
875 	HINT(U32.10, NC)
876 
877 	CLOCK(_10HZCLK, 10.58)
878 	NET_C(_10HZCLK.VCC, I_V12)
879 	NET_C(_10HZCLK.GND, GND)
880 	NET_C(_10HZ, _10HZCLK.Q)
881 	NET_C(R143.1, R143.2, C69.1, C69.2, U32.1, U32.3, GND)
882 	HINT(U32.2, NC)
883 	HINT(U32.4, NC)
884 
885 	CLOCK(_50HZCLK, 69.58)
886 	NET_C(_50HZCLK.VCC, I_V12)
887 	NET_C(_50HZCLK.GND, GND)
888 	NET_C(_50HZ, _50HZCLK.Q)
889 	NET_C(R141.1, R141.2, C67.1, C67.2, U31.1, U31.3, GND)
890 	HINT(U31.2, NC)
891 	HINT(U31.4, NC)
892 
893 	// Note this oscillator is on Sheet 7, in the right-middle section
894 	CLOCK(_100HZCLK, 121.12)
895 	NET_C(_100HZCLK.VCC, I_V12)
896 	NET_C(_100HZCLK.GND, GND)
897 	NET_C(_100HZ, _100HZCLK.Q)
898 	NET_C(R140.1, R140.2, C66.1, C66.2, U31.5, U31.9, GND)
899 	HINT(U31.6, NC)
900 	HINT(U31.8, NC)
901 
902 	//
903 	// Sheet 8, top middle (Explosion 1)
904 	//
905 
906 	NET_C(WBN, R44.1)
907 	NET_C(R44.2, C13.2, R45.1)
908 	NET_C(C13.1, GND)
909 	NET_C(R45.2, C14.2, R46.1)
910 	NET_C(C14.1, GND)
911 	NET_C(R46.2, R47.2, U8.2)
912 	NET_C(R47.1, GND)
913 	NET_C(U8.3, R54.2)
914 	NET_C(R54.1, GND)
915 	NET_C(U8.6, SUM_VCA)
916 
917 	NET_C(I_EXPLOSION_1, U28.11)
918 	NET_C(U28.10, R120.1, U19.6)
919 	NET_C(R120.2, I_V12)
920 	NET_C(U19.5, R116.1, C51.1)
921 #if (ADD_CLIPPING_DIODES)
922 	// fast retriggering relies on clipping diodes which
923 	// aren't implemented by default for speed
924 	D_1N914(D_EXPLOSION_1)
925 	NET_C(D_EXPLOSION_1.A, U19.5)
926 	NET_C(D_EXPLOSION_1.K, I_V12)
927 #endif
928 	NET_C(R116.2, I_V12)
929 	NET_C(C51.2, U19.3)
930 	NET_C(U19.4, U19.1, U19.2, R87.1)
931 	NET_C(R87.2, Q9.E)
932 	NET_C(Q9.B, GND)
933 	NET_C(Q9.C, C37.1, R66.1)
934 	NET_C(C37.2, I_VM12)
935 	NET_C(R66.2, U8.5)
936 
937 	//
938 	// Sheet 8, top right (Explosion 2)
939 	//
940 
941 	NET_C(WBN, R48.1)
942 	NET_C(R48.2, C15.2, R49.1)
943 	NET_C(C15.1, GND)
944 	NET_C(R49.2, C16.2, R50.1)
945 	NET_C(C16.1, GND)
946 	NET_C(R50.2, R51.2, U9.2)
947 	NET_C(R51.1, GND)
948 	NET_C(U9.3, R55.2)
949 	NET_C(R55.1, GND)
950 	NET_C(U9.6, SUM_VCA)
951 
952 	NET_C(I_EXPLOSION_2, U28.9)
953 	NET_C(U28.8, R119.1, U19.8)
954 	NET_C(R119.2, I_V12)
955 	NET_C(U19.9, R117.1, C52.1)
956 #if (ADD_CLIPPING_DIODES)
957 	// fast retriggering relies on clipping diodes which
958 	// aren't implemented by default for speed
959 	D_1N914(D_EXPLOSION_2)
960 	NET_C(D_EXPLOSION_2.A, U19.9)
961 	NET_C(D_EXPLOSION_2.K, I_V12)
962 #endif
963 	NET_C(R117.2, I_V12)
964 	NET_C(C52.2, U19.11)
965 	NET_C(U19.10, U19.12, U19.13, R88.1)
966 	NET_C(R88.2, Q10.E)
967 	NET_C(Q10.B, GND)
968 	NET_C(Q10.C, C38.1, R68.1)
969 	NET_C(C38.2, I_VM12)
970 	NET_C(R68.2, U9.5)
971 
972 	//
973 	// Sheet 8, bottom left (Explosion 3)
974 
975 	NET_C(WBN, R37.1)
976 	NET_C(R37.2, C10.2, R38.1)
977 	NET_C(C10.1, GND)
978 	NET_C(R38.2, C11.2, R39.1)
979 	NET_C(C11.1, GND)
980 	NET_C(R39.2, R40.2, U6.2)
981 	NET_C(R40.1, GND)
982 	NET_C(U6.3, R52.2)
983 	NET_C(R52.1, GND)
984 	NET_C(U6.6, SUM_VCA)
985 
986 	NET_C(I_EXPLOSION_3, U28.5)
987 	NET_C(U28.6, R118.1, U18.8)
988 	NET_C(R118.2, I_V12)
989 	NET_C(U18.9, R115.1, C50.1)
990 #if (ADD_CLIPPING_DIODES)
991 	// fast retriggering relies on clipping diodes which
992 	// aren't implemented by default for speed
993 	D_1N914(D_EXPLOSION_3)
994 	NET_C(D_EXPLOSION_3.A, U18.9)
995 	NET_C(D_EXPLOSION_3.K, I_V12)
996 #endif
997 	NET_C(R115.2, I_V12)
998 	NET_C(C50.2, U18.11)
999 	NET_C(U18.10, U18.12, U18.13, R86.1)
1000 	NET_C(R86.2, Q8.E)
1001 	NET_C(Q8.B, GND)
1002 	NET_C(Q8.C, C36.1, R62.1)
1003 	NET_C(C36.2, I_VM12)
1004 	NET_C(R62.2, U6.5)
1005 
1006 	//
1007 	// Sheet 8, bottom left (Fireball)
1008 	//
1009 
1010 	NET_C(WBN, R41.1)
1011 	NET_C(R41.2, R43.2, U7.2, R42.2)
1012 	NET_C(R43.1, GND)
1013 	NET_C(R42.1, C12.2)
1014 	NET_C(C12.1, _50HZ)
1015 	NET_C(U7.3, R53.2)
1016 	NET_C(R53.1, GND)
1017 	NET_C(U7.6, SUM_VCA)
1018 
1019 	NET_C(I_FIREBALL, U28.13)
1020 	NET_C(U28.12, R111.1, U18.6)
1021 	NET_C(R111.2, I_V12)
1022 	NET_C(U18.5, R112.1, C49.1)
1023 #if (ADD_CLIPPING_DIODES)
1024 	// fast retriggering relies on clipping diodes which
1025 	// aren't implemented by default for speed
1026 	D_1N914(D_FIREBALL)
1027 	NET_C(D_FIREBALL.A, U18.5)
1028 	NET_C(D_FIREBALL.K, I_V12)
1029 #endif
1030 	NET_C(R112.2, I_V12)
1031 	NET_C(C49.2, U18.3)
1032 	NET_C(U18.4, U18.1, U18.2, R85.1)
1033 	NET_C(R85.2, Q7.E)
1034 	NET_C(Q7.B, GND)
1035 	NET_C(Q7.C, R67.1)
1036 	NET_C(R67.2, C35.1, R64.1)
1037 	NET_C(C35.2, I_VM12)
1038 	NET_C(R64.2, U7.5)
1039 
1040 	//
1041 	// Sheet 8, bottom-ish middle (Bounce)
1042 	//
1043 
1044 	NET_C(_50HZ, C45.1)
1045 	NET_C(C45.2, R81.1)
1046 	NET_C(R81.2, R80.2, U14.2)
1047 #if (SOUND_VARIANT == VARIANT_ELIMINATOR)
1048 	NET_C(WBN, R79.1)
1049 	NET_C(R79.2, R80.2)
1050 #endif
1051 	NET_C(R80.1, GND)
1052 	NET_C(U14.3, R63.2)
1053 	NET_C(R63.1, GND)
1054 	NET_C(U14.6, SUM_VCA)
1055 
1056 	NET_C(I_BOUNCE, U28.3)
1057 	NET_C(U28.4, R114.1, U17.8)
1058 	NET_C(R114.2, I_V12)
1059 	NET_C(U17.9, R113.1, C48.1)
1060 	NET_C(R113.2, I_V12)
1061 	NET_C(C48.2, U17.11)
1062 	NET_C(U17.10, U17.13, U17.12, R84.1)
1063 	NET_C(R84.2, Q6.E)
1064 	NET_C(Q6.B, GND)
1065 	NET_C(Q6.C, C34.1, C33.1, R65.1)
1066 	NET_C(C33.2, C34.2, I_VM12)
1067 	NET_C(R65.2, U14.5)
1068 
1069 	//
1070 	// Sheet 8, bottom middle (Torpedo 1)
1071 	//
1072 
1073 	NET_C(I_TORPEDO_1, U27.9)
1074 	NET_C(U27.8, R125.1, U22.8)
1075 	NET_C(R125.2, I_V12)
1076 	NET_C(U22.9, R124.1, C55.1)
1077 #if (ADD_CLIPPING_DIODES)
1078 	// fast retriggering relies on clipping diodes which
1079 	// aren't implemented by default for speed
1080 	D_1N914(D_TORPEDO_1)
1081 	NET_C(D_TORPEDO_1.A, U22.9)
1082 	NET_C(D_TORPEDO_1.K, I_V12)
1083 #endif
1084 	NET_C(R124.2, I_V12)
1085 	NET_C(C55.2, U22.11, U23.2)
1086 	NET_C(U22.10, U22.12, U22.13, D4.K)
1087 	NET_C(D4.A, R89.1)
1088 	NET_C(R89.2, C39.2, D2.K)
1089 	NET_C(C39.1, GND)
1090 
1091 #if (HLE_TORPEDO1_VCO)
1092 	//
1093 	//    R2 = 0.99044: HP = (0.000104804*A0) - 0.00000213808
1094 	//    R2 = 0.99913: HP = (0.0000155103*A0*A0) + (0.0000595259*A0) + 0.0000223086
1095 	//    R2 = 0.99930: HP = (0.00000342725*A0*A0*A0) + (0.000000183693*A0*A0) + (0.000079091*A0) + 0.0000157375
1096 	//    R2 = 0.99930: HP = (-0.000000204983*A0*A0*A0*A0) + (0.00000466123*A0*A0*A0) - (0.00000232484*A0*A0) + (0.000081060*A0) + 0.0000152562
1097 	//    R2 = 0.99931: HP = (-0.00000210641*A0*A0*A0*A0*A0) + (0.0000157326*A0*A0*A0*A0) - (0.0000399041*A0*A0*A0) + (0.0000541020*A0*A0) + (0.0000495068*A0) + 0.0000213321
1098 	//
1099 	VARCLOCK(TORP1CLK, 1, "max(0.000001,min(0.1,(0.00000342725*A0*A0*A0) + (0.000000183693*A0*A0) + (0.000079091*A0) + 0.0000157375))")
1100 	NET_C(TORP1CLK.GND, GND)
1101 	NET_C(TORP1CLK.VCC, I_V5)
1102 	NET_C(TORP1CLK.A0, D2.K)
1103 	NET_C(TORP1CLK.Q, T1ENV.A0)
1104 	AFUNC(T1ENV, 1, "if(A0>2.5,11.1,-11.1)")
1105 	NET_C(T1ENV.Q, U23.1)
1106 	NET_C(D2.A, D3.K, R91.1)
1107 	NET_C(C46.2, R90.1)
1108 	NET_C(R90.2, R91.2, R146.1)
1109 	NET_C(GND, U20.3, U20.2)
1110 #else
1111 	NET_C(D2.A, D3.K, R91.1, U20.3)
1112 	NET_C(U20.2, C46.2, R90.1)
1113 	NET_C(R90.2, U20.1, R91.2, R146.1)
1114 #endif
1115 	NET_C(D3.A, GND)
1116 	NET_C(C46.1, GND)
1117 	NET_C(R146.2, U23.1)
1118 
1119 	NET_C(U23.12, R129.1)
1120 	NET_C(U23.11, R128.1)
1121 	NET_C(U23.9, R126.1)
1122 	NET_C(U23.6, R127.1)
1123 	NET_C(R127.2, R126.2, R128.2, R129.2, C44.1)
1124 
1125 	//
1126 	// Sheet 8, middle (Torpedo 2)
1127 	//
1128 
1129 	NET_C(WBN, R36.1)
1130 #if (DISABLE_TORPEDO2_NOISE)
1131 	NET_C(R36.2, GND)   // noise source
1132 #else
1133 	NET_C(R36.2, D6.A)  // noise source
1134 #endif
1135 
1136 #if (HLE_TORPEDO2_VCO)
1137 	//
1138 	//    R2 = 0.98868: HP = (0.000142472*A0) - 0.0000121481
1139 	//    R2 = 0.99851: HP = (0.0000304790*A0*A0) + (0.000072730*A0) + 0.0000185913
1140 	//    R2 = 0.99875: HP = (0.0000104419*A0*A0*A0) - (0.00000603211*A0*A0) + (0.000109865*A0) + 0.0000082421
1141 	//    R2 = 0.99875: HP = (0.000000506238*A0*A0*A0*A0) + (0.0000080617*A0*A0*A0) - (0.00000220640*A0*A0) + (0.000107441*A0) + 0.0000087378
1142 	//    R2 = 0.99876: HP = (-0.0000095532*A0*A0*A0*A0*A0) + (0.0000569271*A0*A0*A0*A0) - (0.000116200*A0*A0*A0) + (0.000123414*A0*A0) + (0.0000501789*A0) + 0.0000180007
1143 	//
1144 	VARCLOCK(TORP2CLK, 1, "max(0.000001,min(0.1,(0.0000104419*A0*A0*A0) - (0.00000603211*A0*A0) + (0.000109865*A0) + 0.0000082421))")
1145 	NET_C(TORP2CLK.GND, GND)
1146 	NET_C(TORP2CLK.VCC, I_V5)
1147 	NET_C(TORP2CLK.A0, D6.K)
1148 	NET_C(TORP2CLK.Q, T2ENV.A0)
1149 	AFUNC(T2ENV, 1, "if(A0>2.5,11.1,-11.1)")
1150 	NET_C(T2ENV.Q, U21.1)
1151 	NET_C(D6.A, D7.K, R93.1)
1152 	NET_C(C43.2, R94.1)
1153 	NET_C(R94.2, R93.2, R92.2)
1154 	NET_C(GND, U20.6, U20.5)
1155 #else
1156 	NET_C(D6.A, U20.5, D7.K, R93.1)
1157 	NET_C(U20.6, C43.2, R94.1)
1158 	NET_C(R94.2, U20.7, R93.2, R92.2)
1159 #endif
1160 
1161 	NET_C(D7.A, GND)
1162 	NET_C(D6.K, C53.2, R147.2)
1163 	NET_C(C53.1, GND)
1164 	NET_C(R147.1, D5.A)
1165 	NET_C(U22.4, U22.1, U22.2, D5.K)
1166 	NET_C(C43.1, GND)
1167 	NET_C(R92.1, U21.1)
1168 
1169 	NET_C(I_TORPEDO_2, U27.11)
1170 	NET_C(U27.10, R123.1, U22.6)
1171 	NET_C(R123.2, I_V12)
1172 	NET_C(U22.5, R121.1, C54.1)
1173 #if (ADD_CLIPPING_DIODES)
1174 	// fast retriggering relies on clipping diodes which
1175 	// aren't implemented by default for speed
1176 	D_1N914(D_TORPEDO_2)
1177 	NET_C(D_TORPEDO_2.A, U22.5)
1178 	NET_C(D_TORPEDO_2.K, I_V12)
1179 #endif
1180 	NET_C(R121.2, I_V12)
1181 	NET_C(C54.2, U22.3, U21.2)
1182 	NET_C(U21.12, R98.1)
1183 	NET_C(U21.11, R97.1)
1184 	NET_C(U21.9, R95.1)
1185 	NET_C(U21.6, R96.1)
1186 	NET_C(R98.2, R97.2, R95.2, R96.2, C44.1)
1187 
1188 	//
1189 	// Sheet 8, middle right (Final sum)
1190 	//
1191 
1192 	NET_C(PSG, R10.1)
1193 	NET_C(ENEMY_SHIP, R7.1)
1194 	NET_C(SKITTER, R6.1)
1195 	NET_C(BUFFER, R8.1)
1196 	NET_C(C44.2, R9.1)
1197 	NET_C(R10.2, R7.2, R6.2, R8.2, R9.2)
1198 	ALIAS(OUTPUT, R9.2)
1199 
1200 	//
1201 	// Unconnected inputs
1202 	//
1203 
1204 	NET_C(GND, U17.1, U17.2, U17.5, U17.6)
1205 	NET_C(GND, U26.1, U26.2, U26.4, U26.5, U26.12, U26.13)
1206 	NET_C(GND, U27.13, U28.1)
1207 	NET_C(GND, U31.11, U31.13)
1208 
1209 	//
1210 	// Unconnected outputs
1211 	//
1212 
1213 
1214 #if (ENABLE_FRONTIERS)
1215 #define RXX 384
1216 	OPTIMIZE_FRONTIER(R10.1, RES_K(10), RXX)
1217 	OPTIMIZE_FRONTIER(R7.1, RES_K(220), RXX)
1218 	OPTIMIZE_FRONTIER(R6.1, RES_K(220), RXX)
1219 	OPTIMIZE_FRONTIER(R8.1, RES_K(10), RXX)
1220 #endif
1221 
1222 NETLIST_END()
1223 
1224 #endif
1225