static void spacefev_update_SN76477_status( device_t *sn ) { n8080_state *state = sn->machine().driver_data<n8080_state>(); double dblR0 = RES_M(1.0); double dblR1 = RES_M(1.5); if (!state->m_mono_flop[0]) { dblR0 = 1 / (1 / RES_K(150) + 1 / dblR0); /* ? */ } if (!state->m_mono_flop[1]) { dblR1 = 1 / (1 / RES_K(620) + 1 / dblR1); /* ? */ } sn76477_decay_res_w(sn, dblR0); sn76477_vco_res_w(sn, dblR1); sn76477_enable_w(sn, !state->m_mono_flop[0] && !state->m_mono_flop[1] && !state->m_mono_flop[2]); sn76477_vco_w(sn, state->m_mono_flop[1]); sn76477_mixer_b_w(sn, state->m_mono_flop[0]); }
void n8080_state::spacefev_update_SN76477_status() { double dblR0 = RES_M(1.0); double dblR1 = RES_M(1.5); if (!m_mono_flop[0]) { dblR0 = 1 / (1 / RES_K(150) + 1 / dblR0); /* ? */ } if (!m_mono_flop[1]) { dblR1 = 1 / (1 / RES_K(620) + 1 / dblR1); /* ? */ } m_sn->decay_res_w(dblR0); m_sn->vco_res_w(dblR1); m_sn->enable_w( !m_mono_flop[0] && !m_mono_flop[1] && !m_mono_flop[2]); m_sn->vco_w(m_mono_flop[1]); m_sn->mixer_b_w(m_mono_flop[0]); }
void fantasy_sound_device::device_add_mconfig(machine_config &config) { SPEAKER(config, "mono").front_center(); SNK6502_SOUND(config, m_custom, 0); m_custom->add_route(ALL_OUTPUTS, "mono", 0.50); samples_device &samples(SAMPLES(config, "samples")); samples.set_channels(1); samples.set_samples_names(fantasy_sample_names); samples.add_route(ALL_OUTPUTS, "mono", 0.5); sn76477_device &sn76477_1(SN76477(config, "sn76477.1")); // BOMB GND: 2,9,26,27 +5V: 15,25 sn76477_1.set_noise_params(RES_K(470), RES_M(1.5), CAP_P(220)); sn76477_1.set_decay_res(0); sn76477_1.set_attack_params(0, 0); sn76477_1.set_amp_res(RES_K(470)); sn76477_1.set_feedback_res(RES_K(4.7)); sn76477_1.set_vco_params(0, 0, 0); sn76477_1.set_pitch_voltage(0); sn76477_1.set_slf_params(0, 0); sn76477_1.set_oneshot_params(0, 0); sn76477_1.set_vco_mode(0); sn76477_1.set_mixer_params(0, 1, 0); // schematic does not show pin 1 grounded, but it must be. // otherwise it is using the VCO for the envelope, but the VCO is not hooked up sn76477_1.set_envelope_params(0, 1); sn76477_1.set_enable(0); sn76477_1.add_route(0, "discrete", 1.0, 0); DISCRETE(config, m_discrete, fantasy_discrete); m_discrete->add_route(ALL_OUTPUTS, "mono", 0.5); }
void satansat_sound_device::device_add_mconfig(machine_config &config) { SPEAKER(config, "mono").front_center(); SNK6502_SOUND(config, m_custom, 0); m_custom->add_route(ALL_OUTPUTS, "mono", 0.50); samples_device &samples(SAMPLES(config, "samples")); samples.set_channels(3); samples.set_samples_names(vanguard_sample_names); samples.add_route(ALL_OUTPUTS, "mono", 0.25); sn76477_device &sn76477_1(SN76477(config, "sn76477.1")); // ??? GND: 2,26,27 +5V: 15,25 sn76477_1.set_noise_params(RES_K(470), RES_M(1.5), CAP_P(220)); sn76477_1.set_decay_res(0); sn76477_1.set_attack_params(0, 0); sn76477_1.set_amp_res(RES_K(47)); sn76477_1.set_feedback_res(RES_K(47)); sn76477_1.set_vco_params(0, 0, 0); sn76477_1.set_pitch_voltage(0); sn76477_1.set_slf_params(0, 0); sn76477_1.set_oneshot_params(0, 0); sn76477_1.set_vco_mode(0); sn76477_1.set_mixer_params(0, 1, 0); sn76477_1.set_envelope_params(1, 1); sn76477_1.set_enable(1); sn76477_1.add_route(ALL_OUTPUTS, "mono", 1.0); }
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); }
} MACHINE_CONFIG_START(vanguard_sound_device::device_add_mconfig) SPEAKER(config, "mono").front_center(); MCFG_DEVICE_ADD(m_custom, SNK6502_SOUND, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MCFG_DEVICE_ADD("samples", SAMPLES) MCFG_SAMPLES_CHANNELS(3) MCFG_SAMPLES_NAMES(vanguard_sample_names) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_DEVICE_ADD("sn76477.1", SN76477) // SHOT A GND: 2,9,26,27 +5V: 15,25 MCFG_SN76477_NOISE_PARAMS(RES_K(470), RES_M(1.5), CAP_P(220)) // noise + filter MCFG_SN76477_DECAY_RES(0) // decay_res MCFG_SN76477_ATTACK_PARAMS(0, 0) // attack_decay_cap + attack_res MCFG_SN76477_AMP_RES(RES_K(47)) // amplitude_res MCFG_SN76477_FEEDBACK_RES(RES_K(4.7)) // feedback_res MCFG_SN76477_VCO_PARAMS(0, 0, 0) // VCO volt + cap + res MCFG_SN76477_PITCH_VOLTAGE(0) // pitch_voltage MCFG_SN76477_SLF_PARAMS(0, 0) // slf caps + res MCFG_SN76477_ONESHOT_PARAMS(0, 0) // oneshot caps + res MCFG_SN76477_VCO_MODE(0) // VCO mode MCFG_SN76477_MIXER_PARAMS(0, 1, 0) // mixer A, B, C MCFG_SN76477_ENVELOPE_PARAMS(1, 1) // envelope 1, 2 MCFG_SN76477_ENABLE(1) // enable MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MCFG_DEVICE_ADD("sn76477.2", SN76477)
NET_C(4K_B.ENQ, ttllow) NET_C(GND, 4K_B.GND) NET_C(R64.1, 4J_B.Q) NET_C(R64.2, 4K_B.FC, C43.1) NET_C(C43.2, GND) TTL_7486_XOR(1K_C, 3H.Q4, 4K_A.Y) TTL_7408_AND(2K_C, 4L_A.Q, 1K_C) NETLIST_END() /* ---------------------------------------------------------------------- */ /* DAC sound */ /* ---------------------------------------------------------------------- */ static NETLIST_START(nl_mario_dac) RES(R34, RES_M(2)) RES(R35, RES_M(1)) RES(R36, RES_M(1.8)) LM3900(3M_1) NET_C(3M_1.VM, GND) NET_C(3M_1.VP, V5) NET_C(DAC.VOUT, R34.1) NET_C(3M_1.MINUS, R34.2, R35.2) NET_C(3M_1.OUT, R35.1) NET_C(3M_1.PLUS, R36.1) NET_C(R36.2, GND) RES(R21, RES_M(1.8)) RES(R23, RES_K(10)) RES(R25, RES_K(10))
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; } }
{ m_timer = 0; } /************************************* * * Audio hardware * *************************************/ static const sn76477_interface sn76477_intf = { RES_K(47), /* 4 noise_res */ // RES_K(120), /* 5 filter_res */ RES_M(1.2), /* 5 filter_res */ CAP_P(470), /* 6 filter_cap */ RES_K(680), /* 7 decay_res */ CAP_U(0.2), /* 8 attack_decay_cap */ RES_K(3.3), /* 10 attack_res */ 0, /* 11 amplitude_res (variable) */ RES_K(50), /* 12 feedback_res */ 0, /* 16 vco_voltage (variable) */ CAP_U(0.1), /* 17 vco_cap */ RES_K(51), /* 18 vco_res */ 5.0, /* 19 pitch_voltage (N/C) */ RES_K(470), /* 20 slf_res */ CAP_U(0.1), /* 21 slf_cap */ CAP_U(0.1), /* 23 oneshot_cap */ RES_M(1), /* 24 oneshot_res */ 0, /* 22 vco (variable) */
struct SN76477interface sheriff_sn76477_interface = { 1, /* 1 chip */ { 50 }, /* mixing level pin description */ { RES_K( 36) }, /* 4 noise_res */ { RES_K(100) }, /* 5 filter_res */ { CAP_U(0.001) }, /* 6 filter_cap */ { RES_K(620) }, /* 7 decay_res */ { CAP_U(1.0) }, /* 8 attack_decay_cap */ { RES_K(20) }, /* 10 attack_res */ { RES_K(150) }, /* 11 amplitude_res */ { RES_K(47) }, /* 12 feedback_res */ { 0 }, /* 16 vco_voltage */ { CAP_U(0.001) }, /* 17 vco_cap */ { RES_M(1.5) }, /* 18 vco_res */ { 0.0 }, /* 19 pitch_voltage */ { RES_M(1.5) }, /* 20 slf_res */ { CAP_U(0.047) }, /* 21 slf_cap */ { CAP_U(0.047) }, /* 23 oneshot_cap */ { RES_K(560) } /* 24 oneshot_res */ }; static void sheriff_74123_0_output_changed_cb(void) { SN76477_vco_w (0, TTL74123_output_r(0)); SN76477_mixer_b_w(0, !TTL74123_output_r(0)); SN76477_enable_w(0, TTL74123_output_comp_r(0) && TTL74123_output_comp_r(1)); }
RES(R23, RES_K(47)) RES(R24, RES_K(10)) RES(R25, RES_K(47)) RES(R26, RES_K(22)) RES(R27, RES_K(10)) RES(R28, RES_K(470)) RES(R29, RES_K(1)) RES(R30, RES_K(240)) RES(R31, RES_K(10)) RES(R32, RES_K(47)) RES(R33, RES_K(47)) RES(R34, RES_K(47)) RES(R35, RES_K(47)) RES(R36, RES_K(22)) RES(R37, RES_K(10)) RES(R38, RES_M(1)) RES(R39, 330) RES(R40, RES_K(390)) RES(R41, RES_K(10)) RES(R42, RES_K(47)) RES(R43, RES_K(47)) RES(R44, RES_K(47)) RES(R45, RES_K(47)) RES(R46, RES_K(22)) RES(R47, RES_K(10)) RES(R48, RES_M(1)) RES(R49, 220) RES(R50, RES_K(390)) RES(R51, RES_K(10)) RES(R52, RES_K(22)) RES(R53, RES_K(22))
{ { REGION_GFX1, 0, &charlayout, 0, 16 }, { REGION_GFX2, 0, &spritelayout, 0, 16 }, { -1 } /* end of array */ }; static struct SN76477interface sn76477_interface = { RES_K( 47) , /* 4 noise_res */ RES_K(330) , /* 5 filter_res */ CAP_P(470) , /* 6 filter_cap */ RES_K(220) , /* 7 decay_res */ CAP_U(1.0) , /* 8 attack_decay_cap */ RES_K(4.7) , /* 10 attack_res */ RES_M( 1) , /* 11 amplitude_res */ RES_K(200) , /* 12 feedback_res */ 5.0 , /* 16 vco_voltage */ CAP_P(470) , /* 17 vco_cap */ RES_K(330) , /* 18 vco_res */ 5.0 , /* 19 pitch_voltage */ RES_K( 20) , /* 20 slf_res */ CAP_P(420) , /* 21 slf_cap */ CAP_U(1.0) , /* 23 oneshot_cap */ RES_K( 47) /* 24 oneshot_res */ }; static void crbaloon_tone_update(void *param, stream_sample_t **inputs, stream_sample_t **outputs, int len) { stream_sample_t *buffer = outputs[0];
RES_K(150), /* 24 oneshot_res */ 0, /* 22 vco */ 1, /* 26 mixer A */ 1, /* 25 mixer B */ 0, /* 27 mixer C */ 1, /* 1 envelope 1 */ 0, /* 28 envelope 2 */ 1 /* 9 enable (variable) */ // ic52 GND: 2,22,27,28 +5V: 1,15,25,26 }; const sn76477_interface satansat_sn76477_intf = { RES_K(470), /* 4 noise_res */ RES_M(1.5), /* 5 filter_res */ CAP_P(220), /* 6 filter_cap */ 0, /* 7 decay_res */ 0, /* 8 attack_decay_cap */ 0, /* 10 attack_res */ RES_K(47), /* 11 amplitude_res */ RES_K(47), /* 12 feedback_res */ 0, /* 16 vco_voltage */ 0, /* 17 vco_cap */ 0, /* 18 vco_res */ 0, /* 19 pitch_voltage */ 0, /* 20 slf_res */ 0, /* 21 slf_cap */ 0, /* 23 oneshot_cap */ 0, /* 24 oneshot_res */ 0, /* 22 vco */
/* basic machine hardware */ MCFG_CPU_ADD("audiocpu", I8035, 6000000) MCFG_CPU_PROGRAM_MAP(n8080_sound_cpu_map) MCFG_CPU_IO_MAP(n8080_sound_io_map) MCFG_TIMER_DRIVER_ADD_PERIODIC("vco_timer", n8080_state, spacefev_vco_voltage_timer, attotime::from_hz(1000)) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_DAC_ADD("dac") MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) MCFG_SOUND_ADD("snsnd", SN76477, 0) MCFG_SN76477_NOISE_PARAMS(RES_K(36), RES_K(150), CAP_N(1)) // noise + filter MCFG_SN76477_DECAY_RES(RES_M(1)) // decay_res MCFG_SN76477_ATTACK_PARAMS(CAP_U(1.0), RES_K(20)) // attack_decay_cap + attack_res MCFG_SN76477_AMP_RES(RES_K(150)) // amplitude_res MCFG_SN76477_FEEDBACK_RES(RES_K(47)) // feedback_res MCFG_SN76477_VCO_PARAMS(0, CAP_N(1), RES_M(1.5)) // VCO volt + cap + res MCFG_SN76477_PITCH_VOLTAGE(0) // pitch_voltage MCFG_SN76477_SLF_PARAMS(CAP_N(47), RES_M(1)) // slf caps + res MCFG_SN76477_ONESHOT_PARAMS(CAP_N(47), RES_K(820)) // oneshot caps + res MCFG_SN76477_VCO_MODE(0) // VCO mode MCFG_SN76477_MIXER_PARAMS(0, 0, 0) // mixer A, B, C MCFG_SN76477_ENVELOPE_PARAMS(1, 0) // envelope 1, 2 MCFG_SN76477_ENABLE(1) // enable MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) MACHINE_CONFIG_END
0, /* Reset Value */ 0, /* Use Bit 0 as XOR input 0 */ 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 not inverted */ 15 /* Output bit */ }; static const discrete_dac_r1_ladder sprint4_motor_freq_DAC = { 4, /* size */ { RES_M(2.2), /* R20 */ RES_M(1), /* R23 */ RES_K(470), /* R22 */ RES_K(220) }, /* R21 */ 5.0 - 0.6, /* 5V - CR1 junction voltage */ RES_K(68), /* R24 */ 0, /* no rGnd */ CAP_U(2.2) /* C28 */ }; #define SPRINT4_MOTOR_OUT_RES (1.0 / (1.0 / RES_K(10) + 1.0 / RES_K(10) + 1.0 / RES_K(10))) static const discrete_dac_r1_ladder sprint4_motor_out_DAC = { 4, /* size */ { RES_K(10), /* R76 */
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 if (m_ready != fa) { m_fdc->set_ready_line_connected(!fa); m_fdc->ready_w(!fa); m_ready = fa; } break; case 4: // TCK m_rtc->clk_w(fa); break; case 5: // IN USE //m_floppy->inuse_w(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 motor(0); // reset floppy motor off NE555 timer timer_set(attotime::never, TIMER_ID_MOTOR); } break; case 7: // SELECT if (m_select != fa) { //m_fdc->set_select_lines_connected(fa); m_select = fa; } break; } switch (sb) { case 0: // RESF if (fb) m_fdc->soft_reset(); break; case 1: // MINI break; case 2: // _RTS m_rs232a->write_rts(fb); break; case 3: // TX m_rs232a->write_txd(fb); break; case 4: // _MSTOP if (!fb) { // turn off floppy motor motor(1); // reset floppy motor off NE555 timer timer_set(attotime::never, TIMER_ID_MOTOR); } break; case 5: // TXP m_rs232b->write_txd(fb); break; case 6: // TSTB m_rtc->stb_w(fb); break; case 7: // MME m_mmu->mme_w(fb); break; } }
RES(R50, RES_K(2.2)) RES(R51, RES_K(150)) RES(R52, RES_K(100)) RES(R53, RES_K(100)) RES(R54, RES_K(680)) RES(R55, RES_K(510)) RES(R57, 560) RES(R58, RES_K(39)) RES(R59, 560) RES(R60, RES_K(39)) RES(R61, RES_K(100)) RES(R62, RES_K(100)) RES(R63, RES_K(1)) RES(R65, RES_K(1)) RES(R65_1, RES_K(27)) RES(R66, RES_M(1)) RES(R67, RES_K(100)) RES(R68, RES_K(100)) RES(R69, RES_K(1)) RES(R70, RES_K(10)) RES(R71, RES_K(100)) RES(R72, RES_K(100)) RES(R73, RES_K(10)) RES(R74, RES_K(10)) RES(R75, RES_K(10)) RES(R76, RES_K(10)) RES(R81, 220) RES(R82, RES_M(2.2)) RES(R83, RES_K(12)) RES(R84, RES_K(1)) RES(R85, RES_M(2.2))
struct SN76477interface sheriff_sn76477_interface = { 1, { 35 }, { RES_K(36) }, /* 04 */ { RES_K(100) }, /* 05 */ { CAP_N(1) }, /* 06 */ { RES_K(620) }, /* 07 */ { CAP_U(1) }, /* 08 */ { RES_K(20) }, /* 10 */ { RES_K(150) }, /* 11 */ { RES_K(47) }, /* 12 */ { 0 }, /* 16 */ { CAP_N(1) }, /* 17 */ { RES_M(1.5) }, /* 18 */ { 0 }, /* 19 */ { RES_M(1.5) }, /* 20 */ { CAP_N(47) }, /* 21 */ { CAP_N(47) }, /* 23 */ { RES_K(560) }, /* 24 */ }; struct SN76477interface spacefev_sn76477_interface = { 1, { 35 }, { RES_K(36) }, /* 04 */ { RES_K(150) }, /* 05 */ { CAP_N(1) }, /* 06 */
static const double ATTACK_RATE = 10e-6 * 500; static const double DECAY_RATE = 10e-6 * 16000; static const sn76477_interface sheriff_sn76477_interface = { RES_K(36) , /* 04 */ RES_K(100) , /* 05 */ CAP_N(1) , /* 06 */ RES_K(620) , /* 07 */ CAP_U(1) , /* 08 */ RES_K(20) , /* 10 */ RES_K(150) , /* 11 */ RES_K(47) , /* 12 */ 0 , /* 16 */ CAP_N(1) , /* 17 */ RES_M(1.5) , /* 18 */ 0 , /* 19 */ RES_M(1.5) , /* 20 */ CAP_N(47) , /* 21 */ CAP_N(47) , /* 23 */ RES_K(560) , /* 24 */ 0, /* 22 vco */ 0, /* 26 mixer A */ 0, /* 25 mixer B */ 0, /* 27 mixer C */ 1, /* 1 envelope 1 */ 0, /* 28 envelope 2 */ 1 /* 9 enable */ };
}; 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) DISCRETE_ADJUSTMENT(FROGS_R93, 1, RES_M(1), RES_K(10), DISC_LOGADJ, 2) DISCRETE_555_MSTABLE(NODE_30, 1, FROGS_TONGUE_EN, RES_K(100), CAP_U(1), &frogsZip555m) /* Q11 & Q12 transform the voltage from the oneshot U4, to what is * needed by the 555CC circuit. Vin to R29 must be > 1V for things * to change. <=1 then The Vout of this circuit is 12V. * The Current thru R28 equals current thru R51. iR28 = iR51 * So when Vin>.5, iR51 = (Vin-.5)/39k. =0 when Vin<=.5 * So the voltage drop across R28 is vR28 = iR51 * 22k. * Finally the Vout = 12 - vR28. * Note this formula only works when Vin < 39/(22+39)*12V+1. * Which it always is, due to the 555 clamping to 12V*2/3. * The Zip effect is hard to emulate 100% due to loading effects * of the output stage on the charge stage. So I added some values * to get a similar waveshape to the breadboarded circuit.
//------------------------------------------------- // DISCRETE_SOUND( vip ) //------------------------------------------------- static const discrete_555_desc vip_ca555_a = { DISC_555_OUT_SQW | DISC_555_OUT_DC, 5, // B+ voltage of 555 DEFAULT_555_VALUES }; static DISCRETE_SOUND_START( vip ) DISCRETE_INPUT_LOGIC(NODE_01) DISCRETE_555_ASTABLE_CV(NODE_02, NODE_01, 470, (int) RES_M(1), (int) CAP_P(470), NODE_01, &vip_ca555_a) DISCRETE_OUTPUT(NODE_02, 5000) DISCRETE_SOUND_END //------------------------------------------------- // VIP_BYTEIO_PORT_INTERFACE( byteio_intf ) //------------------------------------------------- WRITE_LINE_MEMBER( vip_state::byteio_inst_w ) { if (!state) { m_byteio_data = m_byteio->in_r(); } }
0, /* Reset Value */ 4, /* Use Bit 4 as XOR input 0 */ 16, /* Use Bit 16 as XOR input 1 */ DISC_LFSR_XOR, /* Feedback stage1 is XOR */ 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 not inverted */ 12 /* Output bit */ }; static const discrete_dac_r1_ladder polaris_music_dac = {2, {RES_K(47), RES_K(12), 0,0,0,0,0,0}, 0, 0, 0, CAP_P(180)}; static const discrete_op_amp_filt_info polaris_music_op_amp_filt_info = {RES_K(580), 0, 0, RES_M(2.2), RES_M(1), CAP_U(.01), 0, 0, 0, 12, 0}; static const discrete_op_amp_filt_info polaris_nol_op_amp_filt_info = {560, RES_K(6.8), RES_K(1002), RES_M(2.2), RES_M(1), CAP_U(.22), CAP_U(.22), CAP_U(1), 0, 12, 0}; static const discrete_op_amp_filt_info polaris_noh_op_amp_filt_info = {560, RES_K(6.8), RES_K(1002), RES_M(2.2), RES_M(1), CAP_U(.001), CAP_U(.001), CAP_U(.01), 0, 12, 0}; static const discrete_op_amp_osc_info polaris_sonar_vco_info = {DISC_OP_AMP_OSCILLATOR_VCO_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP, RES_M(1), RES_K(680), RES_K(680), RES_M(1), RES_M(1), RES_K(120), RES_M(1), 0, CAP_P(180), 12}; static const discrete_op_amp_tvca_info polaris_sonar_tvca_info = { RES_M(2.7), RES_K(680), 0, RES_K(680), RES_K(1), RES_K(120), RES_K(560), 0, 0, 0, 0, CAP_U(1), 0, 0, 0, 12, 12, 12, 12, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_TRG1, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0_INV, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE}; static const discrete_op_amp_osc_info polaris_boat_mod_info = {DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP, RES_M(1), RES_K(10), RES_K(100), RES_K(120), RES_M(1), 0, 0, 0, CAP_U(.22), 12};
QBJT_EB(T6, "BC548C") // schematic says "BC548" RES(R39, 220) RES(R40, RES_K(100)) RES(R64, RES_K(4.7)) RES(R65, RES_K(4.7)) RES(R66, RES_K(1)) RES(R67, RES_K(1)) RES(R94, RES_K(10)) RES(R95, RES_K(100)) RES(R96, RES_K(4.7)) RES(R108, RES_K(10)) RES(R109, RES_K(10)) RES(R110, RES_K(10)) RES(R111, RES_K(8.2)) RES(R112, RES_K(100)) RES(R113, RES_M(1)) LM3900(U5B1) TTL_74LS14_GATE(U4A1) NET_C(ANAL5, R66.1, R67.1) NET_C(R67.2, C28.1, R40.1, T6.B) NET_C(R64.2, T6.C, U3A.3) NET_C(R65.2, U3A.2, U3A.4) NET_C(U3A.1, U4A1.Q) NET_C(U3A.5, R39.1, U5D.13) NET_C(U4A1.A, R39.2, C37.1) NET_C(R109.1, R94.2, R108.1, R95.1) NET_C(R109.2, LEVELT) NET_C(R110.2, R112.1, R111.1) NET_C(R112.2, U5D.1, C50.1, R113.1, U5B1.MINUS) NET_C(R95.2, U5B1.PLUS)
{ 50 }, { 0 }, { 0 }, { stratvox_sn76477_w }, /* SN76477 commands (not used in Route 16?) */ { 0 } }; static struct SN76477interface sn76477_interface = { 1, /* 1 chip */ { 50 }, /* mixing level pin description */ { 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 */ };
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 */ };
RES(R50, RES_K(22)) RES(R51, RES_K(150)) RES(R52, RES_K(100)) RES(R53, RES_K(100)) RES(R54, RES_K(680)) RES(R55, RES_K(510)) RES(R57, 560) RES(R58, RES_K(39)) RES(R59, 560) RES(R60, RES_K(39)) RES(R61, RES_K(100)) RES(R62, RES_K(100)) RES(R63, RES_K(1)) RES(R65, RES_K(1)) RES(R65_1, RES_K(27)) RES(R66, RES_M(1)) RES(R67, RES_K(100)) RES(R68, RES_K(100)) RES(R69, RES_K(1)) RES(R70, RES_K(10)) RES(R71, RES_K(100)) RES(R72, RES_K(100)) RES(R73, RES_K(10)) RES(R74, RES_K(10)) RES(R75, RES_K(10)) RES(R76, RES_K(10)) RES(R81, 220) RES(R82, RES_M(2.2)) RES(R83, RES_K(12)) RES(R84, RES_K(1)) RES(R85, RES_M(2.2))
}; 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) DISCRETE_ADJUSTMENT(FROGS_R93, RES_M(1), RES_K(10), DISC_LOGADJ, "R93") DISCRETE_555_MSTABLE(NODE_30, 1, FROGS_TONGUE_EN, RES_K(100), CAP_U(1), &frogsZip555m) /* Q11 & Q12 transform the voltage from the oneshot U4, to what is * needed by the 555CC circuit. Vin to R29 must be > 1V for things * to change. <=1 then The Vout of this circuit is 12V. * The Current through R28 equals current through R51. iR28 = iR51 * So when Vin>.5, iR51 = (Vin-.5)/39k. =0 when Vin<=.5 * So the voltage drop across R28 is vR28 = iR51 * 22k. * Finally the Vout = 12 - vR28. * Note this formula only works when Vin < 39/(22+39)*12V+1. * Which it always is, due to the 555 clamping to 12V*2/3. * The Zip effect is hard to emulate 100% due to loading effects * of the output stage on the charge stage. So I added some values * to get a similar waveshape to the breadboarded circuit.
if (m_p_ram[m_out_offs]) m_samples->start(0, 5); // holes } else if (m_out_offs < 0x77) { if (m_p_ram[m_out_offs]) m_samples->start(1, 0); // bumpers } else m_out_offs = 0xff; } static const sn76477_interface sn76477_intf = { RES_M(1000), /* 4 noise_res */ RES_M(1000), /* 5 filter_res */ CAP_N(0), /* 6 filter_cap */ RES_K(470), /* 7 decay_res */ CAP_N(1), /* 8 attack_decay_cap */ RES_K(22), /* 10 attack_res */ RES_K(100), /* 11 amplitude_res */ RES_K(52), /* 12 feedback_res */ 5.0, /* 16 vco_voltage */ CAP_U(0.01), /* 17 vco_cap */ RES_K(390), /* 18 vco_res */ 0.0, /* 19 pitch_voltage */ RES_M(1), /* 20 slf_res */ CAP_U(0.1), /* 21 slf_cap */ CAP_U(0.47), /* 23 oneshot_cap */ RES_K(470), /* 24 oneshot_res */
/* Fire */ DISCRETE_DAC_R1(NODE_40, NODE_32, DEFAULT_TTL_V_LOGIC_1, &spiders_fire_dac) // Fire envelope DISCRETE_MULTIPLY(NODE_41, DEFAULT_TTL_V_LOGIC_1, SPIDERS_FIRE_EN) DISCRETE_RCFILTER(NODE_42, NODE_41,RES_K(2.2),CAP_U(47)) //R11, C11 DISCRETE_TRANSFORM4(NODE_43, NODE_40, NODE_42, 2.5, 24.5,"012*3/-") DISCRETE_555_ASTABLE_CV(NODE_44, 1, RES_K(10), RES_K(22), CAP_N(100), NODE_43, &spiders_fire_555a) //R10, R18, C12 DISCRETE_MULTIPLY(NODE_45, DEFAULT_TTL_V_LOGIC_1-0.7, SPIDERS_FIRE_EN) // Diode drop D2 DISCRETE_ASWITCH(NODE_46, NODE_44, NODE_45, DISC_CD4066_THRESHOLD) /* Explosion */ DISCRETE_MULTIPLY(NODE_50, DEFAULT_TTL_V_LOGIC_1, SPIDERS_EXP_EN) DISCRETE_RCDISC5(NODE_51, 1, NODE_50, RES_M(1),CAP_U(0.47)) //R51, C8 DISCRETE_MULTIPLY(NODE_52, DEFAULT_TTL_V_LOGIC_1, NODE_32) // Noise 0/1 -> TTL DISCRETE_ASWITCH(NODE_53, NODE_52, NODE_51, DISC_CD4066_THRESHOLD) /*Super web explosion*/ DISCRETE_DAC_R1(NODE_60, NODE_32, DEFAULT_TTL_V_LOGIC_1, &spiders_web_exp_dac) DISCRETE_555_ASTABLE_CV(NODE_61, 1, RES_K(10), RES_K(22), CAP_N(22), NODE_60, &spiders_fire_555a) //R48, R47, C24 DISCRETE_MULTIPLY(NODE_62, DEFAULT_TTL_V_LOGIC_1, SPIDERS_SUPER_WEB_EXPL_EN) DISCRETE_RCDISC5(NODE_63, 1, NODE_62, RES_M(1),CAP_U(0.47)) //R9, C9 DISCRETE_ASWITCH(NODE_64, NODE_61, NODE_63, DISC_CD4066_THRESHOLD) /*Super web */ DISCRETE_555_ASTABLE_CV(NODE_70, 1, RES_K(330), 0, CAP_U(1), -1, &spiders_super_web_555a) //R46, C23 DISCRETE_MULTIPLY(NODE_71, 57/47, NODE_70) // R27, R28 DISCRETE_555_ASTABLE_CV(NODE_72, SPIDERS_SUPER_WEB_EN, RES_K(100), RES_K(330), CAP_U(0.01), NODE_71, &spiders_super_web_555a) //R22, R33, C16 DISCRETE_555_ASTABLE_CV(NODE_73, SPIDERS_X_EN, RES_K(100), RES_K(470), CAP_N(47), NODE_71, &spiders_super_web_555a) // R23, R32, C15
16, /* Bit Length */ 0, /* Reset Value */ 0, /* Use Bit 0 as XOR input 0 */ 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 not inverted */ 15 /* Output bit */ }; static const discrete_dac_r1_ladder sprint2_motor_v_dac = { 4, // size of ladder {RES_M(2.2), RES_M(1), RES_K(470), RES_K(220)}, // R5, R6, R7, R8 4.4, // 5V minus diode junction (0.6V) RES_K(68), // R9 0, // no rGnd CAP_U(10) // C17 }; static const discrete_555_cc_desc sprint2_motor_vco = { DISC_555_OUT_DC | DISC_555_OUT_SQW, 5, // B+ voltage of 555 DEFAULT_555_VALUES, 0.7 // VBE 2N3644 (Si) }; static const discrete_dac_r1_ladder sprint2_motor_out_dac =