diff options
author | Arisotura <thetotalworm@gmail.com> | 2020-05-30 13:52:51 +0200 |
---|---|---|
committer | Arisotura <thetotalworm@gmail.com> | 2020-05-30 13:52:51 +0200 |
commit | 8f5dff17251b759651d967fe072cf4f56b9edb35 (patch) | |
tree | 0aabf83bed2cbafdc9371935ed581fc39cea9d02 /src/DSi.cpp | |
parent | 8a15adb38bf5c141e41b1a5f9984ee363d64786f (diff) |
make soft-reset work somewhat better
Diffstat (limited to 'src/DSi.cpp')
-rw-r--r-- | src/DSi.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/DSi.cpp b/src/DSi.cpp index 15f06a2..fb4b37a 100644 --- a/src/DSi.cpp +++ b/src/DSi.cpp @@ -173,12 +173,41 @@ void SoftReset() NDS::ARM9->Reset(); NDS::ARM7->Reset(); + memcpy(NDS::ARM9->ITCM, ITCMInit, 0x8000); + + for (u32 i = 0; i < 0x3C00; i+=4) + ARM7Write32(0x03FFC400+i, *(u32*)&ARM7Init[i]); + DSi_AES::Reset(); LoadNAND(); NDS::ARM9->JumpTo(BootAddr[0]); NDS::ARM7->JumpTo(BootAddr[1]); + + SCFG_BIOS = 0x0101; // TODO: should be zero when booting from BIOS + SCFG_Clock9 = 0x0187; // CHECKME + SCFG_Clock7 = 0x0187; + SCFG_EXT[0] = 0x8307F100; + SCFG_EXT[1] = 0x93FFFB06; + SCFG_MC = 0x0010;//0x0011; + + // LCD init flag + GPU::DispStat[0] |= (1<<6); + GPU::DispStat[1] |= (1<<6); + + NDS::MapSharedWRAM(3); + + u32 eaddr = 0x03FFE6E4; + ARM7Write32(eaddr+0x00, *(u32*)&eMMC_CID[0]); + ARM7Write32(eaddr+0x04, *(u32*)&eMMC_CID[4]); + ARM7Write32(eaddr+0x08, *(u32*)&eMMC_CID[8]); + ARM7Write32(eaddr+0x0C, *(u32*)&eMMC_CID[12]); + ARM7Write16(eaddr+0x2C, 0x0001); + ARM7Write16(eaddr+0x2E, 0x0001); + ARM7Write16(eaddr+0x3C, 0x0100); + ARM7Write16(eaddr+0x3E, 0x40E0); + ARM7Write16(eaddr+0x42, 0x0001); } bool LoadBIOS() |