I\'ve ported my library x86Lib to mbed. It fully emulates the 8086 processor, but a few things I\'m still working on. Notable missing things are interrupts. Previously I used exceptions for interrupts, but exceptions aren\'t supported with the mbed compiler. It is also quite slow

Dependents:   x86Lib_Tester

Committer:
earlz
Date:
Sun Mar 04 08:15:47 2012 +0000
Revision:
0:217a7931b41f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
earlz 0:217a7931b41f 1 /**
earlz 0:217a7931b41f 2 Copyright (c) 2007 - 2009 Jordan "Earlz/hckr83" Earls <http://www.Earlz.biz.tm>
earlz 0:217a7931b41f 3 All rights reserved.
earlz 0:217a7931b41f 4
earlz 0:217a7931b41f 5 Redistribution and use in source and binary forms, with or without
earlz 0:217a7931b41f 6 modification, are permitted provided that the following conditions
earlz 0:217a7931b41f 7 are met:
earlz 0:217a7931b41f 8
earlz 0:217a7931b41f 9 1. Redistributions of source code must retain the above copyright
earlz 0:217a7931b41f 10 notice, this list of conditions and the following disclaimer.
earlz 0:217a7931b41f 11 2. Redistributions in binary form must reproduce the above copyright
earlz 0:217a7931b41f 12 notice, this list of conditions and the following disclaimer in the
earlz 0:217a7931b41f 13 documentation and/or other materials provided with the distribution.
earlz 0:217a7931b41f 14 3. The name of the author may not be used to endorse or promote products
earlz 0:217a7931b41f 15 derived from this software without specific prior written permission.
earlz 0:217a7931b41f 16
earlz 0:217a7931b41f 17 THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
earlz 0:217a7931b41f 18 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
earlz 0:217a7931b41f 19 AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
earlz 0:217a7931b41f 20 THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
earlz 0:217a7931b41f 21 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
earlz 0:217a7931b41f 22 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
earlz 0:217a7931b41f 23 OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
earlz 0:217a7931b41f 24 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
earlz 0:217a7931b41f 25 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
earlz 0:217a7931b41f 26 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
earlz 0:217a7931b41f 27
earlz 0:217a7931b41f 28 This file is part of the x86Lib project.
earlz 0:217a7931b41f 29 **/
earlz 0:217a7931b41f 30 #define X86LIB_BUILD
earlz 0:217a7931b41f 31 #include <x86Lib.h>
earlz 0:217a7931b41f 32 namespace x86Lib{
earlz 0:217a7931b41f 33 using namespace std;
earlz 0:217a7931b41f 34
earlz 0:217a7931b41f 35
earlz 0:217a7931b41f 36 void x86CPU::op16_group_80(){
earlz 0:217a7931b41f 37 eip++;
earlz 0:217a7931b41f 38 ModRM16 rm(this);
earlz 0:217a7931b41f 39 switch(rm.GetExtra()){
earlz 0:217a7931b41f 40 case 5:
earlz 0:217a7931b41f 41 op16_sub_rm8_imm8(rm);
earlz 0:217a7931b41f 42 break;
earlz 0:217a7931b41f 43 case 0:
earlz 0:217a7931b41f 44 op16_add_rm8_imm8(rm);
earlz 0:217a7931b41f 45 break;
earlz 0:217a7931b41f 46 case 2:
earlz 0:217a7931b41f 47 op16_adc_rm8_imm8(rm);
earlz 0:217a7931b41f 48 break;
earlz 0:217a7931b41f 49 case 7:
earlz 0:217a7931b41f 50 op16_cmp_rm8_imm8(rm);
earlz 0:217a7931b41f 51 break;
earlz 0:217a7931b41f 52 case 1:
earlz 0:217a7931b41f 53 op16_or_rm8_imm8(rm);
earlz 0:217a7931b41f 54 break;
earlz 0:217a7931b41f 55 case 6:
earlz 0:217a7931b41f 56 op16_xor_rm8_imm8(rm);
earlz 0:217a7931b41f 57 break;
earlz 0:217a7931b41f 58 case 3:
earlz 0:217a7931b41f 59 op16_sbb_rm8_imm8(rm);
earlz 0:217a7931b41f 60 break;
earlz 0:217a7931b41f 61 case 4:
earlz 0:217a7931b41f 62 op16_and_rm8_imm8(rm);
earlz 0:217a7931b41f 63 break;
earlz 0:217a7931b41f 64
earlz 0:217a7931b41f 65 default:
earlz 0:217a7931b41f 66 eip--; //to get actual opcode
earlz 0:217a7931b41f 67 Onx86LibError();
earlz 0:217a7931b41f 68 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 69 break;
earlz 0:217a7931b41f 70 }
earlz 0:217a7931b41f 71 eip++; //for imm8
earlz 0:217a7931b41f 72
earlz 0:217a7931b41f 73 }
earlz 0:217a7931b41f 74
earlz 0:217a7931b41f 75 void x86CPU::op16_group_81(){
earlz 0:217a7931b41f 76 eip++;
earlz 0:217a7931b41f 77 ModRM16 rm(this);
earlz 0:217a7931b41f 78 switch(rm.GetExtra()){
earlz 0:217a7931b41f 79 case 5:
earlz 0:217a7931b41f 80 op16_sub_rm16_imm16(rm);
earlz 0:217a7931b41f 81 break;
earlz 0:217a7931b41f 82 case 0:
earlz 0:217a7931b41f 83 op16_add_rm16_imm16(rm);
earlz 0:217a7931b41f 84 break;
earlz 0:217a7931b41f 85 case 2:
earlz 0:217a7931b41f 86 op16_adc_rm16_imm16(rm);
earlz 0:217a7931b41f 87 break;
earlz 0:217a7931b41f 88 case 7:
earlz 0:217a7931b41f 89 op16_cmp_rm16_imm16(rm);
earlz 0:217a7931b41f 90 break;
earlz 0:217a7931b41f 91 case 1:
earlz 0:217a7931b41f 92 op16_or_rm16_imm16(rm);
earlz 0:217a7931b41f 93 break;
earlz 0:217a7931b41f 94 case 6:
earlz 0:217a7931b41f 95 op16_xor_rm16_imm16(rm);
earlz 0:217a7931b41f 96 break;
earlz 0:217a7931b41f 97 case 3:
earlz 0:217a7931b41f 98 op16_sbb_rm16_imm16(rm);
earlz 0:217a7931b41f 99 break;
earlz 0:217a7931b41f 100 case 4:
earlz 0:217a7931b41f 101 op16_and_rm16_imm16(rm);
earlz 0:217a7931b41f 102 break;
earlz 0:217a7931b41f 103
earlz 0:217a7931b41f 104 default:
earlz 0:217a7931b41f 105 eip--;
earlz 0:217a7931b41f 106 Onx86LibError();
earlz 0:217a7931b41f 107 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 108 break;
earlz 0:217a7931b41f 109 }
earlz 0:217a7931b41f 110 eip+=2; //these each have imm16
earlz 0:217a7931b41f 111 }
earlz 0:217a7931b41f 112
earlz 0:217a7931b41f 113 void x86CPU::op16_group_83(){
earlz 0:217a7931b41f 114 eip++;
earlz 0:217a7931b41f 115 ModRM16 rm(this);
earlz 0:217a7931b41f 116 switch(rm.GetExtra()){
earlz 0:217a7931b41f 117 case 0:
earlz 0:217a7931b41f 118 op16_add_rm16_imm8(rm);
earlz 0:217a7931b41f 119 break;
earlz 0:217a7931b41f 120 case 2:
earlz 0:217a7931b41f 121 op16_adc_rm16_imm8(rm);
earlz 0:217a7931b41f 122 break;
earlz 0:217a7931b41f 123 case 5:
earlz 0:217a7931b41f 124 op16_sub_rm16_imm8(rm);
earlz 0:217a7931b41f 125 break;
earlz 0:217a7931b41f 126 case 7:
earlz 0:217a7931b41f 127 op16_cmp_rm16_imm8(rm);
earlz 0:217a7931b41f 128 break;
earlz 0:217a7931b41f 129 case 1:
earlz 0:217a7931b41f 130 op16_or_rm16_imm8(rm);
earlz 0:217a7931b41f 131 break;
earlz 0:217a7931b41f 132 case 6:
earlz 0:217a7931b41f 133 op16_xor_rm16_imm8(rm);
earlz 0:217a7931b41f 134 break;
earlz 0:217a7931b41f 135 case 3:
earlz 0:217a7931b41f 136 op16_sbb_rm16_imm8(rm);
earlz 0:217a7931b41f 137 break;
earlz 0:217a7931b41f 138 case 4:
earlz 0:217a7931b41f 139 op16_and_rm16_imm8(rm);
earlz 0:217a7931b41f 140 break;
earlz 0:217a7931b41f 141
earlz 0:217a7931b41f 142 default:
earlz 0:217a7931b41f 143 eip--;
earlz 0:217a7931b41f 144 Onx86LibError();
earlz 0:217a7931b41f 145 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 146 break;
earlz 0:217a7931b41f 147 }
earlz 0:217a7931b41f 148 eip++;
earlz 0:217a7931b41f 149 }
earlz 0:217a7931b41f 150
earlz 0:217a7931b41f 151 void x86CPU::op16_group_8F(){
earlz 0:217a7931b41f 152 eip++;
earlz 0:217a7931b41f 153 ModRM16 rm(this);
earlz 0:217a7931b41f 154 switch(rm.GetExtra()){
earlz 0:217a7931b41f 155 case 0:
earlz 0:217a7931b41f 156 op16_pop_m16(rm);
earlz 0:217a7931b41f 157 break;
earlz 0:217a7931b41f 158
earlz 0:217a7931b41f 159 default:
earlz 0:217a7931b41f 160 eip--;
earlz 0:217a7931b41f 161 Onx86LibError();
earlz 0:217a7931b41f 162 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 163 break;
earlz 0:217a7931b41f 164 }
earlz 0:217a7931b41f 165 }
earlz 0:217a7931b41f 166
earlz 0:217a7931b41f 167 void x86CPU::op16_group_F6(){
earlz 0:217a7931b41f 168 eip++;
earlz 0:217a7931b41f 169 ModRM16 rm(this);
earlz 0:217a7931b41f 170 switch(rm.GetExtra()){
earlz 0:217a7931b41f 171 case 6:
earlz 0:217a7931b41f 172 op16_div_rm8(rm);
earlz 0:217a7931b41f 173 break;
earlz 0:217a7931b41f 174 case 7:
earlz 0:217a7931b41f 175 op16_idiv_rm8(rm);
earlz 0:217a7931b41f 176 break;
earlz 0:217a7931b41f 177 case 4:
earlz 0:217a7931b41f 178 op16_mul_rm8(rm);
earlz 0:217a7931b41f 179 break;
earlz 0:217a7931b41f 180 case 5:
earlz 0:217a7931b41f 181 op16_imul_rm8(rm);
earlz 0:217a7931b41f 182 break;
earlz 0:217a7931b41f 183 case 3:
earlz 0:217a7931b41f 184 op16_neg_rm8(rm);
earlz 0:217a7931b41f 185 break;
earlz 0:217a7931b41f 186 case 0:
earlz 0:217a7931b41f 187 op16_test_rm8_imm8(rm);
earlz 0:217a7931b41f 188 eip++;
earlz 0:217a7931b41f 189 break;
earlz 0:217a7931b41f 190 case 2:
earlz 0:217a7931b41f 191 op16_not_rm8(rm);
earlz 0:217a7931b41f 192 break;
earlz 0:217a7931b41f 193
earlz 0:217a7931b41f 194 default:
earlz 0:217a7931b41f 195 eip--;
earlz 0:217a7931b41f 196 Onx86LibError();
earlz 0:217a7931b41f 197 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 198 break;
earlz 0:217a7931b41f 199 }
earlz 0:217a7931b41f 200 }
earlz 0:217a7931b41f 201
earlz 0:217a7931b41f 202 void x86CPU::op16_group_F7(){
earlz 0:217a7931b41f 203 eip++;
earlz 0:217a7931b41f 204 ModRM16 rm(this);
earlz 0:217a7931b41f 205 switch(rm.GetExtra()){
earlz 0:217a7931b41f 206 case 6:
earlz 0:217a7931b41f 207 op16_div_rm16(rm);
earlz 0:217a7931b41f 208 break;
earlz 0:217a7931b41f 209 case 7:
earlz 0:217a7931b41f 210 op16_idiv_rm16(rm);
earlz 0:217a7931b41f 211 break;
earlz 0:217a7931b41f 212 case 4:
earlz 0:217a7931b41f 213 op16_mul_rm16(rm);
earlz 0:217a7931b41f 214 break;
earlz 0:217a7931b41f 215 case 5:
earlz 0:217a7931b41f 216 op16_imul_rm16(rm);
earlz 0:217a7931b41f 217 break;
earlz 0:217a7931b41f 218 case 3:
earlz 0:217a7931b41f 219 op16_neg_rm16(rm);
earlz 0:217a7931b41f 220 break;
earlz 0:217a7931b41f 221 case 0:
earlz 0:217a7931b41f 222 op16_test_rm16_imm16(rm);
earlz 0:217a7931b41f 223 eip+=2;
earlz 0:217a7931b41f 224 break;
earlz 0:217a7931b41f 225 case 2:
earlz 0:217a7931b41f 226 op16_not_rm16(rm);
earlz 0:217a7931b41f 227 break;
earlz 0:217a7931b41f 228
earlz 0:217a7931b41f 229 default:
earlz 0:217a7931b41f 230 eip--;
earlz 0:217a7931b41f 231 Onx86LibError();
earlz 0:217a7931b41f 232 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 233 break;
earlz 0:217a7931b41f 234 }
earlz 0:217a7931b41f 235 }
earlz 0:217a7931b41f 236
earlz 0:217a7931b41f 237
earlz 0:217a7931b41f 238 void x86CPU::op16_group_FF(){
earlz 0:217a7931b41f 239 eip++;
earlz 0:217a7931b41f 240 ModRM16 rm(this);
earlz 0:217a7931b41f 241 switch(rm.GetExtra()){
earlz 0:217a7931b41f 242 case 4:
earlz 0:217a7931b41f 243 op16_jmp_rm16(rm);
earlz 0:217a7931b41f 244 break;
earlz 0:217a7931b41f 245 case 5:
earlz 0:217a7931b41f 246 op16_jmp_m16_m16(rm);
earlz 0:217a7931b41f 247 break;
earlz 0:217a7931b41f 248 case 6:
earlz 0:217a7931b41f 249 op16_push_m16(rm);
earlz 0:217a7931b41f 250 break;
earlz 0:217a7931b41f 251 case 0:
earlz 0:217a7931b41f 252 op16_inc_rm16(rm);
earlz 0:217a7931b41f 253 break;
earlz 0:217a7931b41f 254 case 1:
earlz 0:217a7931b41f 255 op16_dec_rm16(rm);
earlz 0:217a7931b41f 256 break;
earlz 0:217a7931b41f 257 case 2:
earlz 0:217a7931b41f 258 op16_call_rm16(rm);
earlz 0:217a7931b41f 259 break;
earlz 0:217a7931b41f 260 case 3:
earlz 0:217a7931b41f 261 op16_call_rm16_rm16(rm);
earlz 0:217a7931b41f 262 break;
earlz 0:217a7931b41f 263
earlz 0:217a7931b41f 264 default:
earlz 0:217a7931b41f 265 eip--;
earlz 0:217a7931b41f 266 Onx86LibError();
earlz 0:217a7931b41f 267 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 268 break;
earlz 0:217a7931b41f 269 }
earlz 0:217a7931b41f 270 }
earlz 0:217a7931b41f 271
earlz 0:217a7931b41f 272 void x86CPU::op16_group_FE(){
earlz 0:217a7931b41f 273 eip++;
earlz 0:217a7931b41f 274 ModRM16 rm(this);
earlz 0:217a7931b41f 275 switch(rm.GetExtra()){
earlz 0:217a7931b41f 276 case 0:
earlz 0:217a7931b41f 277 op16_inc_rm8(rm);
earlz 0:217a7931b41f 278 break;
earlz 0:217a7931b41f 279 case 1:
earlz 0:217a7931b41f 280 op16_dec_rm8(rm);
earlz 0:217a7931b41f 281 break;
earlz 0:217a7931b41f 282
earlz 0:217a7931b41f 283 default:
earlz 0:217a7931b41f 284 eip--;
earlz 0:217a7931b41f 285 Onx86LibError();
earlz 0:217a7931b41f 286 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 287 break;
earlz 0:217a7931b41f 288 }
earlz 0:217a7931b41f 289 }
earlz 0:217a7931b41f 290
earlz 0:217a7931b41f 291 void x86CPU::op16_group_D0(){
earlz 0:217a7931b41f 292 eip++;
earlz 0:217a7931b41f 293 ModRM16 rm(this);
earlz 0:217a7931b41f 294 switch(rm.GetExtra()){
earlz 0:217a7931b41f 295 case 7:
earlz 0:217a7931b41f 296 op16_sar_rm8_1(rm);
earlz 0:217a7931b41f 297 break;
earlz 0:217a7931b41f 298 case 4:
earlz 0:217a7931b41f 299 op16_shl_rm8_1(rm);
earlz 0:217a7931b41f 300 break;
earlz 0:217a7931b41f 301 case 5:
earlz 0:217a7931b41f 302 op16_shr_rm8_1(rm);
earlz 0:217a7931b41f 303 break;
earlz 0:217a7931b41f 304 case 0:
earlz 0:217a7931b41f 305 op16_rol_rm8_1(rm);
earlz 0:217a7931b41f 306 break;
earlz 0:217a7931b41f 307 case 1:
earlz 0:217a7931b41f 308 op16_ror_rm8_1(rm);
earlz 0:217a7931b41f 309 break;
earlz 0:217a7931b41f 310 case 3:
earlz 0:217a7931b41f 311 op16_rcr_rm8_1(rm);
earlz 0:217a7931b41f 312 break;
earlz 0:217a7931b41f 313 case 2:
earlz 0:217a7931b41f 314 op16_rcl_rm8_1(rm);
earlz 0:217a7931b41f 315 break;
earlz 0:217a7931b41f 316 default:
earlz 0:217a7931b41f 317 eip--;
earlz 0:217a7931b41f 318 Onx86LibError();
earlz 0:217a7931b41f 319 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 320 break;
earlz 0:217a7931b41f 321 }
earlz 0:217a7931b41f 322 }
earlz 0:217a7931b41f 323
earlz 0:217a7931b41f 324 void x86CPU::op16_group_D1(){
earlz 0:217a7931b41f 325 eip++;
earlz 0:217a7931b41f 326 ModRM16 rm(this);
earlz 0:217a7931b41f 327 switch(rm.GetExtra()){
earlz 0:217a7931b41f 328 case 7:
earlz 0:217a7931b41f 329 op16_sar_rm16_1(rm);
earlz 0:217a7931b41f 330 break;
earlz 0:217a7931b41f 331 case 4:
earlz 0:217a7931b41f 332 op16_shl_rm16_1(rm);
earlz 0:217a7931b41f 333 break;
earlz 0:217a7931b41f 334 case 5:
earlz 0:217a7931b41f 335 op16_shr_rm16_1(rm);
earlz 0:217a7931b41f 336 break;
earlz 0:217a7931b41f 337 case 0:
earlz 0:217a7931b41f 338 op16_rol_rm16_1(rm);
earlz 0:217a7931b41f 339 break;
earlz 0:217a7931b41f 340 case 1:
earlz 0:217a7931b41f 341 op16_ror_rm16_1(rm);
earlz 0:217a7931b41f 342 break;
earlz 0:217a7931b41f 343 case 3:
earlz 0:217a7931b41f 344 op16_rcr_rm16_1(rm);
earlz 0:217a7931b41f 345 break;
earlz 0:217a7931b41f 346 case 2:
earlz 0:217a7931b41f 347 op16_rcl_rm16_1(rm);
earlz 0:217a7931b41f 348 break;
earlz 0:217a7931b41f 349
earlz 0:217a7931b41f 350
earlz 0:217a7931b41f 351 default:
earlz 0:217a7931b41f 352 eip--;
earlz 0:217a7931b41f 353 Onx86LibError();
earlz 0:217a7931b41f 354 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 355 break;
earlz 0:217a7931b41f 356 }
earlz 0:217a7931b41f 357 }
earlz 0:217a7931b41f 358
earlz 0:217a7931b41f 359 void x86CPU::op16_group_D2(){
earlz 0:217a7931b41f 360 eip++;
earlz 0:217a7931b41f 361 ModRM16 rm(this);
earlz 0:217a7931b41f 362 switch(rm.GetExtra()){
earlz 0:217a7931b41f 363 case 7:
earlz 0:217a7931b41f 364 op16_sar_rm8_cl(rm);
earlz 0:217a7931b41f 365 break;
earlz 0:217a7931b41f 366 case 4:
earlz 0:217a7931b41f 367 op16_shl_rm8_cl(rm);
earlz 0:217a7931b41f 368 break;
earlz 0:217a7931b41f 369 case 5:
earlz 0:217a7931b41f 370 op16_shr_rm8_cl(rm);
earlz 0:217a7931b41f 371 break;
earlz 0:217a7931b41f 372 case 0:
earlz 0:217a7931b41f 373 op16_rol_rm8_cl(rm);
earlz 0:217a7931b41f 374 break;
earlz 0:217a7931b41f 375 case 1:
earlz 0:217a7931b41f 376 op16_ror_rm8_cl(rm);
earlz 0:217a7931b41f 377 break;
earlz 0:217a7931b41f 378 case 3:
earlz 0:217a7931b41f 379 op16_rcr_rm8_cl(rm);
earlz 0:217a7931b41f 380 break;
earlz 0:217a7931b41f 381 case 2:
earlz 0:217a7931b41f 382 op16_rcl_rm8_cl(rm);
earlz 0:217a7931b41f 383 break;
earlz 0:217a7931b41f 384
earlz 0:217a7931b41f 385
earlz 0:217a7931b41f 386 default:
earlz 0:217a7931b41f 387 eip--;
earlz 0:217a7931b41f 388 Onx86LibError();
earlz 0:217a7931b41f 389 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 390 break;
earlz 0:217a7931b41f 391 }
earlz 0:217a7931b41f 392 }
earlz 0:217a7931b41f 393
earlz 0:217a7931b41f 394 void x86CPU::op16_group_D3(){
earlz 0:217a7931b41f 395 eip++;
earlz 0:217a7931b41f 396 ModRM16 rm(this);
earlz 0:217a7931b41f 397 switch(rm.GetExtra()){
earlz 0:217a7931b41f 398 case 7:
earlz 0:217a7931b41f 399 op16_sar_rm16_cl(rm);
earlz 0:217a7931b41f 400 break;
earlz 0:217a7931b41f 401 case 4:
earlz 0:217a7931b41f 402 op16_shl_rm16_cl(rm);
earlz 0:217a7931b41f 403 break;
earlz 0:217a7931b41f 404 case 5:
earlz 0:217a7931b41f 405 op16_shr_rm16_cl(rm);
earlz 0:217a7931b41f 406 break;
earlz 0:217a7931b41f 407 case 0:
earlz 0:217a7931b41f 408 op16_rol_rm16_cl(rm);
earlz 0:217a7931b41f 409 break;
earlz 0:217a7931b41f 410 case 1:
earlz 0:217a7931b41f 411 op16_ror_rm16_cl(rm);
earlz 0:217a7931b41f 412 break;
earlz 0:217a7931b41f 413 case 3:
earlz 0:217a7931b41f 414 op16_rcr_rm16_cl(rm);
earlz 0:217a7931b41f 415 break;
earlz 0:217a7931b41f 416 case 2:
earlz 0:217a7931b41f 417 op16_rcl_rm16_cl(rm);
earlz 0:217a7931b41f 418 break;
earlz 0:217a7931b41f 419
earlz 0:217a7931b41f 420
earlz 0:217a7931b41f 421 default:
earlz 0:217a7931b41f 422 eip--;
earlz 0:217a7931b41f 423 Onx86LibError();
earlz 0:217a7931b41f 424 //throw CpuInt_excp(UNK_IEXCP);
earlz 0:217a7931b41f 425 break;
earlz 0:217a7931b41f 426 }
earlz 0:217a7931b41f 427 }
earlz 0:217a7931b41f 428
earlz 0:217a7931b41f 429
earlz 0:217a7931b41f 430
earlz 0:217a7931b41f 431
earlz 0:217a7931b41f 432
earlz 0:217a7931b41f 433
earlz 0:217a7931b41f 434 };
earlz 0:217a7931b41f 435
earlz 0:217a7931b41f 436
earlz 0:217a7931b41f 437