diff options
| author | 2017-11-14 23:34:11 -0500 | |
|---|---|---|
| committer | 2017-11-14 23:34:11 -0500 | |
| commit | 50637d602b1dcb0d5f51b2557031ffdf8ccf42db (patch) | |
| tree | 9d567f4c672f3cbc5250dc43f4eb85c1e187e9db /src/emu/diexec.cpp | |
| parent | eff0a95e89a2ce322be6cdf43ae0c3c02f2db9ae (diff) | |
Replace driver_device::generic_pulse_irq_line with device_execute_interface::pulse_input_line (nw)
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 |
