summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/sm8500/sm8500d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/sm8500/sm8500d.cpp')
-rw-r--r--src/devices/cpu/sm8500/sm8500d.cpp29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/devices/cpu/sm8500/sm8500d.cpp b/src/devices/cpu/sm8500/sm8500d.cpp
index 7a30af1dfbe..e3080d64cef 100644
--- a/src/devices/cpu/sm8500/sm8500d.cpp
+++ b/src/devices/cpu/sm8500/sm8500d.cpp
@@ -80,7 +80,7 @@ const sm8500_disassembler::sm8500dasm sm8500_disassembler::mnemonic[256] = {
/* 50 - 5F */
{zCMP,AM_iR}, {zADD,AM_iR}, {zSUB,AM_iR}, {zADC,AM_iR},
{zSBC,AM_iR}, {zAND,AM_iR}, {zOR,AM_iR}, {zXOR,AM_iR},
- {zMOV, AM_iR}, {zINVLD,0}, {z5A,AM_ii}, {z5B,AM_ii},
+ {zMOV, AM_iR}, {zINVLD,0}, {z5A,AM_5A}, {z5B,AM_5B},
{zDIV,AM_SS}, {zDIV,AM_iS}, {zMOVM,AM_RiR}, {zMOVM,AM_Rii},
/* 60 - 6F */
{zCMPW,AM_SS}, {zADDW,AM_SS}, {zSUBW,AM_SS}, {zADCW,AM_SS},
@@ -147,6 +147,7 @@ offs_t sm8500_disassembler::disassemble(std::ostream &stream, offs_t pc, const d
int8_t offset;
uint16_t ea;
uint16_t ea2;
+ uint16_t ea3;
offs_t pos = pc;
op = opcodes.r8(pos++);
@@ -371,6 +372,32 @@ offs_t sm8500_disassembler::disassemble(std::ostream &stream, offs_t pc, const d
ea += opcodes.r8(pos++);
util::stream_format(stream, "$%04X", ea);
break;
+ case AM_5A:
+ ea = opcodes.r8(pos++);
+ ea2 = opcodes.r8(pos++);
+ switch( ea & 0xC0 ) {
+ case 0x00:
+ util::stream_format(stream, "CMP (rr%02Xh),$%02Xh", ea & 7, ea2); break;
+ case 0x40:
+ util::stream_format(stream, "undef $%04X", ea); break;
+ case 0x80:
+ ea3 = opcodes.r8(pos++);
+ util::stream_format(stream, "CMP (rr%02Xh+%02Xh),$%02Xh", ea & 7, ea2, ea3); break;
+ case 0xC0:
+ util::stream_format(stream, "undef $%04X", ea); break;
+ }
+ break;
+ case AM_5B:
+ ea = opcodes.r8(pos++);
+ ea2 = opcodes.r8(pos++);
+ ea3 = (ea << 8) | ea2;
+ switch( ea & 0xC0 ) {
+ case 0x40:
+ util::stream_format(stream, "MOV (rr%02Xh)+,$%02Xh", ea & 7, ea2); break; // could be AND instead of MOV
+ default:
+ util::stream_format(stream, "undef $%04X", ea3); break;
+ }
+ break;
case AM_ss:
ea = opcodes.r8(pos++);
switch( ea & 0xC0 ) {