]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Only ignore bad Z2/Z3 autoconfig attempts, don't halt.
authorToni Wilen <twilen@winuae.net>
Sat, 28 Mar 2026 07:31:32 +0000 (09:31 +0200)
committerToni Wilen <twilen@winuae.net>
Sat, 28 Mar 2026 07:31:32 +0000 (09:31 +0200)
expansion.cpp
include/memory.h
include/newcpu.h
memory.cpp

index c46dd062e0dd1718ba184f763a0a9d71c047b0ec..7748ce8ab0c242466a5fbccfdb8ceffff7280f3b 100644 (file)
@@ -1430,11 +1430,12 @@ static addrbank *expamem_map_uaeboard(struct autoconfig_info *aci)
        uaeboard_base = expamem_board_pointer;
        uaeboard_ram_start = UAEBOARD_WRITEOFFSET;
        uaeboard_bank.start = uaeboard_base;
-       map_banks_z2(&uaeboard_bank, uaeboard_base >> 16, 1);
-       if (currprefs.uaeboard > 1) {
-               rtarea_bank.start = uaeboard_base + 65536;
-               map_banks_z2(&rtarea_bank, (uaeboard_base + 65536) >> 16, 1);
-               ce_cachable[(uaeboard_base + 65536) >> 16] = CACHE_DISABLE_ALLOCATE;
+       if (map_banks_z2(&uaeboard_bank, uaeboard_base >> 16, 1)) {
+               if (currprefs.uaeboard > 1) {
+                       rtarea_bank.start = uaeboard_base + 65536;
+                       map_banks_z2(&rtarea_bank, (uaeboard_base + 65536) >> 16, 1);
+                       ce_cachable[(uaeboard_base + 65536) >> 16] = CACHE_DISABLE_ALLOCATE;
+               }
        }
        return &uaeboard_bank;
 }
@@ -1622,8 +1623,9 @@ static addrbank *expamem_map_fastcard(struct autoconfig_info *aci)
        uae_u32 size = ab->allocated_size;
        ab->start = start;
        if (ab->start && size) {
-               map_banks_z2(ab, ab->start >> 16, size >> 16);
-               initramboard(ab, &currprefs.fastmem[devnum]);
+               if (map_banks_z2(ab, ab->start >> 16, size >> 16)) {
+                       initramboard(ab, &currprefs.fastmem[devnum]);
+               }
        }
        return ab;
 }
@@ -1896,8 +1898,9 @@ static addrbank *expamem_map_filesys (struct autoconfig_info *aci)
        mapped_malloc(&filesys_bank);
        memcpy (filesys_bank.baseaddr, expamem, 0x3000);
        uaeboard_ram_start = UAEBOARD_WRITEOFFSET;
-       map_banks_z2(&filesys_bank, filesys_bank.start >> 16, 1);
-       expamem_map_filesys_update();
+       if (map_banks_z2(&filesys_bank, filesys_bank.start >> 16, 1)) {
+               expamem_map_filesys_update();
+       }
        return &filesys_bank;
 }
 
@@ -2068,8 +2071,9 @@ static addrbank *expamem_map_z3fastmem (struct autoconfig_info *aci)
        uae_u32 size = currprefs.z3fastmem[devnum].size;
 
        if (ab->allocated_size) {
-               map_banks_z3(ab, z3fs >> 16, size >> 16);
-               initramboard(ab, &currprefs.z3fastmem[devnum]);
+               if (map_banks_z3(ab, z3fs >> 16, size >> 16)) {
+                       initramboard(ab, &currprefs.z3fastmem[devnum]);
+               }
        }
        return ab;
 }
@@ -3997,12 +4001,12 @@ void expansion_map(void)
                filesys_bank.start = 0xe90000;
                mapped_free(&filesys_bank);
                mapped_malloc(&filesys_bank);
-               map_banks_z2(&filesys_bank, filesys_bank.start >> 16, 1);
-               expamem_init_filesys(NULL);
-               expamem_map_filesys_update();
+               if (map_banks_z2(&filesys_bank, filesys_bank.start >> 16, 1)) {
+                       expamem_init_filesys(NULL);
+                       expamem_map_filesys_update();
+               }
        }
 }
