// identify unknown devices in IDE #define NETLIST_DEVELOPMENT 0 #include "netlist/nl_dice_compat.h" #define SLOW_BUT_ACCURATE 0 //2 555 timers static Astable555Desc b2_555_desc(OHM(560.0), M_OHM(1.8), U_FARAD(0.1)); static Mono555Desc c9_555_desc(OHM(47000.0), U_FARAD(1.0)); // R33, C21 static CapacitorDesc c32_desc(U_FARAD(0.1)); static CapacitorDesc c36_desc(N_FARAD(1.0)); //0.001uF = 1nF static CapacitorDesc c37_desc(P_FARAD(330.0)); static Mono9602Desc n8_desc(K_OHM(33.0), U_FARAD(100.0), K_OHM(5.6), P_FARAD(0)); // No capacitor on 2nd 9602 static Mono9602Desc f3_desc(K_OHM(47.0), U_FARAD(1.0), K_OHM(47.0), U_FARAD(1.0)); static Mono9602Desc a7_desc(K_OHM(68.0), U_FARAD(1.0), K_OHM(22.0), U_FARAD(10.0)); static Mono9602Desc a8_desc(K_OHM(27.0), U_FARAD(1.0), K_OHM(27.0), U_FARAD(1.0)); CIRCUIT_LAYOUT( breakout ) #if (SLOW_BUT_ACCURATE) SOLVER(Solver, 48000) PARAM(Solver.ACCURACY, 1e-8) // less accuracy and diode will not work PARAM(Solver.GS_THRESHOLD, 6) #else SOLVER(Solver, 48000)
#include "netlist/nl_dice_compat.h" #include "netlist/devices/net_lib.h" #include "netlist/analog/nld_twoterm.h" //2 555 timers static Astable555Desc b2_555_desc(OHM(560.0), M_OHM(1.8), U_FARAD(0.1)); static Mono555Desc c9_555_desc(OHM(47.0), U_FARAD(1.0)); // R33, C21 //check these values //static Paddle1HorizontalDesc pad1_desc(15047.0, 47.0, &c9_555_desc); static CapacitorDesc c32_desc(U_FARAD(0.1)); static CapacitorDesc c36_desc(N_FARAD(1.0)); //0.001uF = 1nF static CapacitorDesc c37_desc(P_FARAD(330.0)); static BufferDesc pad_en_buf_desc(DELAY_NS(15.0), DELAY_NS(15.0)); // Prevents 12ns glitch on PAD_EN_n signal from resetting C9. TODO: is this accurate? #if 0 static VIDEO_DESC( breakout ) VIDEO_RESISTANCE(1, K_OHM(0.0)) VIDEO_RESISTANCE(2, K_OHM(3.9)) VIDEO_RESISTANCE(3, K_OHM(3.9)) VIDEO_RESISTANCE(4, K_OHM(3.9)) VIDEO_RESISTANCE(5, K_OHM(3.9)) VIDEO_RESISTANCE(6, K_OHM(3.9)) //VIDEO_RESISTANCE(Video::HBLANK_PIN, K_OHM(0.0)) VIDEO_ORIENTATION(ROTATE_90) VIDEO_CONTRAST(4.0) // Values guessed based on screenshots. TODO: Make more accurate // X, Y, W, H, R, G, B
static Mono555Desc _12a_555_desc(K_OHM(220.0), U_FARAD(3.3)); static Mono555Desc _3b_555_desc(K_OHM(100.0), U_FARAD(4.7)); static Mono555Desc _14g_555_desc(K_OHM(330.0), U_FARAD(0.22)); static Astable555Desc _9d_555_desc(K_OHM(40.0), K_OHM(15.0), U_FARAD(22.0)); static Paddle1VerticalDesc pad1_desc(4000.0, 94000.0, &_5h_555_desc); static Paddle2VerticalDesc pad2_desc(4000.0, 94000.0, &_3f_555_desc); static Paddle3VerticalDesc pad3_desc(4000.0, 94000.0, &_3h_555_desc); static Paddle4VerticalDesc pad4_desc(4000.0, 94000.0, &_5f_555_desc); static CapacitorDesc c1_desc(U_FARAD(0.001)); static CapacitorDesc c2_desc(U_FARAD(0.001)); static CapacitorDesc c3_desc(U_FARAD(0.001)); static CapacitorDesc c4_desc(U_FARAD(0.001)); static CapacitorDesc c5_desc(U_FARAD(0.001)); static CapacitorDesc c6_desc(P_FARAD(100.0)); static CapacitorDesc c7_desc(U_FARAD(0.01)); static BufferDesc buf1_desc(DELAY_NS(25.0), DELAY_NS(25.0)); // 25 ns buffer to prevent resonance in RC circuits static BufferDesc buf2_desc(DELAY_NS(25.0), DELAY_NS(25.0)); // 25 ns buffer to prevent resonance in RC circuits static SeriesRCDesc rc1_desc(OHM(220.0), U_FARAD(350.0)); static SeriesRCDesc rc2_desc(OHM(220.0), U_FARAD(470.0)); static PotentimeterAstable555Desc pot1_desc("playtime", "Play Time", K_OHM(35.0), K_OHM(10.0), K_OHM(60.0), _9d_555_desc); // Hack to improve performance static CHIP_LOGIC( diode_matrix_custom_n ) { DIODE_LAYOUT* d_l = (DIODE_LAYOUT*)custom_data;
6, "F", 7, "G", 8, "H", 9, "I", 10, "J", 11, "K", 12, "L", 13, "M", 14, "N", 15, "O" ); #endif static Mono9602Desc b1_desc(K_OHM(9.1), U_FARAD(100.0), K_OHM(9.1), U_FARAD(100.0)); static Mono9602Desc c1_desc(K_OHM(15.0), U_FARAD(5.0), K_OHM(15.0), U_FARAD(5.0)); static Mono9602Desc e1_desc(K_OHM(33.0), U_FARAD(47.0), K_OHM(27.0), P_FARAD(100.0)); static Mono555Desc d9_555_desc(K_OHM(610.0), U_FARAD(100.0)); static DipswitchDesc dipswitch1_desc("coinage", "Coinage", 0, "1 Coin / 1 Credit", "1 Coin / 2 Credits"); static DipswitchDesc dipswitch2_desc("plane_type", "Plane Type", 0, "Airplane", "UFO"); static PotentimeterMono555Desc pot1_desc("playtime", "Play Time", K_OHM(830.0), K_OHM(220.0), K_OHM(1220.0), d9_555_desc); static RomDesc k1_desc("antiaircraft", "aa.k1", 0x9DE772D5); // 100 ms period +/- 25% (Guess). TODO: Determine actual functionality static CUSTOM_LOGIC( RANDOM_CLOCK_GEN ) { // Output should be high at start, so push event immediately if(chip->circuit->global_time == 0) { chip->pending_event = chip->circuit->queue_push(chip, 1);