340 lines
7.8 KiB
NASM
340 lines
7.8 KiB
NASM
; ***************************************************************************
|
|
; copyright : (C) 2026 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. *
|
|
; ***************************************************************************
|
|
|
|
#ifndef AQH_AVR_GUI2_EEPROMDUMP_ASM
|
|
#define AQH_AVR_GUI2_EEPROMDUMP_ASM
|
|
|
|
|
|
|
|
; ***************************************************************************
|
|
; defines
|
|
|
|
|
|
.equ EEPROMDUMP_FONT = ili9341Font6x8_1
|
|
.equ EEPROMDUMP_FONT_WIDTH = 6
|
|
.equ EEPROMDUMP_FONT_HEIGHT = 8
|
|
|
|
.equ EEPROMDUMP_BYTESPERLINE = 8
|
|
.equ EEPROMDUMP_LINESPERPAGE = 18
|
|
|
|
; SDRAM data for EepromDump
|
|
.equ EEPROMDUMP_SD_OFFS_BEGIN = WIDGET_SD_SIZE
|
|
.equ EEPROMDUMP_SD_OFFS_STARTADDR_LO = EEPROMDUMP_SD_OFFS_BEGIN+0
|
|
.equ EEPROMDUMP_SD_OFFS_STARTADDR_HI = EEPROMDUMP_SD_OFFS_BEGIN+1
|
|
.equ EEPROMDUMP_SD_SIZE = EEPROMDUMP_SD_OFFS_BEGIN+2
|
|
|
|
|
|
|
|
; ***************************************************************************
|
|
; code
|
|
|
|
.cseg
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine SensorWatch_OnCreate @global
|
|
;
|
|
; @param Z byte address of widget object (for LPM!)
|
|
; @param XL node addr
|
|
; @param XH value id
|
|
; @return CFLAG set if signal handled
|
|
; @clobbers any, !Z
|
|
|
|
EepromDump_OnCreate:
|
|
bigcall OBJ_IsObject ; (none)
|
|
brcc EepromDump_OnCreate_ret
|
|
|
|
; preset SDRAM
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
clr r16
|
|
ldi r17, EEPROMDUMP_SD_SIZE
|
|
push yl
|
|
push yh
|
|
EepromDump_OnCreate_loop:
|
|
st Y+, r16
|
|
dec r17
|
|
brne EepromDump_OnCreate_loop
|
|
pop yh
|
|
pop yl
|
|
|
|
bigcall Widget_OnCreate
|
|
|
|
EepromDump_OnCreate_ret:
|
|
sec
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine EepromDump_OnUp @global
|
|
;
|
|
; @param Z byte address of object (for LPM!)
|
|
|
|
EepromDump_OnUp:
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
ldd xl, Y+EEPROMDUMP_SD_OFFS_STARTADDR_LO
|
|
ldd xh, Y+EEPROMDUMP_SD_OFFS_STARTADDR_HI
|
|
ldi r16, LOW(EEPROMDUMP_BYTESPERLINE*EEPROMDUMP_LINESPERPAGE)
|
|
ldi r17, HIGH(EEPROMDUMP_BYTESPERLINE*EEPROMDUMP_LINESPERPAGE)
|
|
sub xl, r16
|
|
sbc xh, r17
|
|
brcc EepromDump_OnUp_set
|
|
clr xl
|
|
clr xh
|
|
EepromDump_OnUp_set:
|
|
std Y+EEPROMDUMP_SD_OFFS_STARTADDR_LO, xl
|
|
std Y+EEPROMDUMP_SD_OFFS_STARTADDR_HI, xh
|
|
|
|
ldd r17, Y+WIDGET_SD_OFFS_FLAGS
|
|
ori r17, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
|
std Y+WIDGET_SD_OFFS_FLAGS, r17
|
|
sec
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
EepromDump_OnDown:
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
ldd xl, Y+EEPROMDUMP_SD_OFFS_STARTADDR_LO
|
|
ldd xh, Y+EEPROMDUMP_SD_OFFS_STARTADDR_HI
|
|
ldi r16, LOW(EEPROMDUMP_BYTESPERLINE*EEPROMDUMP_LINESPERPAGE)
|
|
ldi r17, HIGH(EEPROMDUMP_BYTESPERLINE*EEPROMDUMP_LINESPERPAGE)
|
|
add xl, r16
|
|
adc xh, r17
|
|
brcs EepromDump_OnDown_tooHigh
|
|
ldi r16, LOW(EEPROMEND)
|
|
ldi r17, HIGH(EEPROMEND)
|
|
cp xl, r16
|
|
cpc xh, r17
|
|
brcs EepromDump_OnDown_set
|
|
EepromDump_OnDown_tooHigh:
|
|
ldi xl, LOW(EEPROMEND-EEPROMDUMP_BYTESPERLINE)
|
|
ldi xh, HIGH(EEPROMEND-EEPROMDUMP_BYTESPERLINE)
|
|
EepromDump_OnDown_set:
|
|
std Y+EEPROMDUMP_SD_OFFS_STARTADDR_LO, xl
|
|
std Y+EEPROMDUMP_SD_OFFS_STARTADDR_HI, xh
|
|
|
|
ldd r17, Y+WIDGET_SD_OFFS_FLAGS
|
|
ori r17, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
|
std Y+WIDGET_SD_OFFS_FLAGS, r17
|
|
sec
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
EepromDump_OnResetTlv:
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
ldi xl, LOW(EEPROM_OFFS_TLV)
|
|
ldi xh, HIGH(EEPROM_OFFS_TLV)
|
|
EepromDump_OnResetTlv_loop:
|
|
bigcall Eeprom_CheckAddr
|
|
brcc EepromDump_OnResetTlv_loopEnd
|
|
ldi r16, 0xff
|
|
bigcall Eeprom_WriteByte
|
|
adiw xh:xl, 1
|
|
rjmp EepromDump_OnResetTlv_loop
|
|
EepromDump_OnResetTlv_loopEnd:
|
|
ldd r17, Y+WIDGET_SD_OFFS_FLAGS
|
|
ori r17, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
|
std Y+WIDGET_SD_OFFS_FLAGS, r17
|
|
sec
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine EepromDump_OnDraw @global
|
|
;
|
|
; @param Z byte address of object (for LPM!)
|
|
; @param xl param1
|
|
; @param xh param2
|
|
; @clobbers any, !Z
|
|
|
|
EepromDump_OnDraw:
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
ldd r16, Y+WIDGET_SD_OFFS_FLAGS
|
|
andi r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
|
breq EepromDump_OnDraw_ret
|
|
|
|
rcall Widget_Clear
|
|
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
ldd xl, Y+EEPROMDUMP_SD_OFFS_STARTADDR_LO
|
|
ldd xh, Y+EEPROMDUMP_SD_OFFS_STARTADDR_HI
|
|
ldi r16, 2
|
|
mov r4, r16
|
|
clr r5
|
|
mov r6, r16
|
|
clr r7
|
|
rcall eepromDumpDrawBlock
|
|
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
ldd r16, Y+WIDGET_SD_OFFS_FLAGS
|
|
cbr r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
|
std Y+WIDGET_SD_OFFS_FLAGS, r16
|
|
|
|
EepromDump_OnDraw_ret:
|
|
sec
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine eepromDumpDrawBlock
|
|
;
|
|
; @param Z byte address of widget object (for LPM!)
|
|
; @param R5:R4 X relative to widget
|
|
; @param R7:R6 Y relative to widget
|
|
; @param X current start address
|
|
; @param R18 number of bytes to print as hex bytes
|
|
|
|
eepromDumpDrawBlock:
|
|
ldi r18, EEPROMDUMP_LINESPERPAGE
|
|
eepromDumpDrawBlock_loop:
|
|
push r18
|
|
push r4
|
|
push r5
|
|
rcall eepromDumpDrawLine
|
|
pop r5
|
|
pop r4
|
|
ldi r16, LOW(EEPROMDUMP_FONT_HEIGHT)
|
|
ldi r17, HIGH(EEPROMDUMP_FONT_HEIGHT)
|
|
add r6, r16
|
|
adc r7, r17
|
|
pop r18
|
|
dec r18
|
|
brne eepromDumpDrawBlock_loop
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine eepromDumpDrawLine
|
|
;
|
|
; @param Z byte address of widget object (for LPM!)
|
|
; @param R5:R4 X relative to widget
|
|
; @param R7:R6 Y relative to widget
|
|
; @param X current start address
|
|
; @param R18 number of bytes to print as hex bytes
|
|
; @return X pointer to next byte to write
|
|
; @clobbers any, !Z, !R6, !R7
|
|
|
|
eepromDumpDrawLine:
|
|
push xl
|
|
push xh
|
|
mov r20, xl
|
|
mov r21, xh
|
|
bigcall HexWordToAscii ; X=ptr to addr (R16, R17)
|
|
rcall eepromDumpDrawText
|
|
ldi r16, LOW(EEPROMDUMP_FONT_WIDTH*4)
|
|
ldi r17, HIGH(EEPROMDUMP_FONT_WIDTH*4)
|
|
add r4, r16
|
|
adc r5, r17
|
|
|
|
ldi r16, ':'
|
|
rcall eepromDumpDrawChar
|
|
|
|
ldi r16, ' '
|
|
rcall eepromDumpDrawChar
|
|
pop xh
|
|
pop xl
|
|
|
|
ldi r18, EEPROMDUMP_BYTESPERLINE
|
|
eepromDumpDrawLine_loop:
|
|
bigcall Eeprom_ReadByte ; R16=byte read
|
|
brcc eepromDumpDrawLine_ret
|
|
adiw xh:xl, 1
|
|
push r18
|
|
push xl
|
|
push xh
|
|
bigcall HexByteToAscii ; X=ptr to addr (R16, R17)
|
|
rcall eepromDumpDrawText
|
|
ldi r16, LOW(EEPROMDUMP_FONT_WIDTH*2)
|
|
ldi r17, HIGH(EEPROMDUMP_FONT_WIDTH*2)
|
|
add r4, r16
|
|
adc r5, r17
|
|
ldi r16, ' '
|
|
rcall eepromDumpDrawChar
|
|
pop xh
|
|
pop xl
|
|
pop r18
|
|
dec r18
|
|
brne eepromDumpDrawLine_loop
|
|
eepromDumpDrawLine_ret:
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine eepromDumpDrawLine
|
|
;
|
|
; @param Z byte address of widget object (for LPM!)
|
|
; @param R5:R4 X relative to widget
|
|
; @param R7:R6 Y relative to widget
|
|
; @param X address of text to write
|
|
; @clobbers any, !Z, !(r4-r7)
|
|
|
|
eepromDumpDrawText:
|
|
push r4
|
|
push r5
|
|
push r6
|
|
push r7
|
|
bigcall Widget_DrawTextSDRAM ; (any, !Z)
|
|
pop r7
|
|
pop r6
|
|
pop r5
|
|
pop r4
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine eepromDumpDrawChar
|
|
;
|
|
; @param Z byte address of widget object (for LPM!)
|
|
; @param R5:R4 X relative to widget
|
|
; @param R7:R6 Y relative to widget
|
|
; @param R16 byte to write
|
|
; @clobbers any, !Z, !(r4-r7)
|
|
|
|
eepromDumpDrawChar:
|
|
push r4
|
|
push r5
|
|
push r6
|
|
push r7
|
|
bigcall Widget_DrawCharAt ; (any, !Z)
|
|
pop r7
|
|
pop r6
|
|
pop r5
|
|
pop r4
|
|
ldi r16, LOW(EEPROMDUMP_FONT_WIDTH)
|
|
ldi r17, HIGH(EEPROMDUMP_FONT_WIDTH)
|
|
add r4, r16
|
|
adc r5, r17
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|