diff options
Diffstat (limited to 'src/emu/diexec.cpp')
-rw-r--r-- | src/emu/diexec.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/emu/diexec.cpp b/src/emu/diexec.cpp index e43613b0302..0958108fe42 100644 --- a/src/emu/diexec.cpp +++ b/src/emu/diexec.cpp @@ -695,6 +695,48 @@ TIMER_CALLBACK_MEMBER(device_execute_interface::trigger_periodic_interrupt) } +//------------------------------------------------- +// irq_pulse_clear - clear a "pulsed" input line +//------------------------------------------------- + +TIMER_CALLBACK_MEMBER(device_execute_interface::irq_pulse_clear) +{ + int irqline = param; + set_input_line(irqline, CLEAR_LINE); +} + + +//------------------------------------------------- +// pulse_input_line - "pulse" an input line by +// asserting it and then clearing it later +//------------------------------------------------- + +void device_execute_interface::pulse_input_line(int irqline, const attotime &duration) +{ + assert(duration > attotime::zero); + set_input_line(irqline, ASSERT_LINE); + + attotime target_time = local_time() + duration; + m_scheduler->timer_set(target_time - m_scheduler->time(), timer_expired_delegate(FUNC(device_execute_interface::irq_pulse_clear), this), irqline); +} + + +//------------------------------------------------- +// pulse_input_line_and_vector - "pulse" an +// input line by asserting it and then clearing it +// later, specifying a vector +//------------------------------------------------- + +void device_execute_interface::pulse_input_line_and_vector(int irqline, int vector, const attotime &duration) +{ + assert(duration > attotime::zero); + set_input_line_and_vector(irqline, ASSERT_LINE, vector); + + attotime target_time = local_time() + duration; + m_scheduler->timer_set(target_time - m_scheduler->time(), timer_expired_delegate(FUNC(device_execute_interface::irq_pulse_clear), this), irqline); +} + + //************************************************************************** // DEVICE INPUT |