From: Toni Wilen Date: Sat, 28 Mar 2026 07:31:32 +0000 (+0200) Subject: Only ignore bad Z2/Z3 autoconfig attempts, don't halt. X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=1a315db09da6bebf81e76decd7afb88bfb60e494;p=francis%2Fwinuae.git Only ignore bad Z2/Z3 autoconfig attempts, don't halt. --- diff --git a/expansion.cpp b/expansion.cpp index c46dd062..7748ce8a 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -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) diff --git a/include/memory.h b/include/memory.h index 464a8c58..544b37e2 100644 --- a/include/memory.h +++ b/include/memory.h @@ -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); diff --git a/include/newcpu.h b/include/newcpu.h index 076fd83d..9f93a427 100644 --- a/include/newcpu.h +++ b/include/newcpu.h @@ -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 diff --git a/memory.cpp b/memory.cpp index cc7b7ac4..d23dc560 100644 --- a/memory.cpp +++ b/memory.cpp @@ -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)