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); }