From bd5260222653289a71a49fa5093e33204112b3e0 Mon Sep 17 00:00:00 2001 From: Mike Pavone Date: Fri, 28 Dec 2012 15:34:24 -0800 Subject: Fix decoding of Scc --- 68kinst.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to '68kinst.c') diff --git a/68kinst.c b/68kinst.c index da7e00d..2d4dc4e 100644 --- a/68kinst.c +++ b/68kinst.c @@ -683,26 +683,22 @@ uint16_t * m68k_decode(uint16_t * istream, m68kinst * decoded, uint32_t address) if (size == 0x3) { //DBcc, TRAPcc or Scc m68k_decode_cond(*istream, decoded); - switch ((*istream >> 3) & 0x7) - { - case 1: //DBcc + if (((*istream >> 3) & 0x7) == 1) { decoded->op = M68K_DBCC; decoded->src.addr_mode = MODE_IMMEDIATE; decoded->dst.addr_mode = MODE_REG; decoded->dst.params.regs.pri = *istream & 0x7; decoded->src.params.immed = sign_extend16(*(++istream)); - break; - case 7: //TRAPcc + } else if(((*istream >> 3) & 0x7) == 1 && (*istream & 0x7) > 1 && (*istream & 0x7) < 5) { #ifdef M68020 decoded->op = M68K_TRAPCC; decoded->src.addr_mode = MODE_IMMEDIATE; //TODO: Figure out what to do with OPMODE and optional extention words #endif - break; - default: //Scc + } else { decoded->op = M68K_SCC; + decoded->extra.cond = (*istream >> 8) & 0xF; istream = m68k_decode_op(istream, OPSIZE_BYTE, &(decoded->dst)); - break; } } else { //ADDQ, SUBQ -- cgit v1.2.3