summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-02-25 10:20:22 -0500
committer AJR <ajrhacker@users.noreply.github.com>2020-02-25 10:20:44 -0500
commit0a6f7fd033c36bb5de9fcf4b43f2417e37584970 (patch)
tree6bf602b7e48aa3130cdbdcfb1584b7385f55a7a0
parent844c730e903098b411519ae0c8a467455c892ed0 (diff)
upd78k2d: Fix a whole batch of mistakes with disassembling 01-prefixed alternate-bank instructions (nw)
-rw-r--r--src/devices/cpu/upd78k/upd78k2d.cpp24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/devices/cpu/upd78k/upd78k2d.cpp b/src/devices/cpu/upd78k/upd78k2d.cpp
index 79ab19ec907..9016faea8b3 100644
--- a/src/devices/cpu/upd78k/upd78k2d.cpp
+++ b/src/devices/cpu/upd78k/upd78k2d.cpp
@@ -13,7 +13,7 @@ offs_t upd78k2_disassembler::dasm_01xx(std::ostream &stream, u8 op2, offs_t pc,
{
if (op2 == 0x05)
{
- u8 op3 = opcodes.r8(pc + 3);
+ u8 op3 = opcodes.r8(pc + 2);
if ((op3 & 0xed) == 0x89)
{
util::stream_format(stream, "%-8s&[%s]", BIT(op3, 4) ? "ROL4" : "ROR4", BIT(op3, 1) ? "HL" : "DE");
@@ -33,10 +33,10 @@ offs_t upd78k2_disassembler::dasm_01xx(std::ostream &stream, u8 op2, offs_t pc,
}
else if (op2 == 0x06)
{
- u8 op3 = opcodes.r8(pc + 3);
+ u8 op3 = opcodes.r8(pc + 2);
if ((op3 & 0x70) < 0x30 && (BIT(op3, 7) ? (op3 & 0x0f) == 0 : BIT(op3, 3) || (op3 & 0x03) == 0))
{
- util::stream_format(stream, "%-8s", BIT(op3, 3) ? s_alu_ops[op3 & 0x07] : BIT(op2, 2) ? "XCH" : "MOV");
+ util::stream_format(stream, "%-8s", BIT(op3, 3) ? s_alu_ops[op3 & 0x07] : BIT(op3, 2) ? "XCH" : "MOV");
if (!BIT(op3, 7))
stream << "A,";
stream << "&";
@@ -50,7 +50,7 @@ offs_t upd78k2_disassembler::dasm_01xx(std::ostream &stream, u8 op2, offs_t pc,
}
else if (op2 == 0x09)
{
- u8 op3 = opcodes.r8(pc + 3);
+ u8 op3 = opcodes.r8(pc + 2);
if ((op3 & 0xfe) == 0xf0)
{
util::stream_format(stream, "%-8s", "MOV");
@@ -67,18 +67,18 @@ offs_t upd78k2_disassembler::dasm_01xx(std::ostream &stream, u8 op2, offs_t pc,
}
else if (op2 == 0x0a)
{
- u8 op3 = opcodes.r8(pc + 3);
+ u8 op3 = opcodes.r8(pc + 2);
if (!BIT(op3, 6) && (BIT(op3, 7) ? (op3 & 0x0f) == 0 : BIT(op3, 3) || (op3 & 0x03) == 0))
{
- util::stream_format(stream, "%-8s", BIT(op2, 3) ? s_alu_ops[op3 & 0x07] : BIT(op3, 2) ? "XCH" : "MOV");
- if (!BIT(op2, 7))
+ util::stream_format(stream, "%-8s", BIT(op3, 3) ? s_alu_ops[op3 & 0x07] : BIT(op3, 2) ? "XCH" : "MOV");
+ if (!BIT(op3, 7))
stream << "A,";
stream << "&";
- if (BIT(op2, 4))
- format_ix_base16(stream, BIT(op2, 5) ? "B" : "A", opcodes.r16(pc + 2));
+ if (BIT(op3, 4))
+ format_ix_base16(stream, BIT(op3, 5) ? "B" : "A", opcodes.r16(pc + 3));
else
- format_ix_disp16(stream, BIT(op2, 5) ? "HL" : "DE", opcodes.r16(pc + 2));
- if (BIT(op2, 7))
+ format_ix_disp16(stream, BIT(op3, 5) ? "HL" : "DE", opcodes.r16(pc + 3));
+ if (BIT(op3, 7))
stream << ",A";
return 5 | SUPPORTED;
}
@@ -87,7 +87,7 @@ offs_t upd78k2_disassembler::dasm_01xx(std::ostream &stream, u8 op2, offs_t pc,
}
else if (op2 == 0x16)
{
- u8 op3 = opcodes.r8(pc + 3);
+ u8 op3 = opcodes.r8(pc + 2);
if ((op3 & 0x60) != 0x60 && (BIT(op3, 7) ? (op3 & 0x0f) == 0x00 : BIT(op3, 3) || (op3 & 0x03) == 0x00))
{
util::stream_format(stream, "%-8s", BIT(op3, 3) ? s_alu_ops[op3 & 0x07] : BIT(op3, 2) ? "XCH" : "MOV");