comparison gdb_remote.c @ 2133:8554751f17b5

Remove use of get_native_pointer in 68K instruction decoding in preparation for word RAM interleaving
author Michael Pavone <pavone@retrodev.com>
date Thu, 17 Mar 2022 22:41:42 -0700
parents f80c6111e1ae
children 3350b3c8faa8
comparison
equal deleted inserted replaced
2132:7451f970ee66 2133:8554751f17b5
184 //TODO: implement resuming at an arbitrary address 184 //TODO: implement resuming at an arbitrary address
185 goto not_impl; 185 goto not_impl;
186 } 186 }
187 m68kinst inst; 187 m68kinst inst;
188 genesis_context *gen = context->system; 188 genesis_context *gen = context->system;
189 uint16_t * pc_ptr = get_native_pointer(pc, (void **)context->mem_pointers, &context->options->gen); 189 uint32_t after = m68k_decode(m68k_instruction_fetch, context, &inst, pc & 0xFFFFFF);
190 if (!pc_ptr) {
191 fatal_error("Entered gdb remote debugger stub at address %X\n", pc);
192 }
193 uint16_t * after_pc = m68k_decode(pc_ptr, &inst, pc & 0xFFFFFF);
194 uint32_t after = pc + (after_pc-pc_ptr)*2;
195 190
196 if (inst.op == M68K_RTS) { 191 if (inst.op == M68K_RTS) {
197 after = (read_dma_value(context->aregs[7]/2) << 16) | read_dma_value(context->aregs[7]/2 + 1); 192 after = (read_dma_value(context->aregs[7]/2) << 16) | read_dma_value(context->aregs[7]/2 + 1);
198 } else if (inst.op == M68K_RTE || inst.op == M68K_RTR) { 193 } else if (inst.op == M68K_RTE || inst.op == M68K_RTR) {
199 after = (read_dma_value((context->aregs[7]+2)/2) << 16) | read_dma_value((context->aregs[7]+2)/2 + 1); 194 after = (read_dma_value((context->aregs[7]+2)/2) << 16) | read_dma_value((context->aregs[7]+2)/2 + 1);
412 break; 407 break;
413 case 's': 408 case 's':
414 case 'S': { 409 case 'S': {
415 m68kinst inst; 410 m68kinst inst;
416 genesis_context *gen = context->system; 411 genesis_context *gen = context->system;
417 uint16_t * pc_ptr = get_native_pointer(pc, (void **)context->mem_pointers, &context->options->gen); 412 uint32_t after = m68k_decode(m68k_instruction_fetch, context, &inst, pc & 0xFFFFFF);
418 if (!pc_ptr) {
419 fatal_error("Entered gdb remote debugger stub at address %X\n", pc);
420 }
421 uint16_t * after_pc = m68k_decode(pc_ptr, &inst, pc & 0xFFFFFF);
422 uint32_t after = pc + (after_pc-pc_ptr)*2;
423 413
424 if (inst.op == M68K_RTS) { 414 if (inst.op == M68K_RTS) {
425 after = (read_dma_value(context->aregs[7]/2) << 16) | read_dma_value(context->aregs[7]/2 + 1); 415 after = (read_dma_value(context->aregs[7]/2) << 16) | read_dma_value(context->aregs[7]/2 + 1);
426 } else if (inst.op == M68K_RTE || inst.op == M68K_RTR) { 416 } else if (inst.op == M68K_RTE || inst.op == M68K_RTR) {
427 after = (read_dma_value((context->aregs[7]+2)/2) << 16) | read_dma_value((context->aregs[7]+2)/2 + 1); 417 after = (read_dma_value((context->aregs[7]+2)/2) << 16) | read_dma_value((context->aregs[7]+2)/2 + 1);