diff --git a/src/ARM.cpp b/src/ARM.cpp index d71d0e1a..226b4630 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 b778be43..f06cb7f3 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 77810eef..32deeb6d 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()