aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ARM.cpp1
-rw-r--r--src/CP15.cpp2
-rw-r--r--src/NDS.cpp9
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;