Make DoSafeMemoryAccess return true properly for RAM, BIOS, dcache writes

Fixes broken cheats when writing to unaligned addresses,
maybe also achievements.
This commit is contained in:
Silent 2021-09-23 20:42:41 +02:00
parent 1cc6ee4857
commit 270899dbdb
No known key found for this signature in database
GPG key ID: AE53149BB0C45AF1

View file

@ -1914,7 +1914,10 @@ static ALWAYS_INLINE bool DoSafeMemoryAccess(VirtualMemoryAddress address, u32&
{
address &= PHYSICAL_MEMORY_ADDRESS_MASK;
if ((address & DCACHE_LOCATION_MASK) == DCACHE_LOCATION)
return DoScratchpadAccess<type, size>(address, value);
{
DoScratchpadAccess<type, size>(address, value);
return true;
}
}
break;
@ -1937,16 +1940,18 @@ static ALWAYS_INLINE bool DoSafeMemoryAccess(VirtualMemoryAddress address, u32&
if (address < RAM_MIRROR_END)
{
return DoRAMAccess<type, size, true>(address, value);
DoRAMAccess<type, size, true>(address, value);
return true;
}
else if (address >= BIOS_BASE && address < (BIOS_BASE + BIOS_SIZE))
if constexpr (type == MemoryAccessType::Read)
{
return DoBIOSAccess<type, size>(static_cast<u32>(address - BIOS_BASE), value);
}
else
{
return false;
if (address >= BIOS_BASE && address < (BIOS_BASE + BIOS_SIZE))
{
DoBIOSAccess<type, size>(static_cast<u32>(address - BIOS_BASE), value);
return true;
}
}
return false;
}
bool SafeReadMemoryByte(VirtualMemoryAddress addr, u8* value)