2 ; Ullrich von Bassewitz, 21.06.2002
4 ; Common functions of the tgi graphics kernel.
7 .include "tgi-kernel.inc"
8 .include "tgi-error.inc"
14 ;----------------------------------------------------------------------------
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
29 ; The following variables are copied from the driver header for faster access
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
42 ; Jump table for the driver functions.
44 tgi_install: jmp $0000
45 tgi_uninstall: jmp $0000
48 tgi_geterror: jmp $0000
49 tgi_control: 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
63 tgi_textstyle: jmp $0000
64 tgi_outtext: jmp $0000
66 ; Driver header signature
68 tgi_sig: .byte $74, $67, $69, $00 ; "tgi", version
69 tgi_sig_len = * - tgi_sig
72 ;----------------------------------------------------------------------------
73 ; void __fastcall__ tgi_install (void* driver);
74 ; /* Install an already loaded driver. */
83 ; Check the driver signature
92 ; Copy the jump vectors
96 @L1: inx ; Skip JMP opcode
97 jsr copy ; Copy one byte
98 jsr copy ; Copy one byte
99 cpx #(TGI_HDR_JUMPCOUNT*3)
102 ; Check for emulation vectors needed
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
112 @L2: jsr tgi_install ; Call driver install routine, may...
113 ; ...update variables
114 jsr tgi_set_ptr ; Set ptr1 to tgi_drv
116 ; Copy variables. Beware: We are using internal knowledge about variable
122 sta tgi_driver_vars,x
125 cpx #tgi_driver_var_size
128 ; Initialize variables
132 @L4: sta _tgi_error,x ; Clear error/mode/curx/cury/textdir
138 ; Copy one byte from the jump vectors
146 ;----------------------------------------------------------------------------
147 ; Set an invalid argument error
154 ;----------------------------------------------------------------------------
155 ; Set an invalid driver error
158 lda #TGI_ERR_INV_DRIVER
162 ;----------------------------------------------------------------------------
163 ; Load the pointer to the tgi driver into ptr1.
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.
179 jsr _tgi_done ; Switch off graphics
180 jsr tgi_uninstall ; Allow the driver to clean up
182 ; Clear driver pointer and error code
184 tgi_clear_ptr: ; External entry point