]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Don't emulate "sticky" RBF interrupt bit in cycle-accurate or loopback mode.
authorToni Wilen <twilen@winuae.net>
Sat, 1 Oct 2022 16:52:40 +0000 (19:52 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 1 Oct 2022 16:52:40 +0000 (19:52 +0300)
od-win32/serial_win32.cpp

index c0d3ed9d12e9717f47541e5c8166cd4e065c54b8..c03208cb8848bdd426cde7f13eaa4f9d66a27c18 100644 (file)
@@ -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);
+               }
        }
 }