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