(* Release 3.00 *) (* Copyright (C) 1989..1991 Jensen and Partners. All Rights Reserved *) module winfloat (*emuinit2*) public FIDRQQ = 00000H public FIWRQQ = 00000H public FIERQQ = 00000H public FIARQQ = 00000H public FISRQQ = 00000H public FICRQQ = 00000H public FJERQQ = 00000H public FJARQQ = 00000H public FJSRQQ = 00000H public FJCRQQ = 00000H public FIXRQQ = 0 (* brings this module in - known to linker *) segment _DATA(DATA,68H) segment _TEXT(CODE,28H) extrn __real_in extrn __real_out extrn __real_pdef extrn __real_sdef extrn __fpmath select _TEXT extrn __sigFp win__fpmath: push ax ; push cx ; push dx; push si; push di call far __fpmath pop di; pop si; pop dx; pop cx; pop ax ret 0 public __FloatInit : sub dx,dx sub ax,ax sub bx,bx call win__fpmath mov dx, cs mov ax, __sigFp mov bx, 3 call win__fpmath push bp mov bp, sp sub sp,2 extrn __fp_1 call far __fp_1 extrn __FloatInitStack call far __FloatInitStack extrn __FloatStoreCW call far __FloatStoreCW or ax, 0C00H and ax, ~001DH (* enable invalid op/underflow/overflow/divide by zero exception *) extrn __FloatLoadCW call far __FloatLoadCW mov sp,bp pop bp ret far 0 public __FloatFinish: mov bx, 2 call win__fpmath ret far 0 ProcessFloat = 14 extrn __fpmath public __FloatStoreSW : push bx mov bx, 8 call win__fpmath pop bx ret far 0 public __FloatStoreCW : push bx mov bx, 5 call win__fpmath pop bx ret far 0 public __FloatLoadCW : push bx mov bx, 4 call win__fpmath pop bx ret far 0 public __FloatExecSave : public __FloatExecRestore : ret far 0 public __FloatSave : fsave es:[ProcessFloat] ret far 0 public __FloatRestore : frstor ds:[ProcessFloat] ret far 0 public __FloatJmpSave : st1_reg = 20 st2_reg = 30 fld st(0), st(1) fstp tbyte es:[di][st1_reg], st(0) fld st(0), st(2) fstp tbyte es:[di][st2_reg], st(0) ret far 0 public __FloatJmpRestore : fld tbyte st(0), ds:[si][st1_reg] fstp st(2), st(0) fld tbyte st(0), ds:[si][st2_reg] fstp st(3), st(0) ret far 0 extrn __math_excep public __FloatMathExcepDos : push bp mov bp,sp extrn __FloatStoreSW call far __FloatStoreSW mov [bp][4], ax pop bp fclex jmp far __math_excep public __FloatMathExcepOs2 : push bp mov bp,sp push ax mov ax, [bp][2] mov [bp][4], ax pop ax pop bp add sp, 2 jmp far __math_excep end