rdos/kernel/fcb.asm

69 lines
797 B
NASM

; Parse ASCIIZ string into FCB
; IN SI ptr to filename
; BX ptr to FCB
fcb_parse:
push si
push di
push ax
mov di, bx
inc di
.cleanout:
push di
mov cx, 0x0A
mov al, 0x20
rep stosb
pop di
.base_loop:
call .read
cmp al, 0x2E
je .ext_start
cmp al, 0x20
je .ret
stosb
jmp .base_loop
.ext_start:
mov di, bx
add di, 9
.ext_loop:
call .read
cmp al, 0x20
je .ret
stosb
jmp .ext_loop
.read:
lodsb
test al, al
jz .eret
cmp al, 0x0D
je .eret
ret
.eret:
pop ax
.ret:
pop ax
pop di
pop si
ret
; Print a FCB (for debugging)
; IN BX ptr FCB
fcb_print:
push dx
push cx
push si
mov si, bx
inc si
mov cx, 11
.loop:
lodsb
mov dl, al
call putc
loop .loop
mov dl, 0x26
call putc
.ret:
pop si
pop cx
pop dx
ret