From 6cba98b70ae490621f65a73860226a869de3f842 Mon Sep 17 00:00:00 2001 From: David Guillen Fandos Date: Sun, 12 May 2019 00:02:24 +0200 Subject: [PATCH] Allocate missing SH4CB and make lock more forgiving. --- core/windows/win_vmem.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/windows/win_vmem.cpp b/core/windows/win_vmem.cpp index 32e250a50..2e456198c 100644 --- a/core/windows/win_vmem.cpp +++ b/core/windows/win_vmem.cpp @@ -12,13 +12,13 @@ // The implementation allows it to be empty (that is, to not lock memory). void VLockedMemory::LockRegion(unsigned offset, unsigned size) { - verify(offset + size < this->size && size != 0); + //verify(offset + size < this->size && size != 0); DWORD old; VirtualProtect(&data[offset], size, PAGE_READONLY, &old); } void VLockedMemory::UnLockRegion(unsigned offset, unsigned size) { - verify(offset + size <= this->size && size != 0); + //verify(offset + size <= this->size && size != 0); DWORD old; VirtualProtect(&data[offset], size, PAGE_READWRITE, &old); } @@ -70,6 +70,12 @@ void vmem_platform_create_mappings(const vmem_mapping *vmem_maps, unsigned numma // Unmap the whole section VirtualFree(base_alloc, 0, MEM_RELEASE); + // Map the SH4CB block too + void *base_ptr = VirtualAlloc(base_alloc, sizeof(Sh4RCB), MEM_RESERVE, PAGE_NOACCESS); + verify(base_ptr == base_alloc); + void *cntx_ptr = VirtualAlloc((u8*)p_sh4rcb + sizeof(p_sh4rcb->fpcb), sizeof(Sh4RCB) - sizeof(p_sh4rcb->fpcb), MEM_COMMIT, PAGE_READWRITE); + verify(cntx_ptr == (u8*)p_sh4rcb + sizeof(p_sh4rcb->fpcb)); + for (unsigned i = 0; i < nummaps; i++) { unsigned address_range_size = vmem_maps[i].end_address - vmem_maps[i].start_address; DWORD protection = vmem_maps[i].allow_writes ? (FILE_MAP_READ | FILE_MAP_WRITE) : FILE_MAP_READ;