]> git.sur5r.net Git - cc65/blob - libsrc/tgi/tgi-kernel.s
Used TGI_API_VERSION
[cc65] / libsrc / tgi / tgi-kernel.s
1 ;
2 ; Ullrich von Bassewitz, 21.06.2002
3 ;
4 ; Common functions of the tgi graphics kernel.
5 ;
6
7         .include        "tgi-kernel.inc"
8         .include        "tgi-error.inc"
9
10         .export         tgi_clear_ptr
11         .importzp       ptr1
12
13
14 ;----------------------------------------------------------------------------
15 ; Variables
16
17 .bss
18
19 _tgi_drv:           .res    2           ; Pointer to driver
20 _tgi_error:         .res    1           ; Last error code
21 _tgi_gmode:         .res    1           ; Flag: Graphics mode active
22 _tgi_curx:          .res    2           ; Current drawing cursor X
23 _tgi_cury:          .res    2           ; Current drawing cursor Y
24 _tgi_color:         .res    1           ; Current drawing color
25 _tgi_textdir:       .res    1           ; Current text direction
26 _tgi_textmagx:      .res    1           ; Text magnification in X dir
27 _tgi_textmagy:      .res    1           ; Text magnification in Y dir
28
29 ; The following variables are copied from the driver header for faster access
30 tgi_driver_vars:
31 _tgi_xres:          .res    2           ; X resolution of the current mode
32 _tgi_yres:          .res    2           ; Y resolution of the current mode
33 _tgi_colorcount:    .res    1           ; Number of available colors
34 _tgi_pagecount:     .res    1           ; Number of available screen pages
35 _tgi_fontsizex:     .res    1           ; System font X size
36 _tgi_fontsizey:     .res    1           ; System font Y size
37 tgi_driver_var_size     = * - tgi_driver_vars
38
39
40 .data
41
42 ; Jump table for the driver functions.
43
44 tgi_install:        jmp     $0000
45 tgi_uninstall:      jmp     $0000
46 tgi_init:           jmp     $0000
47 tgi_done:           jmp     $0000
48 tgi_geterror:       jmp     $0000
49 tgi_control:        jmp     $0000
50 tgi_clear:          jmp     $0000
51 tgi_setviewpage:    jmp     $0000
52 tgi_setdrawpage:    jmp     $0000
53 tgi_setcolor:       jmp     $0000
54 tgi_setpalette:     jmp     $0000
55 tgi_getpalette:     jmp     $0000
56 tgi_getdefpalette:  jmp     $0000
57 tgi_setpixel:       jmp     $0000
58 tgi_getpixel:       jmp     $0000
59 tgi_horline:        jmp     $0000
60 tgi_line:           jmp     $0000
61 tgi_bar:            jmp     $0000
62 tgi_circle:         jmp     $0000
63 tgi_textstyle:      jmp     $0000
64 tgi_outtext:        jmp     $0000
65
66 ; Driver header signature
67 .rodata
68 tgi_sig:        .byte   $74, $67, $69, TGI_API_VERSION  ; "tgi", version
69 tgi_sig_len     = * - tgi_sig
70
71
72 ;----------------------------------------------------------------------------
73 ; void __fastcall__ tgi_install (void* driver);
74 ; /* Install an already loaded driver. */
75
76
77 _tgi_install:
78         sta     _tgi_drv
79         sta     ptr1
80         stx     _tgi_drv+1
81         stx     ptr1+1
82
83 ; Check the driver signature
84
85         ldy     #tgi_sig_len-1
86 @L0:    lda     (ptr1),y
87         cmp     tgi_sig,y
88         bne     tgi_inv_drv
89         dey
90         bpl     @L0
91
92 ; Copy the jump vectors
93
94         ldy     #TGI_HDR_JUMPTAB
95         ldx     #0
96 @L1:    inx                             ; Skip JMP opcode
97         jsr     copy                    ; Copy one byte
98         jsr     copy                    ; Copy one byte
99         cpx     #(TGI_HDR_JUMPCOUNT*3)
100         bne     @L1
101
102 ; Check for emulation vectors needed
103
104         lda     tgi_bar+1
105         ora     tgi_bar+2               ; Do we have a BAR vector?
106         bne     @L2                     ; Jump if yes
107         lda     #<tgi_emu_bar           ; Use emulation if no
108         sta     tgi_bar+1
109         lda     #>tgi_emu_bar
110         sta     tgi_bar+2
111
112 @L2:    jsr     tgi_install             ; Call driver install routine, may...
113                                         ; ...update variables
114         jsr     tgi_set_ptr             ; Set ptr1 to tgi_drv
115
116 ; Copy variables. Beware: We are using internal knowledge about variable
117 ; layout here!
118
119         ldy     #TGI_HDR_XRES
120         ldx     #0
121 @L3:    lda     (ptr1),y
122         sta     tgi_driver_vars,x
123         iny
124         inx
125         cpx     #tgi_driver_var_size
126         bne     @L3
127
128 ; Initialize variables
129
130         lda     #$00
131         ldx     #7-1
132 @L4:    sta     _tgi_error,x            ; Clear error/mode/curx/cury/textdir
133         dex
134         bpl     @L4
135
136         rts
137
138 ; Copy one byte from the jump vectors
139
140 copy:   lda     (ptr1),y
141         sta     tgi_install,x
142         iny
143         inx
144         rts
145
146 ;----------------------------------------------------------------------------
147 ; Set an invalid argument error
148
149 tgi_inv_arg:
150         lda     #TGI_ERR_INV_ARG
151         sta     _tgi_error
152         rts
153
154 ;----------------------------------------------------------------------------
155 ; Set an invalid driver error
156
157 tgi_inv_drv:
158         lda     #TGI_ERR_INV_DRIVER
159         sta     _tgi_error
160         rts
161
162 ;----------------------------------------------------------------------------
163 ; Load the pointer to the tgi driver into ptr1.
164
165 tgi_set_ptr:
166         lda     _tgi_drv
167         sta     ptr1
168         lda     _tgi_drv+1
169         sta     ptr1+1
170         rts
171
172 ;----------------------------------------------------------------------------
173 ; void __fastcall__ tgi_uninstall (void);
174 ; /* Uninstall the currently loaded driver but do not unload it. Will call
175 ;  * tgi_done if necessary.
176 ;  */
177
178 _tgi_uninstall:
179         jsr     _tgi_done               ; Switch off graphics
180         jsr     tgi_uninstall           ; Allow the driver to clean up
181
182 ; Clear driver pointer and error code
183
184 tgi_clear_ptr:                          ; External entry point
185         lda     #$00
186         sta     _tgi_drv
187         sta     _tgi_drv+1
188         sta     _tgi_error
189
190         rts
191
192