From fa25cc732f1898bf9106ce5733e6dafb97729c92 Mon Sep 17 00:00:00 2001 From: cpg Date: Mon, 23 Nov 2009 21:59:29 +0000 Subject: [PATCH] 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 --- libsrc/atari/Makefile | 1 + libsrc/atari/fdtable.s | 28 ++-------------------------- libsrc/atari/fdtoiocb.s | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 26 deletions(-) create mode 100644 libsrc/atari/fdtoiocb.s 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 -- 2.39.5