mirror of
https://github.com/cc65/cc65.git
synced 2025-01-11 11:30:13 +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:
parent
5a593b8105
commit
fa25cc732f
@ -78,6 +78,7 @@ OBJS = _scrsize.o \
|
|||||||
diowritev.o \
|
diowritev.o \
|
||||||
dosdetect.o \
|
dosdetect.o \
|
||||||
fdtable.o \
|
fdtable.o \
|
||||||
|
fdtoiocb.o \
|
||||||
getargs.o \
|
getargs.o \
|
||||||
getdefdev.o \
|
getdefdev.o \
|
||||||
getfd.o \
|
getfd.o \
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
.import fd_table,fd_index
|
.import fd_table,fd_index
|
||||||
.import fdt_to_fdi
|
.import fdt_to_fdi
|
||||||
.export clriocb
|
.export clriocb
|
||||||
.export fdtoiocb
|
|
||||||
.export fdtoiocb_down
|
.export fdtoiocb_down
|
||||||
.export findfreeiocb
|
.export findfreeiocb
|
||||||
.export fddecusage
|
.export fddecusage
|
||||||
@ -88,31 +87,6 @@ loop: sta ICHID,x
|
|||||||
.endproc
|
.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
|
; find a free iocb
|
||||||
; no entry parameters
|
; no entry parameters
|
||||||
; return ZF = 0/1 for not found/found
|
; return ZF = 0/1 for not found/found
|
||||||
@ -137,6 +111,7 @@ found: rts
|
|||||||
|
|
||||||
.endproc ; findfreeiocb
|
.endproc ; findfreeiocb
|
||||||
|
|
||||||
|
|
||||||
; decrements usage counter for fd
|
; decrements usage counter for fd
|
||||||
; if 0 reached, it's marked as unused
|
; if 0 reached, it's marked as unused
|
||||||
; get fd index in tmp2
|
; get fd index in tmp2
|
||||||
@ -170,6 +145,7 @@ ret: rts
|
|||||||
|
|
||||||
.endproc ; fddecusage
|
.endproc ; fddecusage
|
||||||
|
|
||||||
|
|
||||||
; newfd
|
; newfd
|
||||||
;
|
;
|
||||||
; called from open() function
|
; called from open() function
|
||||||
|
41
libsrc/atari/fdtoiocb.s
Normal file
41
libsrc/atari/fdtoiocb.s
Normal 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
|
Loading…
x
Reference in New Issue
Block a user