attotime ttl74123_device::compute_duration() { double duration; switch (m_config.m_connection_type) { case TTL74123_NOT_GROUNDED_NO_DIODE: duration = 0.28 * m_config.m_res * m_config.m_cap * (1.0 + (700.0 / m_config.m_res)); break; case TTL74123_NOT_GROUNDED_DIODE: duration = 0.25 * m_config.m_res * m_config.m_cap * (1.0 + (700.0 / m_config.m_res)); break; case TTL74123_GROUNDED: default: if (m_config.m_cap < CAP_U(0.1)) { /* this is really a curve - a very flat one in the 0.1uF-.01uF range */ duration = 0.32 * m_config.m_res * m_config.m_cap; } else { duration = 0.33 * m_config.m_res * m_config.m_cap; } break; } return double_to_attotime(duration); }
void snk6502_sound_device::device_start() { // adjusted set_music_freq(43000); // 38.99 Hz update (according to schematic) set_music_clock(M_LN2 * (RES_K(18) * 2 + RES_K(1)) * CAP_U(1)); m_tone_stream = machine().sound().stream_alloc(*this, 0, 1, SAMPLE_RATE); for (int i = 0; i < NUM_CHANNELS; i++) { save_item(NAME(m_tone_channels[i].mute), i); save_item(NAME(m_tone_channels[i].offset), i); save_item(NAME(m_tone_channels[i].base), i); save_item(NAME(m_tone_channels[i].mask), i); save_item(NAME(m_tone_channels[i].sample_step), i); save_item(NAME(m_tone_channels[i].sample_cur), i); save_item(NAME(m_tone_channels[i].form), i); } save_item(NAME(m_tone_clock)); save_item(NAME(m_sound0_stop_on_rollover)); save_item(NAME(m_hd38880_cmd)); save_item(NAME(m_hd38880_addr)); save_item(NAME(m_hd38880_data_bytes)); save_item(NAME(m_hd38880_speed)); }
void sasuke_sound_device::device_reset() { m_custom->set_music_clock(M_LN2 * (RES_K(18) + RES_K(1)) * CAP_U(1)); // adjusted (measured through audio recording of pcb) m_custom->set_music_freq(35300); }
void TTL74123_config(int which, const TTL74123_interface *intf) { TTL74123_state *chip; assert_always(which < MAX_TTL74123, "Exceeded maximum number of 74123 chips"); assert_always(intf, "No interface specified"); assert_always((intf->connection_type == TTL74123_GROUNDED) && (intf->cap >= CAP_U(0.01)), "Only capacitors >= 0.01uF supported for GROUNDED type"); assert_always(intf->cap >= CAP_P(1000), "Only capacitors >= 1000pF supported "); chip = &chips[which]; chip->intf = intf; chip->which = which; chip->timer = timer_alloc(clear_callback, chip); /* start with the defaults */ chip->A = intf->A; chip->B = intf->B; chip->clear = intf->clear; /* register for state saving */ state_save_register_item("TTL74123", which, chip->A); state_save_register_item("TTL74123", which, chip->B); state_save_register_item("TTL74123", which, chip->clear); }
static attotime compute_duration(ttl74123_t *chip) { double duration; switch (chip->intf->connection_type) { case TTL74123_NOT_GROUNDED_NO_DIODE: duration = 0.28 * chip->intf->res * chip->intf->cap * (1.0 + (700.0 / chip->intf->res)); break; case TTL74123_NOT_GROUNDED_DIODE: duration = 0.25 * chip->intf->res * chip->intf->cap * (1.0 + (700.0 / chip->intf->res)); break; case TTL74123_GROUNDED: default: if (chip->intf->cap < CAP_U(0.1)) /* this is really a curve - a very flat one in the 0.1uF-.01uF range */ duration = 0.32 * chip->intf->res * chip->intf->cap; else duration = 0.33 * chip->intf->res * chip->intf->cap; break; } return double_to_attotime(duration); }
INPUT_PORTS_END //************************************************************************** // MACHINE INITIALIZATION //************************************************************************** int newbrain_state::get_reset_t() { return RES_K(220) * CAP_U(10) * 1000; // t = R128 * C125 = 2.2s }
void snk6502_sound_device::device_start() { m_ROM = machine().root_device().memregion("snk6502")->base(); // adjusted set_music_freq(43000); // 38.99 Hz update (according to schematic) set_music_clock(M_LN2 * (RES_K(18) * 2 + RES_K(1)) * CAP_U(1)); m_tone_stream = machine().sound().stream_alloc(*this, 0, 1, SAMPLE_RATE); }
void comx35_state::machine_reset() { int t = RES_K(27) * CAP_U(1) * 1000; // t = R1 * C1 m_clear = 0; m_iden = 1; m_cr1 = 1; m_ef4 = CLEAR_LINE; m_int = CLEAR_LINE; m_prd = CLEAR_LINE; timer_set(attotime::from_msec(t), TIMER_ID_RESET); }
void comx35_state::machine_reset() { int t = RES_K(27) * CAP_U(1) * 1000; // t = R1 * C1 m_clear = 0; m_iden = 1; m_cr1 = 1; m_ef4 = CLEAR_LINE; m_int = CLEAR_LINE; m_prd = CLEAR_LINE; m_reset_timer->adjust(attotime::from_msec(t)); }
void n8080_state::spacefev_sound(machine_config &config) { MCFG_SOUND_START_OVERRIDE(n8080_state,spacefev) MCFG_SOUND_RESET_OVERRIDE(n8080_state,spacefev) /* basic machine hardware */ I8035(config, m_audiocpu, 6000000); m_audiocpu->set_addrmap(AS_PROGRAM, &n8080_state::n8080_sound_cpu_map); m_audiocpu->t0_in_cb().set(FUNC(n8080_state::n8080_8035_t0_r)); m_audiocpu->t1_in_cb().set(FUNC(n8080_state::n8080_8035_t1_r)); m_audiocpu->p1_in_cb().set(FUNC(n8080_state::n8080_8035_p1_r)); m_audiocpu->p2_out_cb().set(FUNC(n8080_state::n8080_dac_w)); TIMER(config, "vco_timer").configure_periodic(FUNC(n8080_state::spacefev_vco_voltage_timer), attotime::from_hz(1000)); /* sound hardware */ SPEAKER(config, "speaker").front_center(); DAC_1BIT(config, m_n8080_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.15); voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); vref.add_route(0, "n8080_dac", 1.0, DAC_VREF_POS_INPUT); SN76477(config, m_sn); m_sn->set_noise_params(RES_K(36), RES_K(150), CAP_N(1)); m_sn->set_decay_res(RES_M(1)); m_sn->set_attack_params(CAP_U(1.0), RES_K(20)); m_sn->set_amp_res(RES_K(150)); m_sn->set_feedback_res(RES_K(47)); m_sn->set_vco_params(0, CAP_N(1), RES_M(1.5)); m_sn->set_pitch_voltage(0); m_sn->set_slf_params(CAP_N(47), RES_M(1)); m_sn->set_oneshot_params(CAP_N(47), RES_K(820)); m_sn->set_vco_mode(0); m_sn->set_mixer_params(0, 0, 0); m_sn->set_envelope_params(1, 0); m_sn->set_enable(1); m_sn->add_route(ALL_OUTPUTS, "speaker", 0.35); }
static TIMER_CALLBACK( schaser_effect_555_cb ) { _8080bw_state *state = machine.driver_data<_8080bw_state>(); int effect = param; attotime new_time; /* Toggle 555 output */ state->m_schaser_effect_555_is_low = !state->m_schaser_effect_555_is_low; state->m_schaser_effect_555_time_remain = attotime::zero; state->m_schaser_effect_555_time_remain_savable = state->m_schaser_effect_555_time_remain.as_double(); if (state->m_schaser_effect_555_is_low) new_time = PERIOD_OF_555_ASTABLE(0, RES_K(20), CAP_U(1)) / 2; else { if (effect) new_time = attotime(0, ATTOSECONDS_PER_SECOND * .8873 * schaser_effect_rc[effect]); else new_time = attotime::never; } state->m_schaser_effect_555_timer->adjust(new_time, effect); sn76477_enable_w(state->m_sn, !(state->m_schaser_effect_555_is_low || state->m_schaser_explosion)); sn76477_one_shot_cap_voltage_w(state->m_sn, !(state->m_schaser_effect_555_is_low || state->m_schaser_explosion) ? 0 : SN76477_EXTERNAL_VOLTAGE_DISCONNECT); }
static TIMER_CALLBACK( schaser_effect_555_cb ) { mw8080bw_state *state = machine->driver_data<mw8080bw_state>(); int effect = param; attotime new_time; /* Toggle 555 output */ state->schaser_effect_555_is_low = !state->schaser_effect_555_is_low; state->schaser_effect_555_time_remain = attotime_zero; state->schaser_effect_555_time_remain_savable = attotime_to_double(state->schaser_effect_555_time_remain); if (state->schaser_effect_555_is_low) new_time = attotime_div(PERIOD_OF_555_ASTABLE(0, RES_K(20), CAP_U(1)), 2); else { if (effect) new_time = attotime_make(0, ATTOSECONDS_PER_SECOND * .8873 * schaser_effect_rc[effect]); else new_time = attotime_never; } timer_adjust_oneshot(state->schaser_effect_555_timer, new_time, effect); sn76477_enable_w(state->sn, !(state->schaser_effect_555_is_low || state->schaser_explosion)); sn76477_one_shot_cap_voltage_w(state->sn, !(state->schaser_effect_555_is_low || state->schaser_explosion) ? 0 : SN76477_EXTERNAL_VOLTAGE_DISCONNECT); }
static const discrete_mixer_desc ironhors_mixer_desc = {DISC_MIXER_IS_RESISTOR, {RES_K(2.2), RES_K(2.2), RES_K(2.2)}, {0,0,0,0,0,0}, /* no variable resistors */ {0,0,0,0,0,0}, /* no node capacitors */ 0, RES_K(1), /* RF */ 0, 0, 0, 1}; static const discrete_mixer_desc ironhors_mixer_desc_final = {DISC_MIXER_IS_RESISTOR, {RES_K(0.5), RES_K(1)}, {0,0,0,0,0,0}, /* no variable resistors */ {CAP_U(4.7), CAP_U(4.7)}, /* node capacitors */ 0, RES_K(1), /* RF */ 0, 0, 0, 1}; static DISCRETE_SOUND_START( ironhors ) DISCRETE_INPUTX_STREAM(NODE_01, 0, 5.0, 0) DISCRETE_INPUTX_STREAM(NODE_02, 1, 5.0, 0) DISCRETE_INPUTX_STREAM(NODE_03, 2, 5.0, 0) DISCRETE_INPUTX_STREAM(NODE_04, 3, 1.0, 0) DISCRETE_INPUT_DATA(NODE_11) DISCRETE_INPUT_DATA(NODE_12)
DISCRETE_TRANSFORM2(QIX_VOL_DATA_R, QIX_VOL_DATA, 0x0f, "01&") /* Work out the parallel resistance of the selected resistors. */ DISCRETE_COMP_ADDER(NODE_10, QIX_VOL_DATA_L, &qix_attn_table) DISCRETE_COMP_ADDER(NODE_20, QIX_VOL_DATA_R, &qix_attn_table) /* Then use it for the resistor divider network. */ DISCRETE_TRANSFORM3(NODE_11, NODE_10, RES_K(10), QIX_DAC_DATA, "001+/2*") DISCRETE_TRANSFORM3(NODE_21, NODE_20, RES_K(10), QIX_DAC_DATA, "001+/2*") /* If no resistors are selected (0), then the volume is full. */ DISCRETE_SWITCH(NODE_12, 1, QIX_VOL_DATA_L, QIX_DAC_DATA, NODE_11) DISCRETE_SWITCH(NODE_22, 1, QIX_VOL_DATA_R, QIX_DAC_DATA, NODE_21) /* Filter the DC using the lowest case filter. */ DISCRETE_CRFILTER(NODE_13, NODE_12, RES_K(1.5), CAP_U(1)) DISCRETE_CRFILTER(NODE_23, NODE_22, RES_K(1.5), CAP_U(1)) DISCRETE_OUTPUT(NODE_13, 1) DISCRETE_OUTPUT(NODE_23, 1) DISCRETE_SOUND_END /************************************* * * PIA handlers * *************************************/ static WRITE8_DEVICE_HANDLER( sndpia_2_warning_w )
PORT_START("TRACKY") PORT_BIT( 0x0f, 0, IPT_TRACKBALL_X ) PORT_SENSITIVITY(10) PORT_KEYDELTA(10) INPUT_PORTS_END /************************************* * * Discrete Sound Blocks * *************************************/ static discrete_op_amp_filt_info pokey1_info = { RES_K(220), 0, 0, 0, /* r1 .. r4 */ RES_K(220), /* rF */ CAP_U(0.022), /* C1 */ CAP_U(0.1), /* C2 */ 0, /* C3 */ 0.0, /* vRef */ 15.0, /* vP */ -15.0, /* vN */ }; static discrete_mixer_desc quantum_mixer = { DISC_MIXER_IS_OP_AMP, /* type */ { RES_K(220), RES_K(220) }, /* r{} */ {}, /* r_node */ { CAP_U(0.1), CAP_U(0.1) }, /* c{} */ 0, /* rI */ RES_K(220), /* rF */ 0, /* cF */
static WRITE8_DEVICE_HANDLER( ic8j2_output_changed ) { m10_state *state = device->machine().driver_data<m10_state>(); /* written from /Q to A with slight delight */ LOG(("ic8j2: %d\n", data)); ttl74123_a_w(device, 0, data); ttl74123_a_w(state->m_ic8j1, 0, data); } static const ttl74123_interface ic8j1_intf = { /* completely illegible */ TTL74123_NOT_GROUNDED_DIODE, /* the hook up type */ RES_K(1), /* resistor connected to RCext */ CAP_U(1), /* capacitor connected to Cext and RCext */ 1, /* A pin - driven by the CRTC */ 1, /* B pin - pulled high */ 1, /* Clear pin - pulled high */ ic8j1_output_changed }; static const ttl74123_interface ic8j2_intf = { TTL74123_NOT_GROUNDED_DIODE, /* the hook up type */ /* 10k + 20k variable resistor */ RES_K(22), /* resistor connected to RCext */ CAP_U(2.2), /* capacitor connected to Cext and RCext */ 1, /* A pin - driven by the CRTC */ 1, /* B pin - pulled high */ 1, /* Clear pin - pulled high */
void prof80_state::ls259_w(int fa, int sa, int fb, int sb) { switch (sa) { case 0: // C0/TDI m_rtc->data_in_w(fa); m_rtc->c0_w(fa); m_c0 = fa; break; case 1: // C1 m_rtc->c1_w(fa); m_c1 = fa; break; case 2: // C2 m_rtc->c2_w(fa); m_c2 = fa; break; case 3: // READY m_fdc->ready_w(fa); break; case 4: // TCK m_rtc->clk_w(fa); break; case 5: // IN USE output_set_led_value(0, fa); break; case 6: // _MOTOR if (fa) { // trigger floppy motor off NE555 timer int t = 110 * RES_M(10) * CAP_U(6.8); // t = 1.1 * R8 * C6 timer_set(attotime::from_msec(t), TIMER_ID_MOTOR); } else { // turn on floppy motor if(m_floppy0) m_floppy0->mon_w(false); if(m_floppy1) m_floppy1->mon_w(false); m_motor = 1; // reset floppy motor off NE555 timer timer_set(attotime::never, TIMER_ID_MOTOR); } break; case 7: // SELECT break; } switch (sb) { case 0: // RESF if (fb) m_fdc->reset(); break; case 1: // MINI break; case 2: // _RTS break; case 3: // TX break; case 4: // _MSTOP if (!fb) { // immediately turn off floppy motor synchronize(TIMER_ID_MOTOR); } break; case 5: // TXP break; case 6: // TSTB m_rtc->stb_w(fb); break; case 7: // MME //logerror("INIT %u\n", fb); m_init = fb; bankswitch(); break; } }
static const discrete_555_cc_desc frogsZip555cc = { DISC_555_OUT_CAP | DISC_555_OUT_DC, 12, // B+ voltage of 555 DEFAULT_555_VALUES, 12, // B+ voltage of the Constant Current source 0.6 // Q13 Vbe }; static const discrete_mixer_desc frogsMixer = { DISC_MIXER_IS_OP_AMP, {RES_K(1), RES_K(5)}, {FROGS_R93, 0}, {CAP_U(0.01), CAP_U(0.01)}, 0, RES_K(56), 0, CAP_U(0.1), 0, 10000 }; DISCRETE_SOUND_START(frogs_discrete_interface) /************************************************ * Input register mapping for frogs * * All inputs are inverted by initial transistor. ************************************************/ DISCRETE_INPUT_LOGIC(FROGS_FLY_EN) DISCRETE_INPUT_NOT(FROGS_JUMP_EN) DISCRETE_INPUT_NOT(FROGS_HOP_EN) DISCRETE_INPUT_NOT(FROGS_TONGUE_EN) DISCRETE_INPUT_NOT(FROGS_CAPTURE_EN) DISCRETE_INPUT_NOT(FROGS_SPLASH_EN)
#define MADALIEN_8910_PORTA_8 NODE_09 #define MADALIEN_8910_PORTB_1 NODE_10 #define MADALIEN_8910_PORTB_23 NODE_11 #define MADALIEN_8910_PORTB_45 NODE_12 #define MADALIEN_8910_PORTB_6 NODE_13 #define MADALIEN_8910_PORTB_7 NODE_14 #define MADALIEN_8910_PSG_A NODE_15 #define MADALIEN_8910_PSG_B NODE_16 #define MADALIEN_8910_PSG_C NODE_17 static const discrete_op_amp_filt_info madalien_psg_a_filter = { RES_K(1)+ 270, 0, RES_K(10), 0, RES_K(100), CAP_U(.1), CAP_U(.1), 0, 0, 5, -5 }; static const discrete_op_amp_filt_info madalien_psg_c_filter = { RES_K(1)+ 270, 0, RES_K(10), 0, RES_K(100), CAP_U(.068), CAP_U(.068), 0, 0, 5, -5 }; static const discrete_mixer_desc madalien_psg_mix = { DISC_MIXER_IS_RESISTOR, {RES_K(10), RES_K(10), RES_K(10)}, {0}, {0}, 0, 0, 0, 0, 0, 1 }; static const discrete_555_desc madalien_555_1f =
static const discrete_dac_r1_ladder osi600_dac = { 4, // size of ladder { 180, 180, 180, 180, 0, 0, 0, 0 }, // R68, R69, R70, R71 5, // 5V RES_K(1), // R67 0, // no rGnd 0 // no cFilter }; static DISCRETE_SOUND_START( osi600_discrete_interface ) DISCRETE_INPUT_DATA(NODE_01) DISCRETE_DAC_R1(NODE_02, NODE_01, DEFAULT_TTL_V_LOGIC_1, &osi600_dac) DISCRETE_CRFILTER(NODE_03, NODE_02, (int)(1.0/(1.0/RES_K(1)+1.0/180+1.0/180+1.0/180+1.0/180)), CAP_U(0.1)) DISCRETE_OUTPUT(NODE_03, 100) DISCRETE_GAIN(NODE_04, NODE_03, 32767.0/5) DISCRETE_OUTPUT(NODE_04, 100) DISCRETE_SOUND_END #if 0 static const discrete_dac_r1_ladder osi600c_dac = { 8, // size of ladder { RES_K(68), RES_K(33), RES_K(16), RES_K(8.2), RES_K(3.9), RES_K(2), RES_K(1), 510 }, // R73, R71, R70, R67, R68, R69, R75, R74 5, // 5V 510, // R86 0, // no rGnd CAP_U(33) // C63 };
static MACHINE_DRIVER_START( nitedrvr ) /* driver data */ MDRV_DRIVER_DATA(nitedrvr_state) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M6502, XTAL_12_096MHz/12) // 1 MHz MDRV_CPU_PROGRAM_MAP(nitedrvr_map) MDRV_CPU_VBLANK_INT("screen", irq0_line_hold) MDRV_WATCHDOG_VBLANK_INIT(3) MDRV_MACHINE_START(nitedrvr) MDRV_MACHINE_RESET(nitedrvr) MDRV_TIMER_ADD_PERIODIC("crash_timer", nitedrvr_crash_toggle_callback, NSEC(PERIOD_OF_555_ASTABLE_NSEC(RES_K(180), 330, CAP_U(1)))) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(57) // how is this derived? MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_SIZE(32*8, 32*8) MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) MDRV_GFXDECODE(nitedrvr) MDRV_PALETTE_LENGTH(2) MDRV_PALETTE_INIT(black_and_white) MDRV_VIDEO_START(nitedrvr) MDRV_VIDEO_UPDATE(nitedrvr)
int newbrain_state::get_pwrup_t() { return RES_K(560) * CAP_U(10) * 1000; // t = R129 * C127 = 5.6s }
{ AY8910_DISCRETE_OUTPUT, { RES_K(3.3), RES_K(3.3), RES_K(3.3) }, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL }; static const discrete_mixer_desc konami_right_mixer_desc = {DISC_MIXER_IS_RESISTOR, {RES_K(2.2), RES_K(2.2), RES_K(2.2), RES_K(3.3)/3, RES_K(3.3)/3 }, {0,0,0,0,0,0}, /* no variable resistors */ {0,0,0,0,0,0}, /* no node capacitors */ 0, 200, CAP_U(0.1), CAP_U(1), /* DC - Removal, not in schematics */ 0, 1}; static const discrete_mixer_desc konami_left_mixer_desc = {DISC_MIXER_IS_RESISTOR, {RES_K(2.2), RES_K(2.2), RES_K(2.2), RES_K(3.3)/3, RES_K(4.7) }, {0,0,0,0,0,0}, /* no variable resistors */ {0,0,0,0,0,0}, /* no node capacitors */ 0, 200, CAP_U(0.1), CAP_U(1), /* DC - Removal, not in schematics */ 0, 1}; static DISCRETE_SOUND_START( gyruss_sound )
RES_K(22), /* R12 */ RES_K(10)}, /* R11 */ 0, 0, 0, 0 /* nothing extra */ }; /* R39 R38 R39 */ #define BOSCO_VREF (5.0 * (RES_K(2.2) / (RES_K(3.3) + RES_K(2.2)))) static const discrete_op_amp_filt_info bosco_chanl1_filt = { BOSCO_54XX_DAC_R + RES_K(100), /* R24 */ 0, /* no second input */ RES_K(22), /* R23 */ 0, /* not used */ RES_K(220), /* R22 */ CAP_U(0.001), /* C31 */ CAP_U(0.001), /* C30 */ 0, /* not used */ BOSCO_VREF, /* vRef */ 5, /* vP */ 0 /* vN */ }; static const discrete_op_amp_filt_info bosco_chanl2_filt = { BOSCO_54XX_DAC_R + RES_K(47), /* R33 */ 0, /* no second input */ RES_K(10), /* R34 */ 0, /* not used */ RES_K(150), /* R35 */ CAP_U(0.01), /* C29 */
14, /* Use Bit 14 as XOR input 1 */ DISC_LFSR_XNOR, /* Feedback stage1 is XNOR */ DISC_LFSR_OR, /* Feedback stage2 is just stage 1 output OR with external feed */ DISC_LFSR_REPLACE, /* Feedback stage3 replaces the shifted register contents */ 0x000001, /* Everything is shifted into the first bit only */ 0, /* Output is already inverted by XNOR */ 16 /* Output bit is feedback bit */ }; static const discrete_dac_r1_ladder atarifb_crowd_r1_ladder = { 4, {RES_K(390), RES_K(220), RES_K(100), RES_K(56)}, // r17, r16, r14, r15 0, 0, // no bias 0, // no rGnd CAP_U(0.1) // c32 }; static const discrete_op_amp_filt_info atarifb_crowd_filt = { 1.0/(1.0/RES_K(390) + 1.0/RES_K(220) + 1.0/RES_K(100) + 1.0/RES_K(56)), // r17, r16, r14, r15 0, 0, 0, RES_K(330), // r35 CAP_U(.01), // c33 CAP_U(.01), // c44 0, 5, 12, 0 }; static const discrete_mixer_desc atarifb_mixer = {
/*******************************************************/ /* */ /* Taito "Balloon Bomber" */ /* The sounds are not the correct ones */ /* */ /*******************************************************/ /************************************* * * Discrete Sound * (copied from indianbt) * *************************************/ static const discrete_dac_r1_ladder ballbomb_music_dac = {3, {0, RES_K(47), RES_K(12)}, 0, 0, 0, CAP_U(0.1)}; #define BALLBOMB_MUSIC_CLK (3993.6*2*2*2) /* Nodes - Inputs */ #define BALLBOMB_MUSIC_DATA NODE_01 /* Nodes - Sounds */ #define BALLBOMB_MUSIC NODE_11 DISCRETE_SOUND_START(ballbomb) DISCRETE_INPUT_DATA (BALLBOMB_MUSIC_DATA) /****************************************************************************** * * Music Generator
//---------------------------------------------------------------- // Startup / Antenna latch //---------------------------------------------------------------- TTL_INPUT(antenna, 0) DIODE(CR3, "1N914") DIODE(CR4, "1N914") DIODE(CR5, "1N914") DIODE(CR7, "1N914") QBJT_EB(Q1, "2N3644") QBJT_EB(Q2, "2N3643") QBJT_EB(Q3, "2N3643") CAP(C19, CAP_U(0.1)) CAP(C16, CAP_U(0.1)) RES(R25, 100) RES(R26, 330) RES(R27, 100) RES(R31, 220) RES(R32, 100) NET_C(GND, CR5.A, Q2.E, C16.2, R25.2, Q3.E) NET_C(CR5.K, Q2.B, antenna) NET_C(Q2.C, C16.1, R25.1, Q3.B, R27.2) NET_C(R27.1, CR7.A, R31.2) //CR7.K == IN NET_C(R31.1, Q1.C) NET_C(Q3.C, R26.2, CR3.A, CR4.A, E9.5) // E9.6 = Q Q3.C=QQ CR3.K = COIN*1 CR4.K = COIN*2 NET_C(R26.1, Q1.B, C19.2, R32.2)
}; static const discrete_555_cc_desc frogsZip555cc = { DISC_555_OUT_CAP | DISC_555_OUT_DC, 12, // B+ voltage of 555 DEFAULT_555_VALUES, 0.6 // Q13 Vbe }; static const discrete_mixer_desc frogsMixer = { DISC_MIXER_IS_OP_AMP, {RES_K(1), RES_K(5)}, {FROGS_R93, 0}, {CAP_U(0.01), CAP_U(0.01)}, 0, RES_K(56), 0, CAP_U(0.1), 0, 10000 }; static DISCRETE_SOUND_START(frogs) /************************************************ * Input register mapping for frogs * * All inputs are inverted by initial transistor. ************************************************/ DISCRETE_INPUT_LOGIC(FROGS_FLY_EN) DISCRETE_INPUT_NOT(FROGS_JUMP_EN) DISCRETE_INPUT_NOT(FROGS_HOP_EN) DISCRETE_INPUT_NOT(FROGS_TONGUE_EN) DISCRETE_INPUT_NOT(FROGS_CAPTURE_EN) DISCRETE_INPUT_NOT(FROGS_SPLASH_EN)
1, {RES_K(10)}, // R29 5, // 555 Vcc RES_K(5), // 555 internal RES_K(10), // 555 internal CAP_N(100) // C100 }; static const discrete_dac_r1_ladder spiders_web_exp_dac = { 1, {RES_K(10)}, // R44 5, // 555 Vcc RES_K((5*2.2)/(5+2.2)), // 555 internal (5k) // R49 (2.2k) RES_K(10), // 555 internal CAP_U(0.01) // C25 }; // IC 10 static const discrete_555_desc spiders_fire_555a = { DISC_555_OUT_SQW | DISC_555_OUT_DC, 5, // B+ voltage of 555 DEFAULT_555_VALUES }; static const discrete_555_desc spiders_super_web_555a = { DISC_555_OUT_CAP | DISC_555_OUT_DC, 5, // B+ voltage of 555
static struct AY8910interface ay8910_interface = { 0, 0, stratvox_sn76477_w, /* SN76477 commands (not used in Route 16?) */ 0 }; static struct SN76477interface sn76477_interface = { RES_K( 47) , /* 4 noise_res */ RES_K(150) , /* 5 filter_res */ CAP_U(0.001) , /* 6 filter_cap */ RES_M(3.3) , /* 7 decay_res */ CAP_U(1.0) , /* 8 attack_decay_cap */ RES_K(4.7) , /* 10 attack_res */ RES_K(200) , /* 11 amplitude_res */ RES_K( 55) , /* 12 feedback_res */ 5.0*2/(2+10) , /* 16 vco_voltage */ CAP_U(0.022) , /* 17 vco_cap */ RES_K(100) , /* 18 vco_res */ 5.0 , /* 19 pitch_voltage */ RES_K( 75) , /* 20 slf_res */ CAP_U(1.0) , /* 21 slf_cap */ CAP_U(2.2) , /* 23 oneshot_cap */ RES_K(4.7) /* 24 oneshot_res */ };