summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/tms32051/dis32051.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/tms32051/dis32051.cpp')
-rw-r--r--src/devices/cpu/tms32051/dis32051.cpp29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/devices/cpu/tms32051/dis32051.cpp b/src/devices/cpu/tms32051/dis32051.cpp
index d634ebd37c4..16872495e5d 100644
--- a/src/devices/cpu/tms32051/dis32051.cpp
+++ b/src/devices/cpu/tms32051/dis32051.cpp
@@ -128,9 +128,10 @@ void tms32051_disassembler::print_condition_codes(bool pp, int zl, int cv, int t
}
}
-void tms32051_disassembler::dasm_group_be(uint16_t opcode, offs_t &npc, const data_buffer &opcodes)
+uint32_t tms32051_disassembler::dasm_group_be(uint16_t opcode, offs_t &npc, const data_buffer &opcodes)
{
int subop = opcode & 0xff;
+ uint32_t flags = 0;
switch (subop)
{
@@ -186,8 +187,8 @@ void tms32051_disassembler::dasm_group_be(uint16_t opcode, offs_t &npc, const da
case 0x4d: util::stream_format(*output, "setc xf"); break;
case 0x4e: util::stream_format(*output, "clrc carry"); break;
case 0x4f: util::stream_format(*output, "setc carry"); break;
- case 0x51: util::stream_format(*output, "trap"); break;
- case 0x52: util::stream_format(*output, "nmi"); break;
+ case 0x51: util::stream_format(*output, "trap"); flags = STEP_OVER; break;
+ case 0x52: util::stream_format(*output, "nmi"); flags = STEP_OVER; break;
case 0x58: util::stream_format(*output, "zpr"); break;
case 0x59: util::stream_format(*output, "zap"); break;
case 0x5a: util::stream_format(*output, "sath"); break;
@@ -200,7 +201,7 @@ void tms32051_disassembler::dasm_group_be(uint16_t opcode, offs_t &npc, const da
case 0x74: case 0x75: case 0x76: case 0x77:
case 0x78: case 0x79: case 0x7a: case 0x7b:
case 0x7c: case 0x7d: case 0x7e: case 0x7f:
- util::stream_format(*output, "intr %d", opcode & 0x1f); break;
+ util::stream_format(*output, "intr %d", opcode & 0x1f); flags = STEP_OVER; break;
case 0x80: util::stream_format(*output, "mpy #%04X", FETCH(npc, opcodes)); break;
case 0x81: util::stream_format(*output, "and #%04X", FETCH(npc, opcodes) << 16); break;
@@ -212,6 +213,7 @@ void tms32051_disassembler::dasm_group_be(uint16_t opcode, offs_t &npc, const da
default: util::stream_format(*output, "??? (group be)"); break;
}
+ return flags;
}
void tms32051_disassembler::dasm_group_bf(uint16_t opcode, offs_t &npc, const data_buffer &opcodes)
@@ -376,11 +378,11 @@ offs_t tms32051_disassembler::disassemble(std::ostream &stream, offs_t pc, const
case 0x78: util::stream_format(*output, "adrk #%02X", opcode & 0xff); break;
case 0x79: util::stream_format(*output, "b %04X, %s", FETCH(npc, opcodes), GET_ADDRESS(1, address)); break;
case 0x7a: util::stream_format(*output, "call %04X, %s", FETCH(npc, opcodes), GET_ADDRESS(1, address)); flags = STEP_OVER; break;
- case 0x7b: util::stream_format(*output, "banz %04X, %s", FETCH(npc, opcodes), GET_ADDRESS(1, address)); break;
+ case 0x7b: util::stream_format(*output, "banz %04X, %s", FETCH(npc, opcodes), GET_ADDRESS(1, address)); flags = STEP_COND; break;
case 0x7c: util::stream_format(*output, "sbrk #%02X", opcode & 0xff); break;
case 0x7d: util::stream_format(*output, "bd %04X, %s", FETCH(npc, opcodes), GET_ADDRESS(1, address)); break;
- case 0x7e: util::stream_format(*output, "calld %04X, %s", FETCH(npc, opcodes), GET_ADDRESS(1, address)); flags = STEP_OVER; break;
- case 0x7f: util::stream_format(*output, "banzd %04X, %s", FETCH(npc, opcodes), GET_ADDRESS(1, address)); break;
+ case 0x7e: util::stream_format(*output, "calld %04X, %s", FETCH(npc, opcodes), GET_ADDRESS(1, address)); flags = STEP_OVER | step_over_extra(1); break;
+ case 0x7f: util::stream_format(*output, "banzd %04X, %s", FETCH(npc, opcodes), GET_ADDRESS(1, address)); flags = STEP_COND | step_over_extra(1); break;
case 0x80: case 0x81: case 0x82: case 0x83:
case 0x84: case 0x85: case 0x86: case 0x87:
@@ -454,7 +456,7 @@ offs_t tms32051_disassembler::disassemble(std::ostream &stream, offs_t pc, const
util::stream_format(*output, "ldp #%03X", opcode & 0x1ff);
break;
}
- case 0xbe: dasm_group_be(opcode, npc, opcodes); break;
+ case 0xbe: flags = dasm_group_be(opcode, npc, opcodes); break;
case 0xbf: dasm_group_bf(opcode, npc, opcodes); break;
case 0xe0: case 0xe1: case 0xe2: case 0xe3:
@@ -467,6 +469,7 @@ offs_t tms32051_disassembler::disassemble(std::ostream &stream, offs_t pc, const
util::stream_format(*output, "bcnd %04X", FETCH(npc, opcodes));
print_condition_codes(true, zl, cv, tp);
+ flags = STEP_COND;
break;
}
@@ -482,6 +485,7 @@ offs_t tms32051_disassembler::disassemble(std::ostream &stream, offs_t pc, const
util::stream_format(*output, "xc %d", n);
print_condition_codes(true, zl, cv, tp);
+ flags = STEP_COND;
break;
}
@@ -495,6 +499,7 @@ offs_t tms32051_disassembler::disassemble(std::ostream &stream, offs_t pc, const
util::stream_format(*output, "cc %04X", FETCH(npc, opcodes));
print_condition_codes(true, zl, cv, tp);
+ flags = STEP_OVER | STEP_COND;
break;
}
@@ -509,13 +514,14 @@ offs_t tms32051_disassembler::disassemble(std::ostream &stream, offs_t pc, const
if (opcode == 0xef00)
{
util::stream_format(*output, "ret");
+ flags = STEP_OUT;
}
else
{
util::stream_format(*output, "retc ");
print_condition_codes(false, zl, cv, tp);
+ flags = STEP_OUT | STEP_COND;
}
- flags = STEP_OUT;
break;
}
@@ -529,6 +535,7 @@ offs_t tms32051_disassembler::disassemble(std::ostream &stream, offs_t pc, const
util::stream_format(*output, "bcndd %04X", FETCH(npc, opcodes));
print_condition_codes(true, zl, cv, tp);
+ flags = STEP_COND | step_over_extra(1);
break;
}
@@ -542,6 +549,7 @@ offs_t tms32051_disassembler::disassemble(std::ostream &stream, offs_t pc, const
util::stream_format(*output, "ccd %04X", FETCH(npc, opcodes));
print_condition_codes(true, zl, cv, tp);
+ flags = STEP_OVER | STEP_COND | step_over_extra(1);
break;
}
@@ -556,13 +564,14 @@ offs_t tms32051_disassembler::disassemble(std::ostream &stream, offs_t pc, const
if (opcode == 0xff00)
{
util::stream_format(*output, "retd");
+ flags = STEP_OUT | step_over_extra(1);
}
else
{
util::stream_format(*output, "retcd ");
print_condition_codes(false, zl, cv, tp);
+ flags = STEP_OUT | STEP_COND | step_over_extra(1);
}
- flags = STEP_OUT;
break;
}