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