From 0e97986b0644d1b42d8e7cedac7b2a9cf42ab042 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Fri, 4 Aug 2023 19:13:17 +0300 Subject: [PATCH] Fix rtarea overflow in indirect mode after reset --- autoconf.cpp | 14 +++++++++++--- devices.cpp | 6 +++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/autoconf.cpp b/autoconf.cpp index 4a1eb447..fddfaa62 100644 --- a/autoconf.cpp +++ b/autoconf.cpp @@ -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; diff --git a/devices.cpp b/devices.cpp index 7da93ac6..f527fa68 100644 --- a/devices.cpp +++ b/devices.cpp @@ -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 -- 2.47.3