mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
upd78k2d: Fix a whole batch of mistakes with disassembling 01-prefixed alternate-bank instructions (nw)
This commit is contained in:
parent
844c730e90
commit
0a6f7fd033
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user