Files
aqhomecontrol/avr/modules/lcd2/ili9341/font6x8.asm
Martin Preuss c2489e1866 avr: more work on gui2
- decreased complexitiy by removing guicntl
- changed fonts to allow for storing bitmaps in ressource segment
- add fonts to ressources for display node c03
- added some safety features (check pointers, add magic field to objects etc)
- moved style.asm to device folder
2026-01-17 15:23:17 +01:00

131 lines
3.3 KiB
NASM

; ***************************************************************************
; copyright : (C) 2025 by Martin Preuss
; email : martin@libchipcard.de
;
; ***************************************************************************
; * This file is part of the project "AqHome". *
; * Please see toplevel file COPYING of that project for license details. *
; ***************************************************************************
#ifndef AQH_AVR_ILI9341_FONT6X8_ASM
#define AQH_AVR_ILI9341_FONT6X8_ASM
; ***************************************************************************
; code
.cseg
; ---------------------------------------------------------------------------
; @routine ili9341Font6x8MonoHandlerFn
;
; Handler for 6x8 Mono Fonts
;
ili9341Font6x8MonoHandlerFn:
cpi r23, FONT_FN_RENDER
breq ili9341Font6x8WriteChar
rjmp FONT_GenericHandler
; @end
; ---------------------------------------------------------------------------
; @routine ili9341Font6x8WriteChar
; @param R16 character to write
; @param R1:R0 background color
; @param R3:R2 foreground color
; @param Z pointer to font
; @return R18 width of char in pixels
; @return R19 height of char in pixels
; @clobbers r16, r17, r18, r19, r22, r23, r24, r25
ili9341Font6x8WriteChar:
push zl
push zh
rcall ili9341Font6x8GetCharPosInFont ; (r16, r17, r18, r24, r25)
mov r25, r19 ; height in pixels
ili9341Font6x8WriteChar_loop1:
mov r24, r18 ; width in pixels
lpm r17, Z+ ; font data
ili9341Font6x8WriteChar_loop2:
lsr r17
brcs ili9341Font6x8WriteChar_writeForeground
mov r22, r0
mov r23, r1
rjmp ili9341Font6x8WriteChar_sendToDisplay
ili9341Font6x8WriteChar_writeForeground:
mov r22, r2
mov r23, r3
ili9341Font6x8WriteChar_sendToDisplay:
mov r16, r23
rcall SPIHW_MasterTransfer ; (R16)
mov r16, r22
rcall SPIHW_MasterTransfer ; (R16)
ili9341Font6x8WriteChar_loop2end:
dec r24
brne ili9341Font6x8WriteChar_loop2
dec r25
brne ili9341Font6x8WriteChar_loop1
ili9341Font6x8WriteChar_end:
ldi r18, 6
ldi r19, 8
pop zh
pop zl
ret
; @end
; ---------------------------------------------------------------------------
; @routine ili9341Font6x8GetCharPosInFont (same as font8x8GetCharPosInFont!)
; @param R16 character to write
; @param Z pointer to font
; @return Z pointer to begin of char data
; @clobbers r16, r17, r18, r24, r25
ili9341Font6x8GetCharPosInFont:
adiw zh:zl, FONT_OFFS_FIRSTCHAR
lpm r24, Z+ ; first char num
lpm r25, Z ; num of chars
sbiw zh:zl, FONT_OFFS_FIRSTCHAR+1
sub r16, r24
brcs ili9341Font6x8GetCharPosInFont_ret
cp r16, r25
brcc ili9341Font6x8GetCharPosInFont_ret
mov r24, r16
clr r25
lsl r24 ; x2
rol r25
lsl r24 ; x4
rol r25
lsl r24 ; x8
rol r25
adiw zh:zl, FONT_OFFS_RESSOURCEID_LO
lpm r16, Z+
lpm r17, Z
ldi zl, LOW(RESSOURCE_ADDR*2)
ldi zh, HIGH(RESSOURCE_ADDR*2)
bigcall RES_GetRessource ; (r16, r17, r18)
; ignore error here
add zl, r24
adc zh, r25
ili9341Font6x8GetCharPosInFont_ret:
ret
; @end
#endif ; AQH_AVR_ILI9341_FONT6X8_ASM