From: Toni Wilen Date: Fri, 4 Aug 2023 16:13:17 +0000 (+0300) Subject: Fix rtarea overflow in indirect mode after reset X-Git-Tag: 5.1.0~135 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=0e97986b0644d1b42d8e7cedac7b2a9cf42ab042;p=francis%2Fwinuae.git Fix rtarea overflow in indirect mode after reset --- 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