]> git.sur5r.net Git - cc65/blob - libsrc/apple2/devicedir.s
de6bad5f2c3b0dc52df568be6295992a69300f9a
[cc65] / libsrc / apple2 / devicedir.s
1 ;
2 ; Oliver Schmidt, 2010-05-24
3 ;
4 ; char* __fastcall__ getdevicedir (unsigned char device, char* buf, size_t size);
5 ;
6
7         .export         _getdevicedir
8         .import         popptr1, popa
9
10         .include        "zeropage.inc"
11         .include        "errno.inc"
12         .include        "mli.inc"
13
14 _getdevicedir:
15         ; Save size
16         sta     ptr2
17         stx     ptr2+1
18
19         ; Save buf
20         jsr     popptr1
21
22         ; Set buf
23         sta     mliparam + MLI::ON_LINE::DATA_BUFFER
24         stx     mliparam + MLI::ON_LINE::DATA_BUFFER+1
25
26         ; Set device
27         jsr     popa
28         asl
29         asl
30         asl
31         asl
32         sta     mliparam + MLI::ON_LINE::UNIT_NUM
33
34         ; Check for valid slot
35         and     #$70
36         beq     erange
37
38         ; Check for sufficient buf size
39         lda     ptr2+1
40         bne     :++             ; Buf >= 256
41         lda     ptr2
42         cmp     #17
43         bcs     :++             ; Buf >= 17
44
45         ; Handle errors
46 erange: lda     #<ERANGE
47         jsr     __directerrno
48         bne     :+              ; Branch always
49 oserr:  jsr     __mappederrno
50 :       lda     #$00            ; Return NULL
51         tax
52         rts
53
54         ; Get volume name
55 :       lda     #ON_LINE_CALL
56         ldx     #ON_LINE_COUNT
57         jsr     callmli
58         bcs     oserr
59
60         ; Get volume name length
61         ldy     #$00
62         lda     (ptr1),y
63         and     #15             ; Max volume name length
64         sta     tmp1
65         
66         ; Add leading slash
67         lda     #'/'
68         sta     (ptr1),y
69
70         ; Add terminating zero
71         ldy     tmp1
72         iny
73         lda     #$00
74         sta     (ptr1),y
75         sta     __oserror       ; Clear _oserror
76
77         ; Success, return buf
78         lda     ptr1
79         ldx     ptr1+1
80         rts