Mercurial > repos > blastem
changeset 68:1c9a4052a2c0
Fix decoding and disassembly of MOVEM
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 20 Dec 2012 09:08:13 -0800 |
parents | 534eb4976423 |
children | 36f1133837d0 |
files | 68kinst.c |
diffstat | 1 files changed, 10 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/68kinst.c Thu Dec 20 00:56:33 2012 -0800 +++ b/68kinst.c Thu Dec 20 09:08:13 2012 -0800 @@ -418,14 +418,13 @@ 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 @@ 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";