changeset 163:5559616e6bd8

Fix decoding of movep
author Mike Pavone <pavone@retrodev.com>
date Sat, 05 Jan 2013 02:46:55 -0800
parents eba78ad49a11
children afbfb0ac0256
files 68kinst.c
diffstat 1 files changed, 21 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/68kinst.c	Sat Jan 05 02:18:31 2013 -0800
+++ b/68kinst.c	Sat Jan 05 02:46:55 2013 -0800
@@ -122,7 +122,26 @@
 	switch(optype)
 	{
 	case BIT_MOVEP_IMMED:
-		if (*istream & 0x100) {
+		if ((*istream & 0x138) == 0x108) {
+			//MOVEP
+			decoded->op = M68K_MOVEP;
+			decoded->extra.size = *istream & 0x40 ? OPSIZE_LONG : OPSIZE_WORD;
+			if (*istream & 0x80) {
+				//memory dest
+				decoded->src.addr_mode = MODE_REG;
+				decoded->src.params.regs.pri = m68k_reg_quick_field(*istream);
+				decoded->dst.addr_mode = MODE_AREG_DISPLACE;
+				decoded->dst.params.regs.pri = *istream & 0x7;
+				decoded->dst.params.regs.displacement = *(++istream);
+			} else {
+				//memory source
+				decoded->dst.addr_mode = MODE_REG;
+				decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream);
+				decoded->src.addr_mode = MODE_AREG_DISPLACE;
+				decoded->src.params.regs.pri = *istream & 0x7;
+				decoded->src.params.regs.displacement = *(++istream);
+			}
+		} else if (*istream & 0x100) {
 			//BTST, BCHG, BCLR, BSET
 			switch ((*istream >> 6) & 0x3)
 			{
@@ -371,23 +390,7 @@
 				istream = m68k_decode_op_ex(istream, opmode, reg, size, &(decoded->dst));
 				break;
 			case 7:
-				//MOVEP
-				decoded->op = M68K_MOVEP;
-				decoded->extra.size = *istream & 0x40 ? OPSIZE_LONG : OPSIZE_WORD;
-				if (*istream & 0x80) {
-					//memory dest
-					decoded->src.addr_mode = MODE_REG;
-					decoded->src.params.regs.pri = m68k_reg_quick_field(*istream);
-					decoded->dst.addr_mode = MODE_AREG_DISPLACE;
-					decoded->dst.params.regs.pri = *istream & 0x7;
-				} else {
-					//memory source
-					decoded->dst.addr_mode = MODE_REG;
-					decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream);
-					decoded->src.addr_mode = MODE_AREG_DISPLACE;
-					decoded->src.params.regs.pri = *istream & 0x7;
-				}
-				immed = *(++istream);
+				
 				
 				break;
 			}