From 20a9c5b12d3596efc34df7df79817b297288008b Mon Sep 17 00:00:00 2001 From: Sepalani Date: Thu, 6 Apr 2017 15:39:52 +0100 Subject: [PATCH] HLE: Add PatchFixedFunctions() function --- Source/Core/Core/Boot/Boot.cpp | 16 +--------------- Source/Core/Core/HLE/HLE.cpp | 19 +++++++++++++++++++ Source/Core/Core/HLE/HLE.h | 1 + 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/Source/Core/Core/Boot/Boot.cpp b/Source/Core/Core/Boot/Boot.cpp index ef5f460036..bec069bfdc 100644 --- a/Source/Core/Core/Boot/Boot.cpp +++ b/Source/Core/Core/Boot/Boot.cpp @@ -21,7 +21,6 @@ #include "Core/ConfigManager.h" #include "Core/Core.h" #include "Core/Debugger/Debugger_SymbolMap.h" -#include "Core/GeckoCode.h" #include "Core/HLE/HLE.h" #include "Core/HW/DVD/DVDInterface.h" #include "Core/HW/EXI/EXI_DeviceIPL.h" @@ -479,19 +478,6 @@ bool CBoot::BootUp() } } - // HLE jump to loader (homebrew). Disabled when Gecko is active as it interferes with the code - // handler - if (!SConfig::GetInstance().bEnableCheats) - { - HLE::Patch(0x80001800, "HBReload"); - Memory::CopyToEmu(0x00001804, "STUBHAXX", 8); - } - - // Not part of the binary itself, but either we or Gecko OS might insert - // this, and it doesn't clear the icache properly. - HLE::Patch(Gecko::ENTRY_POINT, "GeckoCodehandler"); - // This has to always be installed even if cheats are not enabled because of the possiblity of - // loading a savestate where PC is inside the code handler while cheats are disabled. - HLE::Patch(Gecko::HLE_TRAMPOLINE_ADDRESS, "GeckoHandlerReturnTrampoline"); + HLE::PatchFixedFunctions(); return true; } diff --git a/Source/Core/Core/HLE/HLE.cpp b/Source/Core/Core/HLE/HLE.cpp index b32d269355..52cf570977 100644 --- a/Source/Core/Core/HLE/HLE.cpp +++ b/Source/Core/Core/HLE/HLE.cpp @@ -10,6 +10,7 @@ #include "Core/ConfigManager.h" #include "Core/Core.h" #include "Core/Debugger/Debugger_SymbolMap.h" +#include "Core/GeckoCode.h" #include "Core/HLE/HLE.h" #include "Core/HLE/HLE_Misc.h" #include "Core/HLE/HLE_OS.h" @@ -88,6 +89,24 @@ void Patch(u32 addr, const char* hle_func_name) } } +void PatchFixedFunctions() +{ + // HLE jump to loader (homebrew). Disabled when Gecko is active as it interferes with the code + // handler + if (!SConfig::GetInstance().bEnableCheats) + { + Patch(0x80001800, "HBReload"); + Memory::CopyToEmu(0x00001804, "STUBHAXX", 8); + } + + // Not part of the binary itself, but either we or Gecko OS might insert + // this, and it doesn't clear the icache properly. + Patch(Gecko::ENTRY_POINT, "GeckoCodehandler"); + // This has to always be installed even if cheats are not enabled because of the possiblity of + // loading a savestate where PC is inside the code handler while cheats are disabled. + Patch(Gecko::HLE_TRAMPOLINE_ADDRESS, "GeckoHandlerReturnTrampoline"); +} + void PatchFunctions() { // Remove all hooks that aren't fixed address hooks diff --git a/Source/Core/Core/HLE/HLE.h b/Source/Core/Core/HLE/HLE.h index 61b50a8e72..dcd9c0d2b3 100644 --- a/Source/Core/Core/HLE/HLE.h +++ b/Source/Core/Core/HLE/HLE.h @@ -24,6 +24,7 @@ enum HookFlag HLE_TYPE_FIXED = 2, // An arbitrary hook mapped to a fixed address instead of a symbol }; +void PatchFixedFunctions(); void PatchFunctions(); void Clear();