diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2020-02-17 22:44:42 -0500 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2020-02-17 22:44:42 -0500 |
commit | d5f869ab976e127291588b58b20223c1ef914e97 (patch) | |
tree | 5a044e3bec84fb49cd01f28b6b7ad374cde1780a /src/devices/cpu | |
parent | 09e068aaad8d0d6cd9a79fb534a9b403091a59cb (diff) |
upd78k3d: Correct indexing for 0A-prefixed instructions; misc. other notes & formatting adjustments (nw)
Diffstat (limited to 'src/devices/cpu')
-rw-r--r-- | src/devices/cpu/upd78k/upd78k1d.cpp | 2 | ||||
-rw-r--r-- | src/devices/cpu/upd78k/upd78k2d.cpp | 4 | ||||
-rw-r--r-- | src/devices/cpu/upd78k/upd78k3d.cpp | 12 | ||||
-rw-r--r-- | src/devices/cpu/upd78k/upd78kd.cpp | 7 | ||||
-rw-r--r-- | src/devices/cpu/upd78k/upd78kd.h | 1 |
5 files changed, 17 insertions, 9 deletions
diff --git a/src/devices/cpu/upd78k/upd78k1d.cpp b/src/devices/cpu/upd78k/upd78k1d.cpp index 07925111327..2760056366f 100644 --- a/src/devices/cpu/upd78k/upd78k1d.cpp +++ b/src/devices/cpu/upd78k/upd78k1d.cpp @@ -253,7 +253,7 @@ offs_t upd78k1_disassembler::dasm_0axx(std::ostream &stream, u8 op2, offs_t pc, util::stream_format(stream, "%-8s", BIT(op2, 3) ? s_alu_ops[op2 & 0x07] : BIT(op2, 2) ? "XCH" : "MOV"); if (!BIT(op2, 7)) stream << "A,"; - format_ix_disp16(stream, BIT(op2, 5) ? "B" : "A", opcodes.r16(pc + 2)); + format_ix_base16(stream, BIT(op2, 5) ? "B" : "A", opcodes.r16(pc + 2)); if (BIT(op2, 7)) stream << ",A"; return 4 | SUPPORTED; diff --git a/src/devices/cpu/upd78k/upd78k2d.cpp b/src/devices/cpu/upd78k/upd78k2d.cpp index 75abce3425f..79ab19ec907 100644 --- a/src/devices/cpu/upd78k/upd78k2d.cpp +++ b/src/devices/cpu/upd78k/upd78k2d.cpp @@ -75,7 +75,7 @@ offs_t upd78k2_disassembler::dasm_01xx(std::ostream &stream, u8 op2, offs_t pc, stream << "A,"; stream << "&"; if (BIT(op2, 4)) - format_ix_disp16(stream, BIT(op2, 5) ? "B" : "A", opcodes.r16(pc + 2)); + format_ix_base16(stream, BIT(op2, 5) ? "B" : "A", opcodes.r16(pc + 2)); else format_ix_disp16(stream, BIT(op2, 5) ? "HL" : "DE", opcodes.r16(pc + 2)); if (BIT(op2, 7)) @@ -180,7 +180,7 @@ offs_t upd78k2_disassembler::dasm_0axx(std::ostream &stream, u8 op2, offs_t pc, if (!BIT(op2, 7)) stream << "A,"; if (BIT(op2, 4)) - format_ix_disp16(stream, BIT(op2, 5) ? "B" : "A", opcodes.r16(pc + 2)); + format_ix_base16(stream, BIT(op2, 5) ? "B" : "A", opcodes.r16(pc + 2)); else format_ix_disp16(stream, BIT(op2, 5) ? "HL" : "DE", opcodes.r16(pc + 2)); if (BIT(op2, 7)) diff --git a/src/devices/cpu/upd78k/upd78k3d.cpp b/src/devices/cpu/upd78k/upd78k3d.cpp index 13ad5f2772f..b7540b950c9 100644 --- a/src/devices/cpu/upd78k/upd78k3d.cpp +++ b/src/devices/cpu/upd78k/upd78k3d.cpp @@ -502,10 +502,10 @@ offs_t upd78k3_disassembler::dasm_0axx(std::ostream &stream, u8 op2, offs_t pc, else if (!BIT(op2, 7)) stream << "A,"; - if (BIT(op2, 5)) - format_ix_disp16(stream, BIT(op2, 4) ? "B" : "A", opcodes.r16(pc + 2)); + if (BIT(op2, 4)) + format_ix_base16(stream, BIT(op2, 5) ? "B" : "A", opcodes.r16(pc + 2)); else - format_ix_disp16(stream, m_ix_bases[(op2 & 0x10) >> 3], opcodes.r16(pc + 2)); + format_ix_disp16(stream, m_ix_bases[(op2 & 0x20) >> 4], opcodes.r16(pc + 2)); if ((op2 & 0x8b) == 0x81) stream << ",AX"; @@ -897,7 +897,7 @@ offs_t upd78k3_disassembler::disassemble(std::ostream &stream, offs_t pc, const { util::stream_format(stream, "%-8s", BIT(op, 1) ? "PUSHU" : "PUSH"); if (post == 0) - stream << "none"; + stream << "0"; // none else for (int n = 7; n >= 0; n--) { if (BIT(post, n)) @@ -916,7 +916,7 @@ offs_t upd78k3_disassembler::disassemble(std::ostream &stream, offs_t pc, const { util::stream_format(stream, "%-8s", BIT(op, 1) ? "POPU" : "POP"); if (post == 0) - stream << "none"; + stream << "0"; // none else for (int n = 0; n < 8; n++) { if (BIT(post, n)) @@ -1192,7 +1192,7 @@ offs_t upd78312_disassembler::dasm_07xx(std::ostream &stream, u8 op2, offs_t pc, offs_t upd78312_disassembler::dasm_09xx(std::ostream &stream, u8 op2, offs_t pc, const upd78312_disassembler::data_buffer &opcodes) { - // STBC and WDM are moved; no RETCSB + // STBC and WDM are moved; no RETCSB (also no absolute MOVW except on µPD78310A/312A) if (op2 == 0x42 || op2 == 0x44) return dasm_09xx_sfrmov(stream, op2, pc, opcodes); else if ((op2 & 0xd0) != 0xc0) diff --git a/src/devices/cpu/upd78k/upd78kd.cpp b/src/devices/cpu/upd78k/upd78kd.cpp index 2193948169b..a7c91c488ce 100644 --- a/src/devices/cpu/upd78k/upd78kd.cpp +++ b/src/devices/cpu/upd78k/upd78kd.cpp @@ -64,6 +64,13 @@ void upd78k_family_disassembler::format_ix_disp16(std::ostream &stream, const ch } } +void upd78k_family_disassembler::format_ix_base16(std::ostream &stream, const char *r, u16 d) +{ + if (d >= 0xa000) + stream << "0"; + util::stream_format(stream, "%04XH[%s]", d, r); +} + void upd78k_family_disassembler::format_abs16(std::ostream &stream, u16 addr) { if (addr < 0xa000) diff --git a/src/devices/cpu/upd78k/upd78kd.h b/src/devices/cpu/upd78k/upd78kd.h index 5ebebdd17d7..2dabff37edc 100644 --- a/src/devices/cpu/upd78k/upd78kd.h +++ b/src/devices/cpu/upd78k/upd78kd.h @@ -19,6 +19,7 @@ protected: void format_imm16(std::ostream &stream, u16 d); void format_ix_disp8(std::ostream &stream, const char *r, u8 d); void format_ix_disp16(std::ostream &stream, const char *r, u16 d); + void format_ix_base16(std::ostream &stream, const char *r, u16 d); void format_abs16(std::ostream &stream, u16 addr); void format_jdisp8(std::ostream &stream, offs_t pc, u8 disp); void format_sfr(std::ostream &stream, u8 addr); |