From 2e6e2d33d6155008565d2f6c6425e98a97acb3b8 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 21 Jan 2019 16:49:51 -0500 Subject: z8: Split sio_tick into two functions (nw) --- src/devices/cpu/z8/z8.cpp | 50 ++++++++++++++++++++++++++--------------------- src/devices/cpu/z8/z8.h | 3 ++- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/devices/cpu/z8/z8.cpp b/src/devices/cpu/z8/z8.cpp index 7cf413ed4a7..1359fea831f 100644 --- a/src/devices/cpu/z8/z8.cpp +++ b/src/devices/cpu/z8/z8.cpp @@ -481,7 +481,7 @@ bool z8_device::get_serial_in() return (m_input[3] & Z8_P3_SIN) != 0; } -void z8_device::sio_tick() +void z8_device::sio_receive() { if (m_receive_started) { @@ -548,31 +548,34 @@ void z8_device::sio_tick() m_receive_count = 0; } } +} + +void z8_device::sio_transmit() +{ + if (m_transmit_sr == 0) + return; - if (m_transmit_sr != 0) + m_transmit_count = (m_transmit_count + 1) & 15; + if (m_transmit_count == 0) { - m_transmit_count = (m_transmit_count + 1) & 15; - if (m_transmit_count == 0) + m_transmit_sr >>= 1; + if (m_transmit_sr == 0) + request_interrupt(4); + else { - m_transmit_sr >>= 1; - if (m_transmit_sr == 0) - request_interrupt(4); - else + // parity replaces received bit 7 if selected + if ((m_transmit_sr >> 1) == 3 && (m_p3m & Z8_P3M_PARITY) != 0) { - // parity replaces received bit 7 if selected - if ((m_transmit_sr >> 1) == 3 && (m_p3m & Z8_P3M_PARITY) != 0) - { - if (m_transmit_parity) - m_transmit_sr |= 1; - else - m_transmit_sr &= ~1; - } - else if (BIT(m_transmit_sr, 0)) - m_transmit_parity = !m_transmit_parity; - - // serial output - p3_update_output(); + if (m_transmit_parity) + m_transmit_sr |= 1; + else + m_transmit_sr &= ~1; } + else if (BIT(m_transmit_sr, 0)) + m_transmit_parity = !m_transmit_parity; + + // serial output + p3_update_output(); } } } @@ -622,7 +625,10 @@ void z8_device::timer_end() tout_toggle(); if (T == 0 && (m_p3m & Z8_P3M_P3_SERIAL) != 0) - sio_tick(); + { + sio_receive(); + sio_transmit(); + } else request_interrupt(4 + T); diff --git a/src/devices/cpu/z8/z8.h b/src/devices/cpu/z8/z8.h index 908b7ff570d..c74f3ec839f 100644 --- a/src/devices/cpu/z8/z8.h +++ b/src/devices/cpu/z8/z8.h @@ -138,7 +138,8 @@ private: emu_timer *m_internal_timer[2]; bool get_serial_in(); - void sio_tick(); + void sio_receive(); + void sio_transmit(); template void timer_start(); template void timer_stop(); -- cgit v1.2.3