]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Map Z2/Z3 autoconfig RAM boards immediately because JIT does not like memory disappea...
authorToni Wilen <twilen@winuae.net>
Sun, 16 Nov 2025 11:42:32 +0000 (13:42 +0200)
committerToni Wilen <twilen@winuae.net>
Sun, 16 Nov 2025 11:42:32 +0000 (13:42 +0200)
memory.cpp

index eee381093456feff3c38d1f9c41864cdf56d8609..cc7b7ac4c613b87a229400ac1b22853699b6f004 100644 (file)
@@ -2448,8 +2448,9 @@ bool mapped_malloc (addrbank *ab)
 static void init_mem_banks (void)
 {
        // unsigned so i << 16 won't overflow to negative when i >= 32768
-       for (unsigned int i = 0; i < MEMORY_BANKS; i++)
+       for (unsigned int i = 0; i < MEMORY_BANKS; i++) {
                put_mem_bank (i << 16, &dummy_bank, 0);
+       }
 #ifdef NATMEM_OFFSET
        delete_shmmaps (0, 0xFFFF0000);
 #endif
@@ -3249,15 +3250,17 @@ void memory_reset (void)
                        map_banks_set(&kickmem_bank, addr, 8, 0);
        }
 
-       if (a1000_bootrom)
+       if (a1000_bootrom) {
                a1000_handle_kickstart (1);
+       }
 
 #ifdef AUTOCONFIG
        expansion_map();
 #endif
 
-       if (a3000_f0)
+       if (a3000_f0) {
                map_banks_set(&extendedkickmem_bank, 0xf0, 1, 0);
+       }
 
        /* Map the chipmem into all of the lower 8MB */
        map_overlay (1);
@@ -3285,8 +3288,9 @@ void memory_reset (void)
        }
 
 #ifdef AUTOCONFIG
-       if ((need_uae_boot_rom (&currprefs) && currprefs.uaeboard == 0) || currprefs.uaeboard == 1)
+       if ((need_uae_boot_rom (&currprefs) && currprefs.uaeboard == 0) || currprefs.uaeboard == 1) {
                map_banks_set(&rtarea_bank, rtarea_base >> 16, 1, 0);
+       }
 #endif
 
        if ((cloanto_rom || currprefs.cs_ksmirror_e0) && (currprefs.maprom != 0xe00000) && !extendedkickmem_type) {
@@ -3351,6 +3355,18 @@ void memory_reset (void)
                }
        }
 
+       // Map Z2/Z3 autoconfig RAM boards immediately because JIT does not like memory disappearing under it.
+       if (currprefs.cachesize) {
+               for (int i = 0; i < MAX_RAM_BOARDS; i++) {
+                       if (fastmem_bank[i].start && fastmem_bank[i].allocated_size) {
+                               map_banks_z2(&fastmem_bank[i], fastmem_bank[i].start >> 16, fastmem_bank[i].allocated_size >> 16);
+                       }
+                       if (z3fastmem_bank[i].start && z3fastmem_bank[i].allocated_size) {
+                               map_banks_z3(&z3fastmem_bank[i], z3fastmem_bank[i].start >> 16, z3fastmem_bank[i].allocated_size >> 16);
+                       }
+               }
+       }
+
        if (mem_hardreset) {
                memory_clear ();
        }