From a3220d74b1796055f2eadc5f48989f2bca9047a2 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Sat, 23 May 2026 01:43:18 +0200 Subject: [PATCH] avr: added List_GetItemAt --- avr/common/list.asm | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/avr/common/list.asm b/avr/common/list.asm index 65bed7d..2808ff3 100644 --- a/avr/common/list.asm +++ b/avr/common/list.asm @@ -241,6 +241,42 @@ List_ForEveryObject_callZ: +; --------------------------------------------------------------------------- +; @routine List_GetItemAt + +; @param Y pointer to first object in a list +; @param r16 idx (starting with 0) +; @return CFLAG set if found, cleared otherwise +; @return X list element at given idx (if CFLAG set) +; @clobbers r16, r17 + +List_GetItemAt: + push yl + push yh + mov r17, yl + or r17, yh + clc + breq List_GetItemAt_done +List_GetItemAtLoop: + tst r16 + breq List_GetItemAt_found + ldd r17, Y+LIST_OFFS_NEXT_LO + ldd yh, Y+LIST_OFFS_NEXT_HI + mov yl, r17 + or r17, yh + clc + breq List_GetItemAt_done + dec r16 + rjmp List_GetItemAtLoop +List_GetItemAt_found: + mov xl, yl + mov xh, yh + sec +List_GetItemAt_done: + pop yh + pop yl + ret +; @end