X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fatari%2Ffdtable.s;h=111f340d0e064e6011ef4f21ee92fae92345eea0;hb=fa25cc732f1898bf9106ce5733e6dafb97729c92;hp=5a8063c38f6a685d10fa0867b7913dd8fdaadf7d;hpb=8d6f5a2fca38aa7378180a26ca43fcfbcefafe45;p=cc65 diff --git a/libsrc/atari/fdtable.s b/libsrc/atari/fdtable.s index 5a8063c38..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 @@ -42,7 +41,7 @@ cmp fd_table+ft_iocb,x ; entry in use? beq inval ; no, return error lda fd_table+ft_usa,x ; get usage counter - beq ok_notlast ; 0? + beq ok_notlast ; 0? (shouldn't happen) sec sbc #1 ; decr usage counter sta fd_table+ft_usa,x @@ -53,10 +52,11 @@ retiocb:php tax plp bne cont - php lda #$ff sta fd_table+ft_iocb,y ; clear table entry - plp + lda fd_table+ft_flag,y + and #16 ; opened by app? + eor #16 ; return set Z if yes cont: rts ok_notlast: @@ -87,31 +87,6 @@ loop: sta ICHID,x .endproc -; gets fd in ax -; return iocb 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 @@ -136,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 @@ -169,6 +145,7 @@ ret: rts .endproc ; fddecusage + ; newfd ; ; called from open() function @@ -187,13 +164,9 @@ ret: rts ; C - 0/1 for no open needed/open should be performed ; all registers preserved! -; local variables: -; AX - 0 (A-0,X-1) -; Y - 2 -; ptr4 - 3,4 (backup) -; devnum - 5 - .bss + +; local variables: loc_Y: .res 1 loc_ptr4_l: .res 1 loc_ptr4_h: .res 1 @@ -251,7 +224,7 @@ do_open:lda tmp1 ldy #$ff srchfree: tya - cmp fd_table,x + cmp fd_table,x ; check ft_iocb field for $ff beq freefnd ; found a free slot txa clc @@ -289,11 +262,12 @@ l2: sta fd_table+ft_dev,x ; set device lda loc_Y sta fd_table+ft_iocb,x ; set iocb index lda loc_devnum - and #7 ; only 3 bits + and #7 ; device number is 3 bits + ora #16 ; indicated a fd actively opened by the app sta fd_table+ft_flag,x lda tmp2 jsr fdt_to_fdi ; get new index - bcs noslot ; no one available +noslot1:bcs noslot ; no one available (noslot1: helper label for branch out of range) ;cmp #$ff ; no one available ;beq noslot ;@@@ cleanup needed sta tmp2 ; return index @@ -338,9 +312,6 @@ srch2: txa ; not found, open new iocb jmp do_open -; helper for branch out of range -noslot1:jmp noslot - ; found device in table, check device number (e.g R0 - R3) fnddev: lda fd_table+ft_flag,x and #7