Start of TGI changes. Untested, may not work.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4404 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz
2009-10-30 21:26:35 +00:00
parent 7b8fbb31da
commit 763fe0b802
10 changed files with 180 additions and 122 deletions

View File

@@ -1,42 +1,82 @@
;
; Ullrich von Bassewitz, 22.06.2002
; Ullrich von Bassewitz, 2009-20-30
;
; void __fastcall__ tgi_textstyle (unsigned char magx, unsigned char magy,
; void __fastcall__ tgi_textstyle (unsigned magwidth, unsigned magheight,
; unsigned char dir);
; /* Set the style for text output. */
; /* 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.
; */
.include "tgi-kernel.inc"
.import popax, incsp2
.import 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
;-----------------------------------------------------------------------------
;
.proc _tgi_textstyle
pha
jsr popax ; Get magx/magy in one call
tay
pla
sta _tgi_textdir ; Remember the direction
; A = textdir, X = textmagx, Y = textmagy
; The magheight value is in 8.8 fixed point. Store it and calculate a rounded
; value for scaling the bitmapped system font in the driver.
cmp #TGI_TEXT_HORIZONTAL
beq DirOk
cmp #TGI_TEXT_VERTICAL
beq DirOk
Fail: jmp tgi_inv_arg ; Invalid argument
DirOk: cpy #$00
beq Fail ; Cannot have magnification of zero
cpx #$00
beq Fail ; Cannot have magnification of zero
jsr popax ; magheight
sta _tgi_textmagh+0
stx _tgi_textmagh+1
asl a ; Check value behind comma
bcc @L1
inx ; Round
@L1: stx _tgi_textmagh+2 ; Store rounded value
; Parameter check ok, store them
; Calculate the total height of the bitmapped font and remember it.
stx _tgi_textmagx
sty _tgi_textmagy
sta _tgi_textdir
ldy #1
jsr charsize_helper
; Call the driver, parameters are passed in registers
; The magwidth 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 ; magheight
sta _tgi_textmagw+0
stx _tgi_textmagw+1
asl a ; Check value behind comma
bcc @L2
inx ; Round
@L2: stx _tgi_textmagw+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_textmagw+2
ldy _tgi_textmagh+2
lda _tgi_textdir
jmp tgi_textstyle
.endproc