From 7ba32ea076496fd2d151d51264d3135a3967631f Mon Sep 17 00:00:00 2001 From: StapleButter Date: Wed, 7 Nov 2018 18:38:54 +0100 Subject: make the ARM clock shift configurable. nothing fancy there, just paving the way for DSi support later. --- src/ARM.cpp | 17 +++++------------ src/ARM.h | 11 +++++++++++ src/DMA.cpp | 19 +++++++++++++++++++ src/NDS.cpp | 3 +++ 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/ARM.cpp b/src/ARM.cpp index d71d0e1..226b463 100644 --- a/src/ARM.cpp +++ b/src/ARM.cpp @@ -48,6 +48,8 @@ ARM::ARM(u32 num) // well uh Num = num; + SetClockShift(0); // safe default + for (int i = 0; i < 16; i++) { Waitstates[0][i] = 1; @@ -432,18 +434,9 @@ s32 ARM::Execute() } } - if (Num==0) - { - s32 diff = Cycles - lastcycles; - NDS::RunTimingCriticalDevices(0, diff >> 1); - lastcycles = Cycles - (diff&1); - } - else - { - s32 diff = Cycles - lastcycles; - NDS::RunTimingCriticalDevices(1, diff); - lastcycles = Cycles; - } + s32 diff = Cycles - lastcycles; + NDS::RunTimingCriticalDevices(Num, diff >> ClockShift); + lastcycles = Cycles - (diff & ClockDiffMask); // TODO optimize this shit!!! if (Halted) diff --git a/src/ARM.h b/src/ARM.h index b778be4..f06cb7f 100644 --- a/src/ARM.h +++ b/src/ARM.h @@ -38,6 +38,12 @@ public: void Reset(); + void SetClockShift(u32 shift) + { + ClockShift = shift; + ClockDiffMask = (1<mainRAM, resulting in timings of 16-18 cycles per unit +// +// TODO: GBA slot DMA::DMA(u32 cpu, u32 num) diff --git a/src/NDS.cpp b/src/NDS.cpp index 77810ee..32deeb6 100644 --- a/src/NDS.cpp +++ b/src/NDS.cpp @@ -345,6 +345,9 @@ void Reset() SPI::Reset(); RTC::Reset(); Wifi::Reset(); + + ARM9->SetClockShift(1); + ARM7->SetClockShift(0); } void Stop() -- cgit v1.2.3