1 // license:BSD-3-Clause 2 // copyright-holders:Ryan Holtz 3 // 4 // Netlist for Star Fire 5 // 6 // Derived from the schematics in the manual. 7 // 8 // Known problems/issues: 9 // 10 // * Tracking computer might not be 100% right, compared to recordings. 11 // * Slow. 12 // 13 14 #include "netlist/devices/net_lib.h" 15 16 // 17 // Main netlist 18 // 19 20 NETLIST_START(starfire) 21 NET_MODEL("LM324_12V OPAMP(TYPE=3 VLH=1.6 VLL=0.16 FPF=5 UGF=500k SLEW=0.3M RI=1000k RO=50 DAB=0.00075)") 22 NET_MODEL("LM324_5V OPAMP(TYPE=3 VLH=0.667 VLL=0.0667 FPF=5 UGF=500k SLEW=0.3M RI=1000k RO=50 DAB=0.00075)") 23 24 SOLVER(Solver, 48000) 25 ANALOG_INPUT(V1_2, 1.2) 26 ANALOG_INPUT(V12, 12) 27 ANALOG_INPUT(VM12, -12) 28 ANALOG_INPUT(V5, 5) 29 ANALOG_INPUT(VM5, -5) 30 ALIAS(VCC, V5) 31 32 TTL_INPUT(SIZE, 0) // active high 33 TTL_INPUT(SEXPLO, 0) // active high 34 TTL_INPUT(STIE, 0) // active high 35 TTL_INPUT(SLASER, 0) // active high 36 TTL_INPUT(TRACK, 0) // active high 37 TTL_INPUT(LOCK, 0) // active high 38 TTL_INPUT(SCANNER, 0) // active high 39 TTL_INPUT(OHEAT, 0) // active high 40 41 NET_C(VCC, SIZE.VCC, SEXPLO.VCC, STIE.VCC, SLASER.VCC, TRACK.VCC, LOCK.VCC, SCANNER.VCC, OHEAT.VCC) 42 NET_C(GND, SIZE.GND, SEXPLO.GND, STIE.GND, SLASER.GND, TRACK.GND, LOCK.GND, SCANNER.GND, OHEAT.GND) 43 44 RES(R12, RES_K(10)) 45 RES(R13, RES_K(470)) 46 RES(R14, RES_K(470)) 47 POT(R15, RES_K(100)) 48 POT(R16, RES_K(100)) 49 POT(R17, RES_K(100)) 50 POT(R18, RES_K(100)) 51 POT(R19, RES_K(33)) 52 POT(R20, RES_K(10)) 53 POT(R21, RES_K(10)) 54 RES(R23, RES_K(47)) 55 RES(R24, 470) 56 RES(R25, RES_K(10)) 57 RES(R26, RES_K(1)) 58 RES(R27, RES_K(30)) 59 RES(R28, RES_K(30)) 60 RES(R29, RES_K(1)) 61 RES(R30, RES_K(4.7)) 62 RES(R31, RES_M(1)) 63 RES(R37, RES_K(10)) 64 RES(R38, RES_K(2.7)) 65 RES(R39, RES_K(10)) 66 RES(R40, RES_K(2.7)) 67 RES(R41, RES_K(3)) 68 RES(R42, RES_K(1)) 69 RES(R43, RES_M(1)) 70 RES(R44, RES_K(2.2)) 71 RES(R45, RES_K(3.3)) 72 RES(R46, RES_K(27)) 73 RES(R47, RES_K(82)) 74 RES(R48, RES_K(10)) 75 RES(R49, RES_K(100)) 76 RES(R50, RES_K(160)) 77 RES(R51, RES_K(16)) 78 RES(R52, RES_K(16)) 79 RES(R53, RES_K(16)) 80 RES(R54, RES_K(100)) 81 RES(R55, RES_K(100)) 82 RES(R56, RES_K(4.7)) 83 RES(R57, RES_K(10)) 84 RES(R58, RES_K(82)) 85 RES(R59, RES_K(27)) 86 RES(R60, RES_K(2.7)) 87 RES(R61, RES_K(10)) 88 RES(R62, RES_M(1)) 89 RES(R63, RES_M(1)) 90 RES(R64, RES_K(4.7)) 91 RES(R67, RES_K(10)) 92 RES(R68, RES_K(2.7)) 93 RES(R69, RES_K(470)) 94 RES(R70, RES_K(470)) 95 RES(R71, RES_K(100)) 96 RES(R72, RES_K(330)) 97 RES(R73, RES_K(4.7)) 98 RES(R74, RES_K(100)) 99 RES(R75, RES_K(27)) 100 RES(R77, RES_K(470)) 101 RES(R78, RES_K(4.7)) 102 RES(R79, RES_K(10)) 103 RES(R80, RES_K(3)) 104 RES(R81, RES_K(1)) 105 RES(R82, RES_K(10)) 106 RES(R83, RES_K(4.7)) 107 RES(R84, RES_K(1)) 108 RES(R85, RES_K(3)) 109 RES(R86, RES_K(1)) 110 RES(R87, RES_K(2)) 111 //RES(R88, RES_K(82)) 112 RES(R89, RES_K(22)) 113 RES(R90, RES_K(22)) 114 RES(R91, RES_M(1)) 115 //RES(R, RES_K()) 116 117 CAP(C7, CAP_U(0.1)) 118 CAP(C9, CAP_U(0.1)) 119 CAP(C10, CAP_U(0.1)) 120 CAP(C11, CAP_U(0.1)) 121 CAP(C12, CAP_U(0.01)) 122 CAP(C13, CAP_U(1.0)) 123 CAP(C14, CAP_U(0.1)) 124 CAP(C15, CAP_U(0.01)) 125 CAP(C18, CAP_U(1.0)) 126 CAP(C20, CAP_U(1.0)) 127 CAP(C21, CAP_U(0.1)) 128 CAP(C22, CAP_U(0.1)) 129 CAP(C23, CAP_U(0.1)) 130 CAP(C25, CAP_U(1.0)) 131 CAP(C26, CAP_U(0.1)) 132 CAP(C27, CAP_U(1.0)) 133 CAP(C29, CAP_U(0.1)) 134 CAP(C32, CAP_U(1.0)) 135 CAP(C34, CAP_U(1.0)) 136 CAP(C38, CAP_U(0.1)) 137 CAP(C39, CAP_U(0.01)) 138 CAP(C45, CAP_U(4.7)) 139 //CAP(C, CAP_U()) 140 141 DIODE(D3, "1N914") 142 143 TTL_7406_GATE(IC_6C_A) 144 TTL_7406_GATE(IC_6C_B) 145 TTL_7406_GATE(IC_6C_C) 146 TTL_7406_GATE(IC_6C_D) 147 TTL_7406_GATE(IC_6C_E) 148 TTL_7406_GATE(IC_6C_F) 149 NET_C(VCC, IC_6C_A.VCC, IC_6C_B.VCC, IC_6C_C.VCC, IC_6C_D.VCC, IC_6C_E.VCC, IC_6C_F.VCC) 150 NET_C(GND, IC_6C_A.GND, IC_6C_B.GND, IC_6C_C.GND, IC_6C_D.GND, IC_6C_E.GND, IC_6C_F.GND) 151 152 CD4070_GATE(IC_7E_A) 153 CD4070_GATE(IC_7E_B) 154 CD4070_GATE(IC_7E_C) 155 CD4070_GATE(IC_7E_D) 156 NET_C(V12, IC_7E_A.VDD, IC_7E_B.VDD, IC_7E_C.VDD, IC_7E_D.VDD) 157 NET_C(GND, IC_7E_A.VSS, IC_7E_B.VSS, IC_7E_C.VSS, IC_7E_D.VSS) 158 159 NE555(IC_5B_A) 160 NE555(IC_6E_A) 161 NET_C(V5, IC_5B_A.VCC) 162 NET_C(V12, IC_6E_A.VCC) 163 NET_C(GND, IC_5B_A.GND, IC_6E_A.GND) 164 165 SUBMODEL(NE556_DIP, IC_6A) 166 SUBMODEL(NE556_DIP, IC_8F) 167 NET_C(V5, IC_6A.14) 168 NET_C(V12, IC_8F.14) 169 NET_C(GND, IC_6A.7, IC_8F.7) 170 171 CD4006_DIP(IC_8E) 172 NET_C(V12, IC_8E.14) 173 NET_C(GND, IC_8E.7) 174 175 OPAMP(IC_6D_A, "LM324_12V") 176 OPAMP(IC_6D_B, "LM324_12V") 177 OPAMP(IC_6D_C, "LM324_12V") 178 OPAMP(IC_6D_D, "LM324_12V") 179 OPAMP(IC_8D_A, "LM324_12V") 180 OPAMP(IC_8D_B, "LM324_12V") 181 OPAMP(IC_8D_C, "LM324_12V") 182 OPAMP(IC_8D_D, "LM324_12V") 183 NET_C(V12, IC_6D_A.VCC, IC_6D_B.VCC, IC_6D_C.VCC, IC_6D_D.VCC, IC_8D_A.VCC, IC_8D_B.VCC, IC_8D_C.VCC, IC_8D_D.VCC) 184 NET_C(VM12, IC_6D_A.GND, IC_6D_B.GND, IC_6D_C.GND, IC_6D_D.GND, IC_8D_A.GND, IC_8D_B.GND, IC_8D_C.GND, IC_8D_D.GND) 185 186 OPAMP(IC_7C_A, "LM324_5V") 187 OPAMP(IC_7C_B, "LM324_5V") 188 OPAMP(IC_7C_C, "LM324_5V") 189 OPAMP(IC_7C_D, "LM324_5V") 190 NET_C(V5, IC_7C_A.VCC, IC_7C_B.VCC, IC_7C_C.VCC, IC_7C_D.VCC) 191 NET_C(VM5, IC_7C_A.GND, IC_7C_B.GND, IC_7C_C.GND, IC_7C_D.GND) 192 193 MC3340_DIP(IC_7D) 194 MC3340_DIP(IC_6B) 195 NET_C(V12, IC_6B.8, IC_7D.8) 196 NET_C(GND, IC_6B.3, IC_7D.3) 197 198 SUBMODEL(ICL8038_DIP, IC_6F) 199 NET_C(V12, IC_6F.6) 200 NET_C(VM12, IC_6F.11) 201 202 CD4016_DIP(IC_7B) 203 NET_C(V5, IC_7B.14) 204 NET_C(VM5, IC_7B.7) 205 206 QBJT_EB(Q1, "2N3702") 207 QBJT_EB(Q2, "2N3702") 208 209 // Tie Weapon 210 NET_C(STIE.Q, IC_6C_E.A) 211 NET_C(IC_6C_E.Y, R39.1, IC_7E_C.A) 212 NET_C(V1_2, IC_7C_C.MINUS) // HACK: +12V is actually fed into this pin per the schematic, but it relies on LM324 abuse. 213 NET_C(V12, R39.2, IC_7E_C.B, R83.1, R91.1, R86.1, IC_7E_A.A, IC_8F.10) 214 NET_C(IC_7E_C.Q, IC_8F.4, IC_8F.6) 215 NET_C(IC_8F.1, C45.1, Q2.C, IC_8D_D.PLUS) 216 NET_C(GND, C38.2, C45.2, R82.2, R57.1, R61.2, R84.2, IC_8D_A.PLUS) 217 NET_C(R83.2, R82.1, Q2.B) 218 NET_C(R91.2, Q2.E) 219 NET_C(IC_8F.5, R85.1) 220 NET_C(R85.2, R84.1, IC_7C_C.PLUS) 221 ALIAS(TIE_ON, IC_7C_C.OUT) 222 ALIAS(TIEON1, R84.1) 223 NET_C(R58.2, VM12) 224 NET_C(R58.1, R57.2, R59.1, IC_8D_D.MINUS) 225 NET_C(R59.2, IC_8D_D.OUT, R60.1, IC_8F.11) 226 NET_C(R60.2, R61.1, IC_8F.2) 227 NET_C(R86.2, R87.1, IC_8F.13) 228 NET_C(R87.2, IC_8F.8, IC_8F.12, C38.1) 229 NET_C(IC_8F.9, IC_8E.3) 230 NET_C(IC_8E.13, IC_7E_A.B) 231 NET_C(IC_7E_A.Q, IC_8E.5) 232 NET_C(IC_8E.1, IC_8E.12, IC_7E_B.B) 233 NET_C(IC_8E.8, IC_7E_B.A) 234 NET_C(IC_7E_B.Q, IC_8E.4) 235 NET_C(IC_8E.10, IC_8E.6, R73.1) 236 NET_C(SIZE.Q, IC_6C_F.A) 237 NET_C(IC_6C_F.Y, R56.1) 238 NET_C(R56.2, R73.2, C29.1) 239 NET_C(C29.2, R74.1) 240 NET_C(R74.2, R75.1, IC_8D_A.MINUS) 241 NET_C(R75.2, IC_8D_A.OUT) 242 ALIAS(NOISE, IC_8D_A.OUT) 243 244 // Explosion 245 NET_C(NOISE, R53.1) 246 NET_C(R53.2, C23.1, R52.1) 247 NET_C(R52.2, C22.1, IC_6D_C.PLUS) 248 NET_C(R50.2, R49.1, IC_6D_C.MINUS) 249 NET_C(C23.2, R50.1, R51.1, R54.1, IC_6D_C.OUT) 250 NET_C(R51.2, C21.1) 251 ALIAS(RUMBLE_2, C21.1) 252 NET_C(C21.2, C22.2, R49.2, C27.2, R55.2, C26.2, GND) 253 NET_C(R54.2, R55.1, C34.1) 254 NET_C(C34.2, IC_7D.1) 255 NET_C(SEXPLO.Q, IC_6C_C.A) 256 NET_C(IC_6C_C.Y, R40.1) 257 NET_C(R40.2, C27.1, R63.1) 258 NET_C(R63.2, R62.2, IC_8D_C.PLUS) 259 NET_C(R62.1, V5) 260 NET_C(IC_8D_C.MINUS, IC_8D_C.OUT, IC_7D.2) 261 NET_C(IC_7D.6, C26.1) 262 NET_C(IC_7D.7, C25.1) 263 ALIAS(EXPLO, C25.2) 264 265 // Tracking Computer 266 NET_C(SCANNER.Q, IC_5B_A.RESET) 267 NET_C(V5, R24.1, R70.1, R13.1, R27.1) 268 NET_C(GND, C15.2, R26.2, C20.2, C11.2, C7.2, C12.2, R29.2) 269 NET_C(R24.2, R23.1, R12.1, IC_6A.5, IC_5B_A.DISCH) 270 NET_C(R23.2, C15.1, IC_5B_A.THRESH, IC_5B_A.TRIG) 271 NET_C(OHEAT.Q, IC_6C_B.A) 272 NET_C(IC_6C_B.Y, R38.1) 273 NET_C(R38.2, C20.1, R69.1) 274 NET_C(R69.2, R70.2, IC_6D_A.PLUS) 275 NET_C(IC_6D_A.MINUS, IC_6D_A.OUT, IC_6B.2) 276 NET_C(IC_5B_A.OUT, R25.1) 277 NET_C(R25.2, C9.1, R26.1) 278 NET_C(C9.2, IC_6B.1) 279 NET_C(IC_6B.6, C11.1) 280 NET_C(IC_6B.7, C10.1) 281 ALIAS(LOH, C10.2) 282 NET_C(R13.2, R14.1, IC_6A.1) 283 NET_C(R14.2, C7.1, IC_6A.2, IC_6A.6) 284 NET_C(LOCK.Q, IC_6A.4) 285 NET_C(R12.2, IC_6A.11) 286 NET_C(R27.2, R28.1, IC_6A.13) 287 NET_C(R28.2, C12.1, IC_6A.12, IC_6A.8) 288 NET_C(TRACK.Q, IC_6A.10) 289 NET_C(IC_6A.9, C13.1) 290 NET_C(C13.2, R30.1) 291 NET_C(R30.2, R29.1) 292 ALIAS(COMPUTER, R30.2) 293 294 // Laser 295 NET_C(SIZE.Q, IC_6C_D.A) 296 NET_C(IC_6C_D.Y, R41.1) 297 NET_C(R41.2, R78.2, R79.1, Q1.B) 298 NET_C(V1_2, IC_7C_B.MINUS) // HACK: +12V is actually fed into this pin per the schematic, but it relies on LM324 abuse. 299 NET_C(V12, R78.1, R77.1, R37.1, IC_7E_D.B, R89.1, R90.1) 300 NET_C(GND, R79.2, C32.2, R48.2, R81.2, R67.2, IC_6D_B.PLUS) 301 NET_C(R77.2, Q1.E) 302 NET_C(Q1.C, C32.1, IC_6E_A.DISCH, IC_6D_D.PLUS) 303 NET_C(SLASER.Q, IC_6C_A.A) 304 NET_C(IC_6C_A.Y, R37.2, IC_7E_D.A) 305 NET_C(IC_7E_D.Q, IC_6E_A.TRIG, IC_6E_A.RESET) 306 NET_C(IC_6E_A.OUT, R80.1) 307 NET_C(R80.2, R81.1, IC_7C_B.PLUS) 308 ALIAS(LASERON1, R80.2) 309 ALIAS(LASER_ON, IC_7C_B.OUT) 310 NET_C(R48.1, R47.1, R46.1, IC_6D_D.MINUS) 311 NET_C(VM12, R47.2, C39.2) 312 NET_C(R46.2, IC_6D_D.OUT, R68.1, IC_6F.8) 313 NET_C(R68.2, R67.1, IC_6E_A.THRESH) 314 NET_C(C39.1, IC_6F.10) 315 NET_C(R89.2, IC_6F.4) 316 NET_C(R90.2, IC_6F.5) 317 NET_C(IC_6F.3, R72.1) 318 NET_C(R72.2, R71.1, IC_6D_B.MINUS) 319 NET_C(R71.2, IC_6D_B.OUT) 320 ALIAS(LASER, R71.2) 321 322 // Mixer 323 NET_C(V5, R45.1, R42.2) 324 NET_C(R45.2, R44.1, IC_7C_A.MINUS, IC_7C_D.MINUS) 325 NET_C(GND, R44.2, C18.2, R43.2) 326 NET_C(SIZE.Q, R42.1, D3.A) 327 NET_C(D3.K, C18.1, R43.1, IC_7C_D.PLUS) 328 329 NET_C(TRACK.Q, IC_7C_A.PLUS) 330 NET_C(IC_7C_A.OUT, IC_7B.13) 331 NET_C(COMPUTER, IC_7B.1) 332 NET_C(IC_7B.2, R16.1, R16.2) 333 334 NET_C(LASER, IC_7B.11) 335 NET_C(LASER_ON, IC_7B.12) 336 NET_C(IC_7B.10, R18.1, R18.2) 337 338 NET_C(NOISE, IC_7B.4) 339 NET_C(TIE_ON, IC_7B.5) 340 NET_C(IC_7B.3, R17.1, R17.2) 341 342 NET_C(RUMBLE_2, IC_7B.8) 343 NET_C(IC_7C_D.OUT, IC_7B.6) 344 NET_C(IC_7B.9, R19.1, R19.2) 345 346 NET_C(EXPLO, R20.1, R20.2) 347 348 NET_C(LOH, R15.1, R15.2) 349 350 NET_C(R16.3, R18.3, R17.3, R19.3, R20.3, R15.3, R64.1, IC_8D_B.MINUS) 351 NET_C(GND, IC_8D_B.PLUS) 352 NET_C(R64.2, R21.3, IC_8D_B.OUT) 353 NET_C(R21.1, R31.2, GND) 354 NET_C(R21.2, C14.1) 355 NET_C(C14.2, R31.1) 356 ALIAS(OUTPUT, R31.1) 357 NETLIST_END() 358