1 // license:CC0
2 // copyright-holders:Aaron Giles
3 
4 //
5 // Netlist for Rip Off
6 //
7 // Derived from the schematics in the Rip Off manual.
8 //
9 // Known problems/issues:
10 //
11 //    * Voltage triggers for Motor 1 and Beep need a hack to
12 //       work (reducing resistance on one resistor from 4.7K to 100)
13 //       Need to understand why.
14 //
15 //    * Motor 1 and beep sounds dominate the output. They are
16 //       controlled by the current driven into the CCAs IC12 and
17 //       IC6. Not sure if this overdrive is related to the problem
18 //       with the switch above, but for now a hack is enabled to
19 //       multiply the resistance by 5x going into the CCA, which
20 //       seems to restore the balance to something reasonable.
21 //
22 
23 #include "netlist/devices/net_lib.h"
24 #include "nl_cinemat_common.h"
25 
26 //
27 // Optimizations
28 //
29 
30 #define HLE_LASER_VCO (1)
31 #define HLE_TORPEDO_VCO (1)
32 #define HLE_BACKGROUND_VCOS (1)
33 #define ENABLE_FRONTIERS (1)
34 
35 
36 //
37 // Hacks
38 //
39 
40 #define HACK_VOLTAGE_SWITCH (1)
41 #define HACK_CCA_RESISTANCE (1)
42 
43 
44 //
45 // Main netlist
46 //
47 
48 NETLIST_START(ripoff)
49 
50 	SOLVER(Solver, 1000)
51 	PARAM(Solver.DYNAMIC_TS, 1)
52 	PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 2e-5)
53 
54 	TTL_INPUT(I_OUT_0, 0)               // active high
55 	TTL_INPUT(I_OUT_1, 0)               // active high
56 	TTL_INPUT(I_OUT_2, 0)               // active high
57 	TTL_INPUT(I_OUT_3, 0)               // active high
58 	TTL_INPUT(I_OUT_4, 0)               // active high
59 	TTL_INPUT(I_OUT_7, 0)               // active high
60 
61 	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)
62 	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)
63 
64 	CINEMAT_LOCAL_MODELS
65 
66 	ANALOG_INPUT(I_V5, 5)
67 	ANALOG_INPUT(I_V15, 15)
68 	ANALOG_INPUT(I_VM15, -15)
69 
70 	RES(R1, RES_K(47))
71 	RES(R2, RES_K(47))
72 	RES(R3, RES_K(330))
73 	RES(R4, RES_K(10))
74 	RES(R5, RES_K(2.7))
75 	RES(R6, RES_K(2.7))
76 	RES(R7, RES_K(1))
77 	RES(R8, RES_K(470))
78 	RES(R9, 330)
79 	RES(R10, RES_K(20))
80 #if (HACK_VOLTAGE_SWITCH)
81 	RES(R11, 100)
82 #else
83 	RES(R11, RES_K(4.7))
84 #endif
85 	RES(R12, 300)
86 	RES(R13, RES_K(4.7))
87 	RES(R14, RES_K(8.2))
88 	RES(R15, RES_K(15))
89 	RES(R16, RES_K(2.7))
90 	RES(R17, RES_K(2.7))
91 #if (HACK_CCA_RESISTANCE)
92 	RES(R18, RES_K(4100))
93 #else
94 	RES(R18, RES_K(820))
95 #endif
96 	RES(R19, RES_K(27))
97 	RES(R20, RES_K(39))
98 	RES(R21, RES_K(10))
99 	RES(R22, 330)
100 	RES(R23, 160)
101 	RES(R24, RES_K(1))
102 	RES(R25, RES_K(1))
103 	RES(R26, RES_K(1))
104 	RES(R27, RES_K(2))
105 	RES(R28, RES_K(2))
106 	RES(R29, RES_K(4.7))
107 	RES(R30, RES_K(3.3))
108 	RES(R31, RES_K(68))
109 	RES(R32, RES_K(30))
110 	RES(R33, RES_K(15))
111 	RES(R34, RES_K(2.7))
112 	RES(R35, RES_K(2.7))
113 #if (HACK_CCA_RESISTANCE)
114 	RES(R36, RES_M(5))
115 #else
116 	RES(R36, RES_M(1))
117 #endif
118 	RES(R37, RES_K(56))
119 	RES(R38, RES_K(24))
120 	RES(R39, RES_K(15))
121 #if (HACK_VOLTAGE_SWITCH)
122 	RES(R40, 100)
123 #else
124 	RES(R40, RES_K(4.7))
125 #endif
126 	RES(R41, 300)
127 	RES(R42, RES_K(39))
128 	RES(R43, RES_K(10))
129 	RES(R44, 330)
130 	RES(R45, RES_K(27))
131 //  RES(R46, RES_K(12))  -- part of final amp (not emulated)
132 	RES(R47, RES_K(1))
133 	RES(R48, RES_K(2.7))
134 	RES(R49, 470)
135 //  POT(R50, RES_K())    -- listed as optional on schematics
136 //  RES(R51, RES_K(1.5)) -- part of final amp (not emulated)
137 //  RES(R52, 150)        -- part of final amp (not emulated)
138 //  RES(R53, RES_K(22))  -- part of final amp (not emulated)
139 //  RES(R54, 150)        -- part of final amp (not emulated)
140 //  RES(R55, RES_K(39))  -- part of final amp (not emulated)
141 	RES(R56, 150)
142 	RES(R57, RES_K(2.7))
143 	RES(R58, RES_M(1))
144 	RES(R59, RES_K(20))
145 	RES(R60, RES_K(10))
146 	RES(R61, RES_K(1))
147 	RES(R62, RES_K(10))
148 	RES(R63, RES_K(20))
149 	RES(R64, RES_K(39))
150 	RES(R65, RES_K(82))
151 	RES(R66, RES_K(2.7))
152 	RES(R67, RES_K(3.9))
153 	RES(R68, RES_M(1))
154 	RES(R69, RES_K(20))
155 	RES(R70, RES_K(10))
156 	RES(R71, RES_K(1))
157 	RES(R72, RES_K(10))
158 	RES(R73, RES_K(20))
159 	RES(R74, RES_K(39))
160 	RES(R75, RES_K(82))
161 	RES(R76, 470)
162 	RES(R77, RES_M(1.5))
163 	RES(R78, RES_K(20))
164 	RES(R79, RES_M(1))
165 	RES(R80, RES_K(43))
166 	RES(R81, RES_K(20))
167 	RES(R82, RES_M(1))
168 	RES(R83, RES_K(20))
169 	RES(R84, RES_K(10))
170 	RES(R85, RES_K(1))
171 	RES(R86, RES_K(10))
172 	RES(R87, RES_K(20))
173 	RES(R88, RES_K(39))
174 	RES(R89, RES_K(82))
175 	RES(R90, RES_K(1))
176 	RES(R91, RES_K(2.7))
177 
178 	CAP(C1, CAP_U(100))
179 	CAP(C2, CAP_U(0.1))
180 	CAP(C3, CAP_U(0.1))
181 	CAP(C4, CAP_U(0.02))
182 	CAP(C5, CAP_U(0.1))
183 	CAP(C6, CAP_U(0.68))
184 	CAP(C7, CAP_U(0.01))
185 	CAP(C8, CAP_U(4.7))
186 	CAP(C9, CAP_U(0.047))
187 	CAP(C10, CAP_U(0.01))
188 	CAP(C11, CAP_U(0.1))
189 	CAP(C12, CAP_U(0.1))
190 //  CAP(C13, CAP_U())      -- not used according to schematics
191 	CAP(C14, CAP_U(0.22))
192 	CAP(C15, CAP_U(0.01))
193 	CAP(C16, CAP_U(0.1))
194 	CAP(C17, CAP_U(0.1))
195 	CAP(C18, CAP_U(0.01))
196 	CAP(C19, CAP_U(0.1))
197 //  CAP(C20, CAP_U())      -- not used according to schematics
198 	CAP(C21, CAP_U(0.68))
199 //  CAP(C22, CAP_U(0.005)) -- part of final amp (not emulated)
200 //  CAP(C23, CAP_P(470))   -- part of final amp (not emulated)
201 //  CAP(C24, CAP_P(470))   -- part of final amp (not emulated)
202 //  CAP(C25, CAP_P(470))   -- part of final amp (not emulated)
203 	CAP(C26, CAP_U(0.1))
204 	CAP(C27, CAP_U(0.1))
205 	CAP(C28, CAP_U(0.01))
206 	CAP(C29, CAP_U(0.047))
207 	CAP(C30, CAP_U(0.22))
208 	CAP(C31, CAP_U(0.1))
209 	CAP(C32, CAP_U(0.68))
210 //  CAP(C33, CAP_U(0.1))   -- part of voltage converter (not emulated)
211 //  CAP(C34, CAP_U(25))    -- part of voltage converter (not emulated)
212 //  CAP(C35, CAP_U(25))    -- part of voltage converter (not emulated)
213 //  CAP(C36, CAP_U())      -- part of voltage converter (not emulated)
214 //  CAP(C37, CAP_U(0.1))   -- part of voltage converter (not emulated)
215 //  CAP(C38, CAP_U(25))    -- part of voltage converter (not emulated)
216 //  CAP(C39, CAP_U(25))    -- part of voltage converter (not emulated)
217 //  CAP(C40, CAP_U())      -- part of voltage converter (not emulated)
218 //  CAP(C41, CAP_U(25))    -- part of voltage converter (not emulated)
219 //  CAP(C42, CAP_U(0.1))   -- part of voltage converter (not emulated)
220 
221 	D_1N5240(D1)
222 	D_1N914(D2)
223 	D_1N914(D3)
224 	D_1N914(D4)
225 	D_1N914(D5)
226 	D_1N914(D6)
227 	D_1N914(D7)
228 	D_1N914(D8)
229 	D_1N914(D9)
230 	D_1N914(D10)
231 	D_1N914(D11)
232 	D_1N5240(D12)
233 	D_1N5240(D13)
234 
235 	Q_2N3906(Q1)            // PNP
236 	Q_2N3906(Q2)            // PNP
237 	Q_2N3906(Q3)            // PNP
238 	Q_2N3906(Q4)            // PNP
239 	Q_2N3906(Q5)            // PNP
240 //  Q_2N6292(Q6)            // PNP -- part of final amp (not emulated)
241 //  Q_2N6107(Q7)            // PNP -- part of final amp (not emulated)
242 #if !(HLE_LASER_VCO)
243 	Q_2N3904(Q8)            // NPN
244 #endif
245 #if !(HLE_TORPEDO_VCO)
246 	Q_2N3904(Q9)            // NPN
247 #endif
248 #if !(HLE_BACKGROUND_VCOS)
249 	Q_2N3904(Q10)           // NPN
250 #endif
251 
252 	AMI_S2688(IC1)          // Noise generator
253 
254 	TL081_DIP(IC2)          // Op. Amp.
255 	NET_C(IC2.7, I_V15)
256 	NET_C(IC2.4, I_VM15)
257 
258 	CA3080_DIP(IC3)         // Op. Amp.
259 	NET_C(IC3.4, I_VM15)
260 	NET_C(IC3.7, I_V15)
261 
262 	LM555_DIP(IC4)
263 
264 	LM555_DIP(IC5)
265 
266 	CA3080_DIP(IC6)         // Op. Amp.
267 	NET_C(IC6.4, I_VM15)
268 	NET_C(IC6.7, I_V15)
269 
270 	TL081_DIP(IC7)          // Op. Amp.
271 	NET_C(IC7.7, I_V15)
272 	NET_C(IC7.4, I_VM15)
273 
274 	TTL_74LS164_DIP(IC8)    // 8-bit Shift Reg.
275 	NET_C(IC8.7, GND)
276 	NET_C(IC8.14, I_V5)
277 
278 	TTL_74LS377_DIP(IC9)    // Octal D Flip Flop
279 	NET_C(IC9.10, GND)
280 	NET_C(IC9.20, I_V5)
281 
282 	TTL_7406_DIP(IC10)      // Hex inverter -- currently using a clone of 7416, no open collector behavior
283 	NET_C(IC10.7, GND)
284 	NET_C(IC10.14, I_V5)
285 
286 	LM555_DIP(IC11)
287 
288 	CA3080_DIP(IC12)        // Op. Amp.
289 	NET_C(IC12.4, I_VM15)
290 	NET_C(IC12.7, I_V15)
291 
292 	LM555_DIP(IC13)
293 
294 	TL081_DIP(IC14)         // Op. Amp.
295 	NET_C(IC14.7, I_V15)
296 	NET_C(IC14.4, I_VM15)
297 
298 	TL081_DIP(IC15)         // Op. Amp.
299 	NET_C(IC15.7, I_V15)
300 	NET_C(IC15.4, I_VM15)
301 
302 	TL081_DIP(IC16)         // Op. Amp.
303 	NET_C(IC16.7, I_V15)
304 	NET_C(IC16.4, I_VM15)
305 
306 	TL081_DIP(IC17)         // Op. Amp.
307 	NET_C(IC17.7, I_V15)
308 	NET_C(IC17.4, I_VM15)
309 
310 	TTL_74LS393_DIP(IC18)   // Dual 4 Bit B.C.
311 	NET_C(IC18.7, GND)
312 	NET_C(IC18.14, I_V5)
313 
314 	TL081_DIP(IC19)         // Op. Amp.
315 	NET_C(IC19.7, I_V15)
316 	NET_C(IC19.4, I_VM15)
317 
318 	TL081_DIP(IC20)         // Op. Amp.
319 	NET_C(IC20.7, I_V15)
320 	NET_C(IC20.4, I_VM15)
321 
322 	TL081_DIP(IC21)         // Op. Amp.
323 	NET_C(IC21.7, I_V15)
324 	NET_C(IC21.4, I_VM15)
325 
326 	TTL_74LS393_DIP(IC22)   // Dual 4 Bit B.C.
327 	NET_C(IC22.7, GND)
328 	NET_C(IC22.14, I_V5)
329 
330 //  TTL_7915_DIP(IC23)      // -15V Regulator -- not emulated
331 //  TTL_7815_DIP(IC24)      // +15V Regulator -- not emulated
332 
333 	TTL_7414_DIP(IC25)      // Hex Inverter
334 	NET_C(IC25.7, GND)
335 	NET_C(IC25.14, I_V5)
336 
337 	//
338 	// Explosion
339 	//
340 
341 	NET_C(I_OUT_7, R7.1, IC4.2)
342 	NET_C(IC4.8, IC4.4, I_V5)   // pin 4 not documented in schematics
343 	NET_C(R7.2, I_V5)
344 	NET_C(R8.2, I_V5)
345 	NET_C(R8.1, IC4.6, IC4.7, C6.1)
346 	NET_C(C6.2, GND)
347 	NET_C(IC4.5, C7.2)
348 	NET_C(C7.1, GND)
349 	NET_C(IC4.1, GND)
350 	NET_C(IC4.3, Q1.E)
351 	NET_C(Q1.B, R9.2)
352 	NET_C(R9.1, GND)
353 	NET_C(Q1.C, C8.1, R10.1)
354 	NET_C(C8.2, I_VM15)
355 	NET_C(R10.2, IC3.5)
356 
357 	NET_C(C1.1, IC1.4, I_V15)
358 	NET_C(C1.2, GND)
359 	NET_C(IC1.1, IC1.2, GND)
360 	NET_C(IC1.3, R1.1)
361 	NET_C(R1.2, C2.2, R2.1)
362 	NET_C(C2.1, GND)
363 	NET_C(R2.2, C3.1)
364 	NET_C(C3.2, IC2.2, C4.1, R3.1)
365 	NET_C(IC2.3, GND)
366 	NET_C(IC2.6, C4.2, R3.2, R4.1)
367 	NET_C(R4.2, C5.1)
368 	NET_C(C5.2, R5.2, IC3.2)
369 	NET_C(R5.1, GND)
370 	NET_C(IC3.3, R6.2)
371 	NET_C(R6.1, GND)
372 	NET_C(IC3.6, IC7.3, R19.2)
373 	NET_C(R19.1, GND)
374 
375 	//
376 	// Shift register
377 	//
378 
379 	NET_C(I_OUT_0, IC25.1)
380 	NET_C(IC25.2, IC25.13)
381 	NET_C(IC25.12, IC8.2)
382 	NET_C(I_OUT_1, IC25.3)
383 	NET_C(IC25.4, IC25.11)
384 	NET_C(IC25.10, IC8.8)
385 	NET_C(R24.1, I_V5)
386 	NET_C(R24.2, IC8.9, IC8.1)
387 	NET_C(I_OUT_2, IC25.5)
388 	NET_C(IC25.6, IC25.9)
389 	NET_C(IC25.8, IC9.11)
390 	NET_C(IC9.1, GND)
391 	NET_C(IC8.3, IC9.3)
392 	NET_C(IC8.4, IC9.4)
393 	NET_C(IC8.5, IC9.7)
394 	NET_C(IC8.6, IC9.8)
395 	NET_C(IC8.10, IC9.13)
396 	NET_C(IC8.11, IC9.14)
397 
398 	//
399 	// Background
400 	//
401 
402 	NET_C(IC9.9, IC22.2)
403 	NET_C(IC9.2, IC10.1)
404 	NET_C(IC10.2, R25.2, R26.1)
405 	NET_C(IC9.5, IC10.3)
406 	NET_C(IC10.4, R27.2, R28.1)
407 	NET_C(IC9.6, IC10.5)
408 	NET_C(IC10.6, R29.2, R30.1)
409 	NET_C(R29.1, R27.1, R25.1, D1.K, R23.1) // also R50.2 if present
410 	NET_C(R23.2, I_V15)
411 	NET_C(D1.A, GND)
412 	NET_C(R26.2, R28.2, R30.2, R76.1, IC19.2) // also R50.1 if present
413 	NET_C(IC19.3, GND)
414 	NET_C(IC19.6, R76.2, D8.A, D6.A)
415 
416 #if (HLE_BACKGROUND_VCOS)
417 	//
418 	// The two background VCOs are done with diodes and op-amps,
419 	// but end up generating a quite linear voltage-to-period
420 	// mapping. There is a low-frequency VCO and a high-frequency
421 	// one. They are combined and sent to an LS393 counter as a
422 	// clock after going through a voltage converter. Here we
423 	// skip the whole lot.
424 	//
425 	// First VCO, vs IC19.6:
426 	//    R2 = 0.99406: HP = (-0.0235033*A0) + 0.0179360
427 	//    R2 = 0.99415: HP = (0.000193041*A0*A0) - (0.0227932*A0) + 0.0182436
428 	//    R2 = 0.99418: HP = (-0.000106682*A0*A0*A0) - (0.000443621*A0*A0) - (0.0237264*A0) + 0.0180362
429 	//    R2 = 0.99419: HP = (0.000069781*A0*A0*A0*A0) + (0.000470159*A0*A0*A0) + (0.00104384*A0*A0) - (0.0224827*A0) + 0.0182202
430 	//    R2 = 0.99419: HP = (-0.0000242172*A0*A0*A0*A0*A0) - (0.000186286*A0*A0*A0*A0) - (0.000483269*A0*A0*A0) - (0.000431519*A0*A0) - (0.0233265*A0) + 0.0181209
431 	//
432 	// Second VCO, vs IC19.6:
433 	//    R2 = 0.99969: HP = (-0.000308955*A0) + 0.000256399
434 	//    R2 = 0.99986: HP = (0.00000356099*A0*A0) - (0.000295774*A0) + 0.000262224
435 	//    R2 = 0.99986: HP = (-0.000000646439*A0*A0*A0) - (0.000000309249*A0*A0) - (0.000301475*A0) + 0.000260938
436 	//    R2 = 0.99986: HP = (0.0000000315553*A0*A0*A0*A0) - (0.000000385224*A0*A0*A0) + (0.000000365474*A0*A0) - (0.000300909*A0) + 0.000261022
437 	//    R2 = 0.99986: HP = (-0.0000000265364*A0*A0*A0*A0*A0) - (0.000000249089*A0*A0*A0*A0) - (0.00000143038*A0*A0*A0) - (0.00000125235*A0*A0) - (0.000301835*A0) + 0.000260913
438 	//
439 	VARCLOCK(BGCLK1, 1, "max(0.000001,min(0.1,(-0.0235033*A0) + 0.0179360))")
440 	NET_C(BGCLK1.GND, GND)
441 	NET_C(BGCLK1.VCC, I_V15)
442 	NET_C(BGCLK1.A0, IC19.6)
443 	NET_C(BGCLK1.Q, BGCOMBINE.A0)
444 	NET_C(GND, R77.1, R77.2, R78.1, R78.2, R79.1, R79.2, C30.1, C30.2, D6.K, D7.A, D7.K, IC20.2, IC20.3)
445 
446 	VARCLOCK(BGCLK2, 1, "max(0.000001,min(0.1,(-0.000308955*A0) + 0.000256399))")
447 	NET_C(BGCLK2.GND, GND)
448 	NET_C(BGCLK2.VCC, I_V15)
449 	NET_C(BGCLK2.A0, IC19.6)
450 	NET_C(BGCLK2.Q, BGCOMBINE.A1)
451 	NET_C(GND, R80.1, R80.2, R81.1, R81.2, R82.1, R82.2, C31.1, C31.2, D8.K, D9.A, D9.K, IC21.2, IC21.3)
452 
453 	AFUNC(BGCOMBINE, 2, "max(A0,A1)")
454 	NET_C(BGCOMBINE.Q, IC22.1)
455 	NET_C(GND, R83.1, R83.2, R84.1, R84.2, R85.1, R85.2, D10.A, D10.K, D11.A, D11.K)
456 #else
457 	NET_C(D6.K, D7.A, R79.1, IC20.3)
458 	NET_C(D7.K, GND)
459 	NET_C(IC20.2, C30.2, R77.1)
460 	NET_C(C30.1, GND)
461 	NET_C(IC20.6, R77.2, D10.A, R78.1, R79.2)
462 	NET_C(D10.K, R78.2, R83.1, R81.2, D11.K)
463 	NET_C(D11.A, R82.2, IC21.6, R80.2, R81.1)
464 	NET_C(IC21.3, R82.1, D9.A, D8.K)
465 	NET_C(D9.K, GND)
466 	NET_C(IC21.2, C31.2, R80.1)
467 	NET_C(C31.1, GND)
468 	NET_C(R83.2, R84.2, Q10.B)
469 	NET_C(R84.1, GND)
470 	NET_C(Q10.E, GND)
471 	NET_C(Q10.C, R85.1, IC22.1)
472 	NET_C(R85.2, I_V5)
473 #endif
474 	NET_C(IC22.3, R86.1)
475 	NET_C(IC22.4, R87.1)
476 	NET_C(IC22.5, R88.1)
477 	NET_C(IC22.6, R89.1)
478 	NET_C(R86.2, R87.2, R88.2, R89.2, R90.2, R91.1)
479 	NET_C(R90.1, GND)
480 	NET_C(R91.2, C32.1)
481 	NET_C(C32.2, R49.1)
482 	NET_C(R49.2, R45.1)
483 
484 	//
485 	// Beep
486 	//
487 
488 	NET_C(IC9.12, Q2.B, R11.1)
489 	NET_C(R11.2, R12.2, I_V5)
490 	NET_C(Q2.E, R12.1)
491 	NET_C(Q2.C, R20.2, R21.2, Q3.E)
492 	NET_C(R20.1, I_VM15)
493 	NET_C(R21.1, GND)
494 	NET_C(Q3.B, R22.2)
495 	NET_C(R22.1, GND)
496 	NET_C(Q3.C, R18.1)
497 	NET_C(R18.2, IC6.5)
498 
499 	NET_C(R13.2, IC5.4, IC5.8, I_V5)
500 	NET_C(R13.1, IC5.7, R14.2)
501 	NET_C(R14.1, IC5.6, IC5.2, C9.2)
502 	NET_C(C9.1, GND)
503 	NET_C(IC5.1, GND)
504 	NET_C(IC5.5, C10.2)
505 	NET_C(C10.1, GND)
506 	NET_C(IC5.3, R15.1)
507 	NET_C(R15.2, C11.1)
508 	NET_C(C11.2, R16.2, IC6.2)
509 	NET_C(R16.1, GND)
510 	NET_C(IC6.3, R17.2)
511 	NET_C(R17.1, GND)
512 	NET_C(IC6.6, IC7.3)
513 
514 	NET_C(IC7.6, IC7.2, C12.1)
515 	NET_C(C12.2, R45.2)
516 	ALIAS(OUTPUT, R45.1)
517 
518 	//
519 	// Motor 1
520 	//
521 
522 	NET_C(IC9.15, R40.1, Q4.B)
523 	NET_C(R40.2, R41.1, I_V5)
524 	NET_C(R41.2, Q4.E)
525 	NET_C(Q4.C, R42.2, R43.2, Q5.E)
526 	NET_C(R42.1, I_VM15)
527 	NET_C(R43.1, GND)
528 	NET_C(Q5.B, R44.2)
529 	NET_C(R44.1, GND)
530 	NET_C(Q5.C, R36.1)
531 	NET_C(R36.2, IC12.5)
532 
533 	NET_C(R31.2, IC11.4, IC11.8, I_V5)
534 	NET_C(R31.1, IC11.7, R32.2)
535 	NET_C(R32.1, IC11.6, IC11.2, C14.2)
536 	NET_C(C14.1, GND, IC11.1, C15.1)
537 	NET_C(C15.2, IC11.5)
538 	NET_C(IC11.3, R33.1)
539 	NET_C(R33.2, C16.1)
540 	NET_C(C16.2, R34.2, IC12.2, C19.2)
541 	NET_C(R34.1, GND)
542 	NET_C(IC12.3, R35.2)
543 	NET_C(R35.1, GND)
544 	NET_C(IC12.6, D12.A, IC7.3)
545 	NET_C(D12.K, D13.K)
546 	NET_C(D13.A, GND)
547 
548 	NET_C(R37.2, IC13.4, IC13.8, I_V5)
549 	NET_C(R37.1, IC13.7, R38.2)
550 	NET_C(R38.1, IC13.6, IC13.2, C17.2)
551 	NET_C(C17.1, GND)
552 	NET_C(IC13.1, GND)
553 	NET_C(IC13.5, C18.2)
554 	NET_C(C18.1, GND)
555 	NET_C(IC13.3, R39.1)
556 	NET_C(R39.2, C19.1)
557 
558 	//
559 	// Laser
560 	//
561 
562 	NET_C(I_OUT_4, IC10.13, IC18.12)
563 	NET_C(IC10.12, R56.1)
564 	NET_C(R56.2, C26.2, D2.K)
565 	NET_C(C26.1, GND)
566 
567 #if (HLE_LASER_VCO)
568 	//
569 	// This is a typical Cinemtraonics VCO, driving a TTL counter.
570 	// Netlist simulation requires a very small step which is not
571 	// realtime performant, so we model it offline with the small
572 	// step count, and then for realtime performance replace it
573 	// with a mapping.
574 	//
575 	// Here is the mapping between 26.2 and the TTL clock IC18.13
576 	// when the circuit is present:
577 	//
578 	//    R2 = 0.99566: HP = (0.0000211106*A0) + 0.0000233926
579 	//    R2 = 0.99925: HP = (0.000000616538*A0*A0) + (0.0000166899*A0) + 0.0000239800
580 	//    R2 = 0.99946: HP = (0.000000065592*A0*A0*A0) - (0.000000207181*A0*A0) + (0.0000190091*A0) + 0.0000237318
581 	//    R2 = 0.99946: HP = (0.00000000399629*A0*A0*A0*A0) - (0.00000000517200*A0*A0*A0) + (0.000000172470*A0*A0) + (0.0000184103*A0) + 0.0000237906
582 	//    R2 = 0.99946: HP = (0.0000000000207619*A0*A0*A0*A0*A0) + (0.00000000352382*A0*A0*A0*A0) - (0.00000000145304*A0*A0*A0) + (0.000000160778*A0*A0) + (0.0000184225*A0) + 0.0000237894
583 	//
584 	// And here is the mapping when the circuit is removed:
585 	//
586 	//    R2 = 0.98806: HP = (0.00245939*A0) - 0.000220173
587 	//    R2 = 0.99179: HP = (0.00545522*A0*A0) + (0.00103499*A0) - 0.000132203
588 	//    R2 = 0.99913: HP = (-0.102004*A0*A0*A0) + (0.0406935*A0*A0) - (0.00277839*A0) - 0.00000140594
589 	//    R2 = 0.99941: HP = (0.651650*A0*A0*A0*A0) - (0.377655*A0*A0*A0) + (0.078834*A0*A0) - (0.00454290*A0) + 0.00000408830
590 	//    R2 = 0.99941: HP = (2.264700*A0*A0*A0*A0*A0) - (0.633172*A0*A0*A0*A0) - (0.108936*A0*A0*A0) + (0.0542944*A0*A0) - (0.00371696*A0) + 0.00000401368
591 	//
592 	VARCLOCK(LASERCLK, 1, "max(0.000001,min(0.1,(-0.102004*A0*A0*A0) + (0.0406935*A0*A0) - (0.00277839*A0) - 0.00000140594))")
593 	NET_C(LASERCLK.GND, GND)
594 	NET_C(LASERCLK.VCC, I_V5)
595 	NET_C(LASERCLK.A0, C26.2)
596 	NET_C(LASERCLK.Q, IC18.13)
597 	NET_C(GND, R57.1, R57.2, R58.1, R58.2, R59.1, R59.2, R60.1, R60.2, R61.1, R61.2, C27.1, C27.2, D2.A, D3.A, D3.K, IC16.2, IC16.3)
598 #else
599 	NET_C(D2.A, IC16.3, D3.K, R58.1)
600 	NET_C(D3.A, GND)
601 	NET_C(IC16.2, R57.1, C27.2)
602 	NET_C(C27.1, GND)
603 	NET_C(IC16.6, R57.2, R58.2, R59.1)
604 	NET_C(R59.2, R60.2, Q8.B)
605 	NET_C(R60.1, GND)
606 	NET_C(Q8.E, GND)
607 	NET_C(Q8.C, R61.1, IC18.13)
608 	NET_C(R61.2, I_V5)
609 #endif
610 
611 	NET_C(IC18.9, R62.1)
612 	NET_C(IC18.8, R63.1)
613 	NET_C(IC18.10, R64.1)
614 	NET_C(IC18.11, R65.1)
615 	NET_C(R62.2, R63.2, R64.2, R65.2, R47.2, R48.1)
616 	NET_C(R47.1, GND)
617 	NET_C(R48.2, C21.1)
618 	NET_C(C21.2, R49.1)
619 
620 	//
621 	// Torpedo
622 	//
623 
624 	NET_C(I_OUT_3, IC10.11, IC18.2)
625 	NET_C(IC10.10, R66.1)
626 	NET_C(R66.2, C28.2, D4.K)
627 	NET_C(C28.1, GND)
628 
629 #if (HLE_TORPEDO_VCO)
630 	//
631 	// Another tricky Cinematronics VCO. Here is the mapping between
632 	// C28.2 and the TTL clock IC18.1 when the circuit is present:
633 	//
634 	//    R2 = 0.97255: HP = (0.0000327662*A0) + 0.0000149365
635 	//    R2 = 0.99171: HP = (0.00000331016*A0*A0) - (0.0000125849*A0) + 0.0000206090
636 	//    R2 = 0.99613: HP = (0.000000536978*A0*A0*A0) - (0.0000078207*A0*A0) + (0.0000390037*A0) + 0.0000148210
637 	//    R2 = 0.99748: HP = (0.000000092476*A0*A0*A0*A0) - (0.00000204069*A0*A0*A0) + (0.0000139512*A0*A0) - (0.0000143884*A0) + 0.0000205567
638 	//    R2 = 0.99798: HP = (0.0000000168890*A0*A0*A0*A0*A0) - (0.000000498868*A0*A0*A0*A0) + (0.00000512183*A0*A0*A0) - (0.0000205655*A0*A0) + (0.0000394849*A0) + 0.0000149619
639 	//
640 	// And here is the mapping when the circuit is removed:
641 	//
642 	//    R2 = 0.83356: HP = (0.000387263*A0) - 0.0000161072
643 	//    R2 = 0.96482: HP = (-0.000459844*A0*A0) + (0.00110697*A0) - 0.000085961
644 	//    R2 = 0.99210: HP = (0.000512521*A0*A0*A0) - (0.00183716*A0*A0) + (0.00202778*A0) - 0.000165571
645 	//    R2 = 0.99614: HP = (-0.000450996*A0*A0*A0*A0) + (0.00218565*A0*A0*A0) - (0.00381123*A0*A0) + (0.00280823*A0) - 0.000225737
646 	//    R2 = 0.99625: HP = (-0.000161974*A0*A0*A0*A0*A0) + (0.000309626*A0*A0*A0*A0) + (0.000915096*A0*A0*A0) - (0.00291505*A0*A0) + (0.00256587*A0) - 0.000209241
647 	//
648 	VARCLOCK(TORPEDOCLK, 1, "max(0.000001,min(0.1,(0.000512521*A0*A0*A0) - (0.00183716*A0*A0) + (0.00202778*A0) - 0.000165571))")
649 	NET_C(TORPEDOCLK.GND, GND)
650 	NET_C(TORPEDOCLK.VCC, I_V5)
651 	NET_C(TORPEDOCLK.A0, C28.2)
652 	NET_C(TORPEDOCLK.Q, IC18.1)
653 	NET_C(GND, R67.1, R67.2, R68.1, R68.2, R69.1, R69.2, R70.1, R70.2, R71.1, R71.2, C29.1, C29.2, D4.A, D5.A, D5.K, IC17.2, IC17.3)
654 #else
655 	NET_C(D4.A, IC17.3, D5.K, R68.1)
656 	NET_C(D5.A, GND)
657 	NET_C(IC17.2, C29.2, R67.1)
658 	NET_C(C29.1, GND)
659 	NET_C(IC17.6, R67.2, R68.2, R69.1)
660 	NET_C(R69.2, R70.2, Q9.B)
661 	NET_C(R70.1, GND)
662 	NET_C(Q9.E, GND)
663 	NET_C(Q9.C, R71.1, IC18.1)
664 	NET_C(R71.2, I_V5)
665 #endif
666 
667 	NET_C(IC18.5, R72.1)
668 	NET_C(IC18.6, R73.1)
669 	NET_C(IC18.4, R74.1)
670 	NET_C(IC18.3, R75.1)
671 	NET_C(R72.2, R73.2, R74.2, R75.2, R48.1)
672 
673 	//
674 	// Unconnected inputs
675 	//
676 
677 	NET_C(GND, IC9.17, IC9.18, IC10.9, IC22.12, IC22.13)
678 	NET_C(GND, IC14.2, IC14.3, IC15.2, IC15.3)  // part of final amp
679 
680 	//
681 	// Unconnected outputs
682 	//
683 
684 	HINT(IC9.16, NC)        // Q6
685 	HINT(IC9.19, NC)        // Q7
686 	HINT(IC10.8, NC)        // QD
687 	HINT(IC22.11, NC)       // Q0
688 	HINT(IC22.10, NC)       // Q1
689 	HINT(IC22.9, NC)        // Q2
690 	HINT(IC22.8, NC)        // Q3
691 
692 #if (ENABLE_FRONTIERS)
693 	//
694 	// Split explosion/beep/motor from other sources
695 	//
696 	OPTIMIZE_FRONTIER(R45.2, RES_M(1), 50)
697 	OPTIMIZE_FRONTIER(IC7.3, RES_M(1), 50)
698 
699 	//
700 	// Split noise generator from consumers
701 	//
702 	OPTIMIZE_FRONTIER(R1.1, RES_M(1), 50)
703 #endif
704 
705 NETLIST_END()
706