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

📄 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 页
字号:
#endif#if CPU_PIC_CHECK			if (GETFLAG(IF) && PIC_IRQCheck) return CBRET_NONE;#endif			continue;		}	CASE_B(0xd0)												/* GRP2 Eb,1 */		GRP2B(1);break;	CASE_W(0xd1)												/* GRP2 Ew,1 */		GRP2W(1);break;	CASE_B(0xd2)												/* GRP2 Eb,CL */		GRP2B(reg_cl);break;	CASE_W(0xd3)												/* GRP2 Ew,CL */		GRP2W(reg_cl);break;	CASE_B(0xd4)												/* AAM Ib */		AAM(Fetchb());break;	CASE_B(0xd5)												/* AAD Ib */		AAD(Fetchb());break;	CASE_B(0xd6)												/* SALC */		reg_al = get_CF() ? 0xFF : 0;		break;	CASE_B(0xd7)												/* XLAT */		if (TEST_PREFIX_ADDR) {			reg_al=LoadMb(BaseDS+(Bit32u)(reg_ebx+reg_al));		} else {			reg_al=LoadMb(BaseDS+(Bit16u)(reg_bx+reg_al));		}		break;#ifdef CPU_FPU	CASE_B(0xd8)												/* FPU ESC 0 */		 FPU_ESC(0);break;	CASE_B(0xd9)												/* FPU ESC 1 */		 FPU_ESC(1);break;	CASE_B(0xda)												/* FPU ESC 2 */		 FPU_ESC(2);break;	CASE_B(0xdb)												/* FPU ESC 3 */		 FPU_ESC(3);break;	CASE_B(0xdc)												/* FPU ESC 4 */		 FPU_ESC(4);break;	CASE_B(0xdd)												/* FPU ESC 5 */		 FPU_ESC(5);break;	CASE_B(0xde)												/* FPU ESC 6 */		 FPU_ESC(6);break;	CASE_B(0xdf)												/* FPU ESC 7 */		 FPU_ESC(7);break;#else 	CASE_B(0xd8)												/* FPU ESC 0 */	CASE_B(0xd9)												/* FPU ESC 1 */	CASE_B(0xda)												/* FPU ESC 2 */	CASE_B(0xdb)												/* FPU ESC 3 */	CASE_B(0xdc)												/* FPU ESC 4 */	CASE_B(0xdd)												/* FPU ESC 5 */	CASE_B(0xde)												/* FPU ESC 6 */	CASE_B(0xdf)												/* FPU ESC 7 */		{			LOG(LOG_CPU,LOG_NORMAL)("FPU used");			Bit8u rm=Fetchb();			if (rm<0xc0) GetEAa;		}		break;#endif	CASE_W(0xe0)												/* LOOPNZ */		if (TEST_PREFIX_ADDR) {			JumpCond16_b(--reg_ecx && !get_ZF());		} else {			JumpCond16_b(--reg_cx && !get_ZF());		}		break;	CASE_W(0xe1)												/* LOOPZ */		if (TEST_PREFIX_ADDR) {			JumpCond16_b(--reg_ecx && get_ZF());		} else {			JumpCond16_b(--reg_cx && get_ZF());		}		break;	CASE_W(0xe2)												/* LOOP */		if (TEST_PREFIX_ADDR) {				JumpCond16_b(--reg_ecx);		} else {			JumpCond16_b(--reg_cx);		}		break;	CASE_W(0xe3)												/* JCXZ */		JumpCond16_b(!(reg_ecx & AddrMaskTable[core.prefixes& PREFIX_ADDR]));		break;	CASE_B(0xe4)												/* IN AL,Ib */		{				Bitu port=Fetchb();			if (CPU_IO_Exception(port,1)) RUNEXCEPTION();			reg_al=IO_ReadB(port);			break;		}	CASE_W(0xe5)												/* IN AX,Ib */		{				Bitu port=Fetchb();			if (CPU_IO_Exception(port,2)) RUNEXCEPTION();			reg_al=IO_ReadW(port);			break;		}	CASE_B(0xe6)												/* OUT Ib,AL */		{			Bitu port=Fetchb();			if (CPU_IO_Exception(port,1)) RUNEXCEPTION();			IO_WriteB(port,reg_al);			break;		}			CASE_W(0xe7)												/* OUT Ib,AX */		{			Bitu port=Fetchb();			if (CPU_IO_Exception(port,2)) RUNEXCEPTION();			IO_WriteW(port,reg_ax);			break;		}	CASE_W(0xe8)												/* CALL Jw */		{ 			Bit16u addip=Fetchws();			SAVEIP;			Push_16(reg_eip);			reg_eip=(Bit16u)(reg_eip+addip);			continue;		}	CASE_W(0xe9)												/* JMP Jw */		{ 			Bit16u addip=Fetchws();			SAVEIP;			reg_eip=(Bit16u)(reg_eip+addip);			continue;		}	CASE_W(0xea)												/* JMP Ap */		{ 			Bit16u newip=Fetchw();			Bit16u newcs=Fetchw();			FillFlags();			CPU_JMP(false,newcs,newip,GETIP);#if CPU_TRAP_CHECK			if (GETFLAG(TF)) {					cpudecoder=CPU_Core_Normal_Trap_Run;				return CBRET_NONE;			}#endif			continue;		}	CASE_W(0xeb)												/* JMP Jb */		{ 			Bit16s addip=Fetchbs();			SAVEIP;			reg_eip=(Bit16u)(reg_eip+addip);			continue;		}	CASE_B(0xec)												/* IN AL,DX */		if (CPU_IO_Exception(reg_dx,1)) RUNEXCEPTION();		reg_al=IO_ReadB(reg_dx);		break;	CASE_W(0xed)												/* IN AX,DX */		if (CPU_IO_Exception(reg_dx,2)) RUNEXCEPTION();		reg_ax=IO_ReadW(reg_dx);		break;	CASE_B(0xee)												/* OUT DX,AL */		if (CPU_IO_Exception(reg_dx,1)) RUNEXCEPTION();		IO_WriteB(reg_dx,reg_al);		break;	CASE_W(0xef)												/* OUT DX,AX */		if (CPU_IO_Exception(reg_dx,2)) RUNEXCEPTION();		IO_WriteW(reg_dx,reg_ax);		break;	CASE_B(0xf0)												/* LOCK */		LOG(LOG_CPU,LOG_NORMAL)("CPU:LOCK"); /* FIXME: see case D_LOCK in core_full/load.h */		break;	CASE_B(0xf1)												/* ICEBP */		FillFlags();		CPU_SW_Interrupt_NoIOPLCheck(1,GETIP);#if CPU_TRAP_CHECK		cpu.trap_skip=true;#endif		continue;	CASE_B(0xf2)												/* REPNZ */		DO_PREFIX_REP(false);			break;			CASE_B(0xf3)												/* REPZ */		DO_PREFIX_REP(true);			break;			CASE_B(0xf4)												/* HLT */		if (cpu.pmode && cpu.cpl) EXCEPTION(EXCEPTION_GP);		FillFlags();		CPU_HLT(GETIP);		return CBRET_NONE;		//Needs to return for hlt cpu core	CASE_B(0xf5)												/* CMC */		FillFlags();		SETFLAGBIT(CF,!(reg_flags & FLAG_CF));		break;	CASE_B(0xf6)												/* GRP3 Eb(,Ib) */		{				GetRM;Bitu which=(rm>>3)&7;			switch (which) {			case 0x00:											/* TEST Eb,Ib */			case 0x01:											/* TEST Eb,Ib Undocumented*/				{					if (rm >= 0xc0 ) {GetEArb;TESTB(*earb,Fetchb(),LoadRb,0)}					else {GetEAa;TESTB(eaa,Fetchb(),LoadMb,0);}					break;				}			case 0x02:											/* NOT Eb */				{					if (rm >= 0xc0 ) {GetEArb;*earb=~*earb;}					else {GetEAa;SaveMb(eaa,~LoadMb(eaa));}					break;				}			case 0x03:											/* NEG Eb */				{					lflags.type=t_NEGb;					if (rm >= 0xc0 ) {						GetEArb;lf_var1b=*earb;lf_resb=0-lf_var1b;						*earb=lf_resb;					} else {						GetEAa;lf_var1b=LoadMb(eaa);lf_resb=0-lf_var1b; 						SaveMb(eaa,lf_resb);					}					break;				}			case 0x04:											/* MUL AL,Eb */				RMEb(MULB);				break;			case 0x05:											/* IMUL AL,Eb */				RMEb(IMULB);				break;			case 0x06:											/* DIV Eb */				RMEb(DIVB);				break;			case 0x07:											/* IDIV Eb */				RMEb(IDIVB);				break;			}			break;		}	CASE_W(0xf7)												/* GRP3 Ew(,Iw) */		{ 			GetRM;Bitu which=(rm>>3)&7;			switch (which) {			case 0x00:											/* TEST Ew,Iw */			case 0x01:											/* TEST Ew,Iw Undocumented*/				{					if (rm >= 0xc0 ) {GetEArw;TESTW(*earw,Fetchw(),LoadRw,SaveRw);}					else {GetEAa;TESTW(eaa,Fetchw(),LoadMw,SaveMw);}					break;				}			case 0x02:											/* NOT Ew */				{					if (rm >= 0xc0 ) {GetEArw;*earw=~*earw;}					else {GetEAa;SaveMw(eaa,~LoadMw(eaa));}					break;				}			case 0x03:											/* NEG Ew */				{					lflags.type=t_NEGw;					if (rm >= 0xc0 ) {						GetEArw;lf_var1w=*earw;lf_resw=0-lf_var1w;						*earw=lf_resw;					} else {						GetEAa;lf_var1w=LoadMw(eaa);lf_resw=0-lf_var1w; 						SaveMw(eaa,lf_resw);					}					break;				}			case 0x04:											/* MUL AX,Ew */				RMEw(MULW);				break;			case 0x05:											/* IMUL AX,Ew */				RMEw(IMULW)				break;			case 0x06:											/* DIV Ew */				RMEw(DIVW)				break;			case 0x07:											/* IDIV Ew */				RMEw(IDIVW)				break;			}			break;		}	CASE_B(0xf8)												/* CLC */		FillFlags();		SETFLAGBIT(CF,false);		break;	CASE_B(0xf9)												/* STC */		FillFlags();		SETFLAGBIT(CF,true);		break;	CASE_B(0xfa)												/* CLI */		if (CPU_CLI()) RUNEXCEPTION();		break;	CASE_B(0xfb)												/* STI */		if (CPU_STI()) RUNEXCEPTION();#if CPU_PIC_CHECK		if (GETFLAG(IF) && PIC_IRQCheck) goto decode_end;#endif		break;	CASE_B(0xfc)												/* CLD */		SETFLAGBIT(DF,false);		cpu.direction=1;		break;	CASE_B(0xfd)												/* STD */		SETFLAGBIT(DF,true);		cpu.direction=-1;		break;	CASE_B(0xfe)												/* GRP4 Eb */		{			GetRM;Bitu which=(rm>>3)&7;			switch (which) {			case 0x00:										/* INC Eb */				RMEb(INCB);				break;					case 0x01:										/* DEC Eb */				RMEb(DECB);				break;			case 0x07:										/* CallBack */				{					Bitu cb=Fetchw();					FillFlags();SAVEIP;					return cb;				}			default:				E_Exit("Illegal GRP4 Call %d",(rm>>3) & 7);				break;			}			break;		}	CASE_W(0xff)												/* GRP5 Ew */		{			GetRM;Bitu which=(rm>>3)&7;			switch (which) {			case 0x00:										/* INC Ew */				RMEw(INCW);				break;					case 0x01:										/* DEC Ew */				RMEw(DECW);				break;					case 0x02:										/* CALL Ev */				if (rm >= 0xc0 ) {GetEArw;reg_eip=*earw;}				else {GetEAa;reg_eip=LoadMw(eaa);}				Push_16(GETIP);				continue;			case 0x03:										/* CALL Ep */				{					if (rm >= 0xc0) goto illegal_opcode;					GetEAa;					Bit16u newip=LoadMw(eaa);					Bit16u newcs=LoadMw(eaa+2);					FillFlags();					CPU_CALL(false,newcs,newip,GETIP);#if CPU_TRAP_CHECK					if (GETFLAG(TF)) {							cpudecoder=CPU_Core_Normal_Trap_Run;						return CBRET_NONE;					}#endif					continue;				}				break;			case 0x04:										/* JMP Ev */					if (rm >= 0xc0 ) {GetEArw;reg_eip=*earw;}				else {GetEAa;reg_eip=LoadMw(eaa);}				continue;			case 0x05:										/* JMP Ep */					{					if (rm >= 0xc0) goto illegal_opcode;					GetEAa;					Bit16u newip=LoadMw(eaa);					Bit16u newcs=LoadMw(eaa+2);					FillFlags();					CPU_JMP(false,newcs,newip,GETIP);#if CPU_TRAP_CHECK					if (GETFLAG(TF)) {							cpudecoder=CPU_Core_Normal_Trap_Run;						return CBRET_NONE;					}#endif					continue;				}				break;			case 0x06:										/* PUSH Ev */				if (rm >= 0xc0 ) {GetEArw;Push_16(*earw);}				else {GetEAa;Push_16(LoadMw(eaa));}				break;			default:				E_Exit("CPU:GRP5:Illegal Call %2X",which);				break;			}			break;		}			

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -