From 540f628384370259d345eeca11e9d245432ea329 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Thu, 19 Nov 2015 16:43:11 +0200 Subject: [PATCH] If Blizzard RAM allocation fails in non-JIT compatible special case mode, halve memory size and try again instead of crashing. --- cpuboard.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/cpuboard.cpp b/cpuboard.cpp index bf83fd4d..ecb538d4 100644 --- a/cpuboard.cpp +++ b/cpuboard.cpp @@ -1521,6 +1521,8 @@ void cpuboard_init(void) mapped_malloc(&blizzardea_bank); } else if (is_blizzard() || is_blizzardppc()) { +retry: + cpuboard_size = currprefs.cpuboardmem1_size; if (cpuboard_size < 256 * 1024 * 1024) { blizzardram_bank.start = BLIZZARD_RAM_BASE_48; blizzardram_bank.allocated = cpuboard_size; @@ -1559,8 +1561,16 @@ void cpuboard_init(void) blizzardram_bank.allocated, UAE_VM_32BIT, UAE_VM_READ_WRITE); #else blizzardram_bank.baseaddr = xmalloc(uae_u8, blizzardram_bank.allocated); + if (!blizzardram_bank.baseaddr) { + write_log(_T("MMAN: blizzardram_bank %d MB allocation failed\n"), blizzardram_bank.allocated / (1024 * 1024)); + if (currprefs.cpuboardmem1_size > 16 * 1024 * 1024) { + currprefs.cpuboardmem1_size /= 2; + changed_prefs.cpuboardmem1_size = currprefs.cpuboardmem1_size; + goto retry; + } + } #endif - write_log("MMAN: Allocated %d bytes (%d MB) for blizzardram_bank at %p\n", + write_log(_T("MMAN: Allocated %d bytes (%d MB) for blizzardram_bank at %p\n"), blizzardram_bank.allocated, blizzardram_bank.allocated / (1024 * 1024), blizzardram_bank.baseaddr); -- 2.47.3