From deb674f74309b64f2a06d72841075c5ab9ff40eb Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 23 Aug 2020 20:36:33 -0400 Subject: z8: Add optional logging for SIO --- src/devices/cpu/z8/z8.cpp | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/devices/cpu/z8/z8.cpp b/src/devices/cpu/z8/z8.cpp index f0660d19b03..c0855782adb 100644 --- a/src/devices/cpu/z8/z8.cpp +++ b/src/devices/cpu/z8/z8.cpp @@ -27,6 +27,13 @@ #include "z8dasm.h" #include "debugger.h" +#define LOG_TIMER (1 << 1U) +#define LOG_RECEIVE (1 << 2U) +#define LOG_TRANSMIT (1 << 3U) + +#define VERBOSE 0 +#include "logmacro.h" + /*************************************************************************** CONSTANTS ***************************************************************************/ @@ -502,6 +509,7 @@ void z8_device::sio_receive() // start bit validated m_receive_sr |= 1 << 9; m_receive_parity = false; + LOGMASKED(LOG_RECEIVE, "Start bit validated\n"); } else { @@ -524,6 +532,7 @@ void z8_device::sio_receive() request_interrupt(3); m_receive_started = false; m_receive_count = 0; + LOGMASKED(LOG_RECEIVE, "Character received: %02X\n", m_receive_buffer); } else { @@ -533,11 +542,14 @@ void z8_device::sio_receive() // parity replaces received bit 7 if selected if (BIT(m_receive_sr, 1) && (m_p3m & Z8_P3M_PARITY) != 0) { + LOGMASKED(LOG_RECEIVE, "%d parity bit shifted in\n", BIT(m_receive_sr, 9)); if (m_receive_parity) m_receive_sr |= 1 << 9; else m_receive_sr &= ~(1 << 9); } + else + LOGMASKED(LOG_RECEIVE, "%d data bit shifted in\n", BIT(m_receive_sr, 9)); } } } @@ -550,6 +562,7 @@ void z8_device::sio_receive() m_receive_sr |= 1 << 9; else if (BIT(m_receive_sr, 8)) { + LOGMASKED(LOG_RECEIVE, "Start bit noticed\n"); m_receive_started = true; m_receive_sr = 0; m_receive_count = 0; @@ -567,7 +580,10 @@ void z8_device::sio_transmit() { m_transmit_sr >>= 1; if (m_transmit_sr == 0) + { + LOGMASKED(LOG_TRANSMIT, "Transmit register empty\n"); request_interrupt(4); + } else { // parity replaces received bit 7 if selected @@ -577,9 +593,15 @@ void z8_device::sio_transmit() m_transmit_sr |= 1; else m_transmit_sr &= ~1; + LOGMASKED(LOG_TRANSMIT, "%d parity bit shifted out\n", BIT(m_transmit_sr, 0)); + } + else + { + LOGMASKED(LOG_TRANSMIT, "%d %s bit shifted out\n", BIT(m_transmit_sr, 0), + BIT(m_transmit_sr, 10) ? "start" : m_transmit_sr > 3 ? "data" : "stop"); + if (BIT(m_transmit_sr, 0)) + m_transmit_parity = !m_transmit_parity; } - else if (BIT(m_transmit_sr, 0)) - m_transmit_parity = !m_transmit_parity; // serial output p3_update_output(); @@ -594,6 +616,8 @@ uint8_t z8_device::sio_read() void z8_device::sio_write(uint8_t data) { + LOGMASKED(LOG_TRANSMIT, "(%04X): Character to transmit: %02X\n", m_ppc, data); + // overwrite shift register with data + 1 start bit + 2 stop bits m_transmit_sr = (m_transmit_sr & 1) | (uint16_t(data) << 2) | (3 << 10); m_transmit_parity = false; @@ -727,7 +751,7 @@ void z8_device::tmr_write(uint8_t data) { unsigned prescaler = (m_pre[0] >> 2) ? (m_pre[0] >> 2) : 64; unsigned count = (m_t[0] ? m_t[0] : 256) * prescaler; - logerror("(%04X): Load T0 at %.2f Hz\n", m_ppc, clock() / 8.0 / count); + LOGMASKED(LOG_TIMER, "(%04X): Load T0 at %.2f Hz\n", m_ppc, clock() / 8.0 / count); } if ((data & Z8_TMR_TOUT_MASK) == Z8_TMR_TOUT_T0) @@ -751,7 +775,7 @@ void z8_device::tmr_write(uint8_t data) { unsigned prescaler = (m_pre[1] >> 2) ? (m_pre[1] >> 2) : 64; unsigned count = (m_t[1] ? m_t[1] : 256) * prescaler; - logerror("(%04X): Load T1 at %.2f Hz\n", m_ppc, clock() / 8.0 / count); + LOGMASKED(LOG_TIMER, "(%04X): Load T1 at %.2f Hz\n", m_ppc, clock() / 8.0 / count); } if ((data & Z8_TMR_TOUT_MASK) == Z8_TMR_TOUT_T1) -- cgit v1.2.3