summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2012-11-03 22:15:55 -0700
committerMike Pavone <pavone@retrodev.com>2012-11-03 22:15:55 -0700
commit89bcfa1995c34802321e19a244d9b3d025c1ad39 (patch)
tree3ab850d45d0c2323694a9c07b4e3ca904137a7b7
parentc0b3f8d6a5c1361201539c9f48a76e8aa67fd79e (diff)
Finish mulu.w, muls.w and abcd parameter decoding
-rw-r--r--68kinst.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/68kinst.c b/68kinst.c
index af52049..b3b5fc1 100644
--- a/68kinst.c
+++ b/68kinst.c
@@ -407,9 +407,15 @@ uint16_t * m68K_decode(uint16_t * istream, m68kinst * decoded)
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 @@ uint16_t * m68K_decode(uint16_t * istream, m68kinst * decoded)
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;