more work on c02 and lcd drivers.

This commit is contained in:
Martin Preuss
2025-11-07 17:04:08 +01:00
parent 660f2502c1
commit 9300e515e7
7 changed files with 279 additions and 72 deletions

View File

@@ -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"

View File

@@ -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

View File

@@ -6,7 +6,7 @@
defs.asm
main.asm
style.asm
titledwindow.asm
titlewindow.asm
window.asm
</extradist>

View File

@@ -17,7 +17,7 @@
.equ STYLE_WIN_FOREGROUND = DISPLAY_COLOR_BLACK
.equ STYLE_WIN_TITLE_HEIGHT = 20
.equ STYLE_WIN_TITLE_HEIGHT = 24
#endif

View File

@@ -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

View File

@@ -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

View File

@@ -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