diff --git a/src/cpu/core_dyn_x86/dyn_fpu.h b/src/cpu/core_dyn_x86/dyn_fpu.h index 1373fecf..90e3ba09 100644 --- a/src/cpu/core_dyn_x86/dyn_fpu.h +++ b/src/cpu/core_dyn_x86/dyn_fpu.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dyn_fpu.h,v 1.4 2009-05-27 09:15:41 qbix79 Exp $ */ +/* $Id: dyn_fpu.h,v 1.5 2009-09-23 20:55:19 c2woody Exp $ */ #include "dosbox.h" #if C_FPU @@ -593,6 +593,11 @@ static void dyn_fpu_esc7(){ Bitu sub=(decode.modrm.val & 7); if (decode.modrm.val >= 0xc0) { switch (group){ + case 0x00: /* FFREEP STi*/ + dyn_fpu_top(); + gen_call_function((void*)&FPU_FFREE,"%Ddr",DREG(EA)); + gen_call_function((void*)&FPU_FPOP,""); + break; case 0x01: /* FXCH STi*/ dyn_fpu_top(); gen_call_function((void*)&FPU_FXCH,"%Ddr%Ddr",DREG(TMPB),DREG(EA)); diff --git a/src/cpu/core_dyn_x86/dyn_fpu_dh.h b/src/cpu/core_dyn_x86/dyn_fpu_dh.h index d4d606f0..cc49fe55 100644 --- a/src/cpu/core_dyn_x86/dyn_fpu_dh.h +++ b/src/cpu/core_dyn_x86/dyn_fpu_dh.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dyn_fpu_dh.h,v 1.6 2009-05-27 09:15:41 qbix79 Exp $ */ +/* $Id: dyn_fpu_dh.h,v 1.7 2009-09-23 20:55:19 c2woody Exp $ */ #include "dosbox.h" #if C_FPU @@ -408,6 +408,10 @@ static void dh_fpu_esc7(){ Bitu sub=(decode.modrm.val & 7); if (decode.modrm.val >= 0xc0) { switch (group){ + case 0x00: /* FFREEP STi*/ + cache_addb(0xdf); + cache_addb(decode.modrm.val); + break; case 0x01: /* FXCH STi*/ cache_addb(0xdf); cache_addb(decode.modrm.val); diff --git a/src/cpu/core_dynrec/dyn_fpu.h b/src/cpu/core_dynrec/dyn_fpu.h index 6d3e7091..43ebff4d 100644 --- a/src/cpu/core_dynrec/dyn_fpu.h +++ b/src/cpu/core_dynrec/dyn_fpu.h @@ -16,6 +16,8 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* $Id: dyn_fpu.h,v 1.8 2009-09-23 20:55:19 c2woody Exp $ */ + #include "dosbox.h" #if C_FPU @@ -602,6 +604,11 @@ static void dyn_fpu_esc7(){ dyn_get_modrm(); if (decode.modrm.val >= 0xc0) { switch (decode.modrm.reg){ + case 0x00: /* FFREEP STi */ + dyn_fpu_top(); + gen_call_function_R((void*)&FPU_FFREE,FC_OP2); + gen_call_function_raw((void*)&FPU_FPOP); + break; case 0x01: /* FXCH STi*/ dyn_fpu_top(); gen_call_function_RR((void*)&FPU_FXCH,FC_OP1,FC_OP2);