summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/mn1880/mn1880d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/mn1880/mn1880d.cpp')
-rw-r--r--src/devices/cpu/mn1880/mn1880d.cpp18
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)";