1
0
mirror of https://github.com/cc65/cc65.git synced 2024-10-31 04:04:49 +00:00
cc65/libsrc/tgi/tgi_settextstyle.s
uz 9c55586569 Renamed tgi_textheight -> tgi_gettextheight, tgi_textwidth -> tgi_gettextwidth
tgi_textstyle -> tgi_settextstyle and tgi_textscale -> tgi_settextscale.


git-svn-id: svn://svn.cc65.org/cc65/trunk@5090 b7a2c559-68d2-44c3-8de9-860c34a00d81
2011-07-17 18:36:12 +00:00

107 lines
3.3 KiB
ArmAsm

;
; Ullrich von Bassewitz, 2009-10-30
;
.include "zeropage.inc"
.include "tgi-kernel.inc"
.import umul8x16r24
.import popa, popax
.macpack cpu
;-----------------------------------------------------------------------------
; void __fastcall__ tgi_settextstyle (unsigned width, unsigned height,
; unsigned char dir, unsigned char font);
; /* Set the style for text output. The scaling factors for width and height
; * are 8.8 fixed point values. This means that $100 = 1 $200 = 2 etc.
; * dir is one of the TGI_TEXT_XXX constants. font is one of the TGI_FONT_XXX
; * constants.
; */
;
.proc _tgi_settextstyle
sta _tgi_font ; Remember the font to use
jsr popa
sta _tgi_textdir ; Remember the direction
; Pop the height and run directly into tgi_textscale
jsr popax
.endproc
;-----------------------------------------------------------------------------
; void __fastcall__ tgi_settextscale (unsigned width, unsigned height);
; /* Set the scaling for text output. The scaling factors for width and height
; * are 8.8 fixed point values. This means that $100 = 1 $200 = 2 etc.
; */
.proc _tgi_settextscale
; Setup the height
ldy _tgi_fontheight ; Get height of bitmap font in pixels
sty ptr1 ; Save for later
ldy #6 ; Address the height
jsr process_onedim ; Process height
; Setup the width
jsr popax ; Get width scale into a/x
ldy _tgi_fontwidth ; Get width of bitmap font in pixels
sty ptr1 ; Save for later
ldy #0 ; Address the width
; Process one character dimension. That means:
;
; - Store the vector font dimension in 8.8 format
; - If necessary, round up/down to next integer
; - Store the bitmap font dimension in 8.8 format
; - Multiply by size of bitmap char in pixels
; - Store the bitmap font size in 8.8 format
;
process_onedim:
jsr store ; Store vector font scale factor
bit _tgi_flags ; Fine grained scaling support avail?
bmi @L2 ; Jump if yes
asl a ; Round to nearest full integer
bcc @L1
inx
@L1: lda #0
@L2: jsr store ; Store bitmap font scale factor
; The size of the font in pixels in the selected dimension is already in ptr1
; So if we call umul8x16r24 we get the size in pixels in 16.8 fixed point.
; Disallowing characters larger than 256 pixels, we just drop the high byte
; and remember the low 16 bit as size in 8.8 format.
.if (.cpu .bitand ::CPU_ISET_65SC02)
phy ; Save Y
jsr umul8x16r24
ply ; Restore Y
.else
sty tmp1 ; Save Y
jsr umul8x16r24
ldy tmp1 ; Restore Y
.endif
store: sta _tgi_textscalew,y
iny
pha
txa
sta _tgi_textscalew,y
iny
pla
rts
.endproc