]> git.sur5r.net Git - cc65/blobdiff - libsrc/atari/fdtable.s
New module fileio-test.c
[cc65] / libsrc / atari / fdtable.s
index 700cabed9b54debc5d3ebe4c4866289afdfa5b4f..14b9ff17d4db88afee733c8b60a6a6faa8654efc 100644 (file)
@@ -9,8 +9,10 @@
        .importzp tmp1,tmp2,tmp3,ptr4,sp
        .import fd_table,fd_index
        .import fdt_to_fdi
+       .export clriocb
        .export fdtoiocb
        .export fdtoiocb_down
+       .export findfreeiocb
        .export fddecusage
        .export newfd
 
@@ -61,14 +63,32 @@ ok_notlast:
        lda     #1                      ; clears Z
        jmp     retiocb
 
-.endproc
+.endproc       ; fdtoiocb_down
 
 inval: ldx     #$ff                    ; sets N
        rts
 
 
+; clear iocb except for ICHID field
+; expects X to be index to IOCB (0,$10,$20,etc.)
+; all registers destroyed
+
+.proc  clriocb
+
+       inx                     ; don't clear ICHID
+       ldy     #15
+       lda     #0
+loop:  sta     ICHID,x
+       inx
+       dey
+       bne     loop
+       rts
+
+.endproc
+
+
 ; gets fd in ax
-; return iocb index in X
+; return iocb index in A, fd_table index in X
 ; return N bit set for invalid fd
 ; all registers destroyed
 .proc  fdtoiocb
@@ -90,7 +110,31 @@ inval:      ldx     #$ff                    ; sets N
        lda     fd_table+ft_iocb,x      ; get iocb
        rts
 
-.endproc
+.endproc       ; fdtoiocb
+
+; find a free iocb
+; no entry parameters
+; return ZF = 0/1 for not found/found
+;        index in X if found
+; all registers destroyed
+
+.proc  findfreeiocb
+
+       ldx     #0
+       ldy     #$FF
+loop:  tya
+       cmp     ICHID,x
+       beq     found
+       txa
+       clc
+       adc     #$10
+       tax
+       cmp     #$80
+       bcc     loop
+       inx                     ; return ZF cleared
+found: rts
+
+.endproc       ; findfreeiocb
 
 ; decrements usage counter for fd
 ; if 0 reached, it's marked as unused
@@ -123,7 +167,7 @@ inval:      ldx     #$ff                    ; sets N
        sta     fd_table+ft_iocb,x      ; clear table entry
 ret:   rts
 
-.endproc
+.endproc       ; fddecusage
 
 ; newfd
 ;
@@ -334,5 +378,5 @@ finish:     lda     ptr4
        pla
        rts
 
-.endproc
+.endproc       ; newfd