diff options
author | RSDuck <RSDuck@users.noreply.github.com> | 2019-07-21 23:56:24 +0200 |
---|---|---|
committer | RSDuck <rsduck@users.noreply.github.com> | 2020-04-26 13:03:11 +0200 |
commit | 51b6b7a7d56e727e164c6ef7cdde3d3e0f4b058e (patch) | |
tree | 73fe9b9caa53c537408468f3e96cb4c610b3278c | |
parent | 4a0f6b3b4bd60815d0c8259e4ec2a944bfb716be (diff) |
fix uninitialised memory mapping
-rw-r--r-- | src/ARM.cpp | 1 | ||||
-rw-r--r-- | src/CP15.cpp | 2 | ||||
-rw-r--r-- | src/NDS.cpp | 9 |
3 files changed, 10 insertions, 2 deletions
diff --git a/src/ARM.cpp b/src/ARM.cpp index b68b5eb..868c287 100644 --- a/src/ARM.cpp +++ b/src/ARM.cpp @@ -102,7 +102,6 @@ void ARM::Reset() void ARMv5::Reset() { - CP15Reset(); ARM::Reset(); } diff --git a/src/CP15.cpp b/src/CP15.cpp index e6e91c3..b24c1c1 100644 --- a/src/CP15.cpp +++ b/src/CP15.cpp @@ -257,9 +257,11 @@ void ARMv5::UpdatePURegions(bool update_all) void ARMv5::UpdateRegionTimings(u32 addrstart, u32 addrend) { + printf("initialising region timings %x %x\n", addrstart, addrend); addrstart >>= 12; addrend >>= 12; + if (addrend == 0xFFFFF) addrend++; for (u32 i = addrstart; i < addrend; i++) diff --git a/src/NDS.cpp b/src/NDS.cpp index cab78b5..1baa308 100644 --- a/src/NDS.cpp +++ b/src/NDS.cpp @@ -247,7 +247,9 @@ void SetARM9RegionTimings(u32 addrstart, u32 addrend, int buswidth, int nonseq, ARM9MemTimings[i][3] = S32; } - ARM9->UpdateRegionTimings(addrstart<<14, addrend<<14); + ARM9->UpdateRegionTimings(addrstart<<14, addrend == 0x40000 + ? 0xFFFFFFFF + : (addrend<<14)); } void SetARM7RegionTimings(u32 addrstart, u32 addrend, int buswidth, int nonseq, int seq) @@ -459,6 +461,11 @@ void Reset() fclose(f); } + // has to be called before InitTimings + // otherwise some PU settings are completely + // unitialised on the first run + ARM9->CP15Reset(); + // TODO for later: configure this when emulating a DSi ARM9ClockShift = 1; |