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
1 changed files with 13 additions and 8 deletions

View File

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