Boot: Add default exception handlers
Some homebrew expect exception handlers to be present -- which is almost always the case on console, since most of the time homebrew are launched from either a libogc or SDK title) -- and break if they are not. To fix this, we just need to include default, dummy handlers.
This commit is contained in:
parent
520039ab28
commit
3dd777be70
|
@ -282,6 +282,18 @@ static void SetDefaultDisc()
|
||||||
SetDisc(DiscIO::CreateVolumeFromFilename(config.m_strDefaultISO));
|
SetDisc(DiscIO::CreateVolumeFromFilename(config.m_strDefaultISO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void CopyDefaultExceptionHandlers()
|
||||||
|
{
|
||||||
|
constexpr u32 EXCEPTION_HANDLER_ADDRESSES[] = {0x00000100, 0x00000200, 0x00000300, 0x00000400,
|
||||||
|
0x00000500, 0x00000600, 0x00000700, 0x00000800,
|
||||||
|
0x00000900, 0x00000C00, 0x00000D00, 0x00000F00,
|
||||||
|
0x00001300, 0x00001400, 0x00001700};
|
||||||
|
|
||||||
|
constexpr u32 RFI_INSTRUCTION = 0x4C000064;
|
||||||
|
for (const u32 address : EXCEPTION_HANDLER_ADDRESSES)
|
||||||
|
Memory::Write_U32(RFI_INSTRUCTION, address);
|
||||||
|
}
|
||||||
|
|
||||||
// Third boot step after BootManager and Core. See Call schedule in BootManager.cpp
|
// Third boot step after BootManager and Core. See Call schedule in BootManager.cpp
|
||||||
bool CBoot::BootUp(std::unique_ptr<BootParameters> boot)
|
bool CBoot::BootUp(std::unique_ptr<BootParameters> boot)
|
||||||
{
|
{
|
||||||
|
@ -332,6 +344,7 @@ bool CBoot::BootUp(std::unique_ptr<BootParameters> boot)
|
||||||
|
|
||||||
SetupMSR();
|
SetupMSR();
|
||||||
SetupBAT(config.bWii);
|
SetupBAT(config.bWii);
|
||||||
|
CopyDefaultExceptionHandlers();
|
||||||
|
|
||||||
if (config.bWii)
|
if (config.bWii)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue