1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-23 19:29:37 +00:00

move fdtoiocb function into its own file -- idea by Daniel Serpell

git-svn-id: svn://svn.cc65.org/cc65/trunk@4478 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cpg 2009-11-23 21:59:29 +00:00
parent 5a593b8105
commit fa25cc732f
3 changed files with 44 additions and 26 deletions

View File

@ -78,6 +78,7 @@ OBJS = _scrsize.o \
diowritev.o \
dosdetect.o \
fdtable.o \
fdtoiocb.o \
getargs.o \
getdefdev.o \
getfd.o \

View File

@ -10,7 +10,6 @@
.import fd_table,fd_index
.import fdt_to_fdi
.export clriocb
.export fdtoiocb
.export fdtoiocb_down
.export findfreeiocb
.export fddecusage
@ -88,31 +87,6 @@ loop: sta ICHID,x
.endproc
; 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
.endproc ; fdtoiocb
; find a free iocb
; no entry parameters
; return ZF = 0/1 for not found/found
@ -137,6 +111,7 @@ found: rts
.endproc ; findfreeiocb
; decrements usage counter for fd
; if 0 reached, it's marked as unused
; get fd index in tmp2
@ -170,6 +145,7 @@ ret: rts
.endproc ; fddecusage
; newfd
;
; called from open() function

41
libsrc/atari/fdtoiocb.s Normal file
View File

@ -0,0 +1,41 @@
;
; 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