X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fatari%2Frwcommon.s;h=349c7be019e2afa56efafedfa92ed06c3d93ff12;hb=2273b7575c1dfc70ddc41f32c58d37ed537980ad;hp=8a888142db1f8838b89a03a0d24a95eb54797550;hpb=53dd513176425872128ef26031d00952ef7a0628;p=cc65 diff --git a/libsrc/atari/rwcommon.s b/libsrc/atari/rwcommon.s index 8a888142d..349c7be01 100644 --- a/libsrc/atari/rwcommon.s +++ b/libsrc/atari/rwcommon.s @@ -1,77 +1,43 @@ ; ; common iocb setup routine for read, write -; expects parameters (int fd,void *buf,int count) +; expects __fastcall__ parameters (int fd, void *buf, int count) ; - .include "atari.inc" - .include "../common/errno.inc" - .importzp tmp2,tmp3 - .import incsp6,ldaxysp - .import __errno,__oserror + .include "atari.inc" + .include "errno.inc" + .import popax .import fdtoiocb - - .export __rwsetup + + .export __rwsetup + __rwsetup: - - ldy #5 - jsr ldaxysp ; get fd - jsr fdtoiocb ; convert to iocb - bmi iocberr -; asl a ; iocb # --> iocb index -; asl a -; asl a -; asl a - sta tmp3 ; save it - ldy #1 - jsr ldaxysp ; get size - php ; save cond codes, for zero-ness - stx tmp2 - ldx tmp3 ; iocb - cpx #$80 ; iocb must be 0...7 - bcs iocberr - sta ICBLL,x - lda tmp2 ; size hi - sta ICBLH,x - ldy #3 ; get buf addr (was 2 in orig. version) - jsr ldaxysp - stx tmp2 - ldx tmp3 - sta ICBAL,x - lda tmp2 - sta ICBAH,x - jsr incsp6 ; pop args - plp - rts -iocberr:jsr incsp6 ; pop args - plp ; throw away - ldx #$FF ; indicate error + clear ZF + 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 ; negative (X=$FF or A>$7F) on error. + tax + pla ; store address + sta ICBAH,x + pla + sta ICBAL,x + pla ; store length + sta ICBLH,x + pla + sta ICBLL,x + ora ICBLH,x ; returns Z if length is 0 rts - -; -; this routine updates errno. do a JMP here right after calling -; CIOV. we expect status in Y. -; - .export __do_oserror,__seterrno,__inviocb -__do_oserror: - sty __oserror ; save os dependent error code -retminus: - lda #$FF - tax ; return -1 +iocberr:pla + pla + pla + pla + ldx #$FF ; indicate error + clear ZF rts -__seterrno: - sta __errno - stx __errno+1 - rts - -; -; sets EINVAL error code and returns -1 -; - -__inviocb: - lda #EINVAL - jsr __seterrno - jmp retminus ; return -1