2009-11-23 21:59:29 +00:00
|
|
|
;
|
|
|
|
; Christian Groessler, May-2000
|
|
|
|
; Moved from fdtable.s to it's own file by Daniel Serpell, 2009.
|
|
|
|
;
|
|
|
|
; Convert file descriptor to IOCB number
|
|
|
|
;
|
|
|
|
|
2013-05-09 11:56:54 +00:00
|
|
|
.include "atari.inc"
|
|
|
|
.include "fd.inc"
|
|
|
|
.import fd_table,fd_index
|
|
|
|
.export fdtoiocb
|
2009-11-23 21:59:29 +00:00
|
|
|
|
2013-05-09 11:56:54 +00:00
|
|
|
.code
|
2009-11-23 21:59:29 +00:00
|
|
|
|
|
|
|
; gets fd in ax
|
|
|
|
; return iocb index in A, fd_table index in X
|
|
|
|
; return N bit set for invalid fd
|
|
|
|
; all registers destroyed
|
2013-05-09 11:56:54 +00:00
|
|
|
.proc fdtoiocb
|
2009-11-23 21:59:29 +00:00
|
|
|
|
2013-05-09 11:56:54 +00:00
|
|
|
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
|
2009-11-23 21:59:29 +00:00
|
|
|
|
2013-05-09 11:56:54 +00:00
|
|
|
inval: ldx #$ff ; sets N
|
|
|
|
rts
|
2009-11-23 21:59:29 +00:00
|
|
|
|
2013-05-09 11:56:54 +00:00
|
|
|
.endproc ; fdtoiocb
|