diff options
Diffstat (limited to 'src/ARM.cpp')
-rw-r--r-- | src/ARM.cpp | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/src/ARM.cpp b/src/ARM.cpp index 536c78c..382f56e 100644 --- a/src/ARM.cpp +++ b/src/ARM.cpp @@ -20,7 +20,6 @@ #include "NDS.h" #include "ARM.h" #include "ARMInterpreter.h" -#include "GPU3D.h" u32 ARM::ConditionTable[16] = @@ -328,20 +327,19 @@ s32 ARM::Execute() else { Cycles = CyclesToRun; - GPU3D::Run(CyclesToRun >> 1); + + if (Num == 0) NDS::RunTimingCriticalDevices(0, CyclesToRun >> 1); + else NDS::RunTimingCriticalDevices(1, CyclesToRun); + return Cycles; } } Cycles = 0; s32 lastcycles = 0; - u32 addr = R[15] - (CPSR&0x20 ? 4:8); - u32 cpsr = CPSR; while (Cycles < CyclesToRun) { - //if(Num==1)printf("%08X %08X\n", R[15] - (CPSR&0x20 ? 4:8), NextInstr); - if (CPSR & 0x20) // THUMB { // prefetch @@ -376,15 +374,18 @@ s32 ARM::Execute() //if (R[15]==0x037F9364) printf("R8=%08X R9=%08X\n", R[8], R[9]); - // gross hack - // TODO, though: move timer code here too? - // quick testing shows that moving this to the NDS loop doesn't really slow things down if (Num==0) { s32 diff = Cycles - lastcycles; - GPU3D::Run(diff >> 1); + NDS::RunTimingCriticalDevices(0, diff >> 1); lastcycles = Cycles - (diff&1); } + else + { + s32 diff = Cycles - lastcycles; + NDS::RunTimingCriticalDevices(1, diff); + lastcycles = Cycles; + } // TODO optimize this shit!!! if (Halted) @@ -398,10 +399,6 @@ s32 ARM::Execute() if (NDS::IME[Num]&1) TriggerIRQ(); } - - // temp. debug cruft - addr = R[15] - (CPSR&0x20 ? 4:8); - cpsr = CPSR; } if (Halted == 2) |