mirror of
https://github.com/cc65/cc65.git
synced 2024-08-19 02:29:33 +00:00
101 lines
3.0 KiB
ArmAsm
101 lines
3.0 KiB
ArmAsm
;
|
|
; 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
|
|
|
|
|