rdos/kernel/fcb.asm

76 lines
1.2 KiB
NASM
Raw Normal View History

2020-10-13 22:10:23 +02:00
section .text
; set default drive for current process
; IN dl drive number
setdd: push ds
mov ds, [cs:curpsp]
mov [PSPDD], dl
pop ds
ret
; get default drive for current process
; OUT al drive number
getdd: push ds
mov ds, [cs:curpsp]
mov al, [PSPDD]
pop ds
ret
; auto-complete drive field in fcb
; IN ds:dx far ptr FCB
; OUT si copy of dx
fixfcb: mov si, dx
cmp byte [si], 0
jne .ret
call getdd
inc dl
mov byte [si], dl
.ret: mov dx, si
ret
; Load root directory entry
; IN ax number of directory entry
lddir: push ax
mov cl, 4
shr ax, cl
xor dx, dx
call maprd
; get si to point to entry
pop si
mov cl, 5
shl si, cl
and si, 0x1FF
add si, dskbuf
ret
; find next file
fnfile: mov ax, [es:bx+FCBDEN]
inc word [es:bx+FCBDEN]
; bail out if we are at end of dir
cmp ax, [bpb+BPBRDE]
jnc .err
; load entry and first byte
push bx
call lddir
pop bx
; next if hidden, dir or vol label
test byte [si+0x0B], 0xDA
jnz fnfile
; bail out if end of dir
mov al, [si]
cmp al, 0
je .err
; next if deleted entry
cmp al, 0xE5
je fnfile
clc
ret
.err: stc
ret
; Open file using FCB
; IN DS:DX far ptr to FCB
open: call fixfcb
int 3
ret