Core: add option to apply memory patch to not store the existing value (used during locking)

This commit is contained in:
iwubcode 2022-12-23 11:57:31 -06:00
parent 190cf5af30
commit 31bf9d0019
2 changed files with 13 additions and 6 deletions

View File

@ -24,7 +24,7 @@
#include "Core/PowerPC/PPCSymbolDB.h"
#include "Core/PowerPC/PowerPC.h"
void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch)
void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch, bool store_existing_value)
{
if (patch.value.empty())
return;
@ -36,9 +36,16 @@ void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch)
for (u32 offset = 0; offset < size; ++offset)
{
const u8 value = PowerPC::HostRead_U8(address + offset);
PowerPC::HostWrite_U8(patch.value[offset], address + offset);
patch.value[offset] = value;
if (store_existing_value)
{
const u8 value = PowerPC::HostRead_U8(address + offset);
PowerPC::HostWrite_U8(patch.value[offset], address + offset);
patch.value[offset] = value;
}
else
{
PowerPC::HostWrite_U8(patch.value[offset], address + offset);
}
if (((address + offset) % 4) == 3)
PowerPC::ScheduleInvalidateCacheThreadSafe(Common::AlignDown(address + offset, 4));
@ -53,7 +60,7 @@ void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch)
void PPCPatches::ApplyExistingPatch(std::size_t index)
{
auto& patch = m_patches[index];
ApplyMemoryPatch(patch);
ApplyMemoryPatch(patch, false);
}
void PPCPatches::Patch(std::size_t index)

View File

@ -12,7 +12,7 @@
#include "Common/DebugInterface.h"
#include "Core/NetworkCaptureLogger.h"
void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch);
void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch, bool store_existing_value = true);
class PPCPatches final : public Common::Debug::MemoryPatches
{