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