From a2993060e1aea29ce47ff6fab164fe1552669052 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 1 Oct 2022 19:52:40 +0300 Subject: [PATCH] Don't emulate "sticky" RBF interrupt bit in cycle-accurate or loopback mode. --- od-win32/serial_win32.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/od-win32/serial_win32.cpp b/od-win32/serial_win32.cpp index c0d3ed9d..c03208cb 100644 --- a/od-win32/serial_win32.cpp +++ b/od-win32/serial_win32.cpp @@ -313,8 +313,17 @@ static void serial_rx_irq(void) void serial_rethink(void) { - if (data_in_serdatr && ((currprefs.cpu_memory_cycle_exact && get_cycles() > data_in_serdatr_evt) || !currprefs.cpu_memory_cycle_exact)) { - INTREQ_INT(11, 0); + if (data_in_serdatr) { + if (currprefs.cpu_memory_cycle_exact && get_cycles() > data_in_serdatr_evt) { + data_in_serdatr = 0; + } + if (serloop_enabled) { + data_in_serdatr = 0; + } + // RBF bit is not "sticky" but without it data can be lost when using fast emulation modes and physical serial port. + if (data_in_serdatr) { + INTREQ_INT(11, 0); + } } } -- 2.47.3