summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/diexec.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/diexec.h')
-rw-r--r--src/emu/diexec.h46
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