From 9300e515e75b4042424d59fd4d25dfc238d2ac4e Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Fri, 7 Nov 2025 17:04:08 +0100 Subject: [PATCH] more work on c02 and lcd drivers. --- avr/devices/c02/main/main.asm | 13 ++- avr/devices/c02/main/win_netstats.asm | 102 +++++++++++++----- avr/modules/lcd2/gui/0BUILD | 2 +- avr/modules/lcd2/gui/style.asm | 2 +- .../gui/{titledwindow.asm => titlewindow.asm} | 99 +++++++++++------ avr/modules/lcd2/gui/window.asm | 88 ++++++++++++++- avr/modules/lcd2/ili9341/main.asm | 45 +++++++- 7 files changed, 279 insertions(+), 72 deletions(-) rename avr/modules/lcd2/gui/{titledwindow.asm => titlewindow.asm} (64%) diff --git a/avr/devices/c02/main/main.asm b/avr/devices/c02/main/main.asm index c7521d5..9369ea2 100644 --- a/avr/devices/c02/main/main.asm +++ b/avr/devices/c02/main/main.asm @@ -194,13 +194,17 @@ onMessageReceived: onEvery100ms: onEverySecond: -onEveryMinute: onEveryHour: onEveryDay: ret ; @end +onEveryMinute: + bigcall WinNetStats_Update + ret + + ; --------------------------------------------------------------------------- ; @routine onEveryLoop @@ -216,6 +220,7 @@ onEveryLoop: test: #ifdef MODULES_GUI bigcall WinNetStats_Init + bigcall WinNetStats_Draw #endif ret @@ -231,14 +236,14 @@ test: ;.include "common/debug.asm" - .include "modules/lcd2/gui/titledwindow.asm" + .include "modules/lcd2/gui/titlewindow.asm" ;.include "modules/lcd2/font/font2.asm" ;.include "modules/lcd2/font/font3.asm" ;.include "modules/lcd2/font/font16x26.asm" ;.include "modules/lcd2/font/font4.asm" ;.include "modules/lcd2/font/font12x16.asm" -.include "modules/lcd2/ili9341/font6x8.asm" -.include "modules/lcd2/ili9341/font6x8_1.asm" +.include "modules/lcd2/ili9341/font12x20.asm" +.include "modules/lcd2/ili9341/font12x20_1.asm" ;.include "common/list_t.asm" ;.include "common/tree_t.asm" ;.include "common/divide.asm" diff --git a/avr/devices/c02/main/win_netstats.asm b/avr/devices/c02/main/win_netstats.asm index 4655a95..0919255 100644 --- a/avr/devices/c02/main/win_netstats.asm +++ b/avr/devices/c02/main/win_netstats.asm @@ -18,49 +18,101 @@ WinNetStats_Init: ; setup ldi yl, LOW(winNetstats) ldi yh, HIGH(winNetstats) - rcall TitleWindow_Init + bigcall TitleWindow_Init - ldi zl, LOW(ili9341Font6x8_1*2) - ldi zh, HIGH(ili9341Font6x8_1*2) + ldi zl, LOW(ili9341Font12x20_1*2) + ldi zh, HIGH(ili9341Font12x20_1*2) bigcall TitleWindow_SetFont ldi r16, LOW(winNetstats_title*2) - std Y+TITLEDWINDOW_OFFS_TITLEPTR_LO, r16 + std Y+TITLEWINDOW_OFFS_TITLEPTR_LO, r16 ldi r16, HIGH(winNetstats_title*2) - std Y+TITLEDWINDOW_OFFS_TITLEPTR_HI, r16 - - ; setup size and pos - clr r4 - clr r5 - clr r6 - clr r7 - ldi r16, LOW(DISPLAY_WIDTH) - mov r8, r16 - ldi r16, HIGH(DISPLAY_WIDTH) - mov r9, r16 - ldi r16, LOW(DISPLAY_HEIGHT) - mov r10, r16 - ldi r16, HIGH(DISPLAY_HEIGHT) - mov r11, r16 - bigcall TitleWindow_SetPosAndSize - - ; setup colors + std Y+TITLEWINDOW_OFFS_TITLEPTR_HI, r16 + + bigcall TitleWindow_SetFullSize bigcall TitleWindow_SetStyleColors - bigcall TitleWindow_Draw ret ; @end -winNetstats_title: .db "Network Statistics", 0, 0 +WinNetStats_Draw: + ldi yl, LOW(winNetstats) + ldi yh, HIGH(winNetstats) + bigcall TitleWindow_Draw + rcall WinNetStats_Update + ret +; @param @0 Y +; @param @1 label addr +; @param @2 data address + +.macro WINNETSTATS_PRINTDATA + ; packets in + ldi zl, LOW(@1 * 2) + ldi zh, HIGH(@1 * 2) + ldi r16, 2 ; X + mov r4, r16 + clr r5 + ldi r16, LOW(@0) ; Y + mov r6, r16 + ldi r16, HIGH(@0) + mov r7, r16 + bigcall Window_DrawTextFlash + + ldi r16, 160 ; X + mov r4, r16 + clr r5 + ldi r16, LOW(@0) ; Y + mov r6, r16 + ldi r16, HIGH(@0) + mov r7, r16 + lds r16, @2 ; data + lds r17, @2+1 + bigcall Window_WriteHexWordAt +.endmacro + + + +WinNetStats_Update: + ldi yl, LOW(winNetstats) + ldi yh, HIGH(winNetstats) + + adiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN + bigcall Window_Clear + + ; packets in + WINNETSTATS_PRINTDATA 2, winNetstats_lPacketsIn, netInterfaceData+NET_IFACE_OFFS_PACKETSIN_LOW + ; packets out + WINNETSTATS_PRINTDATA 24, winNetstats_lPacketsOut, netInterfaceData+NET_IFACE_OFFS_PACKETSOUT_LOW + ; eContent + WINNETSTATS_PRINTDATA 46, winNetstats_lContentErr, netInterfaceData+NET_IFACE_OFFS_ERR_CONTENT_LOW + ; eIO + WINNETSTATS_PRINTDATA 68, winNetstats_lIoErr, netInterfaceData+NET_IFACE_OFFS_ERR_IO_LOW + ; eMsgSize + WINNETSTATS_PRINTDATA 90, winNetstats_lMsgSizeErr, netInterfaceData+NET_IFACE_OFFS_ERR_MSGSIZE_LOW + + sbiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN + ret +; @end + + + +winNetstats_title: .db "Network Statistics", 0, 0 + +winNetstats_lPacketsIn: .db "Pkgs In :", 0 +winNetstats_lPacketsOut: .db "Pkgs Out:", 0 +winNetstats_lContentErr: .db "eContent:", 0 +winNetstats_lIoErr: .db "eIO :", 0 +winNetstats_lMsgSizeErr: .db "eMsgSize:", 0 + .dseg winNetstats: - .byte TITLEDWINDOW_SIZE + .byte TITLEWINDOW_SIZE diff --git a/avr/modules/lcd2/gui/0BUILD b/avr/modules/lcd2/gui/0BUILD index 841d560..198b276 100644 --- a/avr/modules/lcd2/gui/0BUILD +++ b/avr/modules/lcd2/gui/0BUILD @@ -6,7 +6,7 @@ defs.asm main.asm style.asm - titledwindow.asm + titlewindow.asm window.asm diff --git a/avr/modules/lcd2/gui/style.asm b/avr/modules/lcd2/gui/style.asm index 3d417bd..3db41ab 100644 --- a/avr/modules/lcd2/gui/style.asm +++ b/avr/modules/lcd2/gui/style.asm @@ -17,7 +17,7 @@ .equ STYLE_WIN_FOREGROUND = DISPLAY_COLOR_BLACK -.equ STYLE_WIN_TITLE_HEIGHT = 20 +.equ STYLE_WIN_TITLE_HEIGHT = 24 #endif diff --git a/avr/modules/lcd2/gui/titledwindow.asm b/avr/modules/lcd2/gui/titlewindow.asm similarity index 64% rename from avr/modules/lcd2/gui/titledwindow.asm rename to avr/modules/lcd2/gui/titlewindow.asm index f6e6bc7..9cf1a8e 100644 --- a/avr/modules/lcd2/gui/titledwindow.asm +++ b/avr/modules/lcd2/gui/titlewindow.asm @@ -7,17 +7,17 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** -#ifndef AQH_AVR_GUI_TITLEDWINDOW_ASM -#define AQH_AVR_GUI_TITLEDWINDOW_ASM +#ifndef AQH_AVR_GUI_TITLEWINDOW_ASM +#define AQH_AVR_GUI_TITLEWINDOW_ASM -.equ TITLEDWINDOW_OFFS_SELF = 0 -.equ TITLEDWINDOW_OFFS_TITLEPTR_LO = WIN_SIZE -.equ TITLEDWINDOW_OFFS_TITLEPTR_HI = WIN_SIZE+1 -.equ TITLEDWINDOW_OFFS_TITLEWIN = TITLEDWINDOW_OFFS_TITLEPTR_HI+1 -.equ TITLEDWINDOW_OFFS_CONTENTWIN = TITLEDWINDOW_OFFS_TITLEWIN+WIN_SIZE -.equ TITLEDWINDOW_SIZE = TITLEDWINDOW_OFFS_CONTENTWIN+WIN_SIZE +.equ TITLEWINDOW_OFFS_SELF = 0 +.equ TITLEWINDOW_OFFS_TITLEPTR_LO = WIN_SIZE +.equ TITLEWINDOW_OFFS_TITLEPTR_HI = WIN_SIZE+1 +.equ TITLEWINDOW_OFFS_TITLEWIN = TITLEWINDOW_OFFS_TITLEPTR_HI+1 +.equ TITLEWINDOW_OFFS_CONTENTWIN = TITLEWINDOW_OFFS_TITLEWIN+WIN_SIZE +.equ TITLEWINDOW_SIZE = TITLEWINDOW_OFFS_CONTENTWIN+WIN_SIZE @@ -27,19 +27,19 @@ ; --------------------------------------------------------------------------- ; @routine TitleWindow_Init @global ; -; @param Y pointer to titledwindow data (size=TITLEDWINDOW_SIZE) +; @param Y pointer to titledwindow data (size=TITLEWINDOW_SIZE) TitleWindow_Init: mov xl, yl mov xh, yh - ldi r17, TITLEDWINDOW_SIZE + ldi r17, TITLEWINDOW_SIZE clr r16 bigcall Utils_FillSram ; (R17, X) ldi r16, LOW(TitleWindow_Handler) - std Y+(TITLEDWINDOW_OFFS_SELF+WIN_OFFS_HANDLER_LO), r16 + std Y+(TITLEWINDOW_OFFS_SELF+WIN_OFFS_HANDLER_LO), r16 ldi r16, HIGH(TitleWindow_Handler) - std Y+(TITLEDWINDOW_OFFS_SELF+WIN_OFFS_HANDLER_HI), r16 + std Y+(TITLEWINDOW_OFFS_SELF+WIN_OFFS_HANDLER_HI), r16 ret ; @end @@ -57,16 +57,16 @@ TitleWindow_SetFont: std Y+WIN_OFFS_FONT_HI, zh ; setup title window - adiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN + adiw yh:yl, TITLEWINDOW_OFFS_TITLEWIN std Y+WIN_OFFS_FONT_LO, zl std Y+WIN_OFFS_FONT_HI, zh - sbiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN + sbiw yh:yl, TITLEWINDOW_OFFS_TITLEWIN ; setup content window - adiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN + adiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN std Y+WIN_OFFS_FONT_LO, zl std Y+WIN_OFFS_FONT_HI, zh - sbiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN + sbiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN ret ; @end @@ -94,7 +94,7 @@ TitleWindow_SetPosAndSize: std Y+WIN_OFFS_HEIGHT_HI, r11 ; setup title window - adiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN + adiw yh:yl, TITLEWINDOW_OFFS_TITLEWIN std Y+WIN_OFFS_X_LO, r4 std Y+WIN_OFFS_X_HI, r5 std Y+WIN_OFFS_Y_LO, r6 @@ -105,10 +105,10 @@ TitleWindow_SetPosAndSize: ldi r17, HIGH(STYLE_WIN_TITLE_HEIGHT) std Y+WIN_OFFS_HEIGHT_LO, r16 std Y+WIN_OFFS_HEIGHT_HI, r17 - sbiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN + sbiw yh:yl, TITLEWINDOW_OFFS_TITLEWIN ; setup content window - adiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN + adiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN std Y+WIN_OFFS_X_LO, r4 std Y+WIN_OFFS_X_HI, r5 ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT) @@ -125,13 +125,44 @@ TitleWindow_SetPosAndSize: sbci r17, HIGH(STYLE_WIN_TITLE_HEIGHT) std Y+WIN_OFFS_HEIGHT_LO, r16 std Y+WIN_OFFS_HEIGHT_HI, r17 - sbiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN + sbiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN ret ; @end +; --------------------------------------------------------------------------- +; @routine TitleWindow_SetFullSize @global +; +; @param Y pointer to screen object in SDRAM +; @clobbers any, !Y + +TitleWindow_SetFullSize: + clr r4 + clr r5 + clr r6 + clr r7 + ldi r16, LOW(DISPLAY_WIDTH) + mov r8, r16 + ldi r16, HIGH(DISPLAY_WIDTH) + mov r9, r16 + ldi r16, LOW(DISPLAY_HEIGHT) + mov r10, r16 + ldi r16, HIGH(DISPLAY_HEIGHT) + mov r11, r16 + rcall TitleWindow_SetPosAndSize + ret +; @enb + + + +; --------------------------------------------------------------------------- +; @routine TitleWindow_SetStyleColors @global +; +; @param Y pointer to screen object in SDRAM +; @clobbers any, !Y + TitleWindow_SetStyleColors: ldi r16, LOW(STYLE_WIN_BACKGROUND) ldi r17, HIGH(STYLE_WIN_BACKGROUND) @@ -143,7 +174,7 @@ TitleWindow_SetStyleColors: std Y+WIN_OFFS_FG_COL_HI, r17 ; setup title window - adiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN + adiw yh:yl, TITLEWINDOW_OFFS_TITLEWIN ldi r16, LOW(STYLE_WIN_TITLE_BACKGROUND) ldi r17, HIGH(STYLE_WIN_TITLE_BACKGROUND) std Y+WIN_OFFS_BG_COL_LO, r16 @@ -152,10 +183,10 @@ TitleWindow_SetStyleColors: ldi r17, HIGH(STYLE_WIN_TITLE_FOREGROUND) std Y+WIN_OFFS_FG_COL_LO, r16 std Y+WIN_OFFS_FG_COL_HI, r17 - sbiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN + sbiw yh:yl, TITLEWINDOW_OFFS_TITLEWIN ; setup content window - adiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN + adiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN ldi r16, LOW(STYLE_WIN_BACKGROUND) ldi r17, HIGH(STYLE_WIN_BACKGROUND) std Y+WIN_OFFS_BG_COL_LO, r16 @@ -164,7 +195,7 @@ TitleWindow_SetStyleColors: ldi r17, HIGH(STYLE_WIN_FOREGROUND) std Y+WIN_OFFS_FG_COL_LO, r16 std Y+WIN_OFFS_FG_COL_HI, r17 - sbiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN + sbiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN ret ; @end @@ -174,31 +205,31 @@ TitleWindow_SetStyleColors: ; --------------------------------------------------------------------------- ; @routine TitleWindow_Draw @global ; -; @param Y pointer to titledwindow data (size=TITLEDWINDOW_SIZE) +; @param Y pointer to titledwindow data (size=TITLEWINDOW_SIZE) TitleWindow_Draw: ; draw title window - adiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN + adiw yh:yl, TITLEWINDOW_OFFS_TITLEWIN rcall Window_Clear - sbiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN + sbiw yh:yl, TITLEWINDOW_OFFS_TITLEWIN ; write header - ldd zl, Y+TITLEDWINDOW_OFFS_TITLEPTR_LO - ldd zh, Y+TITLEDWINDOW_OFFS_TITLEPTR_HI - adiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN + ldd zl, Y+TITLEWINDOW_OFFS_TITLEPTR_LO + ldd zh, Y+TITLEWINDOW_OFFS_TITLEPTR_HI + adiw yh:yl, TITLEWINDOW_OFFS_TITLEWIN ldi r16, 5 mov r4, r16 clr r5 - ldi r16, 5 + ldi r16, 2 mov r6, r16 clr r7 rcall Window_DrawTextFlash - sbiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN + sbiw yh:yl, TITLEWINDOW_OFFS_TITLEWIN ; clear content window - adiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN + adiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN rcall Window_Clear - sbiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN + sbiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN ret ; @end diff --git a/avr/modules/lcd2/gui/window.asm b/avr/modules/lcd2/gui/window.asm index 1f8067d..0c0a3e3 100644 --- a/avr/modules/lcd2/gui/window.asm +++ b/avr/modules/lcd2/gui/window.asm @@ -41,8 +41,7 @@ Window_Clear: ; @param R5:R4 X (dest) ; @param R7:R6 Y (dest) ; @return R5:R4 X pos behind string -; @return R7:R6 Y pos behind string -; @clobbers any, !Y +; @clobbers any, !Y, !R6, !R7 Window_DrawTextFlash: rcall winCalcAbsPosAndBorders ; (R18, R19) @@ -74,7 +73,7 @@ Window_DrawTextFlash_loopEnd: ; @param R5:R4 X (dest) ; @param R7:R6 Y (dest) ; @return R5:R4 X pos behind char -; @clobbers any, !Y, !R6, !R7 +; @clobbers any, !Y Window_DrawCharAt: rcall winCalcAbsPosAndBorders @@ -182,6 +181,89 @@ winDrawChar_ret: +; --------------------------------------------------------------------------- +; @routine Window_WriteHexWordAt @global +; +; @param Y pointer to screen object in SDRAM +; @param R17:R16 word to write +; @param R5:R4 X (dest) +; @param R7:R6 Y (dest) +; @return R5:R4 X pos behind string +; @clobbers any, !Y + +Window_WriteHexWordAt: + push r16 + mov r16, r17 + rcall Window_WriteHexByteAt + pop r16 + rcall Window_WriteHexByteAt + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine Window_WriteHexByteAt @global +; +; @param Y pointer to screen object in SDRAM +; @param R16 byte to write +; @param R5:R4 X (dest) +; @param R7:R6 Y (dest) +; @return R5:R4 X pos behind string +; @clobbers any, !Y + +Window_WriteHexByteAt: + push r16 + swap r16 + rcall winWriteNibble + pop r16 + rcall winWriteNibble + ret +; @end + + + +winWriteNibble: + push r4 + push r5 + push r6 + push r7 + rcall winNibbleToAscii ; write high nibble (r16, r17) + rcall Window_DrawCharAt ; draw + pop r7 + pop r6 + pop r5 + pop r4 + clr r17 + add r4, r18 + adc r5, r17 + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine winNibbleToAscii +; +; 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 + +winNibbleToAscii: + andi r16, 0xf + cpi r16, 10 + brcs winNibbleToAscii_l1 + ldi r17, 7 + add r16, r17 +winNibbleToAscii_l1: + ldi r17, '0' + add r16, r17 + ret +; @end + + + diff --git a/avr/modules/lcd2/ili9341/main.asm b/avr/modules/lcd2/ili9341/main.asm index b48fb2d..728f202 100644 --- a/avr/modules/lcd2/ili9341/main.asm +++ b/avr/modules/lcd2/ili9341/main.asm @@ -120,7 +120,7 @@ ILI9341_Reset: rcall Utils_WaitForMilliSecs rcall ili9341BeginSpi - ldi r16, 0x29 + ldi r16, 0x29 ; display on rcall ili9341SendCommand rcall ili9341EndSpi @@ -145,7 +145,7 @@ ILI9341_SetBacklight: ret ILI9341_SetBacklight_on: sbi ILI9341_LED_OUTPUT, ILI9341_LED_PIN - +ret ; DEBUG push r16 rcall ili9341BeginSpi @@ -175,18 +175,29 @@ ILI9341_SetBacklight_on: ILI9341_LeaveSleepMode: rcall ili9341BeginSpi - ldi r16, 0x11 ; sleep out rcall ili9341SendCommand rcall ili9341EndSpi - ldi r16, 5 + ldi r16, 120 rcall Utils_WaitForMilliSecs + + rcall ili9341BeginSpi + ldi r16, 0x38 ; idle mode off + rcall ili9341SendCommand + rcall ili9341EndSpi + + rcall ili9341BeginSpi + ldi r16, 0x13 ; normal mode on + rcall ili9341SendCommand + rcall ili9341EndSpi + ret ; @end ili9341InitCommands: +#if 1 ; display off .db 0x28, 0 ; PowerCtlA @@ -235,6 +246,32 @@ ili9341InitCommands: ; end .db 0xff, 0xff +#else + .db 0xef, 3, 0x03, 0x80, 0x02, 0x00 + .db 0xcf, 3, 0x00, 0xc1, 0x30, 0x00 + .db 0xed, 4, 0x64, 0x03, 0x12, 0x81 + .db 0xe8, 3, 0x85, 0x00, 0x78, 0x00 + .db 0xcb, 5, 0x39, 0x2c, 0x00, 0x34, 0x02, 0x00 + .db 0xf7, 1, 0x20, 0x00 + .db 0xea, 2, 0x00, 0x00 + .db 0xc0, 1, 0x23, 0x00 + .db 0xc1, 1, 0x10, 0x00 + .db 0xc5, 2, 0x3e, 0x28 +; .db 0xc7, 1, 0x86, 0x00 + .db 0xc7, 1, 0xb7, 0x00 + .db 0x36, 1, 0b11101000, 0x00 + .db 0x3a, 1, 0x55, 0x00 + .db 0xb1, 2, 0x00, ILI9341_FRAMERATE_100_HZ + .db 0xb6, 3, 0x08, 0x82, 0x27, 0x00 + .db 0xf2, 1, 0x00, 0x00 + .db 0x26, 1, 0x01, 0x00 + .db 0xe0, 15, 0x0f, 0x31, 0x2b, 0x0c, 0x0e, 0x08, 0x4e, 0xf1 + .db 0x37, 0x07, 0x10, 0x03, 0x0e, 0x09, 0x00, 0x00 + .db 0xe1, 15, 0x00, 0x0e, 0x14, 0x03, 0x11, 0x07, 0x31, 0xc1 + .db 0x48, 0x08, 0x0f, 0x0c, 0x31, 0x36, 0x0f, 0x00 +; end + .db 0xff, 0xff + #endif ; AQH_AVR_ILI9341_MAIN_ASM