Mercurial > repos > blastem
changeset 526:6fe73296938a
Support setting registers in gdb remote debugger
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 11 Feb 2014 23:19:29 -0800 |
parents | 62860044337d |
children | 7df7f493b3b6 |
files | gdb_remote.c |
diffstat | 1 files changed, 29 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/gdb_remote.c Tue Feb 11 22:38:47 2014 -0800 +++ b/gdb_remote.c Tue Feb 11 23:19:29 2014 -0800 @@ -103,6 +103,16 @@ return status; } +void update_status(m68k_context * context, uint16_t value) +{ + context->status = value >> 8; + for (int i = 4; i >= 0; i--) + { + context->flags[i] = value & 1; + value >>= 1; + } +} + uint8_t read_byte(m68k_context * context, uint32_t address) { uint16_t * word; @@ -277,6 +287,25 @@ gdb_send_command(send_buf); break; } + case 'P': { + char *after = NULL; + unsigned long reg = strtoul(command+1, &after, 16); + uint32_t value = strtoul(after+1, NULL, 16); + + if (reg < 8) { + context->dregs[reg] = value; + } else if (reg < 16) { + context->aregs[reg-8] = value; + } else if (reg == 16) { + update_status(context, value); + } else { + //supporting updates to PC is going to be a pain + gdb_send_command("E01"); + break; + } + gdb_send_command("OK"); + break; + } case 'q': if (!memcmp("Supported", command+1, strlen("Supported"))) { sprintf(send_buf, "PacketSize=%X", (int)bufsize);