From 568428ca679dfd1ca7eeef3927b83597540f8060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Thu, 22 Apr 2021 21:50:05 +0200 Subject: [PATCH 1/2] HLE: Do not clobber 0x1800-0x3000 when using MIOS to fix IPL crash MIOS puts patch data in low MEM1 (0x1800-0x3000) for its own use. Overwriting data in this range can cause the IPL to crash when launching games that get patched by MIOS. See https://bugs.dolphin-emu.org/issues/11952 for more info. Not applying the Gecko HLE patches means that Gecko codes will not work under MIOS, but this is better than the alternative of having specific games crash. --- Source/Core/Core/HLE/HLE.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Source/Core/Core/HLE/HLE.cpp b/Source/Core/Core/HLE/HLE.cpp index a598e8d2b0..9c9471434d 100644 --- a/Source/Core/Core/HLE/HLE.cpp +++ b/Source/Core/Core/HLE/HLE.cpp @@ -76,6 +76,14 @@ void Patch(u32 addr, std::string_view func_name) void PatchFixedFunctions() { + // MIOS puts patch data in low MEM1 (0x1800-0x3000) for its own use. + // Overwriting data in this range can cause the IPL to crash when launching games + // that get patched by MIOS. See https://bugs.dolphin-emu.org/issues/11952 for more info. + // Not applying the Gecko HLE patches means that Gecko codes will not work under MIOS, + // but this is better than the alternative of having specific games crash. + if (SConfig::GetInstance().m_is_mios) + return; + // HLE jump to loader (homebrew). Disabled when Gecko is active as it interferes with the code // handler if (!SConfig::GetInstance().bEnableCheats) From 1686b637df633c77a1f05034325383f6c97ab4eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Thu, 22 Apr 2021 21:51:25 +0200 Subject: [PATCH 2/2] MIOS: Fix SConfig::OnNewTitleLoad not being called Oversight from #9545, which moved the "new game has been loaded" logic to a separate OnNewTitleLoad function that has to be called explicitly *after* a title has loaded. Coupled with the commit that makes Dolphin not clobber 0x1800-0x3000 when using MIOS, this fixes Wind Waker and other MIOS-patched games when they are launched from the System Menu. --- Source/Core/Core/IOS/MIOS.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Core/Core/IOS/MIOS.cpp b/Source/Core/Core/IOS/MIOS.cpp index 3be52ed411..7a4ce4a6bc 100644 --- a/Source/Core/Core/IOS/MIOS.cpp +++ b/Source/Core/Core/IOS/MIOS.cpp @@ -86,6 +86,7 @@ bool Load() NOTICE_LOG_FMT(IOS, "IPL ready."); SConfig::GetInstance().m_is_mios = true; DVDInterface::UpdateRunningGameMetadata(); + SConfig::OnNewTitleLoad(); return true; } } // namespace IOS::HLE::MIOS