diff --git a/libsrc/atari/rwcommon.s b/libsrc/atari/rwcommon.s index 6775d9950..d1952f074 100644 --- a/libsrc/atari/rwcommon.s +++ b/libsrc/atari/rwcommon.s @@ -5,44 +5,44 @@ .include "atari.inc" .include "errno.inc" .importzp tmp2,tmp3 - .import incsp4,ldax0sp,ldaxysp + .import popax .import __errno,__oserror .import fdtoiocb .export __rwsetup + __rwsetup: - sta tmp2 - stx tmp3 ; remember size - ldy #3 - jsr ldaxysp ; get fd + pha ; push size in stack + txa + pha + jsr popax ; get buffer address + pha + txa + pha + jsr popax ; get handle jsr fdtoiocb ; convert to iocb - bmi iocberr + bmi iocberr ; negative (X=$FF or A>$7F) on error. tax - cpx #$80 ; iocb must be 0...7 - bcs iocberr - lda tmp2 - sta ICBLL,x - lda tmp3 ; size hi - sta ICBLH,x - stx tmp3 - jsr ldax0sp ; get buf addr - stx tmp2 - ldx tmp3 - sta ICBAL,x - lda tmp2 + pla ; store address sta ICBAH,x - jsr incsp4 ; pop args - lda ICBLL,x - ora ICBLH,x ; return with Z if length was 0 + pla + sta ICBAL,x + pla ; store length + sta ICBLH,x + pla + sta ICBLL,x + ora ICBLH,x ; returns Z if length is 0 rts -iocberr:jsr incsp4 ; pop args +iocberr:pla + pla + pla + pla ldx #$FF ; indicate error + clear ZF rts - ; ; this routine updates errno. do a JMP here right after calling ; CIOV. we expect status in Y.