Files
sibo-playground/code/SIBOSDK/src/r_emul.a
T
2026-07-06 18:01:36 +01:00

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