]> git.sur5r.net Git - cc65/blob - libsrc/tgi/tgi-kernel.s
Add tgi_horline
[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_setup
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_mode:          .res    1           ; Graphics mode or zero
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_xres:          .res    2           ; X resolution of the current mode
26 _tgi_yres:          .res    2           ; Y resolution of the current mode
27 _tgi_colorcount:    .res    1           ; Number of available colors
28 _tgi_pagecount:     .res    1           ; Number of available screen pages
29
30
31 .data
32
33 ; Jump table for the driver functions.
34
35 tgi_install:        jmp     $0000
36 tgi_deinstall:      jmp     $0000
37 tgi_init:           jmp     $0000
38 tgi_done:           jmp     $0000
39 tgi_geterror:       jmp     $0000
40 tgi_control:        jmp     $0000
41 tgi_clear:          jmp     $0000
42 tgi_setviewpage:    jmp     $0000
43 tgi_setdrawpage:    jmp     $0000
44 tgi_setcolor:       jmp     $0000
45 tgi_setpalette:     jmp     $0000
46 tgi_getpalette:     jmp     $0000
47 tgi_getdefpalette:  jmp     $0000
48 tgi_setpixel:       jmp     $0000
49 tgi_getpixel:       jmp     $0000
50 tgi_horline:        jmp     $0000
51 tgi_line:           jmp     $0000
52 tgi_bar:            jmp     $0000
53 tgi_circle:         jmp     $0000
54
55
56 ;----------------------------------------------------------------------------
57 ; void __fastcall__ tgi_setup (void);
58 ; /* Setup the driver and graphics kernel once the driver is loaded */
59
60
61 copy:   lda     (ptr1),y
62         sta     tgi_install,x
63         iny
64         inx
65         rts
66
67
68 _tgi_setup:
69         jsr     tgi_set_ptr             ; load _tgi_drv into ptr1
70
71 ; Copy the jump vectors
72
73         ldy     #TGI_HDR_JUMPTAB
74         ldx     #0
75 @L1:    inx                             ; Skip JMP opcode
76         jsr     copy                    ; Copy one byte
77         jsr     copy                    ; Copy one byte
78         cpx     #(TGI_HDR_JUMPCOUNT*3)
79         bne     @L1
80
81 ; Check for emulation vectors needed
82
83         lda     tgi_bar+1
84         ora     tgi_bar+2               ; Do we have a BAR vector?
85         bne     @L2                     ; Jump if yes
86         lda     #<tgi_emu_bar           ; Use emulation if no
87         sta     tgi_bar+1
88         lda     #>tgi_emu_bar
89         sta     tgi_bar+2
90
91 ; Copy variables. Beware: We are using internal knowledge about variable
92 ; layout here!
93
94 @L2:    ldy     #TGI_HDR_XRES
95         ldx     #0
96 @L3:    lda     (ptr1),y
97         sta     _tgi_xres,x
98         iny
99         inx
100         cpx     #6
101         bne     @L3
102
103 ; Initialize variables
104
105         lda     #$00
106         ldx     #6-1
107 @L4:    sta     _tgi_error,x            ; Clear error/mode/curx/cury
108         dex
109         bpl     @L4
110
111         jmp     tgi_install             ; Call driver install routine
112
113 ;----------------------------------------------------------------------------
114 ; Load the pointer to the tgi driver into ptr1.
115
116 tgi_set_ptr:
117         lda     _tgi_drv
118         sta     ptr1
119         lda     _tgi_drv+1
120         sta     ptr1+1
121         rts
122
123 ;----------------------------------------------------------------------------
124 ; Set an invalid argument error
125
126 tgi_inv_arg:
127         lda     #TGI_ERR_INV_ARG
128         sta     _tgi_error
129         rts
130