diff --git a/src/fpu/fpu.cpp b/src/fpu/fpu.cpp index 361af493..636b2f45 100644 --- a/src/fpu/fpu.cpp +++ b/src/fpu/fpu.cpp @@ -298,15 +298,20 @@ void FPU_ESC1_Normal(Bitu rm) { FPU_PUSH(1.0); break; case 0x01: /* FLDL2T */ + FPU_PUSH(L2T); + break; case 0x02: /* FLDL2E */ - LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub); + FPU_PUSH(L2E); break; case 0x03: /* FLDPI */ FPU_PUSH(PI); break; case 0x04: /* FLDLG2 */ + FPU_PUSH(LG2); + break; case 0x05: /* FLDLN2 */ - LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub); + FPU_PUSH(LN2); + break; case 0x06: /* FLDZ*/ FPU_PUSH_ZERO(); break; @@ -611,27 +616,39 @@ void FPU_ESC7_EA(Bitu rm,PhysPt addr) { Bitu group=(rm >> 3) & 7; Bitu sub=(rm & 7); switch(group){ - case 0x00: /* FLD */ + case 0x00: /* FILD Bit16s */ { Bit16s blah = mem_readw(addr); FPU_PUSH( static_cast(blah)); } break; - case 0x01: /* FISTTP */ + case 0x01: /* FISTTP Bit16s */ LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub); break; - case 0x02: /* FIST */ + case 0x02: /* FIST Bit16s */ { Bitu top = FPU_GET_TOP(); mem_writew(addr,static_cast(FROUND(fpu.regs[top].d))); } break; - case 0x03: /*FISTP */ + case 0x03: /* FISTP Bit16s */ { Bitu top = FPU_GET_TOP(); mem_writew(addr,static_cast(FROUND(fpu.regs[top].d))); FPU_FPOP(); } break; + case 0x05: /* FILD Bit32s */ + { + Bit32s blah = mem_readd(addr); + FPU_PUSH( static_cast(blah)); + } + break; + case 0x07: /* FISTP Bit32s */ + { Bitu top = FPU_GET_TOP(); + mem_writed(addr,static_cast(FROUND(fpu.regs[top].d))); + FPU_FPOP(); + } + break; default: LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub); } diff --git a/src/fpu/fpu_types.h b/src/fpu/fpu_types.h index 33bc9e7b..44260e13 100644 --- a/src/fpu/fpu_types.h +++ b/src/fpu/fpu_types.h @@ -38,4 +38,8 @@ enum FPU_Round { ROUND_Chop = 3 }; //get pi from a real library -#define PI 3.14159265358979323846 \ No newline at end of file +#define PI 3.14159265358979323846 +#define L2E 1.4426950408889634 +#define L2T 3.3219280948873623 +#define LN2 0.69314718055994531 +#define LG2 0.3010299956639812 \ No newline at end of file