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