.bss
_tgi_drv: .res 2 ; Pointer to driver
+; From here on, variables get cleared when a new driver is loaded
+cstart:
_tgi_error: .res 1 ; Last error code
_tgi_gmode: .res 1 ; Flag: Graphics mode active
_tgi_curx: .res 2 ; Current drawing cursor X
_tgi_charwidth: .res 1 ; Char width of system font
_tgi_charheight: .res 1 ; Char height of system font
+; End of section that gets cleared when a new driver is loaded
+csize = * - cstart
+
+; Maximum X and Y coordinate (that is, xres-1 and yres-1)
+_tgi_xmax: .res 2
+_tgi_ymax: .res 2
+
; The following variables are copied from the driver header for faster access
; fontwidth and fontheight are expected to be in order and adjacent.
tgi_driver_vars:
; Jump table for the driver functions.
+jumpvectors:
tgi_install: jmp $0000
tgi_uninstall: jmp $0000
tgi_init: jmp $0000
; Initialize some other variables
lda #$00
-@L4: ldx #8-1
-@L5: sta _tgi_error,x ; Clear error/mode/curx/cury/textdir
+@L4: ldx #csize-1
+@L5: sta cstart,x ; Clear error/mode/curx/cury/...
dex
bpl @L5
rts
-; Copy one byte from the jump vectors
+; Copy one byte to the jump vectors
copy: lda (ptr1),y
- sta tgi_install,x
+ sta jumpvectors,x
iny
inx
rts
.include "tgi-kernel.inc"
.include "tgi-error.inc"
- .import pushax, pusha
+ .import pushax, pusha, decax1
.importzp ptr1
+
+;----------------------------------------------------------------------------
+
+.code
.proc _tgi_init
jsr _tgi_done ; Switch off graphics if needed
inc _tgi_gmode ; Remember that graph mode is active
+; Get the maximum X and Y coordinate
+
+ jsr _tgi_getxres
+ jsr decax1
+ sta _tgi_xmax
+ stx _tgi_xmax+1
+
+ jsr _tgi_getyres
+ jsr decax1
+ sta _tgi_ymax
+ stx _tgi_ymax+1
+
; Do driver initialization. Set draw and view pages.
lda #0