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