diff options
author | Mike Pavone <pavone@retrodev.com> | 2012-11-15 00:52:53 -0800 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2012-11-15 00:52:53 -0800 |
commit | a7c5440d973a2c7c16eb948360de123b3e5f12b7 (patch) | |
tree | 19b6dd1fed6ae667f27efcc3bfd942a0d3539f42 /68kinst.c | |
parent | 411523d046099976b0ba3245c20ce8cdf2696f7c (diff) |
Add mising bit instructions to decoder. Add test assembly file containing most distinct instructions.
Diffstat (limited to '68kinst.c')
-rw-r--r-- | 68kinst.c | 25 |
1 files changed, 24 insertions, 1 deletions
@@ -123,8 +123,31 @@ uint16_t * m68K_decode(uint16_t * istream, m68kinst * decoded) } decoded->src.addr_mode = MODE_REG; decoded->src.params.regs.pri = m68K_reg_quick_field(*istream); + decoded->extra.size = OPSIZE_LONG; istream = m68k_decode_op(istream, OPSIZE_LONG, &(decoded->dst)); } else if ((*istream & 0xF00) == 0x800) { + //BTST, BCHG, BCLR, BSET + switch ((*istream >> 6) & 0x3) + { + case 0: + decoded->op = M68K_BTST; + break; + case 1: + decoded->op = M68K_BCHG; + break; + case 2: + decoded->op = M68K_BCLR; + break; + case 3: + decoded->op = M68K_BSET; + break; + } + opmode = (*istream >> 3) & 0x7; + reg = *istream & 0x7; + decoded->src.addr_mode = MODE_IMMEDIATE; + decoded->src.params.u8 = *(++istream); + decoded->extra.size = OPSIZE_BYTE; + istream = m68k_decode_op_ex(istream, opmode, reg, OPSIZE_BYTE, &(decoded->dst)); } else if ((*istream & 0xC0) == 0xC0) { #ifdef M68020 //CMP2, CHK2, CAS, CAS2, RTM, CALLM @@ -1090,7 +1113,7 @@ char * mnemonics[] = { "trap", "trapv", "tst", - "unlnk", + "unlk", "invalid" }; |