]> git.sur5r.net Git - cc65/commitdiff
now returns a pointer to the entry in sectsizetab
authorcpg <cpg@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 18 Oct 2000 23:51:29 +0000 (23:51 +0000)
committercpg <cpg@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 18 Oct 2000 23:51:29 +0000 (23:51 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@383 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/atari/diopncls.s

index 50899bfe7a166f4d943d7989ba36780a29fb77e6..504994a72d72fe714c53fb9d519911bd345c8d02 100644 (file)
@@ -3,44 +3,79 @@
 ;
 ; This file provides the __dio_open and __dio_close functions
 ; Since on the Atari no real open and close is necessary, they
-; do not much. The __dio_open queries the sector size of the
+; do not much. The __dio_open sets the sector size of the
 ; drive which is later used by the _dio_read and _dio_write
 ; functions.
 ;
-; unsigned char __fastcall__ _dio_open  (_driveid_t drive_id);
-; unsigned char __fastcall__ _dio_close (_driveid_t drive_id);
+; _dhandle_t    __fastcall__ _dio_open  (_driveid_t drive_id);
+; unsigned char __fastcall__ _dio_close (_dhandle_t handle);
 ;
 
        .export         __dio_open,__dio_close
        .export         sectsizetab
+       .import         __oserror
+       .importzp       ptr1,tmp1
        .include        "atari.inc"
 
+
 .bss
 
 sectsizetab:
-       .res    NUMDRVS * 2
+       .res    NUMDRVS * sst_size
 
 .code
 
 
 .proc  __dio_open
 
-       asl     a       ; make index from drive id
+       cmp     #NUMDRVS        ; valid drive id?
+       bcs     _inv_drive
+       tay                     ; drive #
+       asl     a               ; make index from drive id
+       asl     a
        tax
-       lda     #128    ; currently hardcoded (until I get an 815 :-)
-       sta     sectsizetab,x
+       lda     #128            ; currently hardcoded (until I get an 815 :-)
+       sta     sectsizetab+sst_sectsize,x
+       sta     sectsizetab+sst_flag,x          ; set flag that drive is "open"
        lda     #0
-       sta     sectsizetab+1,x
+       sta     sectsizetab+sst_sectsize+1,x
+       sta     __oserror                       ; success
+       tya
+       sta     sectsizetab+sst_driveno,x
+;      lda     #SSTIDVAL
+;      sta     sectsizetab+sst_id+1,x
+       stx     tmp1
+       lda     #<sectsizetab
+       clc
+       adc     tmp1
+       sta     tmp1
+       lda     #>sectsizetab
+       adc     #0
+       tax
+       lda     tmp1
+       rts
 
-       ; fall thru to __dio_close
+_inv_drive:
+       lda     #NONDEV         ; non-existent device
+       sta     __oserror
+       lda     #0
+       tax
+       rts                     ; return NULL
 
 .endproc
 
 .proc  __dio_close
 
+       sta     ptr1
+       stx     ptr1+1
        lda     #0
+       ldy     #sst_flag
+       sta     (ptr1),y
+;      ldy     #sst_id
+;      sta     (ptr1),y
+       sta     __oserror       ; success
        tax
-       rts             ; return no error
+       rts                     ; return no error
 
 .endproc