aboutsummaryrefslogtreecommitdiff
path: root/src/ARM.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ARM.cpp')
-rw-r--r--src/ARM.cpp25
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)