; *************************************************************************** ; 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 #if 0 ; --------------------------------------------------------------------------- ; @routine ili9341_WriteCharacterX1At ; @param R16 character to write ; @param r5:r4 X ; @param r7:r6 Y ; @param r1:r0 background color ; @param r3:r2 foreground color ; @param Z pointer to font (byte address for LPM!) ; @param X pointer to RAM to store data to ; @return r5:r4 new X (advanced by character width) ; @clobbers r16 (r17, r20, r21, r22, r23, r24, r25, X) ili9341_WriteCharacterX1At: push xl push xh rcall ili9341FontRenderChar ; (r16, r17, r24, r25, z) rcall ili9341BitBlit ; (r16, r17, r20, r21, r22, r23, r24, r25, X) ; advance X (add char width to X) add r4, r8 adc r5, r9 pop xh pop xl ret ; @end ; --------------------------------------------------------------------------- ; @routine ili9341_WriteCharacterX2At ; @param R16 character to write ; @param r5:r4 X ; @param r7:r6 Y ; @param r1:r0 background color ; @param r3:r2 foreground color ; @param Z pointer to font (byte address for LPM!) ; @param X pointer to RAM to store data to ; @return r5:r4 new X (advanced by character width) ; @clobbers r16 (r17, r18, r19, r20, r21, r22, r23, r24, r25, X) ili9341_WriteCharacterX2At: rcall ili9341FontRenderChar ; (r16, r17, r24, r25, z) rcall ili9341BitBlitStretch2 ; (r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, X) ; advance X (add double char width to X) lsl r8 ; Wx2 rol r9 add r4, r8 ; add to X adc r5, r9 ret ; @end ; --------------------------------------------------------------------------- ; @routine ili9341_WriteCharacterX4At ; @param R16 character to write ; @param r5:r4 X ; @param r7:r6 Y ; @param r1:r0 background color ; @param r3:r2 foreground color ; @param Z pointer to font (byte address for LPM!) ; @param X pointer to RAM to store data to ; @return r5:r4 new X (advanced by character width) ; @clobbers r16, r17, r18, r19, r24, r25, x, z ili9341_WriteCharacterX4At: rcall ili9341FontRenderChar ; (r16, r17, r24, r25, z) rcall ili9341BitBlitStretch4 ; (r16, r17, r20, r21, r22, r23, r24, r25, X) ; advance X (add quad char width to X) lsl r8 ; Wx2 rol r9 lsl r8 ; Wx4 rol r9 add r4, r8 ; add to X adc r5, r9 ret ; @end ; --------------------------------------------------------------------------- ; @routine ili9341FontRenderChar ; @param R16 character to write ; @param Z pointer to font ; @param X pointer to RAM to store data to ; @return r9:r8 character width in points ; @return r11:r10 character height in points ; @clobbers r16 (r17, r24, r25, z) ili9341FontRenderChar: ; render character push xl push xh rcall FONT_RenderChar pop xh pop xl ; set src width and height mov r8, r18 clr r9 mov r10, r19 clr r11 ret ; @end ; --------------------------------------------------------------------------- ; @routine textNibbleToAscii ; ; Convert a nibble to an ASCII char. ; @return R16 ASCII representation of that nibble (e.g. '0' for 0) ; @param R16 byte (in bits 0-3) ; @clobbers r16, r17 textNibbleToAscii: andi r16, 0xf cpi r16, 10 brcs textNibbleToAscii_l1 ldi r17, 7 add r16, r17 textNibbleToAscii_l1: ldi r17, '0' add r16, r17 ret ; @end #if 0 ; --------------------------------------------------------------------------- ; @routine ili9341_WriteCharacterX4At ; @param R16 byte to write ; @param r5:r4 X ; @param r7:r6 Y ; @param r1:r0 background color ; @param r3:r2 foreground color ; @param Z pointer to font (byte address for LPM!) ; @param X pointer to RAM to store data to ; @return r5:r4 new X (advanced by character width) ; @clobbers r16, r17, r18, r19, r24, r25, x, z ili9341_WriteHexByte: push r16 swap r16 rcall textNibbleToAscii ; write high nibble (r16, r17) push xl push xh rcall ili9341_WriteCharacterX2At ; (r16, r17, r18, r19, r20, r24, r25, x, z) pop xh pop xl pop r16 rcall textNibbleToAscii ; write high nibble (r16, r17) rcall ili9341_WriteCharacterX2At ; (r16, r17, r18, r19, r20, r24, r25, x, z) ret ; @end Debug_WriteHexByte: push r16 ; set Xpos ldi r16, LOW(50) mov r4, r16 ldi r16, HIGH(50) mov r5, r16 ; setYpos ldi r16, LOW(200) mov r6, r16 ldi r16, HIGH(200) mov r7, r16 ; set font pos ldi zl, LOW(font2_6x8*2) ldi zh, HIGH(font2_6x8*2) ; set buffer pos ; ldi xl, LOW(ILI9341_buffer) ; ldi xh, HIGH(ILI9341_buffer) ldi xl, LOW(0x260) ldi xh, HIGH(0x260) pop r16 rjmp ili9341_WriteHexByte ; @param X=ptr ; @param r17 size Debug_WriteHexBuffer: ; set Xpos ldi r16, LOW(50) mov r4, r16 ldi r16, HIGH(50) mov r5, r16 ; setYpos ldi r16, LOW(200) mov r6, r16 ldi r16, HIGH(200) mov r7, r16 ; set foreground color ldi r16, 0b00000000 ; black mov r2, r16 mov r3, r16 ; set font ldi zl, LOW(font2_6x8*2) ldi zh, HIGH(font2_6x8*2) Debug_WriteHexBuffer_loop: push r17 ld r16, X+ push xl push xh ldi xl, LOW(0x260) ldi xh, HIGH(0x260) rcall ili9341_WriteHexByte ldi r16, 32 rcall ili9341_WriteCharacterX2At ; (r16, r17, r18, r19, r24, r25, x, z) pop xh pop xl pop r17 dec r17 brne Debug_WriteHexBuffer_loop ret #endif #endif ; if 0