.global _tgi_color ; Current drawing color
.global _tgi_font ; Which font to use
.global _tgi_textdir ; Current text direction
+ .global _tgi_vectorfont ; Pointer to vector font
.global _tgi_textscalew ; Text magnification for the width
.global _tgi_textscaleh ; Text magnification for the height
.global _tgi_charwidth ; Width of scaled system font char
.global _tgi_imulround
.global _tgi_init
.global _tgi_install
+ .global _tgi_install_vectorfont
.global _tgi_ioctl
.global _tgi_line
.global _tgi_lineto
-void __fastcall__ tgi_vectorchar (const unsigned char* Ops);
+void __fastcall__ tgi_vectorchar (char C);
/* Draw one character of the vector font at the current graphics cursor
* position using the current font magnification.
*/
tgi_gotoxy.o \
tgi_imulround.o \
tgi_init.o \
+ tgi_install_vectorfont.o\
tgi_ioctl.o \
tgi_line.o \
tgi_linepop.o \
_tgi_color: .res 1 ; Current drawing color
_tgi_font: .res 1 ; Which font to use
_tgi_textdir: .res 1 ; Current text direction
+_tgi_vectorfont: .res 2 ; Pointer to vector font
; The following two store an 8.8 fixed point value in the first two bytes,
; and a rounded integer value in the third byte. The latter is passed to the
; driver to scale the bitmap font. The variables are expected to be in
--- /dev/null
+;
+; Ullrich von Bassewitz, 2009-11-06
+;
+
+ .include "tgi-kernel.inc"
+
+
+;-----------------------------------------------------------------------------
+; void __fastcall__ tgi_install_vectorfont (const tgi_vectorfont* font);
+; /* Install a vector font for use. More than one vector font can be loaded,
+; * but only one can be active. This function is used to tell which one. Call
+; * with a NULL pointer to uninstall the currently installed font.
+; */
+;
+
+.code
+.proc _tgi_install_vectorfont
+
+ sta _tgi_vectorfont
+ stx _tgi_vectorfont+1
+ rts
+
+.endproc
+
; */
;
- .export _tgi_vectorchar
-
- .import imul16x16r32, umul16x16r32, negax, negeax
+ .import _toascii, imul16x16r32, umul16x16r32, negax, negeax
.include "tgi-kernel.inc"
+ .include "tgi-vectorfont.inc"
.include "zeropage.inc"
-
+
+ .macpack longbranch
;----------------------------------------------------------------------------
; Data
Y2: .res 2
-
;----------------------------------------------------------------------------
;
.code
.proc _tgi_vectorchar
+; Convert the character to ASCII, multiplicate by two and save into Y
+
+ jsr _toascii
+ asl a
+ tay
+
; Since we will call tgi_lineto, which uses the zero page, and we do also
; need the zero page, make room in the register bank.
- tay
lda Ops
pha
lda Ops+1
lda Flag
pha
-; Save the pointer
+; Calculate a pointer to the vector ops for the given char (now in Y).
- sty Ops
+ lda _tgi_vectorfont+1
+ tax
+ ora _tgi_vectorfont
+ jeq Done ; Bail out if no font installed
+ lda _tgi_vectorfont
+ clc
+ adc #<(TGI_VECTORFONT::CHARS - 2*TGI_VF_FIRSTCHAR)
+ sta Ops
+ lda _tgi_vectorfont+1
+ adc #>(TGI_VECTORFONT::CHARS - 2*TGI_VF_FIRSTCHAR)
+ sta Ops+1
+
+ iny
+ lda (Ops),y
+ tax
+ dey
+ lda (Ops),y
+ sta Ops
stx Ops+1
; Main loop executing vector operations
; Done. Restore zp and return.
-@Done: pla
+Done: pla
sta Flag
pla
sta Ops+1