comparison 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
comparison
equal deleted inserted replaced
11:d5e9bac9ebdf 12:db60ed283d8d
121 decoded->op = M68K_BSET; 121 decoded->op = M68K_BSET;
122 break; 122 break;
123 } 123 }
124 decoded->src.addr_mode = MODE_REG; 124 decoded->src.addr_mode = MODE_REG;
125 decoded->src.params.regs.pri = m68K_reg_quick_field(*istream); 125 decoded->src.params.regs.pri = m68K_reg_quick_field(*istream);
126 decoded->extra.size = OPSIZE_LONG;
126 istream = m68k_decode_op(istream, OPSIZE_LONG, &(decoded->dst)); 127 istream = m68k_decode_op(istream, OPSIZE_LONG, &(decoded->dst));
127 } else if ((*istream & 0xF00) == 0x800) { 128 } else if ((*istream & 0xF00) == 0x800) {
129 //BTST, BCHG, BCLR, BSET
130 switch ((*istream >> 6) & 0x3)
131 {
132 case 0:
133 decoded->op = M68K_BTST;
134 break;
135 case 1:
136 decoded->op = M68K_BCHG;
137 break;
138 case 2:
139 decoded->op = M68K_BCLR;
140 break;
141 case 3:
142 decoded->op = M68K_BSET;
143 break;
144 }
145 opmode = (*istream >> 3) & 0x7;
146 reg = *istream & 0x7;
147 decoded->src.addr_mode = MODE_IMMEDIATE;
148 decoded->src.params.u8 = *(++istream);
149 decoded->extra.size = OPSIZE_BYTE;
150 istream = m68k_decode_op_ex(istream, opmode, reg, OPSIZE_BYTE, &(decoded->dst));
128 } else if ((*istream & 0xC0) == 0xC0) { 151 } else if ((*istream & 0xC0) == 0xC0) {
129 #ifdef M68020 152 #ifdef M68020
130 //CMP2, CHK2, CAS, CAS2, RTM, CALLM 153 //CMP2, CHK2, CAS, CAS2, RTM, CALLM
131 #endif 154 #endif
132 } else { 155 } else {
1088 "swap", 1111 "swap",
1089 "tas", 1112 "tas",
1090 "trap", 1113 "trap",
1091 "trapv", 1114 "trapv",
1092 "tst", 1115 "tst",
1093 "unlnk", 1116 "unlk",
1094 "invalid" 1117 "invalid"
1095 }; 1118 };
1096 1119
1097 char * cond_mnem[] = { 1120 char * cond_mnem[] = {
1098 "ra", 1121 "ra",