]> git.sur5r.net Git - cc65/blob - libsrc/atari/getdefdev.s
Updated (and sorted) sample program info.
[cc65] / libsrc / atari / getdefdev.s
1 ;
2 ; Freddy Offenga & Christian Groessler, December 2004
3 ;
4 ; function to get default device: char *_getdefdev(void);
5 ;
6 ; SpartaDOS:
7 ; the ZCRNAME routine is only used to get the default drive because
8 ; ZCRNAME has two disadvantages:
9 ; 1. It will convert D: into D1: instead of Dn: (n = default drive)
10 ; 2. It will give a 'no arguments' status if it detects something
11 ;    like Dn: (without filename).
12 ;
13 ; OS/A+ DOS:
14 ; ZCRNAME is slightly different from SpartaDOS. It will convert D:
15 ; into Dn: where n is the default drive.
16
17         .include        "atari.inc"
18         .import         __dos_type
19         .export         __getdefdev             ; get default device (e.g. "D1:")
20 .ifdef  DYNAMIC_DD
21         .export         __defdev
22 .endif
23
24 ; Get default device (LBUF will be destroyed!!)
25
26 __getdefdev:
27
28 .ifdef  DEFAULT_DEVICE
29         lda     #'0'+DEFAULT_DEVICE
30         sta     __defdev+1
31 .endif
32         lda     __dos_type      ; which DOS?
33         cmp     #ATARIDOS
34         beq     finish
35         cmp     #MYDOS
36         beq     finish
37
38         ldy     #BUFOFF
39         lda     #0
40         sta     (DOSVEC),y      ; reset buffer offset
41
42 ; Store dummy argument
43
44         ldy     #LBUF
45         lda     #'X'
46         sta     (DOSVEC),y
47         iny
48         lda     #ATEOL
49         sta     (DOSVEC),y
50
51 ; One extra store to avoid the buggy sequence from OS/A+ DOS:
52 ; <D><RETURN><:> => drive number = <RETURN>
53
54         iny
55         sta     (DOSVEC),y
56
57 ; Create crunch vector
58
59         ldy     #ZCRNAME+1
60         lda     (DOSVEC),y
61         sta     crvec+1
62         iny
63         lda     (DOSVEC),y
64         sta     crvec+2
65
66 crvec:  jsr     $FFFF           ; will be set to crunch vector
67
68 ; Get default device
69
70         ldy     #COMFNAM        ;  COMFNAM is always "Dn:"
71         lda     (DOSVEC),y
72         sta     __defdev
73         iny
74         lda     (DOSVEC),y
75         sta     __defdev+1
76
77 ; Return pointer to default device
78
79 finish: lda     #<__defdev
80         ldx     #>__defdev
81         rts
82
83         .data
84
85 ; Default device
86
87 __defdev:
88         .byte   "D1:", 0
89