# HG changeset patch # User Michael Pavone # Date 1659825310 25200 # Node ID eff7bedfc83842e6d57afb7581f24bfd1dbf1365 # Parent 894c7873a2b1b7bb6fd6878704e71d2f80c6cd16 Restore ability to print PC in debugger. Make 68K register names case insensitive. Add usp and ssp registers diff -r 894c7873a2b1 -r eff7bedfc838 debug.c --- a/debug.c Sat Aug 06 15:22:30 2022 -0700 +++ b/debug.c Sat Aug 06 15:35:10 2022 -0700 @@ -634,6 +634,7 @@ resolver resolve; reader read_mem; void *system; + uint32_t address; }; uint8_t eval_expr(debug_context *context, expr *e, uint32_t *out) @@ -808,22 +809,25 @@ return read_m68k(gen->m68k, out, size); } -static uint8_t resolve_m68k(m68k_context *context, const char *name, uint32_t *out) +static uint8_t resolve_m68k(debug_context *debug, m68k_context *context, const char *name, uint32_t *out) { - if (name[0] == 'd' && name[1] >= '0' && name[1] <= '7') { + if ((name[0] == 'd' || name[0] == 'D') && name[1] >= '0' && name[1] <= '7' && !name[2]) { *out = context->dregs[name[1]-'0']; - } else if (name[0] == 'a' && name[1] >= '0' && name[1] <= '7') { + } else if ((name[0] == 'a' || name[0] == 'A') && name[1] >= '0' && name[1] <= '7' && !name[2]) { *out = context->aregs[name[1]-'0']; - } else if (name[0] == 's' && name[1] == 'r') { + } else if (!strcasecmp(name, "sr")) { *out = context->status << 8; for (int flag = 0; flag < 5; flag++) { *out |= context->flags[flag] << (4-flag); } - } else if(name[0] == 'c') { + } else if(!strcasecmp(name, "cycle")) { *out = context->current_cycle; - } else if (name[0] == 'p' && name[1] == 'c') { - //FIXME - //*out = address; + } else if (!strcasecmp(name, "pc")) { + *out = debug->address; + } else if (!strcasecmp(name, "usp")) { + *out = context->status & 0x20 ? context->aregs[8] : context->aregs[7]; + } else if (!strcasecmp(name, "ssp")) { + *out = context->status & 0x20 ? context->aregs[7] : context->aregs[8]; } else { return 0; } @@ -833,7 +837,7 @@ static uint8_t resolve_genesis(debug_context *context, const char *name, uint32_t *out) { genesis_context *gen = context->system; - if (resolve_m68k(gen->m68k, name, out)) { + if (resolve_m68k(context, gen->m68k, name, out)) { return 1; } if (!strcmp(name, "f") || !strcmp(name, "frame")) { @@ -865,7 +869,8 @@ debug_context c = { .resolve = resolve_genesis, .read_mem = read_genesis, - .system = context->system + .system = context->system, + .address = address }; char *after; uint8_t at_least_one = 0;