diff options
| author | skidau <skidau@gmail.com> | 2015-02-25 12:42:48 +1100 |
|---|---|---|
| committer | skidau <skidau@gmail.com> | 2015-02-25 12:42:48 +1100 |
| commit | f4e42b394c8a6d86463b2589f06598ae8bb217aa (patch) | |
| tree | 8ad1a9e38b2140338a7eee9ffe772a3ac623b9e3 /Source/Core | |
| parent | 084ff7d305eb06b0bdf4913a2286e037637f3651 (diff) | |
| parent | fca5e176b381e052d11e273540602552091c524e (diff) | |
Merge pull request #2106 from magumagu/elf-translation-registers
Correctly set up MSR and BAT registers for ELF loading.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Boot/Boot_ELF.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/Source/Core/Core/Boot/Boot_ELF.cpp b/Source/Core/Core/Boot/Boot_ELF.cpp index d41c95c1ba..fd9d0ee0cc 100644 --- a/Source/Core/Core/Boot/Boot_ELF.cpp +++ b/Source/Core/Core/Boot/Boot_ELF.cpp @@ -67,6 +67,25 @@ bool CBoot::Boot_ELF(const std::string& filename) if(!reader.LoadIntoMemory()) return false; + // Set up MSR and the BAT SPR registers. + UReg_MSR& m_MSR = ((UReg_MSR&)PowerPC::ppcState.msr); + m_MSR.FP = 1; + m_MSR.DR = 1; + m_MSR.IR = 1; + m_MSR.EE = 1; + PowerPC::ppcState.spr[SPR_IBAT0U] = 0x80001fff; + PowerPC::ppcState.spr[SPR_IBAT0L] = 0x00000002; + PowerPC::ppcState.spr[SPR_IBAT4U] = 0x90001fff; + PowerPC::ppcState.spr[SPR_IBAT4L] = 0x10000002; + PowerPC::ppcState.spr[SPR_DBAT0U] = 0x80001fff; + 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; + if (!reader.LoadSymbols()) { if (LoadMapFromFilename()) |
