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;