mirror of
https://github.com/cc65/cc65.git
synced 2024-12-22 12:30:41 +00:00
fd_table functions around getfd; used by startup code
git-svn-id: svn://svn.cc65.org/cc65/trunk@401 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
3c71bcdb58
commit
ea6c5c8d43
84
libsrc/atari/getfd.s
Normal file
84
libsrc/atari/getfd.s
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user