137 lines
2.4 KiB
Plaintext
137 lines
2.4 KiB
Plaintext
(* 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
|