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