mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-25 15:19:42 -06:00
Core/IOS/IOS: Remove system parameters from BootstrapPPC() and BootIOS()
An EmulationKernel instance already houses a reference to the currently active system instance.
This commit is contained in:
@ -572,7 +572,7 @@ bool CBoot::BootUp(Core::System& system, const Core::CPUThreadGuard& guard,
|
|||||||
// Because there is no TMD to get the requested system (IOS) version from,
|
// Because there is no TMD to get the requested system (IOS) version from,
|
||||||
// we default to IOS58, which is the version used by the Homebrew Channel.
|
// we default to IOS58, which is the version used by the Homebrew Channel.
|
||||||
SetupWiiMemory(system, IOS::HLE::IOSC::ConsoleType::Retail);
|
SetupWiiMemory(system, IOS::HLE::IOSC::ConsoleType::Retail);
|
||||||
IOS::HLE::GetIOS()->BootIOS(system, Titles::IOS(58));
|
IOS::HLE::GetIOS()->BootIOS(Titles::IOS(58));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -559,7 +559,7 @@ bool CBoot::EmulatedBS2_Wii(Core::System& system, const Core::CPUThreadGuard& gu
|
|||||||
const u64 ios = ios_override >= 0 ? Titles::IOS(static_cast<u32>(ios_override)) : tmd.GetIOSId();
|
const u64 ios = ios_override >= 0 ? Titles::IOS(static_cast<u32>(ios_override)) : tmd.GetIOSId();
|
||||||
|
|
||||||
const auto console_type = volume.GetTicket(data_partition).GetConsoleType();
|
const auto console_type = volume.GetTicket(data_partition).GetConsoleType();
|
||||||
if (!SetupWiiMemory(system, console_type) || !IOS::HLE::GetIOS()->BootIOS(system, ios))
|
if (!SetupWiiMemory(system, console_type) || !IOS::HLE::GetIOS()->BootIOS(ios))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
auto di =
|
auto di =
|
||||||
|
@ -374,7 +374,7 @@ bool ESDevice::LaunchIOS(u64 ios_title_id, HangPPC hang_ppc)
|
|||||||
const ES::TicketReader ticket = m_core.FindSignedTicket(ios_title_id);
|
const ES::TicketReader ticket = m_core.FindSignedTicket(ios_title_id);
|
||||||
ES::Content content;
|
ES::Content content;
|
||||||
if (!tmd.IsValid() || !ticket.IsValid() || !tmd.GetContent(tmd.GetBootIndex(), &content) ||
|
if (!tmd.IsValid() || !ticket.IsValid() || !tmd.GetContent(tmd.GetBootIndex(), &content) ||
|
||||||
!GetEmulationKernel().BootIOS(GetSystem(), ios_title_id, hang_ppc,
|
!GetEmulationKernel().BootIOS(ios_title_id, hang_ppc,
|
||||||
m_core.GetContentPath(ios_title_id, content)))
|
m_core.GetContentPath(ios_title_id, content)))
|
||||||
{
|
{
|
||||||
PanicAlertFmtT("Could not launch IOS {0:016x} because it is missing from the NAND.\n"
|
PanicAlertFmtT("Could not launch IOS {0:016x} because it is missing from the NAND.\n"
|
||||||
@ -385,7 +385,7 @@ bool ESDevice::LaunchIOS(u64 ios_title_id, HangPPC hang_ppc)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return GetEmulationKernel().BootIOS(GetSystem(), ios_title_id, hang_ppc);
|
return GetEmulationKernel().BootIOS(ios_title_id, hang_ppc);
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 ESDevice::WriteLaunchFile(const ES::TMDReader& tmd, Ticks ticks)
|
s32 ESDevice::WriteLaunchFile(const ES::TMDReader& tmd, Ticks ticks)
|
||||||
@ -490,8 +490,7 @@ bool ESDevice::LaunchPPCTitle(u64 title_id)
|
|||||||
|
|
||||||
bool ESDevice::BootstrapPPC()
|
bool ESDevice::BootstrapPPC()
|
||||||
{
|
{
|
||||||
const bool result =
|
const bool result = GetEmulationKernel().BootstrapPPC(m_pending_ppc_boot_content_path);
|
||||||
GetEmulationKernel().BootstrapPPC(GetSystem(), m_pending_ppc_boot_content_path);
|
|
||||||
m_pending_ppc_boot_content_path = {};
|
m_pending_ppc_boot_content_path = {};
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -434,7 +434,7 @@ static std::vector<u8> ReadBootContent(FSCore& fs, const std::string& path, size
|
|||||||
|
|
||||||
// This corresponds to syscall 0x41, which loads a binary from the NAND and bootstraps the PPC.
|
// This corresponds to syscall 0x41, which loads a binary from the NAND and bootstraps the PPC.
|
||||||
// Unlike 0x42, IOS will set up some constants in memory before booting the PPC.
|
// Unlike 0x42, IOS will set up some constants in memory before booting the PPC.
|
||||||
bool EmulationKernel::BootstrapPPC(Core::System& system, const std::string& boot_content_path)
|
bool EmulationKernel::BootstrapPPC(const std::string& boot_content_path)
|
||||||
{
|
{
|
||||||
// Seeking and processing overhead is ignored as most time is spent reading from the NAND.
|
// Seeking and processing overhead is ignored as most time is spent reading from the NAND.
|
||||||
u64 ticks = 0;
|
u64 ticks = 0;
|
||||||
@ -453,11 +453,11 @@ bool EmulationKernel::BootstrapPPC(Core::System& system, const std::string& boot
|
|||||||
if (dol.IsAncast())
|
if (dol.IsAncast())
|
||||||
INFO_LOG_FMT(IOS, "BootstrapPPC: Loading ancast image");
|
INFO_LOG_FMT(IOS, "BootstrapPPC: Loading ancast image");
|
||||||
|
|
||||||
if (!dol.LoadIntoMemory(system))
|
if (!dol.LoadIntoMemory(m_system))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
INFO_LOG_FMT(IOS, "BootstrapPPC: {}", boot_content_path);
|
INFO_LOG_FMT(IOS, "BootstrapPPC: {}", boot_content_path);
|
||||||
system.GetCoreTiming().ScheduleEvent(ticks, s_event_finish_ppc_bootstrap, dol.IsAncast());
|
m_system.GetCoreTiming().ScheduleEvent(ticks, s_event_finish_ppc_bootstrap, dol.IsAncast());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -508,7 +508,7 @@ static constexpr SystemTimers::TimeBaseTick GetIOSBootTicks(u32 version)
|
|||||||
// Passing a boot content path is optional because we do not require IOSes
|
// Passing a boot content path is optional because we do not require IOSes
|
||||||
// to be installed at the moment. If one is passed, the boot binary must exist
|
// to be installed at the moment. If one is passed, the boot binary must exist
|
||||||
// on the NAND, or the call will fail like on a Wii.
|
// on the NAND, or the call will fail like on a Wii.
|
||||||
bool EmulationKernel::BootIOS(Core::System& system, const u64 ios_title_id, HangPPC hang_ppc,
|
bool EmulationKernel::BootIOS(const u64 ios_title_id, HangPPC hang_ppc,
|
||||||
const std::string& boot_content_path)
|
const std::string& boot_content_path)
|
||||||
{
|
{
|
||||||
// IOS suspends regular PPC<->ARM IPC before loading a new IOS.
|
// IOS suspends regular PPC<->ARM IPC before loading a new IOS.
|
||||||
@ -525,7 +525,7 @@ bool EmulationKernel::BootIOS(Core::System& system, const u64 ios_title_id, Hang
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
ElfReader elf{binary.GetElf()};
|
ElfReader elf{binary.GetElf()};
|
||||||
if (!elf.LoadIntoMemory(system, true))
|
if (!elf.LoadIntoMemory(m_system, true))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -534,12 +534,12 @@ bool EmulationKernel::BootIOS(Core::System& system, const u64 ios_title_id, Hang
|
|||||||
|
|
||||||
if (Core::IsRunningAndStarted())
|
if (Core::IsRunningAndStarted())
|
||||||
{
|
{
|
||||||
system.GetCoreTiming().ScheduleEvent(GetIOSBootTicks(GetVersion()), s_event_finish_ios_boot,
|
m_system.GetCoreTiming().ScheduleEvent(GetIOSBootTicks(GetVersion()), s_event_finish_ios_boot,
|
||||||
ios_title_id);
|
ios_title_id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FinishIOSBoot(system, ios_title_id);
|
FinishIOSBoot(m_system, ios_title_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -177,8 +177,8 @@ public:
|
|||||||
void SetGidForPPC(u16 gid);
|
void SetGidForPPC(u16 gid);
|
||||||
u16 GetGidForPPC() const;
|
u16 GetGidForPPC() const;
|
||||||
|
|
||||||
bool BootstrapPPC(Core::System& system, const std::string& boot_content_path);
|
bool BootstrapPPC(const std::string& boot_content_path);
|
||||||
bool BootIOS(Core::System& system, u64 ios_title_id, HangPPC hang_ppc = HangPPC::No,
|
bool BootIOS(u64 ios_title_id, HangPPC hang_ppc = HangPPC::No,
|
||||||
const std::string& boot_content_path = {});
|
const std::string& boot_content_path = {});
|
||||||
void InitIPC();
|
void InitIPC();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user