avr: work on simple GUI module to be used by node c02.
This commit is contained in:
@@ -7,6 +7,9 @@
|
||||
; * Please see toplevel file COPYING of that project for license details. *
|
||||
; ***************************************************************************
|
||||
|
||||
#ifndef AQH_AVR_FONT_MAIN_ASM
|
||||
#define AQH_AVR_FONT_MAIN_ASM
|
||||
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
@@ -24,8 +27,8 @@
|
||||
; @param R3:R2 foreground color
|
||||
; @param Z pointer to font
|
||||
; @param X pointer to RAM to store data to
|
||||
; @param r18 char width in pixel
|
||||
; @param r19 char height in pixel
|
||||
; @return r18 char width in pixel
|
||||
; @return r19 char height in pixel
|
||||
; @clobbers any, !Z
|
||||
|
||||
FONT_RenderChar:
|
||||
@@ -40,6 +43,7 @@ FONT_RenderChar:
|
||||
; @routine FONT_GetCharWidth
|
||||
|
||||
; @param Z pointer to font
|
||||
; @param R16 character for which to determine size
|
||||
; @return R16 character width for given character set
|
||||
; @clobbers any, !Z
|
||||
|
||||
@@ -65,11 +69,11 @@ FONT_GetCharHeight:
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine FONT_GetStringWidth
|
||||
; @routine FONT_GetStringWidthFlash
|
||||
|
||||
; @param Z pointer to font
|
||||
; @param X pointer to null-terminated string in flash
|
||||
; @return R16 character width for given character set
|
||||
; @param Z pointer to font
|
||||
; @param X pointer to null-terminated string in flash
|
||||
; @return R17:R16 character width for given character set (in pixel)
|
||||
; @clobbers any, !Z
|
||||
|
||||
FONT_GetStringWidthFlash:
|
||||
@@ -80,14 +84,14 @@ FONT_GetStringWidthFlash:
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine FONT_GetStringHeight
|
||||
; @routine FONT_GetStringHeightFlash
|
||||
|
||||
; @param Z pointer to font
|
||||
; @param X pointer to null-terminated string in flash
|
||||
; @return R16 character width for given character set
|
||||
; @clobbers any, !Z
|
||||
|
||||
FONT_GetStringHeight:
|
||||
FONT_GetStringHeightFlash:
|
||||
ldi r23, FONT_FN_GETSTRINGHEIGHT
|
||||
rjmp fontCallHandler
|
||||
; @end
|
||||
@@ -130,38 +134,47 @@ FONT_GenericHandler:
|
||||
cpi r23, FONT_FN_GETSTRINGHEIGHT
|
||||
breq fontGenericFnGetStringHeight
|
||||
ret
|
||||
|
||||
fontGenericFnGetCharWidth:
|
||||
adiw zh:zl, FONT_OFFS_WIDTH
|
||||
ld r16, X
|
||||
lpm r16, Z
|
||||
sbiw zh:zl, FONT_OFFS_WIDTH
|
||||
ret
|
||||
|
||||
fontGenericFnGetCharHeight:
|
||||
adiw zh:zl, FONT_OFFS_HEIGHT
|
||||
ld r16, X
|
||||
lpm r16, Z
|
||||
sbiw zh:zl, FONT_OFFS_HEIGHT
|
||||
ret
|
||||
|
||||
fontGenericFnGetStringWidth:
|
||||
clr r16 ; sum (LOW)
|
||||
clr r17 ; sum (HIGH)
|
||||
adiw zh:zl, FONT_OFFS_WIDTH
|
||||
ld r17, X
|
||||
lpm r19, Z
|
||||
sbiw zh:zl, FONT_OFFS_WIDTH
|
||||
clr r16
|
||||
push zl
|
||||
push zh
|
||||
mov zl, xl
|
||||
mov zh, xh
|
||||
fontGenericFnGetStringWidth_loop:
|
||||
lpm r18, Z+
|
||||
lpm r18, Z+ ; current byte in string
|
||||
tst r18
|
||||
breq fontGenericFnGetStringWidth_loopEnd
|
||||
add r16, r17
|
||||
add r16, r19 ; add char width to sum
|
||||
adc r17, r19
|
||||
sub r17, r19
|
||||
rjmp fontGenericFnGetStringWidth_loop
|
||||
fontGenericFnGetStringWidth_loopEnd:
|
||||
pop zh
|
||||
pop zl
|
||||
ret
|
||||
|
||||
fontGenericFnGetStringHeight:
|
||||
rjmp fontGenericFnGetCharHeight ; for now monospace fonts only
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
#endif ; AQH_AVR_FONT_MAIN_ASM
|
||||
|
||||
|
||||
Reference in New Issue
Block a user