mirror of https://github.com/mgba-emu/mgba.git
Debugger: Simplify debugger state machine to play nicer with the GBA thread loop
This commit is contained in:
parent
1f75e41bae
commit
99d75ee9ed
1
CHANGES
1
CHANGES
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue