HLE: Make naming closer to the current coding style

This commit is contained in:
Sepalani 2020-08-27 22:01:04 +04:00
parent e0605d7911
commit 6b05e48bd6
1 changed files with 37 additions and 38 deletions

View File

@ -21,23 +21,22 @@
namespace HLE namespace HLE
{ {
using namespace PowerPC; using HookFunction = void (*)();
typedef void (*TPatchFunction)(); // Map addresses to the HLE hook function id
static std::map<u32, u32> s_hooked_addresses;
static std::map<u32, u32> s_original_instructions; struct Hook
struct SPatch
{ {
char m_szPatchName[128]; char name[128];
TPatchFunction PatchFunction; HookFunction function;
HookType type; HookType type;
HookFlag flags; HookFlag flags;
}; };
// clang-format off // clang-format off
constexpr std::array<SPatch, 23> OSPatches{{ constexpr std::array<Hook, 23> os_patches{{
// Placeholder, OSPatches[0] is the "non-existent function" index // Placeholder, os_patches[0] is the "non-existent function" index
{"FAKE_TO_SKIP_0", HLE_Misc::UnimplementedFunction, HookType::Replace, HookFlag::Generic}, {"FAKE_TO_SKIP_0", HLE_Misc::UnimplementedFunction, HookType::Replace, HookFlag::Generic},
// Name doesn't matter, installed in CBoot::BootUp() // Name doesn't matter, installed in CBoot::BootUp()
@ -74,11 +73,11 @@ constexpr std::array<SPatch, 23> OSPatches{{
void Patch(u32 addr, std::string_view func_name) void Patch(u32 addr, std::string_view func_name)
{ {
for (u32 i = 1; i < OSPatches.size(); ++i) for (u32 i = 1; i < os_patches.size(); ++i)
{ {
if (OSPatches[i].m_szPatchName == func_name) if (os_patches[i].name == func_name)
{ {
s_original_instructions[addr] = i; s_hooked_addresses[addr] = i;
PowerPC::ppcState.iCache.Invalidate(addr); PowerPC::ppcState.iCache.Invalidate(addr);
return; return;
} }
@ -106,12 +105,12 @@ void PatchFixedFunctions()
void PatchFunctions() void PatchFunctions()
{ {
// Remove all hooks that aren't fixed address hooks // Remove all hooks that aren't fixed address hooks
for (auto i = s_original_instructions.begin(); i != s_original_instructions.end();) for (auto i = s_hooked_addresses.begin(); i != s_hooked_addresses.end();)
{ {
if (OSPatches[i->second].flags != HookFlag::Fixed) if (os_patches[i->second].flags != HookFlag::Fixed)
{ {
PowerPC::ppcState.iCache.Invalidate(i->first); PowerPC::ppcState.iCache.Invalidate(i->first);
i = s_original_instructions.erase(i); i = s_hooked_addresses.erase(i);
} }
else else
{ {
@ -119,27 +118,27 @@ void PatchFunctions()
} }
} }
for (u32 i = 1; i < OSPatches.size(); ++i) for (u32 i = 1; i < os_patches.size(); ++i)
{ {
// Fixed hooks don't map to symbols // Fixed hooks don't map to symbols
if (OSPatches[i].flags == HookFlag::Fixed) if (os_patches[i].flags == HookFlag::Fixed)
continue; continue;
for (const auto& symbol : g_symbolDB.GetSymbolsFromName(OSPatches[i].m_szPatchName)) for (const auto& symbol : g_symbolDB.GetSymbolsFromName(os_patches[i].name))
{ {
for (u32 addr = symbol->address; addr < symbol->address + symbol->size; addr += 4) for (u32 addr = symbol->address; addr < symbol->address + symbol->size; addr += 4)
{ {
s_original_instructions[addr] = i; s_hooked_addresses[addr] = i;
PowerPC::ppcState.iCache.Invalidate(addr); PowerPC::ppcState.iCache.Invalidate(addr);
} }
INFO_LOG(OSHLE, "Patching %s %08x", OSPatches[i].m_szPatchName, symbol->address); INFO_LOG(OSHLE, "Patching %s %08x", os_patches[i].name, symbol->address);
} }
} }
} }
void Clear() void Clear()
{ {
s_original_instructions.clear(); s_hooked_addresses.clear();
} }
void Reload() void Reload()
@ -149,30 +148,30 @@ void Reload()
PatchFunctions(); PatchFunctions();
} }
void Execute(u32 _CurrentPC, u32 _Instruction) void Execute(u32 current_pc, u32 instruction)
{ {
unsigned int FunctionIndex = _Instruction & 0xFFFFF; const unsigned int function_index = instruction & 0xFFFFF;
if (FunctionIndex > 0 && FunctionIndex < OSPatches.size()) if (function_index > 0 && function_index < os_patches.size())
{ {
OSPatches[FunctionIndex].PatchFunction(); os_patches[function_index].function();
} }
else else
{ {
PanicAlert("HLE system tried to call an undefined HLE function %i.", FunctionIndex); PanicAlert("HLE system tried to call an undefined HLE function %i.", function_index);
} }
} }
u32 GetFunctionIndex(u32 address) u32 GetFunctionIndex(u32 address)
{ {
auto iter = s_original_instructions.find(address); auto iter = s_hooked_addresses.find(address);
return (iter != s_original_instructions.end()) ? iter->second : 0; return (iter != s_hooked_addresses.end()) ? iter->second : 0;
} }
u32 GetFirstFunctionIndex(u32 address) u32 GetFirstFunctionIndex(u32 address)
{ {
const u32 index = GetFunctionIndex(address); const u32 index = GetFunctionIndex(address);
// Fixed hooks use a fixed address and don't patch the whole function // Fixed hooks use a fixed address and don't patch the whole function
if (index == 0 || OSPatches[index].flags == HookFlag::Fixed) if (index == 0 || os_patches[index].flags == HookFlag::Fixed)
return index; return index;
const auto symbol = g_symbolDB.GetSymbolFromAddr(address); const auto symbol = g_symbolDB.GetSymbolFromAddr(address);
@ -181,12 +180,12 @@ u32 GetFirstFunctionIndex(u32 address)
HookType GetFunctionTypeByIndex(u32 index) HookType GetFunctionTypeByIndex(u32 index)
{ {
return OSPatches[index].type; return os_patches[index].type;
} }
HookFlag GetFunctionFlagsByIndex(u32 index) HookFlag GetFunctionFlagsByIndex(u32 index)
{ {
return OSPatches[index].flags; return os_patches[index].flags;
} }
bool IsEnabled(HookFlag flag) bool IsEnabled(HookFlag flag)
@ -197,23 +196,23 @@ bool IsEnabled(HookFlag flag)
u32 UnPatch(std::string_view patch_name) u32 UnPatch(std::string_view patch_name)
{ {
const auto patch = std::find_if(std::begin(OSPatches), std::end(OSPatches), const auto patch = std::find_if(std::begin(os_patches), std::end(os_patches),
[&](const SPatch& p) { return patch_name == p.m_szPatchName; }); [&](const Hook& p) { return patch_name == p.name; });
if (patch == std::end(OSPatches)) if (patch == std::end(os_patches))
return 0; return 0;
if (patch->flags == HookFlag::Fixed) if (patch->flags == HookFlag::Fixed)
{ {
const u32 patch_idx = static_cast<u32>(std::distance(OSPatches.begin(), patch)); const u32 patch_idx = static_cast<u32>(std::distance(os_patches.begin(), patch));
u32 addr = 0; u32 addr = 0;
// Reverse search by OSPatch key instead of address // Reverse search by OSPatch key instead of address
for (auto i = s_original_instructions.begin(); i != s_original_instructions.end();) for (auto i = s_hooked_addresses.begin(); i != s_hooked_addresses.end();)
{ {
if (i->second == patch_idx) if (i->second == patch_idx)
{ {
addr = i->first; addr = i->first;
PowerPC::ppcState.iCache.Invalidate(i->first); PowerPC::ppcState.iCache.Invalidate(i->first);
i = s_original_instructions.erase(i); i = s_hooked_addresses.erase(i);
} }
else else
{ {
@ -229,7 +228,7 @@ u32 UnPatch(std::string_view patch_name)
const auto& symbol = symbols[0]; const auto& symbol = symbols[0];
for (u32 addr = symbol->address; addr < symbol->address + symbol->size; addr += 4) for (u32 addr = symbol->address; addr < symbol->address + symbol->size; addr += 4)
{ {
s_original_instructions.erase(addr); s_hooked_addresses.erase(addr);
PowerPC::ppcState.iCache.Invalidate(addr); PowerPC::ppcState.iCache.Invalidate(addr);
} }
return symbol->address; return symbol->address;