Debugger: Simplify debugger state machine to play nicer with the GBA thread loop

This commit is contained in:
Jeffrey Pfau 2015-01-18 02:27:25 -08:00
parent 1f75e41bae
commit 99d75ee9ed
2 changed files with 22 additions and 34 deletions

View File

@ -77,6 +77,7 @@ Misc:
- Debugger: Watchpoints now work on STM/LDM instructions - Debugger: Watchpoints now work on STM/LDM instructions
- GBA: Improve accuracy of event timing - GBA: Improve accuracy of event timing
- Debugger: Clean up GDB stub network interfacing - Debugger: Clean up GDB stub network interfacing
- Debugger: Simplify debugger state machine to play nicer with the GBA thread loop
0.1.0: (2014-12-13) 0.1.0: (2014-12-13)
- Initial release - Initial release

View File

@ -55,33 +55,22 @@ void ARMDebuggerDeinit(struct ARMComponent* component) {
} }
void ARMDebuggerRun(struct ARMDebugger* debugger) { void ARMDebuggerRun(struct ARMDebugger* debugger) {
if (debugger->state == DEBUGGER_EXITING) { switch (debugger->state) {
case DEBUGGER_EXITING:
debugger->state = DEBUGGER_RUNNING; debugger->state = DEBUGGER_RUNNING;
} // Fall through
while (debugger->state < DEBUGGER_EXITING) { case DEBUGGER_RUNNING:
if (!debugger->breakpoints && !debugger->watchpoints) { if (!debugger->breakpoints && !debugger->watchpoints) {
while (debugger->state == DEBUGGER_RUNNING) {
ARMRunLoop(debugger->cpu); ARMRunLoop(debugger->cpu);
}
} else if (!debugger->breakpoints) {
while (debugger->state == DEBUGGER_RUNNING) {
ARMRun(debugger->cpu);
}
} else { } else {
while (debugger->state == DEBUGGER_RUNNING) {
ARMRun(debugger->cpu); ARMRun(debugger->cpu);
_checkBreakpoints(debugger); _checkBreakpoints(debugger);
} }
}
switch (debugger->state) {
case DEBUGGER_RUNNING:
break; break;
case DEBUGGER_CUSTOM: case DEBUGGER_CUSTOM:
while (debugger->state == DEBUGGER_CUSTOM) {
ARMRun(debugger->cpu); ARMRun(debugger->cpu);
_checkBreakpoints(debugger); _checkBreakpoints(debugger);
debugger->custom(debugger); debugger->custom(debugger);
}
break; break;
case DEBUGGER_PAUSED: case DEBUGGER_PAUSED:
if (debugger->paused) { if (debugger->paused) {
@ -90,11 +79,9 @@ void ARMDebuggerRun(struct ARMDebugger* debugger) {
debugger->state = DEBUGGER_RUNNING; debugger->state = DEBUGGER_RUNNING;
} }
break; break;
case DEBUGGER_EXITING:
case DEBUGGER_SHUTDOWN: case DEBUGGER_SHUTDOWN:
return; return;
} }
}
} }
void ARMDebuggerEnter(struct ARMDebugger* debugger, enum DebuggerEntryReason reason) { void ARMDebuggerEnter(struct ARMDebugger* debugger, enum DebuggerEntryReason reason) {