]> git.sur5r.net Git - cc65/blob - libsrc/cbm/devicedir.s
Forgot a cast, sorry
[cc65] / libsrc / cbm / devicedir.s
1 ;
2 ; Oliver Schmidt, 2012-09-10
3 ;
4 ; char* __fastcall__ getdevicedir (unsigned char device, char* buf, size_t size);
5 ;
6
7         .export         _getdevicedir
8         .import         diskinit, devicestr, fnunit
9         .import         popa, popax
10         .importzp       ptr2, ptr3
11
12         .include        "errno.inc"
13
14 ;------------------------------------------------------------------------------
15 ; _getdevicedir
16
17 .proc   _getdevicedir
18
19 ; Save size
20
21         sta     ptr3
22         stx     ptr3+1
23
24 ; Save buf
25
26         jsr     popax
27         sta     ptr2
28         stx     ptr2+1
29
30 ; Check device readiness
31
32         jsr     popa
33         jsr     diskinit
34         beq     size
35         jsr     __mappederrno
36         bne     fail            ; Branch always
37
38 ; Check for sufficient buf size
39
40 size:   lda     ptr3+1
41         bne     okay            ; Buf >= 256
42         lda     ptr3
43         cmp     #3
44         bcs     okay            ; Buf >= 3
45         lda     #<ERANGE
46         jsr     __directerrno
47 fail:   lda     #0              ; Return NULL
48         tax
49         rts
50
51 ; Copy device string representation into buf
52
53 okay:   lda     fnunit          ; Set by diskinit
54         jsr     devicestr       ; Returns 0 in A
55         sta     __oserror       ; Clear _oserror
56
57 ; Success, return buf
58
59         lda     ptr2
60         ldx     ptr2+1
61         rts
62
63 .endproc