1
0
mirror of https://github.com/cc65/cc65.git synced 2024-11-06 15:06:07 +00:00
cc65/libsrc/tgi/tgi_textstyle.s

101 lines
3.0 KiB
ArmAsm
Raw Normal View History

;
; Ullrich von Bassewitz, 2009-10-30
;
.include "tgi-kernel.inc"
.import popa, popax
;-----------------------------------------------------------------------------
; Calculate either the total height or the total width of a bitmapped
; character, depending on the value in Y. On entry, X contains the scaling
; factor. Since it is usually small, we multiplicate by doing repeated adds.
; The function returns zero in X and the calculated value in A.
.proc charsize_helper
lda _tgi_fontwidth,y
jmp @L2
@L1: clc
adc _tgi_fontwidth,y
@L2: dex
bne @L1
sta _tgi_charwidth,y
rts
.endproc
;-----------------------------------------------------------------------------
; void __fastcall__ tgi_textstyle (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_textstyle
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_textscale (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_textscale
; The height value is in 8.8 fixed point. Store it and calculate a rounded
; value for scaling the bitmapped system font in the driver.
sta _tgi_textscaleh+0
stx _tgi_textscaleh+1
asl a ; Check value behind comma
bcc @L1
inx ; Round
@L1: stx _tgi_textscaleh+2 ; Store rounded value
; Calculate the total height of the bitmapped font and remember it.
ldy #1
jsr charsize_helper
; The width value is in 8.8 fixed point. Store it and calculate a rounded
; value for scaling the bitmapped system font in the driver.
jsr popax ; height
sta _tgi_textscalew+0
stx _tgi_textscalew+1
asl a ; Check value behind comma
bcc @L2
inx ; Round
@L2: stx _tgi_textscalew+2 ; Store rounded value
; Calculate the total width of the bitmapped font and remember it.
ldy #0
jsr charsize_helper
; Load values and call the driver, parameters are passed in registers
ldx _tgi_textscalew+2
ldy _tgi_textscaleh+2
lda _tgi_textdir
jmp tgi_textstyle
.endproc