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);