]> git.sur5r.net Git - cc65/blobdiff - libsrc/apple2/dioopen.s
Added library reference ser_libref to SER interface.
[cc65] / libsrc / apple2 / dioopen.s
index 16269daa20c7411d3aaf043b3f36bc6494e71b96..62b2f06a38de7b958628b1a7ce6fd13f950eeb29 100644 (file)
@@ -1,57 +1,38 @@
 ;
 ; Oliver Schmidt, 24.03.2005
 ;
-; dhandle_t __fastcall__ dio_open (driveid_t drive_id);
+; dhandle_t __fastcall__ dio_open (unsigned char device);
 ;
-; drive_id = (slot * 2) + (drive - 1)
 
-        .export        _dio_open
-        .import                return0
+        .export         _dio_open
+        .import         return0, __dos_type, isdevice
 
-        .include       "zeropage.inc"
-        .include       "errno.inc"
-        .include       "mli.inc"
+        .include        "errno.inc"
+        .include        "mli.inc"
 
 _dio_open:
-        ; Convert drive id into unit number
-        lsr
-        bcc    :+
-        ora    #%00001000
-:       asl
-        asl
-        asl
-        asl
-        tay                    ; Save handle
-
-        ; Set handle
-        sta    mliparam + MLI::ON_LINE::UNIT_NUM
+        ; Check for ProDOS 8
+        ldx     __dos_type
+        bne     :+
+        lda     #$01            ; "Bad system call number"
+        bne     oserr           ; Branch always
+
+        ; Check for valid device
+:       tax
+        jsr     isdevice
+        beq     :+
+        lda     #$28            ; "No device connected"
 
-        ; Alloc 16-byte buffer just below stack
-        lda    sp
-        sec
-        sbc    #16
-        sta    mliparam + MLI::ON_LINE::DATA_BUFFER
-        lda    sp+1
-        sbc    #$00
-        sta    mliparam + MLI::ON_LINE::DATA_BUFFER+1
-
-        ; Get device state
-        lda    #ON_LINE_CALL
-        ldx    #ON_LINE_COUNT
-        jsr    callmli
-        bcc    :+
-
-        ; DIO level access doesn't necessarily need a
-        ; ProDOS 8 disk so ignore "high level" errors
-        cmp    #$40
-        bcc    oserr
+        ; Return oserror
+oserr:  sta     __oserror
+        jmp     return0
 
         ; Return success
-:       tya                    ; Restore handle
-        ldx    #$00
-        stx    __oserror
+:       txa
+        asl
+        asl
+        asl
+        asl
+        ldx     #$00
+        stx     __oserror
         rts
-
-        ; Return oserror
-oserr:  sta     __oserror
-        jmp    return0