145 lines
3.8 KiB
NASM
145 lines
3.8 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. *
|
|
; ***************************************************************************
|
|
|
|
|
|
; ***************************************************************************
|
|
; code
|
|
|
|
.cseg
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @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:
|
|
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
|
|
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
|
|
; call render function of the selected font (first word of font is jmp to render function)
|
|
rcall ili9341JumpToFontRenderFn ; (r17, r24, r25, x, z)
|
|
pop xh
|
|
pop xl
|
|
|
|
; set src width and height
|
|
mov r8, r18
|
|
clr r9
|
|
mov r10, r19
|
|
clr r11
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine ili9341JumpToFontRenderFn
|
|
;
|
|
; helper function to call function at the beginning of the given font
|
|
; @clobbers r17
|
|
|
|
ili9341JumpToFontRenderFn:
|
|
lpm r17, Z+
|
|
push r17
|
|
lpm r17, Z
|
|
push r17
|
|
sbiw zh:zl, 1
|
|
ret
|
|
; @end
|
|
|
|
|
|
|