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";