diff --git a/ARMeilleure/Memory/MemoryManager.cs b/ARMeilleure/Memory/MemoryManager.cs index c3f586aadc..f813bd7e73 100644 --- a/ARMeilleure/Memory/MemoryManager.cs +++ b/ARMeilleure/Memory/MemoryManager.cs @@ -268,33 +268,34 @@ namespace ARMeilleure.Memory while (address < endAddress) { - if (IsValidPosition((long)address)) + // If the address is invalid, we stop and consider all the remaining memory + // as not modified (since the address is invalid, we can't check, and technically + // the memory doesn't exist). + if (!IsValidPosition((long)address)) { - byte* ptr = ((byte**)_pageTable)[address >> PageBits]; + break; + } - ulong ptrUlong = (ulong)ptr; + byte* ptr = ((byte**)_pageTable)[address >> PageBits]; - if ((ptrUlong & idMask) == 0) - { - // Modified. - currSize += PageSize; + ulong ptrUlong = (ulong)ptr; - SetPtEntryFlag((long)address, (long)idMask); - } - else - { - if (currSize != 0) - { - ranges.Add((currAddr, currSize)); - } + if ((ptrUlong & idMask) == 0) + { + // Modified. + currSize += PageSize; - currAddr = address + PageSize; - currSize = 0; - } + SetPtEntryFlag((long)address, (long)idMask); } else { - currSize += PageSize; + if (currSize != 0) + { + ranges.Add((currAddr, currSize)); + } + + currAddr = address + PageSize; + currSize = 0; } address += PageSize;