; *************************************************************************** ; 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. * ; *************************************************************************** ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; @routine ili9341WriteCharacterFromFont8x8 ; @param R16 character to write ; @param R1:R0 background color ; @param R3:R2 foreground color ; @param Z pointer to font ; @param X pointer to RAM to store data to ; @clobbers r17, r24, r25, x, z ili9341WriteCharacterFromFont8x8: rcall ili9341GetCharPosInFont8x8 ; (r17, r24, r25, z) ldi r25, 8 ; 8 bytes ili9341WriteCharacterFromFont8x8_loop1: ldi r24, 8 ; 8 bits lpm r17, Z+ ili9341WriteCharacterFromFont8x8_loop2: lsr r17 brcs ili9341WriteCharacterFromFont8x8_writeForeground st X+, r0 st X+, r1 rjmp ili9341WriteCharacterFromFont8x8_loop2end ili9341WriteCharacterFromFont8x8_writeForeground: st X+, r2 st X+, r3 ili9341WriteCharacterFromFont8x8_loop2end: dec r24 brne ili9341WriteCharacterFromFont8x8_loop2 dec r25 brne ili9341WriteCharacterFromFont8x8_loop1 ret ; @end ; --------------------------------------------------------------------------- ; @routine ili9341GetCharPosInFont8x8 ; @param R16 character to write ; @param Z pointer to font ; @return Z pointer to begin of char data ; @clobbers r17, r24, r25, z ili9341GetCharPosInFont8x8: mov r24, r16 lpm r17, Z+ ; first char num sub r24, r17 brcc ili9341GetCharPosInFont8x8_firstValueOkay adiw zh:zl, 1 ; use first char ret ili9341GetCharPosInFont8x8_firstValueOkay: lpm r17, Z+ cp r24, r17 brcs ili9341WriteCharacterFromFont8x8_gotPos ret ili9341WriteCharacterFromFont8x8_gotPos: clr r25 lsl r24 ; R16x8 rol r25 lsl r24 rol r25 lsl r24 rol r25 add zl, r24 adc zh, r25 ret ; @end