Mercurial > repos > blastem
comparison blastem.c @ 517:3fc1d145493c
Properly handle dbcc, rtr and rte in the debugger next command
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 09 Feb 2014 10:29:29 -0800 |
parents | 7f54f1773e84 |
children | 775802dab98f |
comparison
equal
deleted
inserted
replaced
516:7f54f1773e84 | 517:3fc1d145493c |
---|---|
1463 break; | 1463 break; |
1464 } | 1464 } |
1465 printf(format, param, value); | 1465 printf(format, param, value); |
1466 break; | 1466 break; |
1467 case 'n': | 1467 case 'n': |
1468 //TODO: Deal with dbcc, rtr and rte | |
1469 if (inst.op == M68K_RTS) { | 1468 if (inst.op == M68K_RTS) { |
1470 after = (read_dma_value(context->aregs[7]/2) << 16) | read_dma_value(context->aregs[7]/2 + 1); | 1469 after = (read_dma_value(context->aregs[7]/2) << 16) | read_dma_value(context->aregs[7]/2 + 1); |
1470 } else if (inst.op == M68K_RTE || inst.op == M68K_RTR) { | |
1471 after = (read_dma_value((context->aregs[7]+2)/2) << 16) | read_dma_value((context->aregs[7]+2)/2 + 1); | |
1471 } else if(inst.op == M68K_BCC && inst.extra.cond != COND_FALSE) { | 1472 } else if(inst.op == M68K_BCC && inst.extra.cond != COND_FALSE) { |
1472 if (inst.extra.cond = COND_TRUE) { | 1473 if (inst.extra.cond == COND_TRUE) { |
1473 after = inst.address + 2 + inst.src.params.immed; | 1474 after = inst.address + 2 + inst.src.params.immed; |
1474 } else { | 1475 } else { |
1475 branch_f = after; | 1476 branch_f = after; |
1476 branch_t = inst.address + 2 + inst.src.params.immed; | 1477 branch_t = inst.address + 2 + inst.src.params.immed; |
1477 insert_breakpoint(context, branch_t, (uint8_t *)debugger); | 1478 insert_breakpoint(context, branch_t, (uint8_t *)debugger); |
1479 } | |
1480 } else if(inst.op == M68K_DBCC) { | |
1481 if (inst.extra.cond == COND_FALSE) { | |
1482 if (context->dregs[inst.dst.params.regs.pri] & 0xFFFF) { | |
1483 after = inst.address + 2 + inst.src.params.immed; | |
1484 } | |
1485 } else if (inst.extra.cond != COND_TRUE) { | |
1486 branch_t = after; | |
1487 branch_f = inst.address + 2 + inst.src.params.immed; | |
1478 } | 1488 } |
1479 } else if(inst.op == M68K_JMP) { | 1489 } else if(inst.op == M68K_JMP) { |
1480 switch(inst.src.addr_mode) | 1490 switch(inst.src.addr_mode) |
1481 { | 1491 { |
1482 case MODE_AREG_INDIRECT: | 1492 case MODE_AREG_INDIRECT: |