1 // license:CC0 2 // copyright-holders:Aaron Giles 3 4 // 5 // Netlist for Sundance 6 // 7 // Derived from the schematics in the Sundance manual. 8 // 9 // Known problems/issues: 10 // 11 // * The "whoosh" sound is close to correct, though there may 12 // be some missing harmonics in the HLE. 13 // 14 // * The "wideband noise generator" is simulated with a generic 15 // noise source. This seems to work fine and doesn't sound 16 // too different from recordings. 17 // 18 // * The pitch of the pings and bongs seems a little lower than 19 // some recordings, though it's hard to say if this is due 20 // to aging as the frequencies are controlled by 555 timers 21 // and RC networks. 22 // 23 24 #include "netlist/devices/net_lib.h" 25 #include "nl_cinemat_common.h" 26 27 28 // 29 // Optimizations 30 // 31 32 #define HLE_NOISE_GEN (1) 33 #define HLE_WHOOSH_MOD (1) 34 35 36 // 37 // Main netlist 38 // 39 40 NETLIST_START(sundance) 41 42 SOLVER(Solver, 1000) 43 PARAM(Solver.DYNAMIC_TS, 1) 44 PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 2e-5) 45 46 TTL_INPUT(I_OUT_0, 1) // active low 47 TTL_INPUT(I_OUT_1, 1) // active low 48 TTL_INPUT(I_OUT_2, 1) // active low 49 TTL_INPUT(I_OUT_3, 1) // active low 50 TTL_INPUT(I_OUT_4, 1) // active low 51 TTL_INPUT(I_OUT_7, 1) // active low 52 53 NET_C(GND, I_OUT_0.GND, I_OUT_1.GND, I_OUT_2.GND, I_OUT_3.GND, I_OUT_4.GND, I_OUT_7.GND) 54 NET_C(I_V5, I_OUT_0.VCC, I_OUT_1.VCC, I_OUT_2.VCC, I_OUT_3.VCC, I_OUT_4.VCC, I_OUT_7.VCC) 55 56 CINEMAT_LOCAL_MODELS 57 58 ANALOG_INPUT(I_V5, 5) 59 ANALOG_INPUT(I_V15, 15) 60 ANALOG_INPUT(I_VM15, -15) 61 62 RES(R1, RES_M(1)) 63 RES(R2, 470) 64 RES(R3, 470) 65 RES(R4, RES_K(470)) 66 RES(R5, 100) 67 RES(R6, RES_K(470)) 68 RES(R7, RES_K(10)) 69 RES(R8, RES_M(1)) 70 RES(R9, RES_K(10)) 71 RES(R10, RES_K(47)) 72 RES(R11, RES_K(100)) 73 RES(R12, RES_K(220)) 74 RES(R13, RES_M(3.3)) 75 RES(R14, RES_K(390)) 76 RES(R15, RES_K(56)) 77 RES(R16, RES_M(1)) 78 RES(R17, RES_K(100)) 79 RES(R18, RES_K(10)) 80 RES(R19, RES_K(3.3)) 81 RES(R20, RES_K(100)) 82 RES(R21, RES_K(47)) 83 RES(R22, RES_K(47)) 84 RES(R23, RES_K(750)) 85 RES(R24, 470) 86 RES(R25, RES_K(220)) 87 RES(R26, 330) 88 RES(R27, RES_K(10)) 89 RES(R28, RES_K(47)) 90 RES(R29, RES_K(330)) 91 RES(R30, RES_K(30)) 92 RES(R31, RES_K(10)) 93 RES(R32, RES_K(2.7)) 94 RES(R33, RES_K(2.7)) 95 RES(R34, RES_K(100)) 96 RES(R35, RES_K(10)) 97 RES(R36, RES_K(4.7)) 98 RES(R37, RES_K(8.2)) 99 RES(R38, RES_K(120)) 100 RES(R39, RES_M(3.3)) 101 RES(R40, RES_K(39)) 102 RES(R41, RES_K(2.7)) 103 RES(R42, RES_K(2.7)) 104 RES(R43, RES_K(47)) 105 RES(R44, RES_K(8.2)) 106 RES(R45, RES_K(2.7)) 107 RES(R46, RES_K(2.7)) 108 RES(R47, RES_M(10)) 109 RES(R48, RES_M(10)) 110 RES(R49, RES_K(1)) 111 RES(R50, 330) 112 RES(R51, RES_K(510)) 113 RES(R52, RES_K(15)) 114 RES(R53, RES_K(20)) 115 RES(R54, RES_K(47)) 116 RES(R55, RES_K(2.7)) 117 RES(R56, RES_K(2.7)) 118 RES(R57, 330) 119 RES(R58, RES_K(390)) 120 RES(R59, RES_K(15)) 121 RES(R60, RES_K(24)) 122 RES(R61, RES_K(56)) 123 RES(R62, RES_K(2.7)) 124 RES(R63, RES_K(2.7)) 125 RES(R64, 470) 126 // RES(R65, 150) -- part of final amp (not emulated) 127 // RES(R66, RES_K(22)) -- part of final amp (not emulated) 128 // RES(R67, 150) -- part of final amp (not emulated) 129 RES(R68, 330) 130 RES(R69, RES_K(390)) 131 RES(R70, RES_K(15)) 132 RES(R71, RES_K(30)) 133 RES(R72, RES_K(68)) 134 RES(R73, RES_K(2.7)) 135 RES(R74, RES_K(2.7)) 136 // RES(R75, RES_K(10)) -- part of final amp (not emulated) 137 // POT(R76, RES_K(100)) -- part of final amp (not emulated) 138 // PARAM(R76.DIAL, 0.500000) -- part of final amp (not emulated) 139 RES(R77, 330) 140 RES(R78, RES_K(220)) 141 142 CAP(C1, CAP_U(0.1)) 143 CAP(C2, CAP_U(100)) 144 CAP(C3, CAP_U(0.01)) 145 CAP(C4, CAP_U(0.1)) 146 CAP(C5, CAP_U(100)) 147 CAP(C6, CAP_U(1)) 148 CAP(C7, CAP_U(1)) 149 CAP(C8, CAP_U(10)) 150 CAP(C9, CAP_U(0.05)) 151 CAP(C10, CAP_U(0.1)) 152 CAP(C11, CAP_U(0.01)) 153 CAP(C12, CAP_U(0.1)) 154 CAP(C13, CAP_U(0.001)) 155 CAP(C14, CAP_U(0.005)) 156 CAP(C15, CAP_U(10)) 157 // CAP(C16, CAP_U(3.3)) -- not needed 158 // CAP(C17, CAP_U(3.3)) -- not needed 159 // CAP(C18, CAP_U(3.3)) -- not needed 160 // CAP(C19, CAP_U(3.3)) -- not needed 161 // CAP(C20, CAP_U(3.3)) -- not needed 162 CAP(C21, CAP_U(0.1)) 163 CAP(C22, CAP_U(0.005)) 164 CAP(C23, CAP_U(0.1)) 165 CAP(C24, CAP_U(0.1)) 166 CAP(C25, CAP_U(0.1)) 167 CAP(C26, CAP_U(0.01)) 168 CAP(C27, CAP_U(0.1)) 169 CAP(C28, CAP_U(0.15)) 170 CAP(C29, CAP_U(0.1)) 171 CAP(C30, CAP_U(0.01)) 172 CAP(C31, CAP_U(0.1)) 173 // CAP(C32, CAP_P(470)) -- part of final amp (not emulated) 174 // CAP(C33, CAP_P(470)) -- part of final amp (not emulated) 175 // CAP(C34, CAP_P(470)) -- part of final amp (not emulated) 176 CAP(C35, CAP_U(0.15)) 177 CAP(C36, CAP_U(0.1)) 178 CAP(C37, CAP_U(0.01)) 179 CAP(C38, CAP_U(0.1)) 180 CAP(C39, CAP_U(1)) 181 182 D_1N5240(D1) 183 D_1N914(D2) 184 D_1N914(D3) 185 186 Q_2N3904(Q1) // NPN 187 Q_2N3904(Q2) // NPN 188 Q_2N3906(Q3) // PNP 189 Q_2N3906(Q4) // PNP 190 Q_2N3906(Q5) // PNP 191 Q_2N3906(Q6) // PNP 192 // Q_2N6292(Q7) // NPN -- part of final amp (not emulated) 193 // Q_2N6107(Q9) // PNP -- part of final amp (not emulated) 194 Q_2N3906(Q8) // PNP 195 Q_2N3906(Q10) // PNP 196 197 TL081_DIP(IC1) // Op. Amp. 198 // NET_C(IC1.7, I_V15) // (indirectly via R5) 199 NET_C(IC1.4, I_VM15) 200 201 TL081_DIP(IC2) // Op. Amp. 202 NET_C(IC2.7, I_V15) 203 NET_C(IC2.4, I_VM15) 204 205 TL081_DIP(IC3) // Op. Amp. 206 NET_C(IC3.7, I_V15) 207 NET_C(IC3.4, I_VM15) 208 209 LM3900_DIP(IC4) 210 NET_C(IC4.7, GND) 211 NET_C(IC4.14, I_V15) 212 213 // TTL_7815_DIP(IC5) // +15V Regulator -- not needed 214 // TTL_7915_DIP(IC6) // -15V Regulator -- not needed 215 216 LM555_DIP(IC7) 217 218 TL081_DIP(IC8) // Op. Amp. 219 NET_C(IC8.7, I_V15) 220 NET_C(IC8.4, I_VM15) 221 222 CA3080_DIP(IC9) 223 NET_C(IC9.7, I_V15) 224 NET_C(IC9.4, I_VM15) 225 226 CA3080_DIP(IC10) 227 NET_C(IC10.7, I_V15) 228 NET_C(IC10.4, I_VM15) 229 230 LM555_DIP(IC11) 231 232 CA3080_DIP(IC12) 233 NET_C(IC12.7, I_V15) 234 NET_C(IC12.4, I_VM15) 235 236 TTL_74LS125_DIP(IC13) // Quad 3-state buffer 237 NET_C(IC13.7, GND) 238 NET_C(IC13.14, I_V5) 239 240 LM555_DIP(IC14) 241 242 LM555_DIP(IC15) 243 244 LM555_DIP(IC16) 245 246 CA3080_DIP(IC17) 247 NET_C(IC17.7, I_V15) 248 NET_C(IC17.4, I_VM15) 249 250 CA3080_DIP(IC18) 251 NET_C(IC18.7, I_V15) 252 NET_C(IC18.4, I_VM15) 253 254 CA3080_DIP(IC19) 255 NET_C(IC19.7, I_V15) 256 NET_C(IC19.4, I_VM15) 257 258 TL081_DIP(IC20) // Op. Amp. 259 NET_C(IC20.7, I_V15) 260 NET_C(IC20.4, I_VM15) 261 262 #if (HLE_NOISE_GEN) 263 // 264 // The "wideband noise gen" relies on properties 265 // of the components to create noise. Not only 266 // does this simulate poorly, but it would be too 267 // slow for realtime, so HLE it with some quality 268 // noise. 269 // 270 // Note that Tail Gunner has the exact same 271 // circuit. 272 // 273 CLOCK(NOISE_CLOCK, 10000) 274 NET_C(NOISE_CLOCK.GND, GND) 275 NET_C(NOISE_CLOCK.VCC, I_V5) 276 277 SYS_NOISE_MT_U(NOISE, 3) 278 NET_C(NOISE.I, NOISE_CLOCK.Q) 279 NET_C(NOISE.1, GND) 280 NET_C(NOISE.2, R27.2, R36.1, R43.1) 281 282 NET_C(GND, C1.1, C1.2, C2.1, C2.2, C3.1, C3.2, C4.1, C4.2, C5.1, C5.2) 283 NET_C(GND, D1.A, D1.K, D2.A, D2.K, D3.A, D3.K) 284 NET_C(GND, R1.1, R1.2, R3.1, R3.2, R4.1, R4.2, R5.1, R5.2, R6.1, R6.2, R7.1, R7.2, R8.1, R8.2, R9.1, R9.2, R10.1, R10.2) 285 NET_C(GND, IC1.2, IC1.3, IC1.7, IC2.2, IC2.3, IC3.2, IC3.3) 286 #else 287 NET_C(C1.1, C2.2, R1.1, R3.1, C5.2, GND) 288 NET_C(C1.2, C2.1, D1.K, R5.1, IC1.7) 289 NET_C(R1.2, C3.1, D1.A) 290 NET_C(R3.2, R4.1, C4.1) 291 NET_C(R4.2, C3.2, IC1.3) 292 NET_C(C4.2, IC1.2, R6.1) 293 NET_C(R6.2, IC1.6, R7.1) 294 NET_C(R5.2, C5.1, I_V15) 295 NET_C(R7.2, IC2.2, R8.1, D3.A, D2.K) 296 NET_C(IC2.3, GND) 297 NET_C(IC2.6, R8.2, D3.K, D2.A, R9.1) 298 NET_C(R9.2, R10.1, IC3.2) 299 NET_C(IC3.3, GND) 300 NET_C(IC3.6, R10.2, R43.1, R27.2, R36.1) 301 #endif 302 303 NET_C(I_OUT_1, R2.1, IC11.2) 304 NET_C(R2.2, I_V5) 305 NET_C(IC11.8, IC11.4, I_V5) // -- IC11.4 not documented 306 NET_C(IC11.3, R35.1) 307 NET_C(IC11.1, GND) 308 NET_C(R34.1, I_V5) 309 NET_C(R34.2, IC11.6, IC11.7, C13.2) 310 NET_C(C13.1, GND) 311 312 NET_C(R35.2, R17.1, IC4.13) 313 NET_C(R11.1, R14.1, R17.2, IC4.9) 314 NET_C(R11.2, IC4.3) 315 NET_C(R12.1, IC4.2) 316 NET_C(R12.2, R16.2, R18.2, Q2.C, R22.2, I_V15) 317 NET_C(IC4.4, R13.1) 318 NET_C(R13.2, C6.2, IC4.6) 319 NET_C(R14.2, IC4.1) 320 NET_C(IC4.5, C6.1, R15.1, Q1.B) 321 NET_C(R15.2, R16.1, IC4.8) 322 323 NET_C(Q1.C, R18.1, Q2.B) 324 NET_C(Q1.E, R19.2) 325 NET_C(R19.1, GND) 326 NET_C(Q2.E, Q3.B, R20.2) 327 NET_C(R20.1, I_VM15) 328 NET_C(Q3.E, R21.1) 329 NET_C(R21.2, R22.1, R23.2) 330 NET_C(R23.1, GND) 331 NET_C(Q3.C, IC12.5) 332 333 NET_C(R36.2, C14.1) 334 NET_C(C14.2, R37.2, R40.2, C15.1) 335 NET_C(R37.1, GND) 336 337 #if (HLE_WHOOSH_MOD) 338 // 339 // The "whoosh" sound has a noise modulator that is a steady 340 // clock ~64.5Hz, generated by an LM3900 and an RC network. 341 // When run at 48kHz, this network does not clock at the 342 // correct frequency, so HLE this with a basic clock. 343 // 344 CLOCK(WHOOSH_CLK, 64.5) 345 NET_C(WHOOSH_CLK.GND, GND) 346 NET_C(WHOOSH_CLK.VCC, I_V15) 347 NET_C(WHOOSH_CLK.Q, R40.1) 348 NET_C(GND, C21.1, C21.2, R38.1, R38.2, R39.1, R39.2, R47.1, R47.2, R48.1, R48.2, IC4.11, IC4.12) 349 #else 350 NET_C(R40.1, R38.2, IC4.10, R48.2) 351 NET_C(C21.2, R38.1, R39.2) 352 NET_C(C21.1, GND) 353 NET_C(R39.1, IC4.11) 354 NET_C(I_V15, R47.1) 355 NET_C(R47.2, IC4.12, R48.1) 356 #endif 357 358 NET_C(C15.2, R41.2, IC12.2) 359 NET_C(R41.1, R42.1, GND) 360 NET_C(R42.2, IC12.3) 361 NET_C(IC12.6, IC10.6, IC9.6, IC17.6, IC18.6, IC19.6, R64.1) 362 363 NET_C(I_OUT_2, R24.1, IC7.2) 364 NET_C(R25.1, IC7.6, IC7.7, C7.1) 365 NET_C(C7.2, IC7.1, GND) 366 NET_C(R24.2, I_V5) 367 NET_C(R25.2, IC7.8, IC7.4, I_V5) // IC7.4 -- not documented 368 NET_C(IC7.3, Q4.E) 369 NET_C(Q4.B, R26.2) 370 NET_C(R26.1, GND) 371 NET_C(Q4.C, C8.1, R30.1) 372 NET_C(C8.2, I_VM15) 373 NET_C(R30.2, IC10.5) 374 375 NET_C(R27.1, C9.2, R28.1) 376 NET_C(C9.1, GND) 377 NET_C(R28.2, C10.1) 378 NET_C(C10.2, C11.1, R29.1, IC8.2) 379 NET_C(IC8.3, GND) 380 NET_C(IC8.6, C11.2, R29.2, R31.1) 381 NET_C(R31.2, C12.1) 382 NET_C(C12.2, R32.2, IC10.2) 383 NET_C(R32.1, R33.1, GND) 384 NET_C(R33.2, IC10.3) 385 386 NET_C(R43.2, C22.1) 387 NET_C(C22.2, R44.2, C23.1) 388 NET_C(R44.1, GND) 389 NET_C(C23.2, R45.2, IC9.2) 390 NET_C(R45.1, GND) 391 NET_C(R46.1, GND) 392 NET_C(R46.2, IC9.3) 393 394 NET_C(I_OUT_7, IC13.1) 395 NET_C(I_V5, R49.2) 396 NET_C(R49.1, IC13.2, IC13.5, IC13.9, IC13.12) 397 NET_C(IC13.3, Q5.E) 398 NET_C(Q5.B, R50.2) 399 NET_C(R50.1, GND) 400 NET_C(Q5.C, C24.2, R51.1) 401 NET_C(C24.1, I_VM15) 402 NET_C(R51.2, IC9.5) 403 404 NET_C(I_OUT_3, IC13.4) 405 NET_C(IC13.6, Q6.E) 406 NET_C(Q6.B, R57.2) 407 NET_C(R57.1, GND) 408 NET_C(Q6.C, C28.1, R58.1) 409 NET_C(C28.2, I_VM15) 410 NET_C(R58.2, IC17.5) 411 NET_C(IC14.4, IC14.8, I_V5) 412 NET_C(IC14.3, R52.1) 413 NET_C(R52.2, C25.1) 414 NET_C(C25.2, R55.2, IC17.2) 415 NET_C(IC14.2, IC14.6, R54.1, R53.2, C27.2) 416 NET_C(R54.2, I_V5) 417 NET_C(C27.1, GND) 418 NET_C(IC14.7, R53.1) 419 NET_C(IC14.5, C26.2) 420 NET_C(C26.1, GND) 421 NET_C(IC14.1, GND) 422 NET_C(R55.1, GND) 423 NET_C(R56.1, GND) 424 NET_C(R56.2, IC17.3) 425 426 NET_C(I_OUT_4, IC13.10) 427 NET_C(IC13.8, Q8.E) 428 NET_C(Q8.B, R68.2) 429 NET_C(R68.1, GND) 430 NET_C(Q8.C, C35.1, R69.1) 431 NET_C(C35.2, I_VM15) 432 NET_C(R69.2, IC18.5) 433 NET_C(IC15.4, IC15.8, I_V5) 434 NET_C(IC15.3, R59.1) 435 NET_C(R59.2, C29.1) 436 NET_C(C29.2, R62.2, IC18.2) 437 NET_C(IC15.2, IC15.6, R61.1, R60.2, C31.2) 438 NET_C(R61.2, I_V5) 439 NET_C(C31.1, GND) 440 NET_C(IC15.7, R60.1) 441 NET_C(IC15.5, C30.2) 442 NET_C(C30.1, GND) 443 NET_C(IC15.1, GND) 444 NET_C(R62.1, GND) 445 NET_C(R63.1, GND) 446 NET_C(R63.2, IC18.3) 447 448 NET_C(I_OUT_0, IC13.13) 449 NET_C(IC13.11, Q10.E) 450 NET_C(Q10.B, R77.2) 451 NET_C(R77.1, GND) 452 NET_C(Q10.C, C39.1, R78.1) 453 NET_C(C39.2, I_VM15) 454 NET_C(R78.2, IC19.5) 455 NET_C(IC16.4, IC16.8, I_V5) 456 NET_C(IC16.3, R70.1) 457 NET_C(R70.2, C36.1) 458 NET_C(C36.2, R73.2, IC19.2) 459 NET_C(IC16.2, IC16.6, R72.1, R71.2, C38.2) 460 NET_C(R72.2, I_V5) 461 NET_C(C38.1, GND) 462 NET_C(IC16.7, R71.1) 463 NET_C(IC16.5, C37.2) 464 NET_C(C37.1, GND) 465 NET_C(IC16.1, GND) 466 NET_C(R73.1, GND) 467 NET_C(R74.1, GND) 468 NET_C(R74.2, IC19.3) 469 470 ALIAS(OUTPUT, R64.1) 471 NET_C(R64.2, GND) 472 473 474 // 475 // Unconnected pins 476 // 477 478 NET_C(GND, IC20.2, IC20.3) // part of final amp 479 480 // NET_C(GND, IC6.3, IC28.8, IC28.9, IC28.10, IC28.11) 481 482 NETLIST_END() 483