Mercurial > repos > blastem
diff blastem.c @ 518:775802dab98f
Refactor debugger next command
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 09 Feb 2014 12:35:27 -0800 |
parents | 3fc1d145493c |
children | 0b21a1a73fb7 |
line wrap: on
line diff
--- a/blastem.c Sun Feb 09 10:29:29 2014 -0800 +++ b/blastem.c Sun Feb 09 12:35:27 2014 -0800 @@ -1469,72 +1469,17 @@ after = (read_dma_value(context->aregs[7]/2) << 16) | read_dma_value(context->aregs[7]/2 + 1); } else if (inst.op == M68K_RTE || inst.op == M68K_RTR) { after = (read_dma_value((context->aregs[7]+2)/2) << 16) | read_dma_value((context->aregs[7]+2)/2 + 1); - } else if(inst.op == M68K_BCC && inst.extra.cond != COND_FALSE) { - if (inst.extra.cond == COND_TRUE) { - after = inst.address + 2 + inst.src.params.immed; - } else { + } else if(m68k_is_noncall_branch(&inst)) { + if (inst.op == M68K_BCC && inst.extra.cond != COND_TRUE) { branch_f = after; - branch_t = inst.address + 2 + inst.src.params.immed; + branch_t = m68k_branch_target(&inst, context->dregs, context->aregs); insert_breakpoint(context, branch_t, (uint8_t *)debugger); - } - } else if(inst.op == M68K_DBCC) { - if (inst.extra.cond == COND_FALSE) { - if (context->dregs[inst.dst.params.regs.pri] & 0xFFFF) { - after = inst.address + 2 + inst.src.params.immed; - } - } else if (inst.extra.cond != COND_TRUE) { + } else if(inst.op == M68K_BCC && inst.extra.cond != COND_FALSE) { branch_t = after; - branch_f = inst.address + 2 + inst.src.params.immed; - } - } else if(inst.op == M68K_JMP) { - switch(inst.src.addr_mode) - { - case MODE_AREG_INDIRECT: - after = context->aregs[inst.src.params.regs.pri]; - break; - case MODE_AREG_INDEX_DISP8: { - uint8_t sec_reg = inst.src.params.regs.sec >> 1 & 0x7; - after = context->aregs[inst.src.params.regs.pri]; - uint32_t * regfile = inst.src.params.regs.sec & 0x10 ? context->aregs : context->dregs; - if (inst.src.params.regs.sec & 1) { - //32-bit index register - after += regfile[sec_reg]; - } else { - //16-bit index register - if (regfile[sec_reg] & 0x8000) { - after += (0xFFFF0000 | regfile[sec_reg]); - } else { - after += regfile[sec_reg]; - } - } - after += inst.src.params.regs.displacement; - break; - } - case MODE_PC_DISPLACE: - after = inst.src.params.regs.displacement + address + 2; - break; - case MODE_PC_INDEX_DISP8: { - uint8_t sec_reg = inst.src.params.regs.sec >> 1 & 0x7; - after = address + 2; - uint32_t * regfile = inst.src.params.regs.sec & 0x10 ? context->aregs : context->dregs; - if (inst.src.params.regs.sec & 1) { - //32-bit index register - after += regfile[sec_reg]; - } else { - //16-bit index register - if (regfile[sec_reg] & 0x8000) { - after += (0xFFFF0000 | regfile[sec_reg]); - } else { - after += regfile[sec_reg]; - } - } - after += inst.src.params.regs.displacement; - break; - } - case MODE_ABSOLUTE: - case MODE_ABSOLUTE_SHORT: - after = inst.src.params.immed; - break; + branch_f = m68k_branch_target(&inst, context->dregs, context->aregs); + insert_breakpoint(context, branch_f, (uint8_t *)debugger); + } else { + after = m68k_branch_target(&inst, context->dregs, context->aregs); } } insert_breakpoint(context, after, (uint8_t *)debugger);