-
 static void clear_bank (addrbank *ab)
 {
        if (!ab->baseaddr || !ab->allocated_size)
index 464a8c5827b3add802dbf0c453bc53358adf56d7..544b37e29b3faf7f90c23a31aa0a0d0e17433d1d 100644 (file)
@@ -520,9 +520,9 @@ extern void memory_init (void);
 extern void memory_cleanup(void);
 extern void restore_banks(void);
 extern void map_banks (addrbank *bank, int first, int count, int realsize);
-extern void map_banks_z2(addrbank *bank, int first, int count);
+extern bool map_banks_z2(addrbank *bank, int first, int count);
 extern uae_u32 map_banks_z2_autosize(addrbank *bank, int first);
-extern void map_banks_z3(addrbank *bank, int first, int count);
+extern bool map_banks_z3(addrbank *bank, int first, int count);
 extern bool validate_banks_z2(addrbank *bank, int start, int size);
 extern bool validate_banks_z3(addrbank *bank, int start, int size);
 extern void map_banks_quick (addrbank *bank, int first, int count, int realsize);
index 076fd83db00d6dcc585b82f1233b2f3d1e0596d3..9f93a427dc5544b1d0e1b4100487272e999b53d4 100644 (file)
@@ -890,7 +890,7 @@ extern bool can_cpu_tracer (void);
 #define CPU_HALT_ACCELERATOR_CPU_FALLBACK 4
 #define CPU_HALT_ALL_CPUS_STOPPED 5
 #define CPU_HALT_FAKE_DMA 6
-#define CPU_HALT_AUTOCONFIG_CONFLICT 7
+//#define CPU_HALT_AUTOCONFIG_CONFLICT 7
 #define CPU_HALT_PCI_CONFLICT 8
 #define CPU_HALT_CPU_STUCK 9
 #define CPU_HALT_SSP_IN_NON_EXISTING_ADDRESS 10
index cc7b7ac4c613b87a229400ac1b22853699b6f004..d23dc560a0f73dbffa65fc7f463548054b68abe1 100644 (file)
@@ -3758,7 +3758,6 @@ bool validate_banks_z3(addrbank *bank, int start, int size)
 {
        if (start < 0x1000 || size <= 0) {
                error_log(_T("Z3 invalid map_banks(%s) start=%08x size=%08x\n"), bank->name, start << 16, size << 16);
-               cpu_halt(CPU_HALT_AUTOCONFIG_CONFLICT);
                return false;
        }
        if (size > 0x4000 || start + size > 0xf000) {
@@ -3775,36 +3774,34 @@ bool validate_banks_z3(addrbank *bank, int start, int size)
        return true;
 }
 
-void map_banks_z3(addrbank *bank, int start, int size)
+bool map_banks_z3(addrbank *bank, int start, int size)
 {
-       if (!validate_banks_z3(bank, start, size))
-               return;
+       if (!validate_banks_z3(bank, start, size)) {
+               return false;
+       }
        map_banks(bank, start, size, 0);
+       return true;
 }
 
 bool validate_banks_z2(addrbank *bank, int start, int size)
 {
        if (start < 0x20 || (start >= 0xa0 && start < 0xe9) || start >= 0xf0) {
                error_log(_T("Z2 map_banks(%s) with invalid start address %08X\n"), bank->name, start << 16);
-               cpu_halt(CPU_HALT_AUTOCONFIG_CONFLICT);
                return false;
        }
        if (start >= 0xe9) {
                if (start + size > 0xf0) {
                        error_log(_T("Z2 map_banks(%s) with invalid region %08x - %08X\n"), bank->name, start << 16, (start + size) << 16);
-                       cpu_halt(CPU_HALT_AUTOCONFIG_CONFLICT);
                        return false;
                }
        } else {
                if (start + size > 0xa0) {
                        error_log(_T("Z2 map_banks(%s) with invalid region %08x - %08X\n"), bank->name, start << 16, (start + size) << 16);
-                       cpu_halt(CPU_HALT_AUTOCONFIG_CONFLICT);
                        return false;
                }
        }
        if (size <= 0 || size > 0x80) {
                error_log(_T("Z2 map_banks(%s) with invalid size %08x\n"), bank->name, size);
-               cpu_halt(CPU_HALT_AUTOCONFIG_CONFLICT);
                return false;
        }
        for (int i = start; i < start + size; i++) {
@@ -3818,11 +3815,13 @@ bool validate_banks_z2(addrbank *bank, int start, int size)
 }
 
 
-void map_banks_z2 (addrbank *bank, int start, int size)
+bool map_banks_z2 (addrbank *bank, int start, int size)
 {
-       if (!validate_banks_z2(bank, start, size))
-               return;
+       if (!validate_banks_z2(bank, start, size)) {
+               return false;
+       }
        map_banks (bank, start, size, 0);
+       return true;
 }
 
 uae_u32 map_banks_z2_autosize(addrbank *bank, int start)