From 433f0ba360002c2bf210ab1a4eab6e6e595a5b8d Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Thu, 28 Aug 2014 05:00:38 -0700 Subject: [PATCH] Tighter looping for ARMRun --- src/arm/arm.c | 11 +++++++++++ src/arm/arm.h | 1 + src/gba/gba-thread.c | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/arm/arm.c b/src/arm/arm.c index e98ad9059..582a044b3 100644 --- a/src/arm/arm.c +++ b/src/arm/arm.c @@ -291,3 +291,14 @@ void ARMRun(struct ARMCore* cpu) { cpu->irqh.processEvents(cpu); } } + +void ARMRunLoop(struct ARMCore* cpu) { + while (cpu->cycles < cpu->nextEvent) { + if (cpu->executionMode == MODE_THUMB) { + ThumbStep(cpu); + } else { + ARMStep(cpu); + } + } + cpu->irqh.processEvents(cpu); +} diff --git a/src/arm/arm.h b/src/arm/arm.h index 50e050a9a..66c0bfa58 100644 --- a/src/arm/arm.h +++ b/src/arm/arm.h @@ -156,5 +156,6 @@ void ARMRaiseIRQ(struct ARMCore*); void ARMRaiseSWI(struct ARMCore*); void ARMRun(struct ARMCore* cpu); +void ARMRunLoop(struct ARMCore* cpu); #endif diff --git a/src/gba/gba-thread.c b/src/gba/gba-thread.c index da16be584..0b39fd48f 100644 --- a/src/gba/gba-thread.c +++ b/src/gba/gba-thread.c @@ -167,7 +167,7 @@ static THREAD_ENTRY _GBAThreadRun(void* context) { } } else { while (threadContext->state == THREAD_RUNNING) { - ARMRun(&cpu); + ARMRunLoop(&cpu); } }