Mercurial > repos > blastem
comparison 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 |
comparison
equal
deleted
inserted
replaced
517:3fc1d145493c | 518:775802dab98f |
---|---|
1467 case 'n': | 1467 case 'n': |
1468 if (inst.op == M68K_RTS) { | 1468 if (inst.op == M68K_RTS) { |
1469 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) { | 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 after = (read_dma_value((context->aregs[7]+2)/2) << 16) | read_dma_value((context->aregs[7]+2)/2 + 1); |
1472 } else if(inst.op == M68K_BCC && inst.extra.cond != COND_FALSE) { | 1472 } else if(m68k_is_noncall_branch(&inst)) { |
1473 if (inst.extra.cond == COND_TRUE) { | 1473 if (inst.op == M68K_BCC && inst.extra.cond != COND_TRUE) { |
1474 after = inst.address + 2 + inst.src.params.immed; | 1474 branch_f = after; |
1475 branch_t = m68k_branch_target(&inst, context->dregs, context->aregs); | |
1476 insert_breakpoint(context, branch_t, (uint8_t *)debugger); | |
1477 } else if(inst.op == M68K_BCC && inst.extra.cond != COND_FALSE) { | |
1478 branch_t = after; | |
1479 branch_f = m68k_branch_target(&inst, context->dregs, context->aregs); | |
1480 insert_breakpoint(context, branch_f, (uint8_t *)debugger); | |
1475 } else { | 1481 } else { |
1476 branch_f = after; | 1482 after = m68k_branch_target(&inst, context->dregs, context->aregs); |
1477 branch_t = inst.address + 2 + inst.src.params.immed; | |
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; | |
1488 } | |
1489 } else if(inst.op == M68K_JMP) { | |
1490 switch(inst.src.addr_mode) | |
1491 { | |
1492 case MODE_AREG_INDIRECT: | |
1493 after = context->aregs[inst.src.params.regs.pri]; | |
1494 break; | |
1495 case MODE_AREG_INDEX_DISP8: { | |
1496 uint8_t sec_reg = inst.src.params.regs.sec >> 1 & 0x7; | |
1497 after = context->aregs[inst.src.params.regs.pri]; | |
1498 uint32_t * regfile = inst.src.params.regs.sec & 0x10 ? context->aregs : context->dregs; | |
1499 if (inst.src.params.regs.sec & 1) { | |
1500 //32-bit index register | |
1501 after += regfile[sec_reg]; | |
1502 } else { | |
1503 //16-bit index register | |
1504 if (regfile[sec_reg] & 0x8000) { | |
1505 after += (0xFFFF0000 | regfile[sec_reg]); | |
1506 } else { | |
1507 after += regfile[sec_reg]; | |
1508 } | |
1509 } | |
1510 after += inst.src.params.regs.displacement; | |
1511 break; | |
1512 } | |
1513 case MODE_PC_DISPLACE: | |
1514 after = inst.src.params.regs.displacement + address + 2; | |
1515 break; | |
1516 case MODE_PC_INDEX_DISP8: { | |
1517 uint8_t sec_reg = inst.src.params.regs.sec >> 1 & 0x7; | |
1518 after = address + 2; | |
1519 uint32_t * regfile = inst.src.params.regs.sec & 0x10 ? context->aregs : context->dregs; | |
1520 if (inst.src.params.regs.sec & 1) { | |
1521 //32-bit index register | |
1522 after += regfile[sec_reg]; | |
1523 } else { | |
1524 //16-bit index register | |
1525 if (regfile[sec_reg] & 0x8000) { | |
1526 after += (0xFFFF0000 | regfile[sec_reg]); | |
1527 } else { | |
1528 after += regfile[sec_reg]; | |
1529 } | |
1530 } | |
1531 after += inst.src.params.regs.displacement; | |
1532 break; | |
1533 } | |
1534 case MODE_ABSOLUTE: | |
1535 case MODE_ABSOLUTE_SHORT: | |
1536 after = inst.src.params.immed; | |
1537 break; | |
1538 } | 1483 } |
1539 } | 1484 } |
1540 insert_breakpoint(context, after, (uint8_t *)debugger); | 1485 insert_breakpoint(context, after, (uint8_t *)debugger); |
1541 debugging = 0; | 1486 debugging = 0; |
1542 break; | 1487 break; |