; allocates a new fd in the indirection table
;
- .include "atari.inc"
- .include "fd.inc"
- .include "_file.inc"
- .importzp tmp1
- .import fd_table, fd_index
+ .include "atari.inc"
+ .include "fd.inc"
+ .include "_file.inc"
+ .importzp tmp1
+ .import fd_table, fd_index
- .export fdt_to_fdi,getfd
+ .export fdt_to_fdi,getfd
- .code
+ .code
; fdt_to_fdi
; returns a fd_index entry pointing to the given ft_table entry
; return C = 0/1 for OK/error
; return fd_index entry in A if OK
; registers destroyed
-.proc fdt_to_fdi
+.proc fdt_to_fdi
- tay
- lda #$ff
- tax
- inx
-loop: cmp fd_index,x
- beq found
- inx
- cpx #MAX_FD_INDEX
- bcc loop
- rts
+ tay
+ lda #$ff
+ tax
+ inx
+loop: cmp fd_index,x
+ beq found
+ inx
+ cpx #MAX_FD_INDEX
+ bcc loop
+ rts
-found: tya
- sta fd_index,x
- txa
- clc
- rts
+found: tya
+ sta fd_index,x
+ txa
+ clc
+ rts
.endproc
; return C = 0/1 for OK/error
; returns fd in A if OK
; registers destroyed, tmp1 destroyed
-.proc getfd
+.proc getfd
- sta tmp1 ; save fd_table entry
- jsr fdt_to_fdi
- bcs error
+ sta tmp1 ; save fd_table entry
+ jsr fdt_to_fdi
+ bcs error
- pha
- lda tmp1
- asl a
- asl a ; also clears C
- tax
- inc fd_table+ft_usa,x ; increment usage counter
- pla
-error: rts
+ pha
+ lda tmp1
+ asl a
+ asl a ; also clears C
+ tax
+ inc fd_table+ft_usa,x ; increment usage counter
+ pla
+error: rts
.endproc