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);