all repos — mgba @ 4d0f8559230c045ac6ca13be468456b63f88d801

mGBA Game Boy Advance Emulator

Debugger: Add rewind command
Jeffrey Pfau jeffrey@endrift.com
Thu, 08 Jan 2015 20:03:59 -0800
commit

4d0f8559230c045ac6ca13be468456b63f88d801

parent

da094de3da3362166d667b78d3bec7890ef61fb9

1 files changed, 13 insertions(+), 0 deletions(-)

jump to
M src/gba/gba-cli.csrc/gba/gba-cli.c

@@ -20,11 +20,13 @@ static uint32_t _GBACLIDebuggerLookupIdentifier(struct CLIDebuggerSystem*, const char* name, struct CLIDebugVector* dv);

static void _frame(struct CLIDebugger*, struct CLIDebugVector*); static void _load(struct CLIDebugger*, struct CLIDebugVector*); +static void _rewind(struct CLIDebugger*, struct CLIDebugVector*); static void _save(struct CLIDebugger*, struct CLIDebugVector*); struct CLIDebuggerCommandSummary _GBACLIDebuggerCommands[] = { { "frame", _frame, 0, "Frame advance" }, { "load", _load, CLIDVParse, "Load a savestate" }, + { "rewind", _rewind, CLIDVParse, "Rewind the emulation a number of recorded intervals" }, { "save", _save, CLIDVParse, "Save a savestate" }, { 0, 0, 0, 0 } };

@@ -111,6 +113,17 @@

struct GBACLIDebugger* gbaDebugger = (struct GBACLIDebugger*) debugger->system; GBALoadState(gbaDebugger->context->gba, gbaDebugger->context->stateDir, dv->intValue); +} + +static void _rewind(struct CLIDebugger* debugger, struct CLIDebugVector* dv) { + struct GBACLIDebugger* gbaDebugger = (struct GBACLIDebugger*) debugger->system; + if (!dv) { + GBARewindAll(gbaDebugger->context); + } else if (dv->type != CLIDV_INT_TYPE) { + printf("%s\n", ERROR_MISSING_ARGS); + } else { + GBARewind(gbaDebugger->context, dv->intValue); + } } static void _save(struct CLIDebugger* debugger, struct CLIDebugVector* dv) {