]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Fix rtarea overflow in indirect mode after reset
authorToni Wilen <twilen@winuae.net>
Fri, 4 Aug 2023 16:13:17 +0000 (19:13 +0300)
committerToni Wilen <twilen@winuae.net>
Fri, 4 Aug 2023 16:13:17 +0000 (19:13 +0300)
autoconf.cpp
devices.cpp

index 4a1eb447e4467fd17ca1dc025cd5c160509058a0..fddfaa62c97909e24eb2465ab31d0cde5c7dda7d 100644 (file)
@@ -327,6 +327,11 @@ static void REGPARAM2 rtarea_lput (uaecptr addr, uae_u32 value)
        }
 }
 
+static int rt_addr;
+static int rt_straddr;
+static int rt_addr_restart;
+static bool rt_addr_reset;
+
 void rtarea_reset(void)
 {
        uae_u8 *p = rtarea_bank.baseaddr;
@@ -336,6 +341,11 @@ void rtarea_reset(void)
                memset(p + RTAREA_HEARTBEAT, 0, 0x10000 - RTAREA_HEARTBEAT);
                memset(p + RTAREA_VARIABLES, 0, RTAREA_VARIABLES_SIZE);
        }
+       if (rt_addr_reset) {
+               rt_addr_reset = false;
+               rt_addr_restart = rt_addr;
+       }
+       rt_addr = rt_addr_restart;
        trap_reset();
        absolute_rom_address = 0;
 }
@@ -344,9 +354,6 @@ void rtarea_reset(void)
 * scratch paper
 */
 
-static int rt_addr;
-static int rt_straddr;
-
 uae_u32 addr (int ptr)
 {
        return (uae_u32)ptr + rtarea_base;
@@ -586,6 +593,7 @@ void rtarea_init(void)
 
        rt_straddr = 0xFF00 - 2;
        rt_addr = 0;
+       rt_addr_reset = true;
 
        rt_trampoline_ptr = rtarea_base + RTAREA_TRAMPOLINE;
        trap_entry = 0;
index 7da93ac6463c21df9db51d791500ecd550f32edf..f527fa68b8352cd5881cae2f8d3ce0b48e81b54d 100644 (file)
@@ -183,6 +183,9 @@ void devices_reset(int hardreset)
        init_eventtab();
        init_shm();
        memory_reset();
+#ifdef AUTOCONFIG
+       rtarea_reset();
+#endif
        DISK_reset();
        CIA_reset();
        a1000_reset();
@@ -226,9 +229,6 @@ void devices_reset(int hardreset)
        dongle_reset();
        sampler_init();
        device_func_reset();
-#ifdef AUTOCONFIG
-       rtarea_reset();
-#endif
 #ifdef RETROPLATFORM
        rp_reset();
 #endif