avr: work on simple GUI module to be used by node c02.

This commit is contained in:
Martin Preuss
2025-11-03 17:23:40 +01:00
parent b4fee78ad8
commit e58e9b846c
38 changed files with 1951 additions and 2422 deletions

View File

@@ -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