summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorLioncache <mai.iam2048@gmail.com>2023-12-18 12:04:56 -0500
committerLioncache <mai.iam2048@gmail.com>2023-12-18 12:04:58 -0500
commita13bcd87d40d0a6ec784118100adfaa4cf0e81fc (patch)
treed3e5a0a474d89174758643c5c549d04cb8196014 /Source/Core
parent0c9f9ca8b63d0a9071c9e28214bd22f6f6c634d9 (diff)
Core/IOS/IOS: Remove global system accessors from internal functions
These functions can all be modified to take in the required instance, rather than using the global system accessor.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/IOS/IOS.cpp39
1 files changed, 17 insertions, 22 deletions
diff --git a/Source/Core/Core/IOS/IOS.cpp b/Source/Core/Core/IOS/IOS.cpp
index 73b54c96b0..67aa1037c6 100644
--- a/Source/Core/Core/IOS/IOS.cpp
+++ b/Source/Core/Core/IOS/IOS.cpp
@@ -105,11 +105,8 @@ constexpr u32 ADDR_DEVKIT_BOOT_PROGRAM_VERSION = 0x315e;
constexpr u32 ADDR_SYSMENU_SYNC = 0x3160;
constexpr u32 PLACEHOLDER = 0xDEADBEEF;
-static bool SetupMemory(u64 ios_title_id, MemorySetupType setup_type)
+static bool SetupMemory(Memory::MemoryManager& memory, u64 ios_title_id, MemorySetupType setup_type)
{
- auto& system = Core::System::GetInstance();
- auto& memory = system.GetMemory();
-
auto target_imv = std::find_if(
GetMemoryValues().begin(), GetMemoryValues().end(),
[&](const MemoryValues& imv) { return imv.ios_number == (ios_title_id & 0xffff); });
@@ -196,22 +193,21 @@ static bool SetupMemory(u64 ios_title_id, MemorySetupType setup_type)
// by asserting the PPC's HRESET signal (via HW_RESETS).
// We will simulate that by resetting MSR and putting the PPC into an infinite loop.
// The memory write will not be observable since the PPC is not running any code...
-static void ResetAndPausePPC()
+static void ResetAndPausePPC(Core::System& system)
{
// This should be cleared when the PPC is released so that the write is not observable.
- auto& system = Core::System::GetInstance();
auto& memory = system.GetMemory();
- memory.Write_U32(0x48000000, 0x00000000); // b 0x0
auto& power_pc = system.GetPowerPC();
+
+ memory.Write_U32(0x48000000, 0x00000000); // b 0x0
power_pc.Reset();
power_pc.GetPPCState().pc = 0;
}
-static void ReleasePPC()
+static void ReleasePPC(Core::System& system)
{
- auto& system = Core::System::GetInstance();
- auto& memory = system.GetMemory();
- memory.Write_U32(0, 0);
+ system.GetMemory().Write_U32(0, 0);
+
// HLE the bootstub that jumps to 0x3400.
// NAND titles start with address translation off at 0x3400 (via the PPC bootstub)
// The state of other CPU registers (like the BAT registers) doesn't matter much
@@ -219,11 +215,10 @@ static void ReleasePPC()
system.GetPPCState().pc = 0x3400;
}
-static void ReleasePPCAncast()
+static void ReleasePPCAncast(Core::System& system)
{
- auto& system = Core::System::GetInstance();
- auto& memory = system.GetMemory();
- memory.Write_U32(0, 0);
+ system.GetMemory().Write_U32(0, 0);
+
// On a real console the Espresso verifies and decrypts the Ancast image,
// then jumps to the decrypted ancast body.
// The Ancast loader already did this, so just jump to the decrypted body.
@@ -324,7 +319,7 @@ EmulationKernel::EmulationKernel(Core::System& system, u64 title_id)
{
INFO_LOG_FMT(IOS, "Starting IOS {:016x}", title_id);
- if (!SetupMemory(title_id, MemorySetupType::IOSReload))
+ if (!SetupMemory(m_system.GetMemory(), title_id, MemorySetupType::IOSReload))
WARN_LOG_FMT(IOS, "No information about this IOS -- cannot set up memory values");
if (title_id == Titles::MIOS)
@@ -444,11 +439,11 @@ bool EmulationKernel::BootstrapPPC(const std::string& boot_content_path)
if (!dol.IsValid())
return false;
- if (!SetupMemory(m_title_id, MemorySetupType::Full))
+ if (!SetupMemory(m_system.GetMemory(), m_title_id, MemorySetupType::Full))
return false;
// Reset the PPC and pause its execution until we're ready.
- ResetAndPausePPC();
+ ResetAndPausePPC(m_system);
if (dol.IsAncast())
INFO_LOG_FMT(IOS, "BootstrapPPC: Loading ancast image");
@@ -530,7 +525,7 @@ bool EmulationKernel::BootIOS(const u64 ios_title_id, HangPPC hang_ppc,
}
if (hang_ppc == HangPPC::Yes)
- ResetAndPausePPC();
+ ResetAndPausePPC(m_system);
if (Core::IsRunningAndStarted())
{
@@ -950,9 +945,9 @@ static void FinishPPCBootstrap(Core::System& system, u64 userdata, s64 cycles_la
// See Kernel::BootstrapPPC
const bool is_ancast = userdata == 1;
if (is_ancast)
- ReleasePPCAncast();
+ ReleasePPCAncast(system);
else
- ReleasePPC();
+ ReleasePPC(system);
ASSERT(Core::IsCPUThread());
Core::CPUThreadGuard guard(system);
@@ -991,7 +986,7 @@ void Init()
// This means that the constants in the 0x3100 region are always set up by the time
// a game is launched. This is necessary because booting games from the game list skips
// a significant part of a Wii's boot process.
- SetupMemory(Titles::SYSTEM_MENU_IOS, MemorySetupType::Full);
+ SetupMemory(system.GetMemory(), Titles::SYSTEM_MENU_IOS, MemorySetupType::Full);
}
void Shutdown()