From 3209a0e6d18010764836b681a59f0d5243d719f9 Mon Sep 17 00:00:00 2001
From: Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Date: Sat, 13 Mar 1999 17:57:26 +0000
Subject: [PATCH] Make function BX=6 round ST0 to integer.

---
 miscemu/emulate.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/miscemu/emulate.c b/miscemu/emulate.c
index 0d95dadf228..bd587dfef57 100644
--- a/miscemu/emulate.c
+++ b/miscemu/emulate.c
@@ -61,6 +61,15 @@ void WINAPI WIN87_fpmath( CONTEXT *context )
 
     case 6: /* round top of stack to integer using method AX & 0x0C00 */
         /* returns current controlword */
+        {
+            DWORD dw=0;
+            /* I don't know much about asm() programming. This could be
+             * wrong.
+             */
+           __asm__ __volatile__("frndint");
+           __asm__ __volatile__("fist %0;wait" : "=m" (dw) : : "memory");
+            TRACE(int,"On top of stack is %ld\n",dw);
+        }
         break;
 
     case 7: /* POP top of stack as integer into DX:AX */
@@ -98,6 +107,7 @@ void WINAPI WIN87_fpmath( CONTEXT *context )
         break;
 
     default: /* error. Say that loud and clear */
+        FIXME(int,"unhandled switch %d\n",BX_reg(context));
         AX_reg(context) = DX_reg(context) = 0xFFFF;
         break;
     }
-- 
GitLab