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,45 +55,32 @@ 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) { break;
case DEBUGGER_RUNNING: case DEBUGGER_CUSTOM:
break; ARMRun(debugger->cpu);
case DEBUGGER_CUSTOM: _checkBreakpoints(debugger);
while (debugger->state == DEBUGGER_CUSTOM) { debugger->custom(debugger);
ARMRun(debugger->cpu); break;
_checkBreakpoints(debugger); case DEBUGGER_PAUSED:
debugger->custom(debugger); if (debugger->paused) {
} debugger->paused(debugger);
break; } else {
case DEBUGGER_PAUSED: debugger->state = DEBUGGER_RUNNING;
if (debugger->paused) {
debugger->paused(debugger);
} else {
debugger->state = DEBUGGER_RUNNING;
}
break;
case DEBUGGER_EXITING:
case DEBUGGER_SHUTDOWN:
return;
} }
break;
case DEBUGGER_SHUTDOWN:
return;
} }
} }