⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prefix_none.h

📁 DOSBox emulates a full x86 pc with sound and dos. Its main use is to run old dosgames on platforms w
💻 H
📖 第 1 页 / 共 3 页
字号:
/* *  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 + -