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;
}
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;
}
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;
}
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;
}
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)
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);
#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
{
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) {
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++) {
}
-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)