47 lines
557 B
NASM
47 lines
557 B
NASM
|
; Parse ASCIIZ string into FCB
|
||
|
; IN SI ptr to filename
|
||
|
; BX ptr to FCB
|
||
|
fcb_parse:
|
||
|
push di
|
||
|
push ax
|
||
|
mov di, bx
|
||
|
xor ax, ax
|
||
|
stosb
|
||
|
.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:
|
||
|
dec si
|
||
|
pop ax
|
||
|
.ret:
|
||
|
pop ax
|
||
|
pop di
|
||
|
ret
|