diff options
Diffstat (limited to 'src/devices/cpu/mn1880/mn1880d.cpp')
-rw-r--r-- | src/devices/cpu/mn1880/mn1880d.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/devices/cpu/mn1880/mn1880d.cpp b/src/devices/cpu/mn1880/mn1880d.cpp index f526a193727..048828bb842 100644 --- a/src/devices/cpu/mn1880/mn1880d.cpp +++ b/src/devices/cpu/mn1880/mn1880d.cpp @@ -11,15 +11,17 @@ reverse engineering (which include CALL XP actually being provided by the MN1880 despite the MN1870 manual claiming it as exclusive). - Since almost nothing about MN1860 is known except that it seems to be - closely related to the MN1880, its several additional instructions - have not been completely identified and MN1860 disassembler output - should therefore be considered preliminary. + Almost nothing about MN1860 is known except that it seems to be + closely related to the MN1880. The MN1880 and MN1860 opcode maps are + currently believed to be complete; it remains possible that a few + rarely-used instructions are missing, or that some mnemonics were + renamed. The direct flag (bit 5 of the flag status register) is the key to data memory addressing. When DF is cleared, the upper bytes of direct addresses are zeroed; when DF is set, the upper address bytes are taken from YPh for source operands and XPh for destination operands. + MN1860 appears to have a somewhat more complex bankswitching model. Note that the REP opcode causes a temporary mode switch, decoding up to 15 extra sets of operands for the following instruction. @@ -157,8 +159,8 @@ const char *const mn1860_disassembler::s_inst_names[256] = "call", "call", "call", "call", "call", "call", "call", "call", "br", "br", "br", "br", "br", "br", "br", "br", "br", "br", "br", "br", "br", "br", "br", "br", - nullptr, "asll", "divl", "pop", "pop", "pop", "pop", "pop", - nullptr, "asrl", "mull", "push", "push", "push", "push", "push", + "roll", "asll", "divl", "pop", "pop", "pop", "pop", "pop", + "rorl", "asrl", "mull", "push", "push", "push", "push", "push", "subcl", "div", "subcl", "subcl", "xch", "xch", "xch", "xch", "addcl", "mul", "addcl", "addcl", "mov", "mov", "mov", "mov", "cmp", "cmp", "cmp", "cmp", "xch", "xch", nullptr, "xch", @@ -303,10 +305,10 @@ void mn1880_disassembler::dasm_operands(std::ostream &stream, u8 opcode, offs_t stream << ", "; format_imm(stream, opcodes.r8(pc++)); } - else if (opcode < 0x50 || (opcode & 0xf7) == 0xb5 || ((opcode & 0xf7) == 0xb1 && m_inst_names[opcode][0] != 'p') || ((opcode & 0xf7) == 0xc3 && m_inst_names[opcode][4] == '\0')) + else if (opcode < 0x50 || (opcode & 0xf7) == 0xb5 || ((opcode & 0xf6) == 0xb0 && m_inst_names[opcode][3] == 'l') || ((opcode & 0xf7) == 0xc3 && m_inst_names[opcode][4] == '\0')) { // Unary operations - if (BIT(opcode, 0)) + if (BIT(opcode, 0) || opcode >= 0xb0) format_direct(stream, opcodes.r8(pc++)); else stream << "(xp)"; |