Cheevos: Use safe memory access routines
This commit is contained in:
parent
f7f121f036
commit
bacd834840
|
@ -1399,47 +1399,31 @@ void CheevosEventHandler(const rc_runtime_event_t* runtime_event)
|
||||||
SubmitLeaderboard(runtime_event->id, runtime_event->value);
|
SubmitLeaderboard(runtime_event->id, runtime_event->value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// from cheats.cpp - do we want to move this somewhere else?
|
|
||||||
template<typename T>
|
|
||||||
static T DoMemoryRead(PhysicalMemoryAddress address)
|
|
||||||
{
|
|
||||||
T result;
|
|
||||||
|
|
||||||
if ((address & CPU::DCACHE_LOCATION_MASK) == CPU::DCACHE_LOCATION &&
|
|
||||||
(address & CPU::DCACHE_OFFSET_MASK) < CPU::DCACHE_SIZE)
|
|
||||||
{
|
|
||||||
std::memcpy(&result, &CPU::g_state.dcache[address & CPU::DCACHE_OFFSET_MASK], sizeof(result));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
address &= CPU::PHYSICAL_MEMORY_ADDRESS_MASK;
|
|
||||||
|
|
||||||
if (address < Bus::RAM_MIRROR_END)
|
|
||||||
{
|
|
||||||
std::memcpy(&result, &Bus::g_ram[address & Bus::g_ram_mask], sizeof(result));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (address >= Bus::BIOS_BASE && address < (Bus::BIOS_BASE + Bus::BIOS_SIZE))
|
|
||||||
{
|
|
||||||
std::memcpy(&result, &Bus::g_bios[address & Bus::BIOS_MASK], sizeof(result));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = static_cast<T>(0);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned CheevosPeek(unsigned address, unsigned num_bytes, void* ud)
|
unsigned CheevosPeek(unsigned address, unsigned num_bytes, void* ud)
|
||||||
{
|
{
|
||||||
switch (num_bytes)
|
switch (num_bytes)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
return ZeroExtend32(DoMemoryRead<u8>(address));
|
{
|
||||||
|
u8 value = 0;
|
||||||
|
CPU::SafeReadMemoryByte(address, &value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
return ZeroExtend32(DoMemoryRead<u16>(address));
|
{
|
||||||
|
u16 value;
|
||||||
|
CPU::SafeReadMemoryHalfWord(address, &value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
return ZeroExtend32(DoMemoryRead<u32>(address));
|
{
|
||||||
|
u32 value;
|
||||||
|
CPU::SafeReadMemoryWord(address, &value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue