From b540b437ee56fd7e140b3d12df1a45d88cac45e7 Mon Sep 17 00:00:00 2001 From: flyinghead Date: Thu, 4 Jul 2019 09:36:22 +0200 Subject: [PATCH] win32: unprotect ram regions individually in blockmanager fixes abort when starting game in windows --- core/hw/sh4/dyna/blockmanager.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/hw/sh4/dyna/blockmanager.cpp b/core/hw/sh4/dyna/blockmanager.cpp index 008345abe..1a72a7219 100644 --- a/core/hw/sh4/dyna/blockmanager.cpp +++ b/core/hw/sh4/dyna/blockmanager.cpp @@ -408,7 +408,18 @@ void bm_Reset() protected_blocks = 0; unprotected_blocks = 0; - mem_region_unlock(virt_ram_base + 0x0C000000, 0x10000000 - 0x0C000000); + // Windows cannot lock/unlock a region spanning more than one VirtualAlloc or MapViewOfFile + // so we have to unlock each region individually + // No need for this mess in 4GB mode since windows doesn't use it +#if RAM_SIZE == 16 * 1024 * 1024 + mem_region_unlock(virt_ram_base + 0x0C000000, RAM_SIZE); + mem_region_unlock(virt_ram_base + 0x0D000000, RAM_SIZE); + mem_region_unlock(virt_ram_base + 0x0E000000, RAM_SIZE); + mem_region_unlock(virt_ram_base + 0x0F000000, RAM_SIZE); +#else + mem_region_unlock(virt_ram_base + 0x0C000000, RAM_SIZE); + mem_region_unlock(virt_ram_base + 0x0E000000, RAM_SIZE); +#endif if (_nvmem_4gb_space()) { mem_region_unlock(virt_ram_base + 0x8C000000, 0x90000000 - 0x8C000000);