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

📄 dyn_fpu_dh.h

📁 DOSBox emulates a full x86 pc with sound and dos. Its main use is to run old dosgames on platforms w
💻 H
📖 第 1 页 / 共 2 页
字号:
				LOG(LOG_FPU,LOG_ERROR)("8087 only fpu code used esc 3: group 4: subfuntion :%d",sub);				break;			case 0x02:				//FNCLEX FCLEX				cache_addb(0xdb);				cache_addb(decode.modrm.val);				break;			case 0x03:				//FNINIT FINIT				gen_call_function((void*)&FPU_FNINIT_DH,""); 				cache_addb(0xdb);				cache_addb(decode.modrm.val);				break;			case 0x04:				//FNSETPM			case 0x05:				//FRSTPM//				LOG(LOG_FPU,LOG_ERROR)("80267 protected mode (un)set. Nothing done");				break;			default:				E_Exit("ESC 3:ILLEGAL OPCODE group %d subfunction %d",group,sub);			}			break;		default:			LOG(LOG_FPU,LOG_WARN)("ESC 3:Unhandled group %d subfunction %d",group,sub);			break;		}	} else {		Bitu group=(decode.modrm.val >> 3) & 7;		Bitu sub=(decode.modrm.val & 7);		dyn_fill_ea(); 		switch(group){		case 0x00:	/* FILD */			gen_call_function((void*)&FPU_FLD_32,"%Ddr",DREG(EA));			cache_addb(0xdb);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			break;		case 0x01:	/* FISTTP */			LOG(LOG_FPU,LOG_WARN)("ESC 3 EA:Unhandled group %d subfunction %d",group,sub);			break;		case 0x02:	/* FIST */			cache_addb(0xdb);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			gen_call_function((void*)&FPU_FST_32,"%Ddr",DREG(EA));			break;		case 0x03:	/* FISTP */			cache_addb(0xdb);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			gen_call_function((void*)&FPU_FST_32,"%Ddr",DREG(EA));			break;		case 0x05:	/* FLD 80 Bits Real */			gen_call_function((void*)&FPU_FLD_80,"%Ddr",DREG(EA));			cache_addb(0xdb);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			break;		case 0x07:	/* FSTP 80 Bits Real */			cache_addb(0xdb);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			gen_call_function((void*)&FPU_FST_80,"%Ddr",DREG(EA));			break;		default:			LOG(LOG_FPU,LOG_WARN)("ESC 3 EA:Unhandled group %d subfunction %d",group,sub);		}	}}static void dh_fpu_esc4(){	dyn_get_modrm();  	Bitu group=(decode.modrm.val >> 3) & 7;	Bitu sub=(decode.modrm.val & 7);	if (decode.modrm.val >= 0xc0) { 		cache_addb(0xdc);		cache_addb(decode.modrm.val);	} else { 		dyn_fill_ea(); 		gen_call_function((void*)&FPU_FLD_64,"%Ddr",DREG(EA)); 		cache_addb(0xdc);		cache_addb(0x05|(decode.modrm.reg<<3));		cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));	}}static void dh_fpu_esc5(){	dyn_get_modrm();  	if (decode.modrm.val >= 0xc0) { 		cache_addb(0xdd);		cache_addb(decode.modrm.val);	} else {		dyn_fill_ea(); 		Bitu group=(decode.modrm.val >> 3) & 7;		Bitu sub=(decode.modrm.val & 7);		switch(group){		case 0x00:  /* FLD double real*/			gen_call_function((void*)&FPU_FLD_64,"%Ddr",DREG(EA));			cache_addb(0xdd);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			break;		case 0x01:  /* FISTTP longint*/			LOG(LOG_FPU,LOG_WARN)("ESC 5 EA:Unhandled group %d subfunction %d",group,sub);			break;		case 0x02:   /* FST double real*/			cache_addb(0xdd);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			gen_call_function((void*)&FPU_FST_64,"%Ddr",DREG(EA));			break;		case 0x03:	/* FSTP double real*/			cache_addb(0xdd);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			gen_call_function((void*)&FPU_FST_64,"%Ddr",DREG(EA));			break;		case 0x04:	/* FRSTOR */			gen_call_function((void*)&FPU_FRSTOR_DH,"%Ddr",DREG(EA));			cache_addb(0xdd);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp_state[0])));			break;		case 0x06:	/* FSAVE */			cache_addb(0xdd);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp_state[0])));			gen_call_function((void*)&FPU_FSAVE_DH,"%Ddr",DREG(EA));			cache_addb(0xdb);			cache_addb(0xe3);			break;		case 0x07:   /* FNSTSW */			cache_addb(0xdd);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			gen_call_function((void*)&FPU_FST_16,"%Ddr",DREG(EA));			break;		default:			LOG(LOG_FPU,LOG_WARN)("ESC 5 EA:Unhandled group %d subfunction %d",group,sub);		}	}}static void dh_fpu_esc6(){	dyn_get_modrm();  	Bitu group=(decode.modrm.val >> 3) & 7;	Bitu sub=(decode.modrm.val & 7);	if (decode.modrm.val >= 0xc0) { 		cache_addb(0xde);		cache_addb(decode.modrm.val);	} else {		dyn_fill_ea(); 		gen_call_function((void*)&FPU_FLD_16,"%Ddr",DREG(EA)); 		cache_addb(0xde);		cache_addb(0x05|(decode.modrm.reg<<3));		cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));	}}static void dh_fpu_esc7(){	dyn_get_modrm();  	Bitu group=(decode.modrm.val >> 3) & 7;	Bitu sub=(decode.modrm.val & 7);	if (decode.modrm.val >= 0xc0) { 		switch (group){		case 0x01: /* FXCH STi*/			cache_addb(0xdf);			cache_addb(decode.modrm.val);			break;		case 0x02:  /* FSTP STi*/		case 0x03:  /* FSTP STi*/			cache_addb(0xdf);			cache_addb(decode.modrm.val);			break;		case 0x04:			switch(sub){				case 0x00:     /* FNSTSW AX*/					cache_addb(0xdd);					cache_addb(0x05|(0x07<<3));					cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));					gen_load_host(&(dyn_dh_fpu.temp.m1),DREG(TMPB),4);					gen_dop_word(DOP_MOV,false,DREG(EAX),DREG(TMPB));					gen_releasereg(DREG(TMPB));					break;				default:					LOG(LOG_FPU,LOG_WARN)("ESC 7:Unhandled group %d subfunction %d",group,sub);					break;			}			break;		default:			LOG(LOG_FPU,LOG_WARN)("ESC 7:Unhandled group %d subfunction %d",group,sub);			break;		}	} else {		dyn_fill_ea(); 		switch(group){		case 0x00:  /* FILD Bit16s */			gen_call_function((void*)&FPU_FLD_16,"%Ddr",DREG(EA));			cache_addb(0xdf);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			break;		case 0x01:			LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub);			break;		case 0x02:   /* FIST Bit16s */			cache_addb(0xdf);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			gen_call_function((void*)&FPU_FST_16,"%Ddr",DREG(EA));			break;		case 0x03:	/* FISTP Bit16s */			cache_addb(0xdf);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			gen_call_function((void*)&FPU_FST_16,"%Ddr",DREG(EA));			break;		case 0x04:   /* FBLD packed BCD */			gen_call_function((void*)&FPU_FLD_80,"%Ddr",DREG(EA));			cache_addb(0xdf);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			break;		case 0x05:  /* FILD Bit64s */			gen_call_function((void*)&FPU_FLD_64,"%Ddr",DREG(EA));			cache_addb(0xdf);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			break;		case 0x06:	/* FBSTP packed BCD */			cache_addb(0xdf);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			gen_call_function((void*)&FPU_FST_80,"%Ddr",DREG(EA));			break;		case 0x07:  /* FISTP Bit64s */			cache_addb(0xdf);			cache_addb(0x05|(decode.modrm.reg<<3));			cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));			gen_call_function((void*)&FPU_FST_64,"%Ddr",DREG(EA));			break;		default:			LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub);			break;		}	}}#endif

⌨️ 快捷键说明

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