📄 prefix_none.h
字号:
/* * Copyright (C) 2002-2007 The DOSBox Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ CASE_B(0x00) /* ADD Eb,Gb */ RMEbGb(ADDB);break; CASE_W(0x01) /* ADD Ew,Gw */ RMEwGw(ADDW);break; CASE_B(0x02) /* ADD Gb,Eb */ RMGbEb(ADDB);break; CASE_W(0x03) /* ADD Gw,Ew */ RMGwEw(ADDW);break; CASE_B(0x04) /* ADD AL,Ib */ ALIb(ADDB);break; CASE_W(0x05) /* ADD AX,Iw */ AXIw(ADDW);break; CASE_W(0x06) /* PUSH ES */ Push_16(SegValue(es));break; CASE_W(0x07) /* POP ES */ if (CPU_PopSeg(es,false)) RUNEXCEPTION(); break; CASE_B(0x08) /* OR Eb,Gb */ RMEbGb(ORB);break; CASE_W(0x09) /* OR Ew,Gw */ RMEwGw(ORW);break; CASE_B(0x0a) /* OR Gb,Eb */ RMGbEb(ORB);break; CASE_W(0x0b) /* OR Gw,Ew */ RMGwEw(ORW);break; CASE_B(0x0c) /* OR AL,Ib */ ALIb(ORB);break; CASE_W(0x0d) /* OR AX,Iw */ AXIw(ORW);break; CASE_W(0x0e) /* PUSH CS */ Push_16(SegValue(cs));break; CASE_B(0x0f) /* 2 byte opcodes*/ core.opcode_index|=OPCODE_0F; goto restart_opcode; break; CASE_B(0x10) /* ADC Eb,Gb */ RMEbGb(ADCB);break; CASE_W(0x11) /* ADC Ew,Gw */ RMEwGw(ADCW);break; CASE_B(0x12) /* ADC Gb,Eb */ RMGbEb(ADCB);break; CASE_W(0x13) /* ADC Gw,Ew */ RMGwEw(ADCW);break; CASE_B(0x14) /* ADC AL,Ib */ ALIb(ADCB);break; CASE_W(0x15) /* ADC AX,Iw */ AXIw(ADCW);break; CASE_W(0x16) /* PUSH SS */ Push_16(SegValue(ss));break; CASE_W(0x17) /* POP SS */ if (CPU_PopSeg(ss,false)) RUNEXCEPTION(); CPU_Cycles++; //Always do another instruction break; CASE_B(0x18) /* SBB Eb,Gb */ RMEbGb(SBBB);break; CASE_W(0x19) /* SBB Ew,Gw */ RMEwGw(SBBW);break; CASE_B(0x1a) /* SBB Gb,Eb */ RMGbEb(SBBB);break; CASE_W(0x1b) /* SBB Gw,Ew */ RMGwEw(SBBW);break; CASE_B(0x1c) /* SBB AL,Ib */ ALIb(SBBB);break; CASE_W(0x1d) /* SBB AX,Iw */ AXIw(SBBW);break; CASE_W(0x1e) /* PUSH DS */ Push_16(SegValue(ds));break; CASE_W(0x1f) /* POP DS */ if (CPU_PopSeg(ds,false)) RUNEXCEPTION(); break; CASE_B(0x20) /* AND Eb,Gb */ RMEbGb(ANDB);break; CASE_W(0x21) /* AND Ew,Gw */ RMEwGw(ANDW);break; CASE_B(0x22) /* AND Gb,Eb */ RMGbEb(ANDB);break; CASE_W(0x23) /* AND Gw,Ew */ RMGwEw(ANDW);break; CASE_B(0x24) /* AND AL,Ib */ ALIb(ANDB);break; CASE_W(0x25) /* AND AX,Iw */ AXIw(ANDW);break; CASE_B(0x26) /* SEG ES: */ DO_PREFIX_SEG(es);break; CASE_B(0x27) /* DAA */ DAA();break; CASE_B(0x28) /* SUB Eb,Gb */ RMEbGb(SUBB);break; CASE_W(0x29) /* SUB Ew,Gw */ RMEwGw(SUBW);break; CASE_B(0x2a) /* SUB Gb,Eb */ RMGbEb(SUBB);break; CASE_W(0x2b) /* SUB Gw,Ew */ RMGwEw(SUBW);break; CASE_B(0x2c) /* SUB AL,Ib */ ALIb(SUBB);break; CASE_W(0x2d) /* SUB AX,Iw */ AXIw(SUBW);break; CASE_B(0x2e) /* SEG CS: */ DO_PREFIX_SEG(cs);break; CASE_B(0x2f) /* DAS */ DAS();break; CASE_B(0x30) /* XOR Eb,Gb */ RMEbGb(XORB);break; CASE_W(0x31) /* XOR Ew,Gw */ RMEwGw(XORW);break; CASE_B(0x32) /* XOR Gb,Eb */ RMGbEb(XORB);break; CASE_W(0x33) /* XOR Gw,Ew */ RMGwEw(XORW);break; CASE_B(0x34) /* XOR AL,Ib */ ALIb(XORB);break; CASE_W(0x35) /* XOR AX,Iw */ AXIw(XORW);break; CASE_B(0x36) /* SEG SS: */ DO_PREFIX_SEG(ss);break; CASE_B(0x37) /* AAA */ AAA();break; CASE_B(0x38) /* CMP Eb,Gb */ RMEbGb(CMPB);break; CASE_W(0x39) /* CMP Ew,Gw */ RMEwGw(CMPW);break; CASE_B(0x3a) /* CMP Gb,Eb */ RMGbEb(CMPB);break; CASE_W(0x3b) /* CMP Gw,Ew */ RMGwEw(CMPW);break; CASE_B(0x3c) /* CMP AL,Ib */ ALIb(CMPB);break; CASE_W(0x3d) /* CMP AX,Iw */ AXIw(CMPW);break; CASE_B(0x3e) /* SEG DS: */ DO_PREFIX_SEG(ds);break; CASE_B(0x3f) /* AAS */ AAS();break; CASE_W(0x40) /* INC AX */ INCW(reg_ax,LoadRw,SaveRw);break; CASE_W(0x41) /* INC CX */ INCW(reg_cx,LoadRw,SaveRw);break; CASE_W(0x42) /* INC DX */ INCW(reg_dx,LoadRw,SaveRw);break; CASE_W(0x43) /* INC BX */ INCW(reg_bx,LoadRw,SaveRw);break; CASE_W(0x44) /* INC SP */ INCW(reg_sp,LoadRw,SaveRw);break; CASE_W(0x45) /* INC BP */ INCW(reg_bp,LoadRw,SaveRw);break; CASE_W(0x46) /* INC SI */ INCW(reg_si,LoadRw,SaveRw);break; CASE_W(0x47) /* INC DI */ INCW(reg_di,LoadRw,SaveRw);break; CASE_W(0x48) /* DEC AX */ DECW(reg_ax,LoadRw,SaveRw);break; CASE_W(0x49) /* DEC CX */ DECW(reg_cx,LoadRw,SaveRw);break; CASE_W(0x4a) /* DEC DX */ DECW(reg_dx,LoadRw,SaveRw);break; CASE_W(0x4b) /* DEC BX */ DECW(reg_bx,LoadRw,SaveRw);break; CASE_W(0x4c) /* DEC SP */ DECW(reg_sp,LoadRw,SaveRw);break; CASE_W(0x4d) /* DEC BP */ DECW(reg_bp,LoadRw,SaveRw);break; CASE_W(0x4e) /* DEC SI */ DECW(reg_si,LoadRw,SaveRw);break; CASE_W(0x4f) /* DEC DI */ DECW(reg_di,LoadRw,SaveRw);break; CASE_W(0x50) /* PUSH AX */ Push_16(reg_ax);break; CASE_W(0x51) /* PUSH CX */ Push_16(reg_cx);break; CASE_W(0x52) /* PUSH DX */ Push_16(reg_dx);break; CASE_W(0x53) /* PUSH BX */ Push_16(reg_bx);break; CASE_W(0x54) /* PUSH SP */ Push_16(reg_sp);break; CASE_W(0x55) /* PUSH BP */ Push_16(reg_bp);break; CASE_W(0x56) /* PUSH SI */ Push_16(reg_si);break; CASE_W(0x57) /* PUSH DI */ Push_16(reg_di);break; CASE_W(0x58) /* POP AX */ reg_ax=Pop_16();break; CASE_W(0x59) /* POP CX */ reg_cx=Pop_16();break; CASE_W(0x5a) /* POP DX */ reg_dx=Pop_16();break; CASE_W(0x5b) /* POP BX */ reg_bx=Pop_16();break; CASE_W(0x5c) /* POP SP */ reg_sp=Pop_16();break; CASE_W(0x5d) /* POP BP */ reg_bp=Pop_16();break; CASE_W(0x5e) /* POP SI */ reg_si=Pop_16();break; CASE_W(0x5f) /* POP DI */ reg_di=Pop_16();break; CASE_W(0x60) /* PUSHA */ { Bit16u old_sp=reg_sp; Push_16(reg_ax);Push_16(reg_cx);Push_16(reg_dx);Push_16(reg_bx); Push_16(old_sp);Push_16(reg_bp);Push_16(reg_si);Push_16(reg_di); } break; CASE_W(0x61) /* POPA */ reg_di=Pop_16();reg_si=Pop_16();reg_bp=Pop_16();Pop_16();//Don't save SP reg_bx=Pop_16();reg_dx=Pop_16();reg_cx=Pop_16();reg_ax=Pop_16(); break; CASE_W(0x62) /* BOUND */ { Bit16s bound_min, bound_max; GetRMrw;GetEAa; bound_min=LoadMw(eaa); bound_max=LoadMw(eaa+2); if ( (((Bit16s)*rmrw) < bound_min) || (((Bit16s)*rmrw) > bound_max) ) { EXCEPTION(5); } } break; CASE_W(0x63) /* ARPL Ew,Rw */ { if ((reg_flags & FLAG_VM) || (!cpu.pmode)) goto illegal_opcode; FillFlags(); GetRMrw; if (rm >= 0xc0 ) { GetEArw;Bitu new_sel=*earw; CPU_ARPL(new_sel,*rmrw); *earw=(Bit16u)new_sel; } else { GetEAa;Bitu new_sel=LoadMw(eaa); CPU_ARPL(new_sel,*rmrw); SaveMw(eaa,(Bit16u)new_sel); } } break; CASE_B(0x64) /* SEG FS: */ DO_PREFIX_SEG(fs);break; CASE_B(0x65) /* SEG GS: */ DO_PREFIX_SEG(gs);break; CASE_B(0x66) /* Operand Size Prefix */ core.opcode_index=(cpu.code.big^0x1)*0x200; goto restart_opcode; CASE_B(0x67) /* Address Size Prefix */ DO_PREFIX_ADDR(); CASE_W(0x68) /* PUSH Iw */ Push_16(Fetchw());break; CASE_W(0x69) /* IMUL Gw,Ew,Iw */ RMGwEwOp3(DIMULW,Fetchws()); break; CASE_W(0x6a) /* PUSH Ib */ Push_16(Fetchbs()); break; CASE_W(0x6b) /* IMUL Gw,Ew,Ib */ RMGwEwOp3(DIMULW,Fetchbs()); break; CASE_B(0x6c) /* INSB */ if (CPU_IO_Exception(reg_dx,1)) RUNEXCEPTION(); DoString(R_INSB);break; CASE_W(0x6d) /* INSW */ if (CPU_IO_Exception(reg_dx,2)) RUNEXCEPTION(); DoString(R_INSW);break; CASE_B(0x6e) /* OUTSB */ if (CPU_IO_Exception(reg_dx,1)) RUNEXCEPTION(); DoString(R_OUTSB);break; CASE_W(0x6f) /* OUTSW */ if (CPU_IO_Exception(reg_dx,2)) RUNEXCEPTION(); DoString(R_OUTSW);break; CASE_W(0x70) /* JO */ JumpCond16_b(TFLG_O);break; CASE_W(0x71) /* JNO */ JumpCond16_b(TFLG_NO);break; CASE_W(0x72) /* JB */ JumpCond16_b(TFLG_B);break; CASE_W(0x73) /* JNB */ JumpCond16_b(TFLG_NB);break; CASE_W(0x74) /* JZ */ JumpCond16_b(TFLG_Z);break; CASE_W(0x75) /* JNZ */ JumpCond16_b(TFLG_NZ);break; CASE_W(0x76) /* JBE */ JumpCond16_b(TFLG_BE);break; CASE_W(0x77) /* JNBE */ JumpCond16_b(TFLG_NBE);break; CASE_W(0x78) /* JS */ JumpCond16_b(TFLG_S);break; CASE_W(0x79) /* JNS */ JumpCond16_b(TFLG_NS);break; CASE_W(0x7a) /* JP */ JumpCond16_b(TFLG_P);break; CASE_W(0x7b) /* JNP */ JumpCond16_b(TFLG_NP);break; CASE_W(0x7c) /* JL */ JumpCond16_b(TFLG_L);break; CASE_W(0x7d) /* JNL */ JumpCond16_b(TFLG_NL);break; CASE_W(0x7e) /* JLE */ JumpCond16_b(TFLG_LE);break; CASE_W(0x7f) /* JNLE */ JumpCond16_b(TFLG_NLE);break; CASE_B(0x80) /* Grpl Eb,Ib */ CASE_B(0x82) /* Grpl Eb,Ib Mirror instruction*/ { GetRM;Bitu which=(rm>>3)&7; if (rm>= 0xc0) { GetEArb;Bit8u ib=Fetchb(); switch (which) { case 0x00:ADDB(*earb,ib,LoadRb,SaveRb);break; case 0x01: ORB(*earb,ib,LoadRb,SaveRb);break; case 0x02:ADCB(*earb,ib,LoadRb,SaveRb);break; case 0x03:SBBB(*earb,ib,LoadRb,SaveRb);break; case 0x04:ANDB(*earb,ib,LoadRb,SaveRb);break; case 0x05:SUBB(*earb,ib,LoadRb,SaveRb);break; case 0x06:XORB(*earb,ib,LoadRb,SaveRb);break; case 0x07:CMPB(*earb,ib,LoadRb,SaveRb);break; } } else { GetEAa;Bit8u ib=Fetchb(); switch (which) { case 0x00:ADDB(eaa,ib,LoadMb,SaveMb);break; case 0x01: ORB(eaa,ib,LoadMb,SaveMb);break; case 0x02:ADCB(eaa,ib,LoadMb,SaveMb);break; case 0x03:SBBB(eaa,ib,LoadMb,SaveMb);break; case 0x04:ANDB(eaa,ib,LoadMb,SaveMb);break; case 0x05:SUBB(eaa,ib,LoadMb,SaveMb);break; case 0x06:XORB(eaa,ib,LoadMb,SaveMb);break; case 0x07:CMPB(eaa,ib,LoadMb,SaveMb);break; } } break; } CASE_W(0x81) /* Grpl Ew,Iw */ { GetRM;Bitu which=(rm>>3)&7; if (rm>= 0xc0) { GetEArw;Bit16u iw=Fetchw(); switch (which) { case 0x00:ADDW(*earw,iw,LoadRw,SaveRw);break; case 0x01: ORW(*earw,iw,LoadRw,SaveRw);break; case 0x02:ADCW(*earw,iw,LoadRw,SaveRw);break; case 0x03:SBBW(*earw,iw,LoadRw,SaveRw);break; case 0x04:ANDW(*earw,iw,LoadRw,SaveRw);break; case 0x05:SUBW(*earw,iw,LoadRw,SaveRw);break; case 0x06:XORW(*earw,iw,LoadRw,SaveRw);break; case 0x07:CMPW(*earw,iw,LoadRw,SaveRw);break; } } else { GetEAa;Bit16u iw=Fetchw(); switch (which) { case 0x00:ADDW(eaa,iw,LoadMw,SaveMw);break; case 0x01: ORW(eaa,iw,LoadMw,SaveMw);break; case 0x02:ADCW(eaa,iw,LoadMw,SaveMw);break; case 0x03:SBBW(eaa,iw,LoadMw,SaveMw);break; case 0x04:ANDW(eaa,iw,LoadMw,SaveMw);break; case 0x05:SUBW(eaa,iw,LoadMw,SaveMw);break; case 0x06:XORW(eaa,iw,LoadMw,SaveMw);break; case 0x07:CMPW(eaa,iw,LoadMw,SaveMw);break; } } break; } CASE_W(0x83) /* Grpl Ew,Ix */ { GetRM;Bitu which=(rm>>3)&7; if (rm>= 0xc0) { GetEArw;Bit16u iw=(Bit16s)Fetchbs(); switch (which) { case 0x00:ADDW(*earw,iw,LoadRw,SaveRw);break; case 0x01: ORW(*earw,iw,LoadRw,SaveRw);break; case 0x02:ADCW(*earw,iw,LoadRw,SaveRw);break; case 0x03:SBBW(*earw,iw,LoadRw,SaveRw);break; case 0x04:ANDW(*earw,iw,LoadRw,SaveRw);break; case 0x05:SUBW(*earw,iw,LoadRw,SaveRw);break; case 0x06:XORW(*earw,iw,LoadRw,SaveRw);break; case 0x07:CMPW(*earw,iw,LoadRw,SaveRw);break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -