-;
+;
; 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 "errno.inc"
- .importzp tmp2,tmp3
- .import incsp6,ldax0sp,ldaxysp
+ .include "atari.inc"
+ .include "errno.inc"
+ .importzp tmp2,tmp3
+ .import incsp4,ldax0sp,ldaxysp
.import __errno,__oserror
.import fdtoiocb
- .export __rwsetup
+ .export __rwsetup
__rwsetup:
- ldy #5
- jsr ldaxysp ; get fd
+ sta tmp2
+ stx tmp3 ; remember size
+ ldy #3
+ jsr ldaxysp ; get fd
jsr fdtoiocb ; convert to iocb
bmi iocberr
- sta tmp3 ; save it
- jsr ldax0sp ; get size
- stx tmp2
- ldx tmp3 ; iocb
+ tax
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
+ 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
+ sta ICBAH,x
+ jsr incsp4 ; pop args
lda ICBLL,x
ora ICBLH,x ; return with Z if length was 0
- rts
+ rts
-iocberr:jsr incsp6 ; pop args
+iocberr:jsr incsp4 ; pop args
ldx #$FF ; indicate error + clear ZF
rts
;
; this routine updates errno. do a JMP here right after calling
-; CIOV. we expect status in Y.
+; CIOV. we expect status in Y.
;
- .export __do_oserror,__seterrno,__inviocb
+ .export __do_oserror,__seterrno,__inviocb
__do_oserror:
sty __oserror ; save os dependent error code
retminus:
rts
__seterrno:
- sta __errno
- stx __errno+1
- rts
+ sta __errno
+ stx __errno+1
+ rts
;
; sets EINVAL error code and returns -1