]> git.sur5r.net Git - cc65/commitdiff
adapted to new calling parameters (_dhandle_t)
authorcpg <cpg@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 18 Oct 2000 23:54:27 +0000 (23:54 +0000)
committercpg <cpg@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 18 Oct 2000 23:54:27 +0000 (23:54 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@384 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/atari/siocall.s

index 0a8f9acddd6ab3485b40ed83216ac4e0efdbf034..7737d3c5c34779ba379248e73ca38dad256d0a0f 100644 (file)
@@ -6,11 +6,11 @@
 ; generic (e.g. transfer size is fixed), it's used
 ; to save space with _dio_read and _dio_write functions.
 ;
-; unsigned char __fastcall__ _sio_call(_driveid_t drive_id,
+; unsigned char __fastcall__ _sio_call(_dhandle_t handle,
 ;                                     _sectnum_t sect_num,
 ;                                     void *buffer,
 ;                                     unsigned int sio_val);
-; _driveid_t - 8bit
+; _dhandle_t - 16bit (ptr)
 ; _sectnum_t - 16bit
 ; sio_val is (sio_command | sio_direction << 8)
 ;
@@ -18,7 +18,8 @@
        .export         __sio_call
        .include        "atari.inc"
        .import         popa,popax
-       .import         sectsizetab
+       .import         sectsizetab,__oserror
+       .importzp       ptr1
 
 .proc  __sio_call
 
        jsr     popax
        sta     DAUX1           ; set sector #
        stx     DAUX2
-       jsr     popa
-       cmp     #NUMDRVS
-       bcs     _inv_dev        ; invalid device #
+
+       jsr     popax
+       sta     ptr1
+       stx     ptr1+1
+
+       ldy     #sst_flag
+       lda     (ptr1),y
+       and     #128
+       beq     _inv_hand       ; handle not open or invalid
+
+       ldy     #sst_driveno
+       lda     (ptr1),y
+
+       clc
        adc     #1
        sta     DUNIT           ; unit number (d1,d2,d3,...)
-       sbc     #0
-       asl     a
-       tax
-       lda     sectsizetab,x
-       sta     DBYTLO          ; low byte of bytes to transfer
-       lda     sectsizetab+1,x
-       sta     DBYTHI          ; high byte of bytes to transfer
+
+       ldy     #sst_sectsize
+       lda     (ptr1),y
+       sta     DBYTLO
+       iny
+       lda     (ptr1),y
+       sta     DBYTHI
+
        lda     #$31            ; D1 (drive_id == 0) has id $31
        sta     DDEVIC
        lda     #15
        bmi     _req_err        ; error occurred
        txa                     ; no error occurred
 _req_err:
+       sta     __oserror
        rts
 
-_inv_dev:
+_inv_hand:
        ldx     #0
-       lda     #NONDEV         ; non-existent device error
-       rts
+       lda     #BADIOC
+       bne     _req_err
 
 .endproc