]> git.sur5r.net Git - cc65/blobdiff - libsrc/atari/rwcommon.s
DIO functions always set _oserror.
[cc65] / libsrc / atari / rwcommon.s
index 6775d99504c0dce8b2854c8731b212aa69685688..349c7be019e2afa56efafedfa92ed06c3d93ff12 100644 (file)
@@ -4,62 +4,40 @@
 ;
        .include "atari.inc"
        .include "errno.inc"
-       .importzp tmp2,tmp3
-       .import incsp4,ldax0sp,ldaxysp
-       .import __errno,__oserror
+       .import popax
        .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.
-;
-       .export __do_oserror,__inviocb
-__do_oserror:
-       sty     __oserror       ; save os dependent error code
-retminus:
-       lda     #$FF
-       tax                     ; return -1
-       rts
-
-;
-; sets EINVAL error code and returns -1
-;
-
-__inviocb:
-       lda     #<EINVAL
-       jsr     __seterrno
-       jmp     retminus        ; return -1