]> git.sur5r.net Git - cc65/blob - libsrc/apple2/devicedir.s
Adds test code for the Atari (xex) linker file format.
[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         ldx     ptr1+1
24         sta     mliparam + MLI::ON_LINE::DATA_BUFFER
25         stx     mliparam + MLI::ON_LINE::DATA_BUFFER+1
26
27         ; Set device
28         jsr     popa
29         asl
30         asl
31         asl
32         asl
33         sta     mliparam + MLI::ON_LINE::UNIT_NUM
34
35         ; Check for valid slot
36         and     #$70
37         beq     erange
38
39         ; Check for sufficient buf size
40         lda     ptr2+1
41         bne     :++             ; Buf >= 256
42         lda     ptr2
43         cmp     #17
44         bcs     :++             ; Buf >= 17
45
46         ; Handle errors
47 erange: lda     #<ERANGE
48         jsr     __directerrno
49         bne     :+              ; Branch always
50 oserr:  jsr     __mappederrno
51 :       lda     #$00            ; Return NULL
52         tax
53         rts
54
55         ; Get volume name
56 :       lda     #ON_LINE_CALL
57         ldx     #ON_LINE_COUNT
58         jsr     callmli
59         bcs     oserr
60
61         ; Get volume name length
62         ldy     #$00
63         lda     (ptr1),y
64         and     #15             ; Max volume name length
65         sta     tmp1
66
67         ; Add leading slash
68         lda     #'/'
69         sta     (ptr1),y
70
71         ; Add terminating zero
72         ldy     tmp1
73         iny
74         lda     #$00
75         sta     (ptr1),y
76         sta     __oserror       ; Clear _oserror
77
78         ; Success, return buf
79         lda     ptr1
80         ldx     ptr1+1
81         rts