From de8965097c611f45a245d65ad0b2ffa91767fad1 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Sun, 26 Feb 2012 13:42:03 +0000 Subject: [PATCH] Fixed order of timer init and save state by Sandro Ronco (no whatsnew) --- src/emu/diserial.c | 17 +++++++++++------ src/emu/diserial.h | 3 +++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/emu/diserial.c b/src/emu/diserial.c index 99accd149ac..28e09bc846f 100644 --- a/src/emu/diserial.c +++ b/src/emu/diserial.c @@ -45,11 +45,19 @@ device_serial_interface::~device_serial_interface() { } +//------------------------------------------------- +// interface_pre_start - work to be done prior to +// actually starting a device +//------------------------------------------------- + +void device_serial_interface::interface_pre_start() +{ + m_rcv_clock = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_serial_interface::rcv_timer), this)); + m_tra_clock = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_serial_interface::tra_timer), this)); +} + void device_serial_interface::set_rcv_rate(int baud) { - if(!m_rcv_clock) - m_rcv_clock = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_serial_interface::rcv_timer), this)); - m_rcv_baud = baud; receive_register_reset(); m_rcv_clock->adjust(attotime::never); @@ -57,9 +65,6 @@ void device_serial_interface::set_rcv_rate(int baud) void device_serial_interface::set_tra_rate(int baud) { - if(!m_tra_clock) - m_tra_clock = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_serial_interface::tra_timer), this)); - m_tra_baud = baud; transmit_register_reset(); m_tra_clock->adjust(attotime::never); diff --git a/src/emu/diserial.h b/src/emu/diserial.h index c54e06a08bd..32c70d10bba 100644 --- a/src/emu/diserial.h +++ b/src/emu/diserial.h @@ -123,6 +123,9 @@ protected: virtual void rcv_callback() { receive_register_update_bit(m_rcv_line); } virtual void tra_complete() { } virtual void rcv_complete() { } + + // interface-level overrides + virtual void interface_pre_start(); private: void tra_timer(void *ptr, int param); void rcv_timer(void *ptr, int param);