cc65/libsrc/atari/fdtoiocb.s

42 lines
1.0 KiB
ArmAsm

;
; Christian Groessler, May-2000
; Moved from fdtable.s to it's own file by Daniel Serpell, 2009.
;
; Convert file descriptor to IOCB number
;
.include "atari.inc"
.include "fd.inc"
.import fd_table,fd_index
.export fdtoiocb
.code
; gets fd in ax
; return iocb index in A, fd_table index in X
; return N bit set for invalid fd
; all registers destroyed
.proc fdtoiocb
cpx #0
bne inval
cmp #MAX_FD_INDEX
bcs inval
tax
lda fd_index,x
asl a ; create index into fd table
asl a
tax
lda #$ff
cmp fd_table+ft_iocb,x ; entry in use?
beq inval ; no, return error
lda fd_table+ft_usa,x ; get usage counter
beq inval ; 0? should not happen
lda fd_table+ft_iocb,x ; get iocb
rts
inval: ldx #$ff ; sets N
rts
.endproc ; fdtoiocb