changeset 3:a4ad0e3e3e0e

Finish mulu.w, muls.w and abcd parameter decoding
author Mike Pavone <pavone@retrodev.com>
date Sat, 03 Nov 2012 22:15:55 -0700
parents 5df303bf72e6
children 6f6a2d7cc889
files 68kinst.c
diffstat 1 files changed, 8 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/68kinst.c	Sat Nov 03 21:38:28 2012 -0700
+++ b/68kinst.c	Sat Nov 03 22:15:55 2012 -0700
@@ -407,9 +407,15 @@
 			if ((*istream & 0xC0) == 0xC0) {
 				decoded->op = M68K_MULS;
 				decoded->extra.size = OPSIZE_WORD;
+				decoded->dst.addr_mode = MODE_REG;
+				decoded->dst.params.regs.pri = m68K_reg_quick_field(*istream);
 				istream = m68k_decode_op(istream, OPSIZE_WORD, &(decoded->src));
 			} else if(!(*istream & 0xF0)) {
 				decoded->op = M68K_ABCD;
+				decoded->extra.size = OPSIZE_BYTE;
+				decoded->src.params.regs.pri = *istream & 0x7;
+				decoded->dst.params.regs.pri = m68K_reg_quick_field(*istream);
+				decoded->dst.addr_mode = decoded->src.addr_mode = (*istream & 8) ? MODE_AREG_PREDEC : MODE_REG;
 			} else if(!(*istream & 0x30)) {
 				decoded->op = M68K_EXG;
 				decoded->extra.size = OPSIZE_LONG;
@@ -436,6 +442,8 @@
 			if ((*istream & 0xC0) == 0xC0) {
 				decoded->op = M68K_MULU;
 				decoded->extra.size = OPSIZE_WORD;
+				decoded->dst.addr_mode = MODE_REG;
+				decoded->dst.params.regs.pri = m68K_reg_quick_field(*istream);
 				istream = m68k_decode_op(istream, OPSIZE_WORD, &(decoded->src));
 			} else {
 				decoded->op = M68K_AND;