]> git.sur5r.net Git - cc65/blob - libsrc/apple2/dioopen.s
don't use constructor to setup runtime stack
[cc65] / libsrc / apple2 / dioopen.s
1 ;
2 ; Oliver Schmidt, 24.03.2005
3 ;
4 ; dhandle_t __fastcall__ dio_open (driveid_t drive_id);
5 ;
6 ; drive_id = (slot * 2) + (drive - 1)
7
8         .export         _dio_open
9         .import         return0
10
11         .include        "zeropage.inc"
12         .include        "errno.inc"
13         .include        "mli.inc"
14
15 _dio_open:
16         ; Convert drive id into unit number
17         lsr
18         bcc     :+
19         ora     #%00001000
20 :       asl
21         asl
22         asl
23         asl
24         tay                     ; Save handle
25
26         ; Set handle
27         sta     mliparam + MLI::ON_LINE::UNIT_NUM
28
29         ; Alloc 16-byte buffer just below stack
30         lda     sp
31         sec
32         sbc     #16
33         sta     mliparam + MLI::ON_LINE::DATA_BUFFER
34         lda     sp+1
35         sbc     #$00
36         sta     mliparam + MLI::ON_LINE::DATA_BUFFER+1
37
38         ; Get device state
39         lda     #ON_LINE_CALL
40         ldx     #ON_LINE_COUNT
41         jsr     callmli
42         bcc     :+
43
44         ; DIO level access doesn't necessarily need a
45         ; ProDOS 8 disk so ignore "high level" errors
46         cmp     #$40
47         bcc     oserr
48
49         ; Return success
50 :       tya                     ; Restore handle
51         ldx     #$00
52         stx     __oserror
53         rts
54
55         ; Return oserror
56 oserr:  sta     __oserror
57         jmp     return0