From 32a2633ba75c3df56baa475f684a995bc910f6e6 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Tue, 4 Mar 2025 20:10:54 +0100 Subject: 6525tpi: clear latches on write to portc in interrupt mode --- src/devices/machine/6525tpi.cpp | 28 +++++++++++----------------- src/devices/machine/6525tpi.h | 4 ---- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/src/devices/machine/6525tpi.cpp b/src/devices/machine/6525tpi.cpp index cffb9ba5f50..addebf837b1 100644 --- a/src/devices/machine/6525tpi.cpp +++ b/src/devices/machine/6525tpi.cpp @@ -476,7 +476,18 @@ void tpi6525_device::write(offs_t offset, uint8_t data) m_port_c = data; if (!INTERRUPT_MODE) + { m_out_pc_cb((offs_t)0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff)); + } + else + { + // clear latches + if (BIT(data, 0) == 0) m_irq_level[0] = 1; + if (BIT(data, 1) == 0) m_irq_level[1] = 1; + if (BIT(data, 2) == 0) m_irq_level[2] = 1; + if (BIT(data, 3) == 0) m_irq_level[3] = INTERRUPT3_RISING_EDGE ? 0 : 1; + if (BIT(data, 4) == 0) m_irq_level[4] = INTERRUPT4_RISING_EDGE ? 0 : 1; + } break; case 3: @@ -532,20 +543,3 @@ void tpi6525_device::port_line_w(uint8_t &port, int line, int state) port &= ~(1 << line); port |= state << line; } - -/* this should probably be done better, needed for amigacd.c */ - -uint8_t tpi6525_device::get_ddr_a() -{ - return m_ddr_a; -} - -uint8_t tpi6525_device::get_ddr_b() -{ - return m_ddr_b; -} - -uint8_t tpi6525_device::get_ddr_c() -{ - return m_ddr_c; -} diff --git a/src/devices/machine/6525tpi.h b/src/devices/machine/6525tpi.h index 9aefd8a4a2a..c2487bde39b 100644 --- a/src/devices/machine/6525tpi.h +++ b/src/devices/machine/6525tpi.h @@ -78,10 +78,6 @@ public: void pb6_w(int state) { port_line_w(m_in_b, 6, state); } void pb7_w(int state) { port_line_w(m_in_b, 7, state); } - uint8_t get_ddr_a(); - uint8_t get_ddr_b(); - uint8_t get_ddr_c(); - protected: // device-level overrides virtual void device_start() override ATTR_COLD; -- cgit v1.2.3-70-g09d2