1 // license:BSD-3-Clause
2 // copyright-holders:Couriersud
3 #include "netlist/devices/net_lib.h"
4 
5 /* ----------------------------------------------------------------------------
6  *  Library section header START
7  * ---------------------------------------------------------------------------*/
8 
9 #ifndef __PLIB_PREPROCESSOR__
10 
11 #endif
12 
13 /* ----------------------------------------------------------------------------
14  *  Library section header END
15  * ---------------------------------------------------------------------------*/
16 
17 /* ----------------------------------------------------------------------------
18  *  Mario schematics
19  * ---------------------------------------------------------------------------*/
20 
21 /* ---------------------------------------------------------------------- */
22 /* mario sound                                                            */
23 /* ---------------------------------------------------------------------- */
24 static NETLIST_START(nl_mario_snd0)
25 
26 	RES(R17, RES_K(27))               /* 20 according to parts list           */
27 										/* 27 verified, 30K in schematics       */
28 	CAP(C14, CAP_U(4.7))              /* verified                             */
29 
30 	TTL_74123(2H_A)
31 	NET_C(2H_A.VCC, V5)
32 	NET_C(2H_A.GND, GND)
33 	NET_C(SOUND0.Q, 2H_A.B)
34 	NET_C(GND, 2H_A.A)
35 	NET_C(2H_A.CLRQ, ttlhigh)         /* NOT IN SCHEMATICS                    */
36 	DIODE(D1, "1N4148")               /* FIXME: try to identify */
37 	TTL_7404_INVERT(1H_A, 2H_A.QQ)
38 	NET_C(R17.1, V5)
39 	NET_C(R17.2, D1.A, C14.1)
40 	NET_C(D1.K, 2H_A.RC)
41 	NET_C(C14.2, 2H_A.C)
42 
43 	RES(R6, RES_K(4.7))               /* verified                             */
44 	CAP(C3, CAP_U(10))                /* verified                             */
45 
46 	NET_C(1H_A.Q, R6.1)
47 	NET_C(R6.2, C3.1, 1J_A.FC)
48 	NET_C(R6.2, 2J_A.FC)
49 	NET_C(C3.2, GND)
50 
51 	// #define MR_C6       CAP_N(3.9)        /* verified                           */
52 
53 	SN74LS629(1J_A, CAP_N(3.9))
54 	NET_C(1J_A.RNG, V5)
55 	NET_C(1J_A.ENQ, ttllow)
56 	NET_C(GND, 1J_A.OSCGND)
57 	NET_C(VCC, 1J_A.OSCVCC)
58 
59 	// #define MR_C17      CAP_N(22)        /* verified                            */
60 
61 	SN74LS629(2J_A, CAP_N(22))
62 	NET_C(2J_A.RNG, V5)
63 	NET_C(2J_A.ENQ, ttllow)
64 	NET_C(GND, 2J_A.OSCGND)
65 	NET_C(VCC, 2J_A.OSCVCC)
66 
67 	TTL_7486_XOR(1K_A, 1J_A.Y, 2J_A.Y)
68 	TTL_7408_AND(2K_A, 2H_A.Q, 1K_A)
69 NETLIST_END()
70 
71 /* ---------------------------------------------------------------------- */
72 /* luigi sound                                                            */
73 /* ---------------------------------------------------------------------- */
74 static NETLIST_START(nl_mario_snd1)
75 
76 	RES(R18, RES_K(30))               /* 20 according to parts list           */
77 										/* 27 verified, 30K in schematics       */
78 	CAP(C15, CAP_U(4.7))              /* verified                             */
79 
80 	TTL_74123(2H_B)
81 	NET_C(2H_B.VCC, V5)
82 	NET_C(2H_B.GND, GND)
83 	NET_C(SOUND1.Q, 2H_B.B)
84 	NET_C(GND, 2H_B.A)
85 	NET_C(2H_B.CLRQ, ttlhigh)         /* NOT IN SCHEMATICS                    */
86 	DIODE(D8, "1N4148")               /* FIXME: try to identify */
87 	TTL_7404_INVERT(1H_B, 2H_B.QQ)
88 	NET_C(R18.1, V5)
89 	NET_C(R18.2, D8.A, C15.1)
90 	NET_C(D8.K, 2H_B.RC)
91 	NET_C(C15.2, 2H_B.C)
92 
93 	RES(R7, RES_K(4.7))               /* verified                             */
94 	CAP(C4, CAP_U(4.7))                /* verified                             */
95 
96 	NET_C(1H_B.Q, R7.1)
97 	NET_C(R7.2, C4.1, 1J_B.FC)
98 	NET_C(R7.2, 2J_B.FC)
99 	NET_C(C4.2, GND)
100 
101 	SN74LS629(1J_B, CAP_N(39))      /* C5 */
102 	NET_C(1J_B.RNG, V5)
103 	NET_C(1J_B.ENQ, ttllow)
104 	NET_C(GND, 1J_B.OSCGND)
105 	NET_C(VCC, 1J_B.OSCVCC)
106 
107 	SN74LS629(2J_B, CAP_N(6.8))     /* C16 */
108 	NET_C(2J_B.RNG, V5)
109 	NET_C(2J_B.ENQ, ttllow)
110 	NET_C(GND, 2J_B.OSCGND)
111 	NET_C(VCC, 2J_B.OSCVCC)
112 
113 	TTL_7486_XOR(1K_B, 1J_B.Y, 2J_B.Y)
114 	TTL_7408_AND(2K_B, 2H_B.Q, 1K_B)
115 NETLIST_END()
116 
117 /* ---------------------------------------------------------------------- */
118 /* skid sound                                                            */
119 /* ---------------------------------------------------------------------- */
120 
121 // FIXME: Diodes are 1S953
122 static NETLIST_START(nl_mario_snd7)
123 
124 	RES(R61, RES_K(47))
125 	CAP(C41, CAP_U(4.7))              /* verified                             */
126 
127 	TTL_74123(4L_A)
128 	NET_C(4L_A.VCC, V5)
129 	NET_C(4L_A.GND, GND)
130 	NET_C(SOUND7.Q, 4L_A.B)
131 	NET_C(GND, 4L_A.A)
132 	NET_C(4L_A.CLRQ, ttlhigh)         /* NOT IN SCHEMATICS                    */
133 	DIODE(D10, "1N4148")               /* FIXME: try to identify */
134 	TTL_7404_INVERT(4J_A, 4L_A.Q)
135 	NET_C(R61.1, V5)
136 	NET_C(R61.2, D10.A, C41.1)
137 	NET_C(D10.K, 4L_A.RC)
138 	NET_C(C41.2, 4L_A.C)
139 
140 	RES(R65, RES_K(10))
141 	CAP(C44, CAP_U(3.3))              /* verified                             */
142 
143 	SN74LS629(4K_A, CAP_U(0.022))
144 	NET_C(4K_A.RNG, V5)
145 	NET_C(4K_A.ENQ, ttllow)
146 	NET_C(GND, 4K_A.OSCGND)
147 	NET_C(VCC, 4K_A.OSCVCC)
148 	NET_C(R65.1, 4J_A.Q)
149 	NET_C(R65.2, 4K_A.FC, C44.1)
150 	NET_C(C44.2, GND)
151 
152 	CD4020(3H, 4K_B.Y, ttllow, V5, GND)
153 	TTL_7404_INVERT(4J_B, 3H.Q12)
154 
155 	RES(R64, RES_K(20))
156 	CAP(C43, CAP_U(3.3))              /* verified                             */
157 
158 	SN74LS629(4K_B, CAP_U(0.0047))
159 	NET_C(4K_B.RNG, V5)
160 	NET_C(4K_B.ENQ, ttllow)
161 	NET_C(GND, 4K_B.OSCGND)
162 	NET_C(VCC, 4K_B.OSCVCC)
163 	NET_C(R64.1, 4J_B.Q)
164 	NET_C(R64.2, 4K_B.FC, C43.1)
165 	NET_C(C43.2, GND)
166 
167 	TTL_7486_XOR(1K_C, 3H.Q4, 4K_A.Y)
168 	TTL_7408_AND(2K_C, 4L_A.Q, 1K_C)
169 
170 NETLIST_END()
171 
172 /* ---------------------------------------------------------------------- */
173 /* DAC sound                                                            */
174 /* ---------------------------------------------------------------------- */
175 static NETLIST_START(nl_mario_dac)
176 	RES(R34, RES_M(2))
177 	RES(R35, RES_M(1))
178 	RES(R36, RES_M(1.8))
179 	LM3900(3M_1)
180 	NET_C(3M_1.GND, GND)
181 	NET_C(3M_1.VCC, V5)
182 
183 	NET_C(DAC.VOUT, R34.1)
184 	NET_C(3M_1.MINUS, R34.2, R35.2)
185 	NET_C(3M_1.OUT, R35.1)
186 	NET_C(3M_1.PLUS, R36.1)
187 	NET_C(R36.2, V5)
188 
189 	RES(R21, RES_M(1.8))
190 	RES(R23, RES_K(10))
191 	RES(R25, RES_K(10))
192 	RES(R37, RES_K(750))
193 	RES(R38, RES_K(360))
194 	RES(R39, RES_K(750))
195 
196 	CAP(C18, CAP_P(100))
197 	CAP(C19, CAP_U(10))
198 	CAP(C20, CAP_U(1))
199 	CAP(C30, CAP_P(100))
200 
201 	LM3900(3M_2)
202 	NET_C(3M_2.GND, GND)
203 	NET_C(3M_2.VCC, V5)
204 
205 	NET_C(R35.1, C20.1)
206 	NET_C(C20.2, R37.1)
207 	NET_C(R37.2, R38.2, C18.1, R39.2)
208 
209 	NET_C(C18.2, GND)
210 	NET_C(R38.1, C30.2, 3M_2.MINUS)
211 	NET_C(3M_2.OUT, R39.1, C30.1)
212 
213 	NET_C(R21.1, 3M_2.PLUS)
214 	NET_C(R21.2, C19.1, R25.2, R23.1)
215 	NET_C(C19.2, R23.2, GND)
216 	NET_C(R25.1, V5)
217 NETLIST_END()
218 
219 NETLIST_START(mario)
220 
221 	LOCAL_SOURCE(nl_mario_snd0)
222 	LOCAL_SOURCE(nl_mario_snd1)
223 	LOCAL_SOURCE(nl_mario_snd7)
224 	LOCAL_SOURCE(nl_mario_dac)
225 
226 	SOLVER(Solver, 48000)
227 	PARAM(Solver.ACCURACY, 1e-7)
228 	PARAM(Solver.SOR_FACTOR, 1.0)
229 	PARAM(Solver.GS_LOOPS, 1)
230 	/* Dynamic timestepping avoids excessive newton loops on startup */
231 	PARAM(Solver.DYNAMIC_LTE, 5e-2)
232 	PARAM(Solver.DYNAMIC_TS,  0)
233 
234 	ANALOG_INPUT(V5, 5)
235 	ALIAS(VCC, V5) // no-ttl-dip devices need VCC!
236 	TTL_INPUT(ttlhigh, 1)
237 	TTL_INPUT(ttllow, 0)
238 	NET_C(VCC, ttlhigh.VCC, ttllow.VCC, SOUND0.VCC, SOUND1.VCC, SOUND7.VCC)
239 	NET_C(GND, ttlhigh.GND, ttllow.GND, SOUND0.GND, SOUND1.GND, SOUND7.GND)
240 
241 	TTL_INPUT(SOUND0, 1)
242 	INCLUDE(nl_mario_snd0)
243 
244 	TTL_INPUT(SOUND1, 1)
245 	INCLUDE(nl_mario_snd1)
246 
247 	TTL_INPUT(SOUND7, 1)
248 	INCLUDE(nl_mario_snd7)
249 
250 	R2R_DAC(DAC, 3.4, 10000.0, 8)
251 	NET_C(DAC.VGND, GND)
252 
253 	INCLUDE(nl_mario_dac)
254 
255 	/* ---------------------------------------------------------------------- */
256 	/* mixing                                                                 */
257 	/* ---------------------------------------------------------------------- */
258 
259 	RES(R20, RES_K(22))               /* verified                             */
260 	RES(R19, RES_K(22))               /* verified                             */
261 	RES(R40, RES_K(22))               /* verified                             */
262 	RES(R41, RES_K(100))              /* verified                             */
263 	CAP(C31, CAP_U(0.022))            /*                             */
264 
265 	NET_C(2K_A.Q, R20.1)
266 	NET_C(2K_B.Q, R19.1)
267 	NET_C(2K_C.Q, R41.1)
268 
269 	NET_C(R39.1, R40.1)
270 
271 	NET_C(R20.2, R19.2, R40.2, R41.2, C31.1)
272 	NET_C(C31.2, GND)
273 
274 	CAP(C32, CAP_U(1))                /* verified                             */
275 	RES(R42, RES_K(43))               /* verified                             */
276 	RES(R43, RES_K(100))              /* verified                             */
277 
278 	NET_C(C31.1, C32.1)
279 	NET_C(C32.2, R42.1, R43.2, Q10.B)
280 	//NET_C(C32.2, R42.1, R43.2)
281 	NET_C(R43.1, V5)
282 	NET_C(R42.2, GND)
283 #if 1
284 	RES(R63, RES_K(1))                /*                                      */
285 	RES(R62, 150)                     /*                                      */
286 
287 	QBJT_EB(Q10, "2SC1815")
288 
289 	NET_C(R62.2, GND)
290 	NET_C(R62.1, Q10.E)
291 
292 	NET_C(R63.1, V5)
293 	NET_C(R63.2, Q10.C)
294 
295 	CAP(C42, CAP_U(0.1))
296 	CAP(C47, CAP_U(4.7))
297 	RES(VR1, RES_K(10))
298 
299 	NET_C(C42.1, C47.1, R62.1)
300 	NET_C(C42.2, GND)
301 	NET_C(C47.2, VR1.1)
302 	NET_C(VR1.2, GND)
303 #endif
304 	/* ---------------------------------------------------------------------- */
305 	/* Output                                                                 */
306 	/* ---------------------------------------------------------------------- */
307 
308 	RES(ROUT, 1000000)
309 
310 	//NET_C(Q10.C, ROUT.1)
311 	//NET_C(R43.2, ROUT.1)
312 	NET_C(VR1.1, ROUT.1)
313 
314 	NET_C(GND, ROUT.2)
315 
316 	OPTIMIZE_FRONTIER(R40.1, RES_K(22), 50)
317 NETLIST_END()
318