From 96b97767737058ae6b115fdecbd0b4877657c4d4 Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Fri, 10 Dec 2010 15:23:01 +0000 Subject: [PATCH] Adjust MC6850 receive/transmit timer periods when clocks are changed. [Curt Coder] --- src/emu/machine/6850acia.c | 32 ++++++++++++++++++++++++++++++++ src/emu/machine/6850acia.h | 4 ++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/emu/machine/6850acia.c b/src/emu/machine/6850acia.c index b1474be17a1..1e9a1042b35 100644 --- a/src/emu/machine/6850acia.c +++ b/src/emu/machine/6850acia.c @@ -728,6 +728,22 @@ void acia6850_device::rx_clock_in() } +/*------------------------------------------------- + set_rx_clock - set receiver clock +-------------------------------------------------*/ + +void acia6850_device::set_rx_clock(int clock) +{ + m_rx_clock = clock; + + if (m_rx_clock) + { + attotime rx_period = attotime_mul(ATTOTIME_IN_HZ(m_rx_clock), m_divide); + timer_adjust_periodic(m_rx_timer, rx_period, 0, rx_period); + } +} + + /*------------------------------------------------- acia6850_set_rx_clock - Set clock frequencies dynamically @@ -739,6 +755,22 @@ void acia6850_set_rx_clock(running_device *device, int clock) } +/*------------------------------------------------- + set_tx_clock - set receiver clock +-------------------------------------------------*/ + +void acia6850_device::set_tx_clock(int clock) +{ + m_tx_clock = clock; + + if (m_tx_clock) + { + attotime tx_period = attotime_mul(ATTOTIME_IN_HZ(m_tx_clock), m_divide); + timer_adjust_periodic(m_tx_timer, tx_period, 0, tx_period); + } +} + + /*------------------------------------------------- acia6850_set_tx_clock - Set clock frequencies dynamically diff --git a/src/emu/machine/6850acia.h b/src/emu/machine/6850acia.h index 0c8c1f782fb..27877031092 100644 --- a/src/emu/machine/6850acia.h +++ b/src/emu/machine/6850acia.h @@ -113,8 +113,8 @@ public: void tx_clock_in(); void rx_clock_in(); - void set_rx_clock(int clock) { m_rx_clock = clock; } - void set_tx_clock(int clock) { m_tx_clock = clock; } + void set_rx_clock(int clock); + void set_tx_clock(int clock); protected: // device-level overrides