1 // license:CC0 2 // copyright-holders:Aaron Giles 3 4 // 5 // Netlist for Astro Blaster 6 // 7 // Derived from the schematics in the Astro Blaster manual. 8 // 9 // Known problems/issues: 10 // 11 // * All sounds work under the right conditions. 12 // 13 // * SONAR and BONUS sounds fail to trigger after the first 14 // few seconds. For some reason the triggering via CD4011 15 // never actually fires the one-shot that controls the 16 // duration of the sound. 17 // 18 // * Performance is poor, primarily due to the SONAR sound 19 // and its connection to the mixing net. All attempts at 20 // separating the two have ended in failure so far. 21 // 22 23 #include "netlist/devices/net_lib.h" 24 #include "nl_astrob.h" 25 26 27 // 28 // Optimizations 29 // 30 31 #define HLE_LASER_1_VCO (1) 32 #define HLE_LASER_2_VCO (1) 33 #define SIMPLIFY_SONAR (0) // only use one oscillator 34 #define ENABLE_SONAR_ALT (1) // use frontiers to separate oscillators, modify UGF 35 #define ENABLE_FRONTIERS (1) 36 #define UNDERCLOCK_NOISE_GEN (1) 37 38 39 40 // 41 // Hacks 42 // 43 44 #define ADD_CLIPPING_DIODES (1) 45 46 47 48 #define D_1N5231(name) ZDIODE(name, "1N5231") 49 #define D_1N914(name) DIODE(name, "1N914") 50 51 #define Q_2N4403(name) QBJT_EB(name, "2N4403") 52 53 // JFET transistors not supported, but this should do the trick 54 #define Q_2N4093(name) MOSFET(name, "NMOS(VTO=-1 CAPMOD=0)") 55 56 #define LM555_DIP NE555_DIP 57 #define LM566_DIP NE566_DIP 58 59 #define TTL_74LS00_DIP TTL_7400_DIP 60 #define TTL_74LS04_DIP TTL_7404_DIP 61 62 // Define some random factors (5%) 63 64 #define FRND1 1.023 65 #define FRND2 1.017 66 #define FRND3 1.005 67 #define FRND4 1.014 68 #define FRND5 1.049 69 #define FRND6 1.044 70 #define FRND7 1.016 71 #define FRND8 1.037 72 #define FRND9 1.030 73 #define FRND10 1.001 74 #define FRND11 1.034 75 #define FRND12 1.043 76 #define FRND13 1.011 77 #define FRND14 1.016 78 #define FRND15 1.011 79 #define FRND16 1.006 80 #define FRND17 1.009 81 #define FRND18 1.007 82 #define FRND19 1.035 83 #define FRND20 1.004 84 85 // 86 // Main netlist 87 // 88 89 NETLIST_START(astrob) 90 91 #if 1 92 SOLVER(Solver, 1000) 93 PARAM(Solver.DYNAMIC_TS, 1) 94 PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 4e-5) 95 #if (SIMPLIFY_SONAR) 96 PARAM(Solver.Solver_54.DYNAMIC_MIN_TIMESTEP, 4e-6) // gets rid of NR loops failure 97 #else 98 #if !(ENABLE_SONAR_ALT) 99 PARAM(Solver.Solver_41.DYNAMIC_MIN_TIMESTEP, 6e-6) // gets rid of NR loops failure 100 #endif 101 #endif 102 #else 103 SOLVER(Solver, 48000) 104 #endif 105 106 // Overwrite model - the default model uses minimum datasheet 107 // specifications for 5V. These are for 10V and thus closer to the 108 // 12V used in this circuit. 109 NET_MODEL("CD4XXX FAMILY(TYPE=CMOS IVL=0.3 IVH=0.7 OVL=0.05 OVH=0.05 ORL=384 ORH=384)") 110 111 TTL_INPUT(I_LO_D0, 0) 112 NET_C(I_LO_D0, U31.1) 113 ALIAS(I_INVADER_1, U31.2) 114 TTL_INPUT(I_LO_D1, 0) 115 NET_C(I_LO_D1, U31.3) 116 ALIAS(I_INVADER_2, U31.4) 117 TTL_INPUT(I_LO_D2, 0) 118 NET_C(I_LO_D2, U31.11) 119 ALIAS(I_INVADER_3, U31.10) 120 TTL_INPUT(I_LO_D3, 0) 121 NET_C(I_LO_D3, U31.9) 122 ALIAS(I_INVADER_4, U31.8) 123 TTL_INPUT(I_LO_D4, 0) 124 NET_C(I_LO_D4, U30.13) 125 ALIAS(I_ASTROIDS, U30.12) 126 TTL_INPUT(I_LO_D5, 0) 127 ALIAS(I_MUTE, I_LO_D5) 128 TTL_INPUT(I_LO_D6, 0) 129 NET_C(I_LO_D6, U30.3, U29.11) 130 ALIAS(I_REFILL, U29.10) 131 ALIAS(I_REFILL_Q, U30.4) 132 TTL_INPUT(I_LO_D7, 0) 133 ALIAS(W, I_LO_D7) 134 NET_C(I_LO_D7, U31.5) 135 ALIAS(I_WARP, U31.6) 136 137 NET_C(GND, I_LO_D0.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) 138 NET_C(I_V5, I_LO_D0.VCC, 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) 139 140 TTL_INPUT(I_HI_D0, 0) 141 NET_C(I_HI_D0, U26.5) 142 ALIAS(I_LASER_1, U26.6) 143 TTL_INPUT(I_HI_D1, 0) 144 NET_C(I_HI_D1, U26.3) 145 ALIAS(I_LASER_2, U26.4) 146 TTL_INPUT(I_HI_D2, 0) 147 NET_C(I_HI_D2, U26.11) 148 ALIAS(I_SHORT_EXPL, U26.10) 149 TTL_INPUT(I_HI_D3, 0) 150 NET_C(I_HI_D3, U26.9) 151 ALIAS(I_LONG_EXPL, U26.8) 152 TTL_INPUT(I_HI_D4, 0) 153 NET_C(I_HI_D4, U26.1) 154 ALIAS(I_ATTACK_RATE, U26.2) 155 TTL_INPUT(I_HI_D5, 0) 156 NET_C(I_HI_D5, U31.13) 157 ALIAS(I_RATE_RESET, U31.12) 158 TTL_INPUT(I_HI_D6, 0) 159 NET_C(I_HI_D6, U29.9) 160 ALIAS(I_BONUS, U29.8) 161 TTL_INPUT(I_HI_D7, 0) 162 NET_C(I_HI_D7, U29.5) 163 ALIAS(I_SONAR, U29.6) 164 165 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) 166 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) 167 168 ANALOG_INPUT(I_V5, 5) 169 ANALOG_INPUT(I_V12, 12) 170 ANALOG_INPUT(I_VM12, -12) 171 172 RES(R1, RES_K(100) * FRND1) // part of SONAR circuit that relies on subtle part differences 173 RES(R2, RES_K(1.5) * FRND2) // part of SONAR circuit that relies on subtle part differences 174 RES(R3, RES_K(330) * FRND3) // part of SONAR circuit that relies on subtle part differences 175 RES(R4, RES_K(10) * FRND4) // part of SONAR circuit that relies on subtle part differences 176 #if (SIMPLIFY_SONAR) 177 // use less resistance to account for only emulating 1/4 identical circuits 178 RES(R5, RES_K(17)) // part of SONAR circuit that relies on subtle part differences 179 #else 180 RES(R5, RES_K(68) * FRND5) // part of SONAR circuit that relies on subtle part differences 181 #endif 182 RES(R6, RES_K(68)) 183 RES(R7, RES_K(22)) 184 RES(R8, RES_K(18)) 185 RES(R9, RES_K(33)) 186 RES(R10, RES_K(100)) 187 RES(R11, RES_K(150)) 188 RES(R12, RES_K(39)) 189 RES(R13, RES_K(330)) 190 RES(R14, RES_K(47)) 191 RES(R15, RES_K(220)) 192 RES(R16, RES_K(10)) 193 RES(R17, RES_K(10)) 194 RES(R18, RES_M(2.7)) 195 // RES(R19, RES_K(1)) 196 RES(R20, RES_M(1)) 197 RES(R21, RES_K(100)) 198 RES(R22, RES_K(470)) 199 RES(R23, RES_K(100)) 200 RES(R24, RES_M(2.2)) 201 RES(R25, RES_K(10)) 202 RES(R26, RES_K(820)) 203 RES(R27, RES_K(47)) 204 RES(R28, RES_K(22)) 205 RES(R29, RES_K(10)) 206 RES(R30, RES_K(82)) 207 RES(R31, RES_K(10)) 208 RES(R32, RES_K(22)) 209 RES(R33, RES_K(39)) 210 RES(R34, RES_K(4.7)) 211 RES(R35, RES_K(4.7)) 212 RES(R36, RES_K(100) * FRND6) // part of SONAR circuit that relies on subtle part differences 213 RES(R37, RES_K(1.5) * FRND7) // part of SONAR circuit that relies on subtle part differences 214 RES(R38, RES_K(330) * FRND8) // part of SONAR circuit that relies on subtle part differences 215 RES(R39, RES_K(10) * FRND9) // part of SONAR circuit that relies on subtle part differences 216 RES(R40, RES_K(68) * FRND10) // part of SONAR circuit that relies on subtle part differences 217 RES(R41, RES_K(10)) 218 RES(R42, RES_K(100)) 219 RES(R43, RES_K(470)) 220 RES(R44, RES_M(1)) 221 RES(R45, RES_K(100)) 222 RES(R46, RES_K(470)) 223 RES(R47, RES_K(10)) 224 RES(R48, RES_K(82)) 225 RES(R49, RES_K(39)) 226 RES(R50, RES_K(22)) 227 RES(R51, RES_K(10)) 228 RES(R52, RES_K(68)) 229 RES(R53, RES_K(10)) 230 RES(R54, RES_K(22)) 231 RES(R55, RES_M(2.2)) 232 RES(R56, RES_K(33)) 233 RES(R57, RES_K(33)) 234 RES(R58, RES_K(820)) 235 RES(R59, RES_K(100)) 236 RES(R60, RES_K(10)) 237 RES(R61, RES_K(100)) 238 RES(R62, RES_K(100) * FRND11) // part of SONAR circuit that relies on subtle part differences 239 RES(R63, RES_K(1.5) * FRND12) // part of SONAR circuit that relies on subtle part differences 240 RES(R64, RES_K(330) * FRND13) // part of SONAR circuit that relies on subtle part differences 241 RES(R65, RES_K(10) * FRND14) // part of SONAR circuit that relies on subtle part differences 242 RES(R66, RES_K(68) * FRND15) // part of SONAR circuit that relies on subtle part differences 243 RES(R67, RES_K(10)) 244 RES(R68, RES_K(82)) 245 RES(R69, RES_K(470)) 246 RES(R70, RES_K(100)) 247 RES(R71, RES_K(10)) 248 RES(R72, RES_K(10)) 249 RES(R73, RES_K(100)) 250 RES(R74, RES_K(4.7)) 251 RES(R75, RES_K(100)) 252 RES(R76, RES_K(22)) 253 RES(R77, RES_K(330)) 254 RES(R78, RES_K(1)) 255 RES(R79, RES_K(150)) 256 RES(R80, RES_M(1)) 257 RES(R81, RES_K(10)) 258 RES(R82, RES_K(100)) 259 RES(R83, RES_K(1)) 260 RES(R84, RES_K(5.6)) 261 RES(R85, RES_K(150)) 262 RES(R86, RES_K(10)) 263 RES(R87, RES_K(10)) 264 RES(R88, RES_K(100)) 265 RES(R89, RES_K(10)) 266 RES(R90, RES_K(100)) 267 RES(R91, RES_K(100) * FRND16) // part of SONAR circuit that relies on subtle part differences 268 RES(R92, RES_K(1.5) * FRND17) // part of SONAR circuit that relies on subtle part differences 269 RES(R93, RES_K(330) * FRND18) // part of SONAR circuit that relies on subtle part differences 270 RES(R94, RES_K(10) * FRND19) // part of SONAR circuit that relies on subtle part differences 271 RES(R95, RES_K(68) * FRND20) // part of SONAR circuit that relies on subtle part differences 272 RES(R96, RES_K(10)) 273 RES(R97, RES_K(4.7)) 274 RES(R98, RES_M(1)) 275 RES(R99, RES_M(1)) 276 RES(R100, RES_M(1)) 277 RES(R101, RES_M(1)) 278 RES(R102, RES_K(470)) 279 RES(R103, RES_M(1)) 280 RES(R104, RES_K(10)) 281 RES(R105, RES_K(10)) 282 RES(R106, RES_M(2.7)) 283 RES(R107, RES_K(100)) 284 RES(R108, RES_K(100)) 285 RES(R109, RES_K(10)) 286 RES(R110, RES_K(10)) 287 RES(R111, RES_K(10)) 288 RES(R112, RES_K(10)) 289 RES(R113, RES_K(10)) 290 RES(R114, 100) 291 // RES(R115, RES_K(100)) -- part of final amp (not emulated) 292 // RES(R116, RES_K(470)) -- part of final amp (not emulated) 293 RES(R117, RES_K(1)) 294 RES(R118, RES_K(470)) 295 RES(R119, RES_K(470)) 296 RES(R120, RES_K(220)) 297 RES(R121, RES_K(10)) 298 RES(R122, RES_K(4.7)) 299 // RES(R123, RES_K(1)) -- part of final amp (not emulated) 300 // RES(R124, RES_K(100)) -- part of final amp (not emulated) 301 RES(R125, RES_K(82)) 302 RES(R126, RES_K(39)) 303 RES(R127, RES_K(10)) 304 RES(R128, RES_K(22)) 305 RES(R129, RES_K(10)) 306 RES(R130, RES_K(22)) 307 RES(R131, RES_K(39)) 308 RES(R132, RES_K(82)) 309 RES(R133, RES_K(100)) 310 RES(R134, RES_M(2.7)) 311 // RES(R135, RES_K(22)) -- part of final amp (not emulated) 312 RES(R136, RES_K(1)) 313 RES(R137, RES_K(4.7)) 314 RES(R138, RES_M(2.2)) 315 RES(R139, RES_K(4.7)) 316 RES(R140, RES_K(4.7)) 317 // RES(R141, RES_K(22)) 318 // RES(R142, RES_M(1)) -- part of final amp (not emulated) 319 // RES(R143, RES_K(22)) -- part of final amp (not emulated) 320 // RES(R144, RES_K(22)) -- part of final amp (not emulated) 321 RES(R145, RES_K(4.7)) 322 RES(R146, RES_K(100)) 323 RES(R147, RES_M(2.2)) 324 RES(R148, RES_K(100)) 325 RES(R149, RES_K(100)) 326 RES(R150, RES_K(33)) 327 RES(R151, RES_M(1)) 328 RES(R152, RES_K(22)) 329 RES(R153, RES_K(47)) 330 RES(R154, RES_K(24)) 331 RES(R155, RES_K(56)) 332 RES(R156, RES_K(39)) 333 RES(R157, RES_K(27)) 334 RES(R158, RES_K(33)) 335 RES(R159, RES_K(62)) 336 RES(R160, RES_K(82)) 337 RES(R161, RES_K(120)) 338 RES(R162, RES_K(4.7)) 339 RES(R163, RES_K(10)) 340 RES(R164, RES_K(10)) 341 RES(R165, RES_M(1)) 342 RES(R166, RES_M(1)) 343 RES(R167, RES_K(1)) 344 RES(R168, RES_M(1)) 345 RES(R169, RES_K(100)) 346 RES(R170, RES_M(2.2)) 347 RES(R171, RES_K(100)) 348 RES(R172, RES_K(33)) 349 RES(R173, RES_K(47)) 350 RES(R174, RES_K(47)) 351 RES(R175, RES_K(47)) 352 RES(R176, RES_K(47)) 353 RES(R177, RES_K(47)) 354 RES(R178, RES_K(22)) 355 RES(R179, RES_K(47)) 356 RES(R180, RES_K(47)) 357 RES(R181, RES_K(47)) 358 RES(R182, RES_K(10)) 359 RES(R183, RES_K(10)) 360 RES(R184, RES_K(4.7)) 361 RES(R185, RES_M(1)) 362 RES(R186, RES_K(1)) 363 364 CAP(C1, CAP_U(0.01)) 365 CAP(C2, CAP_U(0.01)) 366 CAP(C3, CAP_U(0.1)) 367 CAP(C4, CAP_U(0.05)) 368 CAP(C5, CAP_U(0.1)) 369 CAP(C6, CAP_U(10)) 370 CAP(C7, CAP_U(0.1)) 371 CAP(C8, CAP_U(0.1)) 372 CAP(C9, CAP_U(0.1)) 373 // CAP(C10, CAP_U(0.05)) 374 // CAP(C11, CAP_U(0.05)) 375 CAP(C12, CAP_U(10)) 376 // CAP(C13, CAP_U(0.05)) 377 // CAP(C14, CAP_U(0.05)) 378 CAP(C15, CAP_U(10)) 379 CAP(C16, CAP_U(0.01)) 380 CAP(C17, CAP_U(0.01)) 381 CAP(C18, CAP_U(0.022)) 382 CAP(C19, CAP_U(0.05)) 383 CAP(C20, CAP_U(0.1)) 384 CAP(C21, CAP_U(0.33)) 385 CAP(C22, CAP_U(0.33)) 386 CAP(C23, CAP_U(0.01)) 387 CAP(C24, CAP_U(0.01)) 388 CAP(C25, CAP_U(0.01)) 389 CAP(C26, CAP_U(0.022)) 390 CAP(C27, CAP_U(10)) 391 CAP(C28, CAP_U(0.05)) 392 // CAP(C29, CAP_U(0.05)) 393 // CAP(C30, CAP_U(0.05)) 394 CAP(C31, CAP_U(0.0047)) 395 CAP(C32, CAP_U(0.05)) 396 CAP(C33, CAP_U(10)) 397 CAP(C34, CAP_U(10)) 398 CAP(C35, CAP_U(0.1)) 399 CAP(C36, CAP_U(0.0022)) 400 CAP(C37, CAP_U(0.1)) 401 CAP(C38, CAP_U(0.1)) 402 CAP(C39, CAP_U(0.1)) 403 CAP(C40, CAP_U(0.01)) 404 CAP(C41, CAP_U(0.01)) 405 // CAP(C42, CAP_U(0.001)) 406 // CAP(C43, CAP_U(10)) 407 // CAP(C44, CAP_U(0.001)) 408 // CAP(C45, CAP_U(0.001)) 409 // CAP(C46, CAP_U(10)) 410 CAP(C47, CAP_U(4.7)) 411 // CAP(C48, CAP_U(22)) -- part of final amp (not emulated) 412 CAP(C49, CAP_U(0.05)) 413 CAP(C50, CAP_U(0.05)) 414 CAP(C51, CAP_U(0.05)) 415 CAP(C52, CAP_U(0.05)) 416 CAP(C53, CAP_U(0.1)) 417 // CAP(C54, CAP_U(0.05)) 418 CAP(C55, CAP_U(0.05)) 419 CAP(C56, CAP_U(10)) 420 CAP(C57, CAP_U(0.1)) 421 // CAP(C58, CAP_U(4.7)) -- part of final amp (not emulated) 422 CAP(C59, CAP_U(0.33)) 423 CAP(C60, CAP_U(4.7)) 424 CAP(C61, CAP_U(4.7)) 425 CAP(C62, CAP_U(10)) 426 CAP(C63, CAP_U(0.1)) 427 CAP(C64, CAP_U(0.1)) 428 CAP(C65, CAP_U(0.01)) 429 // CAP(C66, CAP_U(0.05)) 430 CAP(C67, CAP_U(0.05)) 431 CAP(C68, CAP_U(0.0047)) 432 CAP(C69, CAP_U(4.7)) 433 CAP(C70, CAP_U(0.1)) 434 CAP(C71, CAP_U(0.022)) 435 CAP(C72, CAP_U(0.05)) 436 // CAP(C73, CAP_U(0.05)) 437 CAP(C74, CAP_U(0.05)) 438 CAP(C75, CAP_U(0.05)) 439 CAP(C76, CAP_U(0.022)) 440 CAP(C77, CAP_U(0.0047)) 441 CAP(C78, CAP_U(0.1)) 442 // CAP(C79, CAP_U(0.05)) 443 CAP(C80, CAP_U(4.7)) 444 CAP(C81, CAP_U(0.05)) 445 CAP(C82, CAP_U(0.1)) 446 447 D_1N5231(D1) 448 D_1N914(D2) 449 D_1N5231(D3) 450 D_1N5231(D4) 451 D_1N5231(D5) 452 D_1N5231(D6) 453 D_1N914(D7) 454 D_1N914(D8) 455 D_1N914(D9) 456 D_1N5231(D10) 457 D_1N914(D11) 458 D_1N914(D12) 459 // D_1N914(D13) -- part of final amp (not emulated) 460 D_1N914(D14) 461 D_1N914(D15) 462 D_1N914(D16) 463 D_1N914(D17) 464 D_1N914(D18) 465 D_1N914(D19) 466 D_1N914(D20) 467 D_1N914(D21) 468 D_1N914(D22) 469 D_1N914(D23) 470 D_1N914(D24) 471 D_1N914(D25) 472 D_1N914(D26) 473 D_1N914(D27) 474 D_1N914(D28) 475 D_1N914(D29) 476 D_1N914(D30) 477 D_1N914(D31) 478 479 Q_2N4403(Q1) 480 Q_2N4403(Q2) 481 Q_2N4403(Q3) 482 //Q_2N4093(Q4) // avoid singular matrix being created 483 Q_2N4093(Q5) 484 Q_2N4093(Q6) 485 Q_2N4403(Q7) 486 Q_2N4403(Q8) 487 Q_2N4403(Q9) 488 Q_2N4403(Q10) 489 490 TL084_DIP(U1) // Op. Amp. 491 NET_C(U1.4, I_V12) 492 NET_C(U1.11, I_VM12) 493 494 TL084_DIP(U2) // Op. Amp. 495 NET_C(U2.4, I_V12) 496 NET_C(U2.11, I_VM12) 497 498 #if (ENABLE_SONAR_ALT) 499 // Oscillators are of order 1kHz. No need to to have UGF in MHz range 500 PARAM(U1.A.MODEL, "TL084(TYPE=3 UGF=10k)") 501 PARAM(U1.B.MODEL, "TL084(TYPE=3 UGF=10k)") 502 PARAM(U1.C.MODEL, "TL084(TYPE=3 UGF=10k)") 503 PARAM(U1.D.MODEL, "TL084(TYPE=3 UGF=10k)") 504 PARAM(U2.A.MODEL, "TL084(TYPE=3 UGF=10k)") 505 PARAM(U2.B.MODEL, "TL084(TYPE=3 UGF=10k)") 506 PARAM(U2.C.MODEL, "TL084(TYPE=3 UGF=10k)") 507 PARAM(U2.D.MODEL, "TL084(TYPE=3 UGF=10k)") 508 #endif 509 510 CD4017_DIP(U3) // Decade Counter/Divider 511 NET_C(U3.8, GND) 512 NET_C(U3.16, I_V12) 513 514 NE555_DIP(U4) // Timer 515 516 NE555_DIP(U5) // Timer 517 518 NE555_DIP(U6) // Timer 519 520 TL084_DIP(U7) // Op. Amp. 521 NET_C(U7.4, I_V12) 522 NET_C(U7.11, I_VM12) 523 524 MM5837_DIP(U8) // Noise Generator 525 #if (UNDERCLOCK_NOISE_GEN) 526 // officially runs at 48-112kHz, but little noticeable difference 527 // in exchange for a big performance boost 528 PARAM(U8.FREQ, 12000) 529 #endif 530 531 CD4011_DIP(U9) // Quad 2-Input NAND Gates 532 NET_C(U9.7, GND) 533 NET_C(U9.14, I_V12) 534 535 CD4011_DIP(U10) // Quad 2-Input NAND Gates 536 NET_C(U10.7, GND) 537 NET_C(U10.14, I_V12) 538 539 CD4011_DIP(U11) // Quad 2-Input NAND Gates 540 NET_C(U11.7, GND) 541 NET_C(U11.14, I_V12) 542 543 CD4024_DIP(U12) // 7-Stage Ripple Binary Counter 544 NET_C(U12.7, GND) 545 NET_C(U12.14, I_V12) 546 547 NE555_DIP(U13) // Timer 548 549 CD4024_DIP(U14) // 7-Stage Ripple Binary Counter 550 NET_C(U14.7, GND) 551 NET_C(U14.14, I_V12) 552 553 CD4017_DIP(U15) // Decade Counter/Divider 554 NET_C(U15.8, GND) 555 NET_C(U15.16, I_V12) 556 557 TL084_DIP(U16) // Op. Amp. 558 NET_C(U16.4, I_V12) 559 NET_C(U16.11, I_VM12) 560 561 NE555_DIP(U17) // Timer 562 563 NE555_DIP(U18) // Timer 564 565 CD4024_DIP(U19) // 7-Stage Ripple Binary Counter 566 NET_C(U19.7, GND) 567 NET_C(U19.14, I_V12) 568 569 NE555_DIP(U20) // Timer 570 571 CD4011_DIP(U21) // Quad 2-Input NAND Gates 572 NET_C(U21.7, GND) 573 NET_C(U21.14, I_V12) 574 575 TL084_DIP(U22) // Op. Amp. 576 NET_C(U22.4, I_V12) 577 NET_C(U22.11, I_VM12) 578 579 NE555_DIP(U23) // Timer 580 581 NE555_DIP(U24) // Timer 582 583 CD4011_DIP(U25) // Quad 2-Input NAND Gates 584 NET_C(U25.7, GND) 585 NET_C(U25.14, I_V12) 586 587 TTL_7407_DIP(U26) // Hex Buffers with High Votage Open-Collector Outputs 588 NET_C(U26.7, GND) 589 NET_C(U26.14, I_V5) 590 591 CD4011_DIP(U27) // Quad 2-Input NAND Gates 592 NET_C(U27.7, GND) 593 NET_C(U27.14, I_V12) 594 595 CD4024_DIP(U28) // 7-Stage Ripple Binary Counter 596 NET_C(U28.7, GND) 597 NET_C(U28.14, I_V12) 598 599 TTL_7407_DIP(U29) // Hex Buffers with High Votage Open-Collector Outputs 600 NET_C(U29.7, GND) 601 NET_C(U29.14, I_V5) 602 603 TTL_7406_DIP(U30) // Hex inverter -- currently using a clone of 7416, no open collector behavior 604 NET_C(U30.7, GND) 605 NET_C(U30.14, I_V5) 606 607 TTL_7406_DIP(U31) // Hex inverter -- currently using a clone of 7416, no open collector behavior 608 NET_C(U31.7, GND) 609 NET_C(U31.14, I_V5) 610 611 // TTL_74LS374_DIP(U32) // Octal D-Type Transparent Latches And Edge-Triggered Flip-Flop 612 // NET_C(U32.10, GND) 613 // NET_C(U32.20, I_V5) 614 615 // TTL_74LS374_DIP(U33) // Octal D-Type Transparent Latches And Edge-Triggered Flip-Flop 616 // NET_C(U33.10, GND) 617 // NET_C(U33.20, I_V5) 618 619 // TTL_74LS00_DIP(U34) // Quad 4-Input NAND Gate 620 // NET_C(U34.7, GND) 621 // NET_C(U34.14, I_V5) 622 623 // TTL_74LS30_DIP(U35) // 8-Input NAND Gate 624 // NET_C(U35.7, GND) 625 // NET_C(U35.14, I_V5) 626 627 // TTL_74LS04_DIP(U36) // Hex Inverting Gates 628 // NET_C(U36.7, GND) 629 // NET_C(U36.14, I_V5) 630 631 NE555_DIP(U37) // Timer 632 633 NE555_DIP(U38) // Timer 634 635 // 636 // Sheet 7, top-left (SONAR) 637 // 638 639 NET_C(U1.3, GND) 640 NET_C(U1.2, D1.A, R4.1) 641 NET_C(U1.1, D1.K, R1.1) 642 NET_C(R1.2, R2.2, C1.1, C2.1) 643 NET_C(R2.1, GND) 644 NET_C(R4.2, R3.2, U1.7, C2.2, R5.2) 645 NET_C(C1.2, R3.1, U1.6) 646 NET_C(U1.5, GND) 647 648 #if (SIMPLIFY_SONAR) 649 // sonar has 4 identical circuits; reduce the net size 650 // by only emulating one and multiplying it by 4 651 NET_C(U1.9, U1.10, U1.12, U1.13, GND) 652 NET_C(R36.1, R36.2, R37.1, R37.2, R38.1, R38.2, R39.1, R39.2, R40.1, R40.2, GND) 653 NET_C(C16.1, C16.2, C17.1, C17.2, GND) 654 NET_C(D4.A, D4.K, GND) 655 656 NET_C(U2.2, U2.3, U2.5, U2.6, GND) 657 NET_C(R62.1, R62.2, R63.1, R63.2, R64.1, R64.2, R65.1, R65.2, R66.1, R66.2, GND) 658 NET_C(C24.1, C24.2, C25.1, C25.2, GND) 659 NET_C(D6.A, D6.K, GND) 660 661 NET_C(U2.9, U2.10, U2.12, U2.13, GND) 662 NET_C(R91.1, R91.2, R92.1, R92.2, R93.1, R93.2, R94.1, R94.2, R95.1, R95.2, GND) 663 NET_C(C40.1, C40.2, C41.1, C41.2, GND) 664 NET_C(D10.A, D10.K, GND) 665 666 NET_C(R5.1, R114.1, Q3.B) 667 #else 668 NET_C(U1.12, GND) 669 NET_C(U1.13, D4.A, R39.1) 670 NET_C(U1.14, D4.K, R36.1) 671 NET_C(R36.2, R37.2, C16.1, C17.1) 672 NET_C(R37.1, GND) 673 NET_C(R39.2, R38.2, U1.8, C17.2, R40.2) 674 NET_C(C16.2, R38.1, U1.9) 675 NET_C(U1.10, GND) 676 677 NET_C(U2.3, GND) 678 NET_C(U2.2, D6.A, R65.1) 679 NET_C(U2.1, D6.K, R62.1) 680 NET_C(R62.2, R63.2, C24.1, C25.1) 681 NET_C(R63.1, GND) 682 NET_C(R65.2, R64.2, U2.7, C25.2, R66.2) 683 NET_C(C24.2, R64.1, U2.6) 684 NET_C(U2.5, GND) 685 686 NET_C(U2.12, GND) 687 NET_C(U2.13, D10.A, R94.1) 688 NET_C(U2.14, D10.K, R91.1) 689 NET_C(R91.2, R92.2, C40.1, C41.1) 690 NET_C(R92.1, GND) 691 NET_C(R94.2, R93.2, U2.8, C41.2, R95.2) 692 NET_C(C40.2, R93.1, U2.9) 693 NET_C(U2.10, GND) 694 695 NET_C(R5.1, R40.1, R114.1, Q3.B, R95.1, R66.1) 696 697 #if (ENABLE_SONAR_ALT) 698 // The oscillators need a small offset voltage to start oscillating. 699 // Without frontiers I assume the offset voltage is created due to the 700 // slight differences in resistor values in the four (now connected) 701 // oscillators. 702 703 ANALOG_INPUT(I_VOFF, 0.1) 704 RES(RDUM1, RES_M(1)) 705 RES(RDUM2, RES_M(1)) 706 RES(RDUM3, RES_M(1)) 707 RES(RDUM4, RES_M(1)) 708 NET_C(R5.2, RDUM1.1) 709 NET_C(R40.2, RDUM2.1) 710 NET_C(R95.2, RDUM3.1) 711 NET_C(R66.2, RDUM4.1) 712 NET_C(I_VOFF, RDUM1.2, RDUM2.2, RDUM3.2, RDUM4.2) 713 714 OPTIMIZE_FRONTIER(R5.2, RES_K(68), 192) 715 OPTIMIZE_FRONTIER(R40.2, RES_K(68), 192) 716 OPTIMIZE_FRONTIER(R95.2, RES_K(68), 192) 717 OPTIMIZE_FRONTIER(R66.2, RES_K(68), 192) 718 #endif 719 #endif 720 721 NET_C(R114.2, GND) 722 NET_C(Q3.E, Q2.E, Q1.C) 723 NET_C(Q1.B, R108.2, C47.2, R117.2) 724 NET_C(C47.1, R108.1, I_V12) 725 NET_C(I_V12, R109.1) 726 NET_C(R109.2, Q1.E) 727 NET_C(R117.1, D2.A) 728 NET_C(D2.K, U11.4, C4.2) 729 NET_C(C4.1, U11.2, R20.1) 730 #if (ADD_CLIPPING_DIODES) 731 // fast retriggering relies on clipping diodes which 732 // aren't implemented by default for speed 733 D_1N914(D_SONAR) 734 NET_C(D_SONAR.A, U11.2) 735 NET_C(D_SONAR.K, I_V12) 736 #endif 737 NET_C(U11.5, U11.6, U11.3) 738 NET_C(U11.1, R21.1) 739 NET_C(I_SONAR, R21.1) 740 NET_C(R21.2, R20.2, I_V12) 741 742 NET_C(Q2.B, GND) 743 NET_C(Q2.C, R110.2, R111.2, U7.3) 744 NET_C(R110.1, GND) 745 NET_C(R111.1, R112.1, I_VM12) 746 NET_C(Q3.C, U7.2, R112.2, R113.1) 747 NET_C(R113.2, U7.1) 748 ALIAS(SONAR, U7.1) 749 750 // 751 // Sheet 7, middle-left (LASER-1) 752 // 753 754 NET_C(I_LASER_1, R146.1, U25.9) 755 NET_C(U25.8, C64.2, R138.1) 756 #if (ADD_CLIPPING_DIODES) 757 // fast retriggering relies on clipping diodes which 758 // aren't implemented by default for speed 759 D_1N914(D_LASER_1) 760 NET_C(D_LASER_1.A, U25.8) 761 NET_C(D_LASER_1.K, I_V12) 762 #endif 763 NET_C(R146.2, R138.2, R134.2, R139.2, U24.8, C56.1, I_V12) 764 NET_C(U25.10, U25.5, U25.6, D11.K, U24.4) 765 NET_C(C64.1, U25.4, U19.2) 766 NET_C(D11.A, R107.1, C57.2) 767 NET_C(C57.1, Q10.C, C65.1, U24.1, GND) 768 NET_C(R107.2, Q10.B, R134.1) 769 NET_C(Q10.E, U24.5) 770 #if (HLE_LASER_1_VCO) 771 // 772 // R2 = 0.98461: HP = (0.00000524285*A0) + 0.00000563193 773 // R2 = 0.99441: HP = (0.000000368659*A0*A0) + (0.00000116694*A0) + 0.0000155514 774 // R2 = 0.99797: HP = (0.000000154808*A0*A0*A0) - (0.00000213809*A0*A0) + (0.0000138122*A0) - 0.00000398935 775 // R2 = 0.99877: HP = (-0.0000000527853*A0*A0*A0*A0) + (0.00000128033*A0*A0*A0) - (0.0000107258*A0*A0) + (0.0000413916*A0) - 0.0000352437 776 // R2 = 0.99943: HP = (0.0000000343262*A0*A0*A0*A0*A0) - (0.00000096054*A0*A0*A0*A0) + (0.0000105481*A0*A0*A0) - (0.0000561978*A0*A0) + (0.000148191*A0) - 0.000131018 777 // 778 VARCLOCK(LASER1CLK, 1, "max(0.000001,min(0.1,(0.0000000343262*A0*A0*A0*A0*A0) - (0.00000096054*A0*A0*A0*A0) + (0.0000105481*A0*A0*A0) - (0.0000561978*A0*A0) + (0.000148191*A0) - 0.000131018))") 779 NET_C(LASER1CLK.GND, GND) 780 NET_C(LASER1CLK.VCC, I_V12) 781 NET_C(LASER1CLK.A0, Q10.E) 782 NET_C(LASER1CLK.Q, LASER1ENV.A1) 783 AFUNC(LASER1ENV, 2, "if(A0>6,A1,0)") 784 NET_C(LASER1ENV.A0, U25.10) 785 NET_C(LASER1ENV.Q, U19.1) 786 NET_C(U24.3, GND) 787 NET_C(U24.2, U24.6, R140.1, C65.2, GND) 788 #else 789 NET_C(U24.3, U19.1) 790 NET_C(U24.2, U24.6, R140.1, C65.2) 791 #endif 792 NET_C(R140.2, U24.7, R139.1) 793 NET_C(C56.2, GND) 794 NET_C(U19.12, R132.1) 795 NET_C(U19.11, R131.1) 796 NET_C(U19.9, R130.1) 797 NET_C(U19.6, R105.1) 798 NET_C(U19.4, R104.1) 799 NET_C(R104.2, R105.2, R130.2, R131.2, R132.2, C52.1) 800 ALIAS(LASER_1, C52.2) 801 802 // 803 // Sheet 7, bottom-left (LASER-2) 804 // 805 806 NET_C(I_LASER_2, R149.1, U25.12) 807 NET_C(U25.13, C63.2, R147.1) 808 #if (ADD_CLIPPING_DIODES) 809 // fast retriggering relies on clipping diodes which 810 // aren't implemented by default for speed 811 D_1N914(D_LASER_2) 812 NET_C(D_LASER_2.A, U25.13) 813 NET_C(D_LASER_2.K, I_V12) 814 #endif 815 NET_C(R149.2, R147.2, R106.2, R145.2, U20.8, C62.1, I_V12) 816 NET_C(U25.11, U25.1, U25.2, D12.K, U20.4) 817 NET_C(C63.1, U25.3, U14.2) 818 NET_C(D12.A, R133.1, C53.2) 819 NET_C(C53.1, Q9.C, C68.1, U20.1, GND) 820 NET_C(R133.2, Q9.B, R106.1) 821 NET_C(Q9.E, U20.5) 822 #if (HLE_LASER_2_VCO) 823 // 824 // R2 = 0.98942: HP = (0.00000251528*A0) + 0.00000244265 825 // R2 = 0.99596: HP = (0.000000160852*A0*A0) + (0.000000694298*A0) + 0.00000690896 826 // R2 = 0.99821: HP = (0.000000068284*A0*A0*A0) - (0.000000949931*A0*A0) + (0.00000630369*A0) - 0.00000175548 827 // R2 = 0.99896: HP = (-0.0000000291178*A0*A0*A0*A0) + (0.000000689145*A0*A0*A0) - (0.00000568073*A0*A0) + (0.0000214603*A0) - 0.0000188875 828 // R2 = 0.99937: HP = (0.0000000153499*A0*A0*A0*A0*A0) - (0.000000433800*A0*A0*A0*A0) + (0.00000480504*A0*A0*A0) - (0.0000257871*A0*A0) + (0.000068467*A0) - 0.0000608574 829 // 830 VARCLOCK(LASER2CLK, 1, "max(0.000001,min(0.1,(0.0000000153499*A0*A0*A0*A0*A0) - (0.000000433800*A0*A0*A0*A0) + (0.00000480504*A0*A0*A0) - (0.0000257871*A0*A0) + (0.000068467*A0) - 0.0000608574))") 831 NET_C(LASER2CLK.GND, GND) 832 NET_C(LASER2CLK.VCC, I_V12) 833 NET_C(LASER2CLK.A0, Q9.E) 834 NET_C(LASER2CLK.Q, LASER2ENV.A1) 835 AFUNC(LASER2ENV, 2, "if(A0>6,A1,0)") 836 NET_C(LASER2ENV.A0, U25.11) 837 NET_C(LASER2ENV.Q, U14.1) 838 NET_C(U20.3, GND) 839 NET_C(U20.2, U20.6, R137.1, C68.2, GND) 840 #else 841 NET_C(U20.3, U14.1) 842 NET_C(U20.2, U20.6, R137.1, C68.2) 843 #endif 844 NET_C(R137.2, U20.7, R145.1) 845 NET_C(C62.2, GND) 846 NET_C(U14.12, R125.1) 847 NET_C(U14.11, R126.1) 848 NET_C(U14.9, R128.1) 849 NET_C(U14.6, R129.1) 850 NET_C(U14.4, R127.1) 851 NET_C(R127.2, R129.2, R128.2, R126.2, R125.2, C51.1) 852 ALIAS(LASER_2, C51.2) 853 854 // 855 // Sheet 7, middle-top (REFILL) 856 // 857 858 NET_C(I_REFILL, U3.15, R59.1) 859 NET_C(R59.2, I_V12, R17.2) 860 861 // CD4011 oscillator: R18=2.7M, C3=0.1u, freq=2.664 862 CLOCK(OSC1, 2.664) 863 NET_C(OSC1.GND, GND) 864 NET_C(OSC1.VCC, I_V12) 865 NET_C(OSC1.Q, U3.14) 866 NET_C(R18.1, R18.2, C3.1, C3.2, U9.1, U9.2, U9.5, U9.6, GND) 867 868 NET_C(U3.3, R8.1) 869 NET_C(U3.2, R7.1) 870 NET_C(U3.4, R9.1) 871 NET_C(U3.7, R12.1) 872 NET_C(U3.10, R14.1) 873 NET_C(U3.1, R6.1) 874 NET_C(U3.5, R10.1) 875 NET_C(U3.6, R11.1) 876 NET_C(U3.9, R15.1) 877 NET_C(U3.11, R13.1) 878 NET_C(U3.13, GND) 879 NET_C(R17.1, R8.2, R7.2, R9.2, R12.2, R14.2, R6.2, R10.2, R11.2, R15.2, R13.2, R16.2) 880 NET_C(R16.1, Q7.B) 881 882 // CD4011 oscillator: R46=470k, C20=0.1u, freq=15.307 883 CLOCK(OSC2, 15.307) 884 NET_C(OSC2.GND, GND) 885 NET_C(OSC2.VCC, I_V12) 886 NET_C(OSC2.Q, U4.4, U9.12, U9.13) 887 NET_C(U9.11, U5.4) 888 NET_C(R46.1, R46.2, C20.1, C20.2, U9.8, U9.9, GND) 889 890 NET_C(U5.7, R67.1, R68.2) 891 NET_C(R68.1, U5.2, U5.6, C26.2) 892 NET_C(C26.1, GND, U5.1, C18.1, U4.1, Q7.C) 893 NET_C(U5.5, U4.5, Q7.E) 894 NET_C(R67.2, U5.8, R41.2, U4.8, I_V12) 895 NET_C(R41.1, R42.2, U4.7) 896 NET_C(R42.1, U4.2, U4.6, C18.2) 897 NET_C(U5.3, R69.2) 898 NET_C(U4.3, R43.2) 899 NET_C(R43.1, C49.1, R69.1, I_REFILL_Q) 900 ALIAS(REFILL, C49.2) 901 902 // 903 // Sheet 7, middle-bottom (ATTACK, RATE RESET) 904 // 905 906 NET_C(I_RATE_RESET, U15.15, R96.1) 907 NET_C(R96.2, I_V12) 908 NET_C(I_ATTACK_RATE, R148.1, U21.5) 909 NET_C(R148.2, R166.2, I_V12) 910 NET_C(U21.6, R166.1, C67.2) 911 #if (ADD_CLIPPING_DIODES) 912 // fast retriggering relies on clipping diodes which 913 // aren't implemented by default for speed 914 D_1N914(D_ATTACK_RATE) 915 NET_C(D_ATTACK_RATE.A, U21.6) 916 NET_C(D_ATTACK_RATE.K, I_V12) 917 #endif 918 NET_C(C67.1, U21.3) 919 NET_C(U21.4, U21.1, U21.2, U15.14) 920 921 NET_C(U15.3, D23.A) 922 NET_C(D23.K, R161.1) 923 NET_C(U15.2, D22.A) 924 NET_C(D22.K, R160.1) 925 NET_C(U15.4, D21.A) 926 NET_C(D21.K, R159.1) 927 NET_C(U15.7, D17.A) 928 NET_C(D17.K, R155.1) 929 NET_C(U15.10, D15.A) 930 NET_C(D15.K, R153.1) 931 NET_C(U15.1, D18.A) 932 NET_C(D18.K, R156.1) 933 NET_C(U15.5, D20.A) 934 NET_C(D20.K, R158.1) 935 NET_C(U15.6, D19.A) 936 NET_C(D19.K, R157.1) 937 NET_C(U15.9, D16.A) 938 NET_C(D16.K, R154.1) 939 NET_C(U15.11, D14.A) 940 NET_C(D14.K, R152.1) 941 NET_C(U15.13, GND) 942 NET_C(R161.2, R160.2, R159.2, R155.2, R153.2, R156.2, R158.2, R157.2, R154.2, R152.2, R178.2, U16.6) 943 944 NET_C(I_WARP, R164.1) 945 NET_C(R164.2, R162.1, R163.2, U16.5) 946 NET_C(R162.2, I_V12) 947 NET_C(R163.1, GND) 948 NET_C(U16.7, R178.1) 949 ALIAS(V, U16.7) 950 951 // 952 // Sheet 7, top-right (EXPLOSIONS) 953 // 954 955 NET_C(I_SHORT_EXPL, R169.1, U27.2) 956 NET_C(R169.2, R185.2, I_V12) 957 NET_C(U27.1, R185.1, C81.2) 958 #if (ADD_CLIPPING_DIODES) 959 // fast retriggering relies on clipping diodes which 960 // aren't implemented by default for speed 961 D_1N914(D_SHORT_EXPL) 962 NET_C(D_SHORT_EXPL.A, U27.1) 963 NET_C(D_SHORT_EXPL.K, I_V12) 964 #endif 965 NET_C(C81.1, U27.11) 966 NET_C(U27.13, U27.12, U27.3) 967 NET_C(U27.3, R184.1) 968 NET_C(R184.2, D31.A) 969 NET_C(D31.K, D30.A, R182.2, R183.2) 970 NET_C(R182.1, GND) 971 NET_C(D30.K, R180.1, R181.1, C80.1, D29.K) 972 NET_C(C80.2, GND) 973 NET_C(R180.2, U16.9, R179.1) 974 NET_C(R179.2, U16.8, R177.1) 975 NET_C(R181.2, U16.10, Q6.D, D26.K) // D and S swapped on schematics??? 976 NET_C(Q6.G, C72.2, R151.2, Q5.G) 977 NET_C(R151.1, GND) 978 NET_C(C72.1, U8.3) 979 NET_C(U8.4, I_V12) 980 NET_C(U8.2, I_VM12) 981 NET_C(U8.1, GND) 982 NET_C(Q6.S, D26.A, GND) 983 NET_C(D29.A, D24.K, C69.1) 984 NET_C(C69.2, GND) 985 NET_C(R183.1, R186.2, U27.4, U27.8, U27.9, D28.K) 986 NET_C(R186.1, C75.1) 987 NET_C(C75.2, U21.8, U21.9, R168.2) 988 NET_C(R168.1, U21.11) 989 NET_C(I_LONG_EXPL, R171.1, U27.6) 990 NET_C(R171.2, R170.2, I_V12) 991 NET_C(R170.1, U27.5, C82.2) 992 #if (ADD_CLIPPING_DIODES) 993 // fast retriggering relies on clipping diodes which 994 // aren't implemented by default for speed 995 D_1N914(D_LONG_EXPL) 996 NET_C(D_LONG_EXPL.A, U27.5) 997 NET_C(D_LONG_EXPL.K, I_V12) 998 #endif 999 NET_C(C82.1, U27.10) 1000 NET_C(U21.12, U21.13, C74.1, R165.2) 1001 NET_C(U21.10, C74.2, R167.1) 1002 NET_C(R165.1, GND) 1003 NET_C(R167.2, D24.A) 1004 NET_C(R177.2, R176.1, C78.1) 1005 NET_C(C78.2, U16.2, U16.1, C61.1) 1006 NET_C(R176.2, U16.3, C77.2, C76.2) 1007 ALIAS(EXPLOSIONS, C61.2) 1008 NET_C(C77.1, GND) 1009 NET_C(C76.1, D27.K, D28.A) 1010 NET_C(D27.A, GND) 1011 1012 // 1013 // Sheet 7, middle-right (ASTROIDS) 1014 // 1015 1016 NET_C(I_ASTROIDS, R97.1, R174.1, R175.1) 1017 NET_C(R97.2, I_V12) 1018 NET_C(R174.2, U16.13, R173.1) 1019 NET_C(R175.2, U16.12, Q5.D, D25.K) // D and S swapped on schematics??? 1020 NET_C(D25.A, Q5.S, GND) 1021 NET_C(R173.2, U16.14, R172.1) 1022 NET_C(R172.2, R150.1, C70.1) 1023 NET_C(C70.2, U7.9, U7.8, R136.1) 1024 NET_C(R150.2, C71.2, U7.10) 1025 NET_C(C71.1, GND) 1026 NET_C(R136.2, C59.2, C60.1) 1027 NET_C(C59.1, GND) 1028 ALIAS(ASTROIDS, C60.2) 1029 1030 // 1031 // Sheet 7, bottom-right (mixer) 1032 // 1033 1034 ALIAS(INVADER_1, R98.1) 1035 ALIAS(INVADER_2, R99.1) 1036 ALIAS(INVADER_3, R100.1) 1037 ALIAS(INVADER_4, R101.1) 1038 NET_C(R98.2, R99.2, R100.2, R101.2, C55.1) 1039 NET_C(ASTROIDS, R121.1) 1040 NET_C(EXPLOSIONS, R122.1) 1041 ALIAS(BONUS, R118.1) 1042 NET_C(REFILL, R119.1) 1043 NET_C(LASER_1, R102.1) 1044 NET_C(LASER_2, R103.1) 1045 NET_C(SONAR, R120.1) 1046 NET_C(C55.2, R121.2, R122.2, R118.2, R119.2, R102.2, R103.2, R120.2) 1047 AFUNC(MUTEFUNC, 2, "if(A0>2.5,0,A1)") 1048 NET_C(MUTEFUNC.A0, I_MUTE) 1049 NET_C(MUTEFUNC.A1, R121.2) 1050 ALIAS(OUTPUT, MUTEFUNC.Q) 1051 // ALIAS(OUTPUT, C55.2) 1052 1053 // 1054 // Sheet 8, middle-top (INVADER_1) 1055 // 1056 1057 NET_C(U22.10, GND) 1058 NET_C(U22.9, D5.A, R29.1) 1059 NET_C(R29.2, R55.2, U22.14, C21.2, R72.1) 1060 NET_C(D5.K, U22.8, R58.1) 1061 NET_C(R58.2, C22.1, R57.2, R56.2, C21.1) 1062 NET_C(W, U30.5) 1063 NET_C(U30.6, R57.1) 1064 NET_C(R56.1, GND) 1065 NET_C(U22.13, C22.2, R55.1) 1066 NET_C(U22.12, GND) 1067 1068 NET_C(R85.1, U23.7, R86.2) 1069 NET_C(R85.2, U23.8, R83.2, R84.2, R73.2, U18.8, I_V12) 1070 NET_C(R86.1, U23.2, U23.6, C38.2) 1071 NET_C(C38.1, U23.1, C37.1, C28.1, U18.1, GND) 1072 NET_C(I_INVADER_1, U23.4, R73.1, U18.4) 1073 NET_C(C28.2, U18.5) 1074 NET_C(U23.3, U18.2) 1075 NET_C(U23.5, R87.2) 1076 NET_C(R87.1, V) 1077 NET_C(R83.1, D9.A) 1078 NET_C(D9.K, Q8.B, R72.2) 1079 NET_C(Q8.E, R84.1) 1080 NET_C(Q8.C, C37.2, U18.6, U18.7) 1081 NET_C(U18.3, INVADER_1) 1082 1083 // 1084 // Sheet 8, middle (INVADER_2) 1085 // 1086 1087 NET_C(R81.2, R70.2, U13.8, C27.1, I_V12) 1088 NET_C(C27.2, GND) 1089 NET_C(R81.1, R82.2, U13.7) 1090 NET_C(R82.1, U13.2, U13.6, C36.2) 1091 NET_C(C36.1, U13.1, GND) 1092 NET_C(U13.5, R71.2) 1093 NET_C(R71.1, V) 1094 NET_C(I_INVADER_2, U13.4, R70.1) 1095 NET_C(U13.3, U12.1) 1096 // CD4011 oscillator: R22=470k, C5=0.1u, freq=15.3Hz 1097 CLOCK(OSC3, 15.3) 1098 NET_C(OSC3.GND, GND) 1099 NET_C(OSC3.VCC, I_V12) 1100 NET_C(OSC3.Q, U12.2) 1101 NET_C(R22.1, R22.2, C5.1, C5.2, U11.8, U11.9, U11.12, U11.13, GND) 1102 NET_C(U12.12, R48.1) 1103 NET_C(U12.11, R49.1) 1104 NET_C(U12.9, R50.1) 1105 NET_C(U12.6, R47.1) 1106 NET_C(R47.2, R50.2, R49.2, R48.2) 1107 NET_C(R48.2, INVADER_2) 1108 1109 // 1110 // Sheet 8, middle-bottom (INVADER_4) 1111 // 1112 1113 NET_C(R89.2, U37.4, U37.8, C15.1, R60.2, R88.2, U38.8, I_V12) 1114 NET_C(R89.1, U37.7, R90.2) 1115 NET_C(R90.1, U37.2, U37.6, C39.2) 1116 NET_C(C39.1, U37.1, C23.1, U38.1, GND) 1117 NET_C(U37.5, R35.1) 1118 NET_C(R35.2, V, R34.1) 1119 NET_C(C15.2, GND) 1120 NET_C(U37.3, U28.1) 1121 NET_C(U28.2, U28.5) 1122 NET_C(U28.12, R31.1) 1123 NET_C(U28.11, R32.1) 1124 NET_C(U28.9, R33.1) 1125 NET_C(U28.6, R30.1) 1126 NET_C(R31.2, R32.2, R33.2, R30.2, R34.2, U38.5) 1127 NET_C(U38.2, U38.6, C23.2, R61.1) 1128 NET_C(R61.2, U38.7, R60.1) 1129 NET_C(U38.4, R88.1, I_INVADER_4) 1130 NET_C(INVADER_4, U38.3) 1131 1132 // 1133 // Sheet 8, middle-bottom (BONUS) 1134 // 1135 1136 NET_C(I_BONUS, R45.1, U10.6) 1137 NET_C(C34.1, R77.2, I_V12) 1138 NET_C(R45.2, R44.2, R74.2, U6.4, U6.8, C33.1, I_V12) 1139 1140 NET_C(R44.1, U10.5, C19.1) 1141 #if (ADD_CLIPPING_DIODES) 1142 // fast retriggering relies on clipping diodes which 1143 // aren't implemented by default for speed 1144 D_1N914(D_BONUS) 1145 NET_C(D_BONUS.A, U10.5) 1146 NET_C(D_BONUS.K, I_V12) 1147 #endif 1148 NET_C(U10.4, U10.1, U10.2) 1149 NET_C(C19.2, U10.3, D7.K) 1150 NET_C(D7.A, R78.1) 1151 NET_C(R78.2, R77.1, C34.2, R76.1) 1152 // CD4011 oscillator: R80=1M, C35=0.1, freq=7.19Hz 1153 CLOCK(OSC4, 7.19) 1154 NET_C(OSC4.GND, GND) 1155 NET_C(OSC4.VCC, I_V12) 1156 NET_C(OSC4.Q, R79.1) 1157 NET_C(R80.1, R80.2, C35.1, C35.2, U10.8, U10.9, U10.12, U10.13, GND) 1158 NET_C(R79.2, R74.1, R75.2, U6.7) 1159 NET_C(R75.1, U6.2, U6.6, C31.2) 1160 NET_C(C31.1, C32.1, U6.1, GND) 1161 NET_C(C32.2, U6.5) 1162 NET_C(R76.2, D8.K, C50.1) 1163 NET_C(U6.3, D8.A) 1164 NET_C(C33.2, GND) 1165 NET_C(BONUS, C50.2) 1166 1167 // 1168 // Sheet 8, top-right (INVADER_3) 1169 // 1170 1171 NET_C(U22.5, GND) 1172 NET_C(U22.6, D3.A, R25.1) 1173 NET_C(R25.2, C12.2, R24.2, U22.1, C8.2) 1174 NET_C(D3.K, U22.7, R26.1) 1175 NET_C(W, U30.9) 1176 NET_C(U30.8, R28.1) 1177 NET_C(R28.2, R26.2, C9.1, R27.2, C8.1) 1178 NET_C(R27.1, GND) 1179 NET_C(C9.2, U22.2, R24.1) 1180 NET_C(U22.3, GND) 1181 NET_C(C12.1, R54.1) 1182 NET_C(R54.2, R53.1, U17.5) 1183 NET_C(R53.2, V) 1184 NET_C(U17.1, C7.1, GND) 1185 NET_C(C7.2, U17.2, U17.6, R52.1) 1186 NET_C(R52.2, U17.7, R51.1) 1187 NET_C(R51.2, R23.2, U17.8, C6.1, I_V12) 1188 NET_C(R23.1, U17.4, I_INVADER_3) 1189 NET_C(C6.2, GND) 1190 NET_C(INVADER_3, U17.3) 1191 1192 // 1193 // Unconnected inputs 1194 // 1195 1196 NET_C(GND, U7.5, U7.6, U7.12, U7.13) 1197 NET_C(GND, U26.13) 1198 NET_C(GND, U29.1, U29.3, U29.13) 1199 NET_C(GND, U30.1, U30.11) 1200 1201 // 1202 // Unconnected outputs 1203 // 1204 1205 #if (ENABLE_FRONTIERS) 1206 #define RXX 192 1207 OPTIMIZE_FRONTIER(INVADER_1, RES_M(1), RXX) 1208 OPTIMIZE_FRONTIER(INVADER_2, RES_M(1), RXX) 1209 OPTIMIZE_FRONTIER(INVADER_3, RES_M(1), RXX) 1210 OPTIMIZE_FRONTIER(INVADER_4, RES_M(1), RXX) 1211 1212 OPTIMIZE_FRONTIER(C50.1, RES_M(10), RXX) 1213 OPTIMIZE_FRONTIER(C60.1, RES_M(10), RXX) // this is a big one 1214 OPTIMIZE_FRONTIER(C61.1, RES_M(10), RXX) 1215 #endif 1216 1217 NETLIST_END() 1218