diff options
Diffstat (limited to 'src/emu/diexec.h')
-rw-r--r-- | src/emu/diexec.h | 46 |
1 files changed, 17 insertions, 29 deletions
diff --git a/src/emu/diexec.h b/src/emu/diexec.h index 663cc6ddb1c..056033b95c6 100644 --- a/src/emu/diexec.h +++ b/src/emu/diexec.h @@ -114,53 +114,41 @@ public: // inline configuration helpers void set_disable() { m_disabled = true; } - template <typename Object> void set_vblank_int(Object &&cb, const char *tag) - { - m_vblank_interrupt = std::forward<Object>(cb); - m_vblank_interrupt_screen = tag; - } - void set_vblank_int(device_interrupt_delegate callback, const char *tag) + + template <typename... T> void set_vblank_int(const char *tag, T &&... args) { - m_vblank_interrupt = callback; + m_vblank_interrupt.set(std::forward<T>(args)...); m_vblank_interrupt_screen = tag; } - template <class FunctionClass> void set_vblank_int(const char *tag, const char *devname, void (FunctionClass::*callback)(device_t &), const char *name) + void remove_vblank_int() { - set_vblank_int(device_interrupt_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)), tag); - } - template <class FunctionClass> void set_vblank_int(const char *tag, void (FunctionClass::*callback)(device_t &), const char *name) - { - set_vblank_int(device_interrupt_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)), tag); + m_vblank_interrupt = device_interrupt_delegate(*this); + m_vblank_interrupt_screen = nullptr; } - template <typename Object> void set_periodic_int(Object &&cb, const attotime &rate) + template <typename F> void set_periodic_int(F &&cb, const char *name, const attotime &rate) { - m_timed_interrupt = std::forward<Object>(cb); + m_timed_interrupt.set(std::forward<F>(cb), name); m_timed_interrupt_period = rate; } - void set_periodic_int(device_interrupt_delegate callback, const attotime &rate) + template <typename T, typename F> void set_periodic_int(T &&target, F &&cb, const char *name, const attotime &rate) { - m_timed_interrupt = callback; + m_timed_interrupt.set(std::forward<T>(target), std::forward<F>(cb), name); m_timed_interrupt_period = rate; } - template <class FunctionClass> void set_periodic_int(const char *devname, void (FunctionClass::*callback)(device_t &), const char *name, const attotime &rate) - { - set_periodic_int(device_interrupt_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)), rate); - } - template <class FunctionClass> void set_periodic_int(void (FunctionClass::*callback)(device_t &), const char *name, const attotime &rate) + void remove_periodic_int() { - set_periodic_int(device_interrupt_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)), rate); + m_timed_interrupt = device_interrupt_delegate(*this); + m_timed_interrupt_period = attotime(); } - template <typename Object> void set_irq_acknowledge_callback(Object &&cb) { m_driver_irq = std::forward<Object>(cb); } - void set_irq_acknowledge_callback(device_irq_acknowledge_delegate callback) { m_driver_irq = callback; } - template <class FunctionClass> void set_irq_acknowledge_callback(const char *devname, int (FunctionClass::*callback)(device_t &, int), const char *name) + template <typename... T> void set_irq_acknowledge_callback(T &&... args) { - set_irq_acknowledge_callback(device_irq_acknowledge_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr))); + m_driver_irq.set(std::forward<T>(args)...); } - template <class FunctionClass> void set_irq_acknowledge_callback(int (FunctionClass::*callback)(device_t &, int), const char *name) + void remove_irq_acknowledge_callback() { - set_irq_acknowledge_callback(device_irq_acknowledge_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr))); + m_driver_irq = device_irq_acknowledge_delegate(*this); } // execution management |