Mercurial > repos > blastem
comparison gdb_remote.c @ 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 | 92606a032d56 |
comparison
equal
deleted
inserted
replaced
525:62860044337d | 526:6fe73296938a |
---|---|
99 { | 99 { |
100 status <<= 1; | 100 status <<= 1; |
101 status |= context->flags[i]; | 101 status |= context->flags[i]; |
102 } | 102 } |
103 return status; | 103 return status; |
104 } | |
105 | |
106 void update_status(m68k_context * context, uint16_t value) | |
107 { | |
108 context->status = value >> 8; | |
109 for (int i = 4; i >= 0; i--) | |
110 { | |
111 context->flags[i] = value & 1; | |
112 value >>= 1; | |
113 } | |
104 } | 114 } |
105 | 115 |
106 uint8_t read_byte(m68k_context * context, uint32_t address) | 116 uint8_t read_byte(m68k_context * context, uint32_t address) |
107 { | 117 { |
108 uint16_t * word; | 118 uint16_t * word; |
273 } else { | 283 } else { |
274 send_buf[0] = 0; | 284 send_buf[0] = 0; |
275 } | 285 } |
276 send_buf[8] = 0; | 286 send_buf[8] = 0; |
277 gdb_send_command(send_buf); | 287 gdb_send_command(send_buf); |
288 break; | |
289 } | |
290 case 'P': { | |
291 char *after = NULL; | |
292 unsigned long reg = strtoul(command+1, &after, 16); | |
293 uint32_t value = strtoul(after+1, NULL, 16); | |
294 | |
295 if (reg < 8) { | |
296 context->dregs[reg] = value; | |
297 } else if (reg < 16) { | |
298 context->aregs[reg-8] = value; | |
299 } else if (reg == 16) { | |
300 update_status(context, value); | |
301 } else { | |
302 //supporting updates to PC is going to be a pain | |
303 gdb_send_command("E01"); | |
304 break; | |
305 } | |
306 gdb_send_command("OK"); | |
278 break; | 307 break; |
279 } | 308 } |
280 case 'q': | 309 case 'q': |
281 if (!memcmp("Supported", command+1, strlen("Supported"))) { | 310 if (!memcmp("Supported", command+1, strlen("Supported"))) { |
282 sprintf(send_buf, "PacketSize=%X", (int)bufsize); | 311 sprintf(send_buf, "PacketSize=%X", (int)bufsize); |