diff options
author | Mike Pavone <pavone@retrodev.com> | 2012-11-03 22:15:55 -0700 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2012-11-03 22:15:55 -0700 |
commit | 89bcfa1995c34802321e19a244d9b3d025c1ad39 (patch) | |
tree | 3ab850d45d0c2323694a9c07b4e3ca904137a7b7 /68kinst.c | |
parent | c0b3f8d6a5c1361201539c9f48a76e8aa67fd79e (diff) |
Finish mulu.w, muls.w and abcd parameter decoding
Diffstat (limited to '68kinst.c')
-rw-r--r-- | 68kinst.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -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; |