summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2012-09-25 08:08:26 +0000
committer Miodrag Milanovic <mmicko@gmail.com>2012-09-25 08:08:26 +0000
commit03bb4528a0b3a2265c455c068ad189c44a8723a9 (patch)
tree4849a62e3ee83fd6e60168de1006e0b7ce4fe77e
parenta68624339fd92b85cc8bd519d37d5108da9a1fae (diff)
timer - made member calls work (no whatsnew)
-rw-r--r--src/emu/timer.c5
-rw-r--r--src/emu/timer.h8
2 files changed, 8 insertions, 5 deletions
diff --git a/src/emu/timer.c b/src/emu/timer.c
index e92cf0ba0af..5fdf6f06e7a 100644
--- a/src/emu/timer.c
+++ b/src/emu/timer.c
@@ -226,6 +226,8 @@ void timer_device::device_start()
// allocate the timer
m_timer = timer_alloc();
+ m_callback.bind_relative_to(*owner());
+
// register for save states
save_item(NAME(m_first_time));
}
@@ -299,7 +301,8 @@ void timer_device::device_timer(emu_timer &timer, device_timer_id id, int param,
{
// call the real callback
int vpos = m_screen->vpos();
- (m_callback)(*this, m_ptr, vpos);
+ if (!m_callback.isnull())
+ (m_callback)(*this, m_ptr, vpos);
// advance by the increment only if we will still be within the screen bounds
if (m_increment != 0 && (vpos + m_increment) < m_screen->height())
diff --git a/src/emu/timer.h b/src/emu/timer.h
index 87c8b3845ea..8e7c5458c4f 100644
--- a/src/emu/timer.h
+++ b/src/emu/timer.h
@@ -78,15 +78,15 @@
#define MCFG_TIMER_DRIVER_ADD(_tag, _class, _callback) \
MCFG_DEVICE_ADD(_tag, TIMER, 0) \
- timer_device::static_configure_generic(*device, timer_device_expired_delegate(&_class::_callback, #_class "::" #_callback, NULL)); \
+ timer_device::static_configure_generic(*device, timer_device_expired_delegate(&_class::_callback, #_class "::" #_callback, NULL, (_class *)0)); \
#define MCFG_TIMER_DRIVER_ADD_PERIODIC(_tag, _class, _callback, _period) \
MCFG_DEVICE_ADD(_tag, TIMER, 0) \
- timer_device::static_configure_periodic(*device, timer_device_expired_delegate(&_class::_callback, #_class "::" #_callback, NULL), _period); \
+ timer_device::static_configure_periodic(*device, timer_device_expired_delegate(&_class::_callback, #_class "::" #_callback, NULL, (_class *)0), _period); \
#define MCFG_TIMER_DRIVER_ADD_SCANLINE(_tag, _class, _callback, _screen, _first_vpos, _increment) \
MCFG_DEVICE_ADD(_tag, TIMER, 0) \
- timer_device::static_configure_scanline(*device, timer_device_expired_delegate(&_class::_callback, #_class "::" #_callback, NULL), _screen, _first_vpos, _increment); \
+ timer_device::static_configure_scanline(*device, timer_device_expired_delegate(&_class::_callback, #_class "::" #_callback, NULL, (_class *)0), _screen, _first_vpos, _increment); \
#define MCFG_TIMER_MODIFY(_tag) \
MCFG_DEVICE_MODIFY(_tag)
@@ -95,7 +95,7 @@
timer_device::static_set_callback(*device, timer_device_expired_delegate(&_callback, #_callback)); \
#define MCFG_TIMER_DRIVER_CALLBACK(_class, _callback) \
- timer_device::static_set_callback(*device, timer_device_expired_delegate(&_class::_callback, #_class "::" #_callback, NULL)); \
+ timer_device::static_set_callback(*device, timer_device_expired_delegate(&_class::_callback, #_class "::" #_callback, NULL, (_class *)0)); \
#define MCFG_TIMER_START_DELAY(_start_delay) \
timer_device::static_set_start_delay(*device, _start_delay); \