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
- GBA: Improve accuracy of event timing
- 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)
- Initial release

View File

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