From: cpg Date: Sun, 29 Oct 2000 00:05:47 +0000 (+0000) Subject: fd_table functions around getfd; used by startup code X-Git-Tag: V2.12.0~3125 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=ea6c5c8d434316fabcbae444ee0efa98257cb1fd;p=cc65 fd_table functions around getfd; used by startup code git-svn-id: svn://svn.cc65.org/cc65/trunk@401 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/atari/getfd.s b/libsrc/atari/getfd.s new file mode 100644 index 000000000..6fb38e9ae --- /dev/null +++ b/libsrc/atari/getfd.s @@ -0,0 +1,84 @@ +; +; Christian Groessler, Oct-2000 +; +; allocates a new fd in the indirection table +; the fdtable itself is defined here +; + + .include "atari.inc" + .include "fd.inc" + .importzp tmp1 + + .export fdt_to_fdi,getfd + .export fd_table,fd_index + .export ___fd_table,___fd_index ; for test(debug purposes only + + .data + +___fd_index: +fd_index: ; fd number is index into this table, entry's value specifies the fd_table entry + .res MAX_FD_INDEX,$ff + +___fd_table: +fd_table: ; each entry represents an open iocb + .byte 0,0,'E',0 ; system console, app starts with opened iocb #0 for E: + .byte 0,$ff,0,0 + .byte 0,$ff,0,0 + .byte 0,$ff,0,0 + .byte 0,$ff,0,0 + .byte 0,$ff,0,0 + .byte 0,$ff,0,0 + .byte 0,$ff,0,0 + + .code + +; fdt_to_fdi +; returns a fd_index entry pointing to the given ft_table entry +; get fd_table entry in A +; return C = 0/1 for OK/error +; return fd_index entry in A if OK +; registers destroyed +.proc fdt_to_fdi + + tay + lda #$ff + tax + inx +loop: cmp fd_index,x + beq found + inx + cpx #MAX_FD_INDEX + bcc loop + rts + +found: tya + sta fd_index,x + txa + clc + rts + +.endproc + +; getfd +; get a new fd pointing to a ft_table entry +; usage counter of ft_table entry incremented +; A - fd_table entry +; return C = 0/1 for OK/error +; returns fd in A if OK +; registers destroyed, tmp1 destroyed +.proc getfd + + sta tmp1 ; save fd_table entry + jsr fdt_to_fdi + bcs error + + pha + lda tmp1 + asl a + asl a ; also clears C + tax + inc fd_table+ft_usa,x ; increment usage counter + pla +error: rts + +.endproc