From: cpg Date: Mon, 23 Nov 2009 21:59:29 +0000 (+0000) Subject: move fdtoiocb function into its own file -- idea by Daniel Serpell X-Git-Tag: V2.13.1~51 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=fa25cc732f1898bf9106ce5733e6dafb97729c92;p=cc65 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 --- diff --git a/libsrc/atari/Makefile b/libsrc/atari/Makefile index 3b11f0f2f..c6fff15a6 100644 --- a/libsrc/atari/Makefile +++ b/libsrc/atari/Makefile @@ -78,6 +78,7 @@ OBJS = _scrsize.o \ diowritev.o \ dosdetect.o \ fdtable.o \ + fdtoiocb.o \ getargs.o \ getdefdev.o \ getfd.o \ diff --git a/libsrc/atari/fdtable.s b/libsrc/atari/fdtable.s index ecc7c451f..111f340d0 100644 --- a/libsrc/atari/fdtable.s +++ b/libsrc/atari/fdtable.s @@ -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 diff --git a/libsrc/atari/fdtoiocb.s b/libsrc/atari/fdtoiocb.s new file mode 100644 index 000000000..710ef9009 --- /dev/null +++ b/libsrc/atari/fdtoiocb.s @@ -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