summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Curt Coder <curtcoder@mail.com>2026-03-31 13:19:32 +0300
committer Curt Coder <curtcoder@mail.com>2026-03-31 13:19:32 +0300
commita346ba0af1c58d662e8102e0985e6f71c34f01d0 (patch)
treef5a118edf6b05d6ee224b47f273e2567781b3504
parent58098400869760dc3f6261a95139de8fec69d246 (diff)
z8536: Take into account data path polarity on port writes and bit matching. [Curt Coder]
-rw-r--r--src/devices/machine/z8536.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/devices/machine/z8536.cpp b/src/devices/machine/z8536.cpp
index d34a49f3a89..74d38e79fe8 100644
--- a/src/devices/machine/z8536.cpp
+++ b/src/devices/machine/z8536.cpp
@@ -549,15 +549,13 @@ void cio_base_device::write_register(offs_t offset, u8 data)
break;
case PORT_A_DATA:
- // TODO: take data path polarity into account
m_output[PORT_A] = data;
- m_write_pa(data);
+ m_write_pa(data ^ m_register[PORT_A_DATA_PATH_POLARITY]);
break;
case PORT_B_DATA:
- // TODO: take data path polarity into account
m_output[PORT_B] = data;
- m_write_pb(data);
+ m_write_pb(data ^ m_register[PORT_B_DATA_PATH_POLARITY]);
break;
case PORT_C_DATA:
@@ -566,8 +564,7 @@ void cio_base_device::write_register(offs_t offset, u8 data)
m_output[PORT_C] = (m_output[PORT_C] & mask) | ((data & 0x0f) & (mask ^ 0xff));
- // TODO: take data path polarity into account
- m_write_pc(m_output[PORT_C]);
+ m_write_pc(m_output[PORT_C] ^ m_register[PORT_C_DATA_PATH_POLARITY]);
}
break;
@@ -866,12 +863,15 @@ void cio_base_device::match_pattern(int port)
u8 pt = m_register[PORT_A_PATTERN_TRANSITION + (port << 3)];
u8 pp = m_register[PORT_A_PATTERN_POLARITY + (port << 3)];
+ u8 dpp = m_register[PORT_A_DATA_PATH_POLARITY + (port << 3)];
+
if (pt) {
logerror("%s: Z8536 Port %c Pattern Transition mode not implemented\n", machine().describe_context(), 'A' + port);
return;
}
u8 data = (m_input[port] & ddr) | (m_output[port] & ~ddr);
+ data ^= dpp;
u8 match = 0;
for (int bit = 0; bit < 8; bit++) {