(* Release 3.00 *) module r_emul include "corelib.inc" include "epocdefs.inc" public FIDRQQ = 05C32H public FIWRQQ = 0A23DH public FIERQQ = 01632H public FIARQQ = 0FE32H public FISRQQ = 00632H public FICRQQ = 00E32H public FJERQQ = 00000H public FJARQQ = 04000H public FJSRQQ = 08000H public FJCRQQ = 0C000H public FIXRQQ = 0 segment _TEXT(CODE,28H) segment _DATA(DATA,28H) __emName: db 'SYS$8087.LDD',0 __lddName: db 'EM$:',0 __lddNameX: db 'EM$',0 extrn __SH_sword extrn _DatCommandPtr segment _DATA(DATA,28H) __FChan: dw 0 select _TEXT extrn __fp_1 extrn __sigFp extrn __math_excep extrn __FatalErrorPos extrn __FatalError xEnv = -256 xBuf = xEnv-MaxPathSize public __FloatInit: push bp mov bp, sp add sp, xBuf ; sub dx, dx mov cx, [_DatCommandPtr] jcxz noCommandLine tryAgain: mov bx, __emName lea di, [bp][xBuf] sub si, si sub al, al mov ah, NmFilParse int FilManager jc noCommandLine mov bx, di xor al, al mov ah, NmDevLoadLDD int DevManager jnc loadedLdd cmp al, ExistsErr je loadedLdd test dx, dx jne openFailed noCommandLine: inc dx lea si, [bp][xEnv] mov di, __lddNameX mov ah, NmGenEnvStringGet int GenManager jc openFailed mov cx, si jmp tryAgain loadedLdd: mov dx, __sigFp mov cx, -1 mov bx, __lddName mov ah, NmIoOpen int DevManager jc openFailed mov [__FChan], ax ; mov sp, bp pop bp jmp __fp_1 ; openFailed: call __FatalErrorPos mov bx, 0FFFFH jmp __FatalError public __FloatFinish: mov bx, [__FChan] test bx, bx je skipClose mov ah, NmIoClose int IoManager mov bx, __lddNameX mov dx, LDDSignature mov ah, NmDevDelete int DevManager skipClose: ret 0 public __FloatMathExcepDos : fstsw [__SH_sword] fclex jmp near __math_excep public __FloatJmpSave : fld st(0), st(1) fstp tbyte [di][_j_st1], st(0) fld st(0), st(2) fstp tbyte [di][_j_st2], st(0) ret 0 public __FloatJmpRestore : fld tbyte st(0), [si][_j_st1] fstp st(2), st(0) fld tbyte st(0), [si][_j_st2] fstp st(3), st(0) ret 0 end