z8: Add optional logging for SIO

This commit is contained in:
AJR 2020-08-23 20:36:33 -04:00
parent 73759930bf
commit deb674f743

View File

@ -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)