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"
11 .interruptor tgi_irq ; Export as IRQ handler
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_font: .res 1 ; Which font to use
26 _tgi_textdir: .res 1 ; Current text direction
27 ; The following two store an 8.8 fixed point value in the first two bytes,
28 ; and a rounded integer value in the third byte. The latter is passed to the
29 ; driver to scale the bitmap font. The variables are expected to be in
30 ; this order and adjacent.
31 _tgi_textscalew: .res 3 ; Text scale for the width
32 _tgi_textscaleh: .res 3 ; Text scale for the height
34 ; The following two must also be in exactly this order
35 _tgi_charwidth: .res 1 ; Char width of system font
36 _tgi_charheight: .res 1 ; Char height of system font
38 ; The following variables are copied from the driver header for faster access
39 ; fontwidth and fontheight are expected to be in order and adjacent.
41 _tgi_xres: .res 2 ; X resolution of the current mode
42 _tgi_yres: .res 2 ; Y resolution of the current mode
43 _tgi_colorcount: .res 1 ; Number of available colors
44 _tgi_pagecount: .res 1 ; Number of available screen pages
45 _tgi_fontwidth: .res 1 ; System font width in pixels
46 _tgi_fontheight: .res 1 ; System font height in pixels
47 _tgi_aspectratio: .res 2 ; Aspect ratio in 8.8 fixed point
52 ; Jump table for the driver functions.
54 tgi_install: jmp $0000
55 tgi_uninstall: jmp $0000
58 tgi_geterror: jmp $0000
59 tgi_control: jmp $0000
61 tgi_setviewpage: jmp $0000
62 tgi_setdrawpage: jmp $0000
63 tgi_setcolor: jmp $0000
64 tgi_setpalette: jmp $0000
65 tgi_getpalette: jmp $0000
66 tgi_getdefpalette: jmp $0000
67 tgi_setpixel: jmp $0000
68 tgi_getpixel: jmp $0000
71 tgi_textstyle: jmp $0000
72 tgi_outtext: jmp $0000
73 tgi_irq: .byte $60, $00, $00 ; RTS plus two dummy bytes
75 ; Driver header signature
77 tgi_sig: .byte $74, $67, $69, TGI_API_VERSION ; "tgi", version
81 ;----------------------------------------------------------------------------
82 ; void __fastcall__ tgi_install (void* driver);
83 ; /* Install an already loaded driver. */
92 ; Check the driver signature
94 ldy #.sizeof(tgi_sig)-1
101 ; Copy the jump vectors
103 ldy #TGI_HDR::JUMPTAB
105 @L1: inx ; Skip JMP opcode
106 jsr copy ; Copy one byte
107 jsr copy ; Copy one byte
108 cpy #(TGI_HDR::JUMPTAB + .sizeof(TGI_HDR::JUMPTAB))
111 ; Call the driver install routine. It may update header variables, so we copy
112 ; them after this call.
116 ; Copy variables from the driver header for faster access.
118 jsr tgi_set_ptr ; Set ptr1 to tgi_drv
119 ldy #(TGI_HDR::VARS + .sizeof(TGI_HDR::VARS) - 1)
120 ldx #.sizeof(TGI_HDR::VARS)-1
122 sta tgi_driver_vars,x
127 ; Install the IRQ vector if the driver needs it.
129 lda tgi_irq+2 ; Check high byte of IRQ vector
130 beq @L4 ; Jump if vector invalid
131 lda #$4C ; Jump opcode
132 sta tgi_irq ; Activate IRQ routine
134 ; Initialize some other variables
138 @L5: sta _tgi_error,x ; Clear error/mode/curx/cury/textdir
144 ; Copy one byte from the jump vectors
152 ;----------------------------------------------------------------------------
153 ; Set an invalid argument error
160 ;----------------------------------------------------------------------------
161 ; Set an invalid driver error
164 lda #TGI_ERR_INV_DRIVER
168 ;----------------------------------------------------------------------------
169 ; Load the pointer to the tgi driver into ptr1.
178 ;----------------------------------------------------------------------------
179 ; void __fastcall__ tgi_uninstall (void);
180 ; /* Uninstall the currently loaded driver but do not unload it. Will call
181 ; * tgi_done if necessary.
185 jsr _tgi_done ; Switch off graphics
187 jsr tgi_uninstall ; Allow the driver to clean up
189 lda #$60 ; RTS opcode
190 sta tgi_irq ; Disable IRQ entry point
192 ; Clear driver pointer and error code