BS2 emulation: set up a reasonable BAT during startup.
It doesn't really matter much at the moment given our current terrible MMU emulation, but it will start mattering once our MMU emulation gets more accurate.
This commit is contained in:
parent
440246a190
commit
336b55bbc4
|
@ -40,8 +40,15 @@ bool CBoot::EmulatedBS2_GC()
|
||||||
{
|
{
|
||||||
INFO_LOG(BOOT, "Faking GC BS2...");
|
INFO_LOG(BOOT, "Faking GC BS2...");
|
||||||
|
|
||||||
|
// Set up MSR and the BAT SPR registers.
|
||||||
UReg_MSR& m_MSR = ((UReg_MSR&)PowerPC::ppcState.msr);
|
UReg_MSR& m_MSR = ((UReg_MSR&)PowerPC::ppcState.msr);
|
||||||
m_MSR.FP = 1;
|
m_MSR.FP = 1;
|
||||||
|
PowerPC::ppcState.spr[SPR_IBAT0U] = 0x800001ff;
|
||||||
|
PowerPC::ppcState.spr[SPR_IBAT0L] = 0x00000002;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT0U] = 0x800001ff;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT0L] = 0x00000002;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT1U] = 0xc0001fff;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT1L] = 0x0000002a;
|
||||||
|
|
||||||
// Clear ALL memory
|
// Clear ALL memory
|
||||||
Memory::Clear();
|
Memory::Clear();
|
||||||
|
@ -317,8 +324,21 @@ bool CBoot::EmulatedBS2_Wii()
|
||||||
bool apploaderRan = false;
|
bool apploaderRan = false;
|
||||||
if (VolumeHandler::IsValid() && VolumeHandler::IsWii())
|
if (VolumeHandler::IsValid() && VolumeHandler::IsWii())
|
||||||
{
|
{
|
||||||
|
// Set up MSR and the BAT SPR registers.
|
||||||
UReg_MSR& m_MSR = ((UReg_MSR&)PowerPC::ppcState.msr);
|
UReg_MSR& m_MSR = ((UReg_MSR&)PowerPC::ppcState.msr);
|
||||||
m_MSR.FP = 1;
|
m_MSR.FP = 1;
|
||||||
|
PowerPC::ppcState.spr[SPR_IBAT0U] = 0x800001ff;
|
||||||
|
PowerPC::ppcState.spr[SPR_IBAT0L] = 0x00000002;
|
||||||
|
PowerPC::ppcState.spr[SPR_IBAT4L] = 0x90001fff;
|
||||||
|
PowerPC::ppcState.spr[SPR_IBAT4L] = 0x10000002;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT0U] = 0x800001ff;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT0L] = 0x00000002;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT1U] = 0xc0001fff;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT1L] = 0x0000002a;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT4U] = 0x90001fff;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT4L] = 0x10000002;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT5U] = 0xd0001fff;
|
||||||
|
PowerPC::ppcState.spr[SPR_DBAT5L] = 0x1000002a;
|
||||||
|
|
||||||
Memory::Write_U32(0x4c000064, 0x80000300); // Write default DFI Handler: rfi
|
Memory::Write_U32(0x4c000064, 0x80000300); // Write default DFI Handler: rfi
|
||||||
Memory::Write_U32(0x4c000064, 0x80000800); // Write default FPU Handler: rfi
|
Memory::Write_U32(0x4c000064, 0x80000800); // Write default FPU Handler: rfi
|
||||||
|
|
|
@ -749,6 +749,22 @@ enum
|
||||||
SPR_DBAT2L = 541,
|
SPR_DBAT2L = 541,
|
||||||
SPR_DBAT3U = 542,
|
SPR_DBAT3U = 542,
|
||||||
SPR_DBAT3L = 543,
|
SPR_DBAT3L = 543,
|
||||||
|
SPR_IBAT4U = 560,
|
||||||
|
SPR_IBAT4L = 561,
|
||||||
|
SPR_IBAT5U = 562,
|
||||||
|
SPR_IBAT5L = 563,
|
||||||
|
SPR_IBAT6U = 564,
|
||||||
|
SPR_IBAT6L = 565,
|
||||||
|
SPR_IBAT7U = 566,
|
||||||
|
SPR_IBAT7L = 567,
|
||||||
|
SPR_DBAT4U = 568,
|
||||||
|
SPR_DBAT4L = 569,
|
||||||
|
SPR_DBAT5U = 570,
|
||||||
|
SPR_DBAT5L = 571,
|
||||||
|
SPR_DBAT6U = 572,
|
||||||
|
SPR_DBAT6L = 573,
|
||||||
|
SPR_DBAT7U = 574,
|
||||||
|
SPR_DBAT7L = 575,
|
||||||
SPR_GQR0 = 912,
|
SPR_GQR0 = 912,
|
||||||
SPR_HID0 = 1008,
|
SPR_HID0 = 1008,
|
||||||
SPR_HID1 = 1009,
|
SPR_HID1 = 1009,
|
||||||
|
|
Loading…
Reference in New Issue