]> git.sur5r.net Git - cc65/blob - libsrc/atari/graphics.s
remove initscrmem and grmemusage:
[cc65] / libsrc / atari / graphics.s
1 ;
2 ; Christian Groessler, June 2004
3 ;
4 ; this file provides an equivalent to the BASIC GRAPHICS function
5 ;
6 ; int __fastcall__ _graphics(unsigned char mode);
7 ;
8 ;
9
10         .export __graphics
11
12         .import findfreeiocb
13         .import __do_oserror,__oserror
14         .import fddecusage
15         .import clriocb
16         .import fdtoiocb
17         .import newfd
18         .importzp tmp1,tmp2,tmp3
19
20         .include        "atari.inc"
21         .include        "errno.inc"
22
23         .code
24
25 ; set new grapics mode
26 ; gets new mode in A
27 ; returns handle or -1 on error
28 ; uses tmp1, tmp2, tmp3, tmp4 (in subroutines)
29
30 .proc   __graphics
31
32 ;       tax
33 ;       and     #15             ; get required graphics mode
34 ;       cmp     #12
35 ;       bcs     invmode         ; invalid mode
36 ;       txa
37 ;       and     #$c0            ; invalid bits set?
38 ;       bne     invmode
39
40 ;       stx     tmp1
41         sta     tmp1            ; remember graphics mode
42
43 parmok: jsr     findfreeiocb
44         beq     iocbok          ; we found one
45
46         lda     #<EMFILE        ; "too many open files"
47 seterr: jsr     __seterrno
48         lda     #$FF
49         tax
50         rts                     ; return -1
51
52 ;invmode:ldx    #>EINVAL
53 ;       lda     #<EINVAL
54 ;       bne     seterr
55
56 iocbok: txa
57         tay                     ; move iocb # into Y
58         lda     #3
59         sta     tmp3            ; name length + 1
60         lda     #<scrdev
61         ldx     #>scrdev
62         jsr     newfd
63         tya
64         tax
65         bcs     doopen          ; C set: open needed
66
67         ldx     #0
68         lda     tmp2            ; get fd used
69         jsr     fdtoiocb
70         tax
71
72 doopen: txa
73         ;brk
74         pha
75         jsr     clriocb
76         pla
77         tax
78         lda     #<scrdev
79         sta     ICBAL,x
80         lda     #>scrdev
81         sta     ICBAH,x
82         lda     #OPEN
83         sta     ICCOM,x
84         lda     tmp1            ; get requested graphics mode
85         and     #15
86         sta     ICAX2,x
87         lda     tmp1
88         and     #$30
89         eor     #$10
90         ora     #12
91         sta     ICAX1,x
92
93         jsr     CIOV
94         bmi     cioerr
95
96         lda     tmp2            ; get fd
97         ldx     #0
98         stx     __oserror
99         rts
100
101 cioerr: jsr     fddecusage      ; decrement usage counter of fd as open failed
102         jmp     __do_oserror
103
104 .endproc        ; __graphics
105
106
107         .rodata
108
109 scrdev: .byte   "S:", 0