From 4b314e7e0cd5962141158ecd5ffcf01424a4ba79 Mon Sep 17 00:00:00 2001 From: Mike Pavone Date: Thu, 20 Dec 2012 09:08:13 -0800 Subject: Fix decoding and disassembly of MOVEM --- 68kinst.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to '68kinst.c') diff --git a/68kinst.c b/68kinst.c index 102ff2c..8603259 100644 --- a/68kinst.c +++ b/68kinst.c @@ -418,14 +418,13 @@ uint16_t * m68k_decode(uint16_t * istream, m68kinst * decoded, uint32_t address) decoded->op = M68K_MOVEM; decoded->extra.size = *istream & 0x40 ? OPSIZE_LONG : OPSIZE_WORD; reg = *istream & 0x7; - immed = *(++istream); if(*istream & 0x400) { decoded->dst.addr_mode = MODE_REG; - decoded->dst.params.immed = immed; + decoded->dst.params.immed = *(++istream); istream = m68k_decode_op_ex(istream, opmode, reg, decoded->extra.size, &(decoded->src)); } else { decoded->src.addr_mode = MODE_REG; - decoded->src.params.immed = immed; + decoded->src.params.immed = *(++istream); istream = m68k_decode_op_ex(istream, opmode, reg, decoded->extra.size, &(decoded->dst)); } } else { @@ -1176,8 +1175,14 @@ int m68k_disasm_movem_op(m68k_op_info *decoded, m68k_op_info *other, char *dst, reg = 0; bit = 1; } - strcat(dst, " "); - for (oplen = 1, reg=0; bit < 16 && bit > -1; bit += dir, reg++) { + if (need_comma) { + strcat(dst, ", "); + oplen = 2; + } else { + strcat(dst, " "); + oplen = 1; + } + for (reg=0; bit < 16 && bit > -1; bit += dir, reg++) { if (decoded->params.immed & (1 << bit)) { if (reg > 7) { rtype = "a"; -- cgit v1.2.3