Mercurial > repos > blastem
diff 68kinst.c @ 12:db60ed283d8d
Add mising bit instructions to decoder. Add test assembly file containing most distinct instructions.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 15 Nov 2012 00:52:53 -0800 |
parents | d5e9bac9ebdf |
children | 168b1a873895 |
line wrap: on
line diff
--- a/68kinst.c Wed Nov 14 23:04:55 2012 -0800 +++ b/68kinst.c Thu Nov 15 00:52:53 2012 -0800 @@ -123,8 +123,31 @@ } 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 @@ "trap", "trapv", "tst", - "unlnk", + "unlk", "invalid" };