382 lines
7.3 KiB
NASM
382 lines
7.3 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. *
|
|
; ***************************************************************************
|
|
|
|
|
|
|
|
.equ TREE_TEST_OBJECT_OFFS_LIST = 0
|
|
.equ TREE_TEST_OBJECT_OFFS_VALUE1 = TREE_SIZE
|
|
.equ TREE_TEST_OBJECT_OFFS_VALUE2 = TREE_SIZE+1
|
|
.equ TREE_TEST_OBJECT_SIZE = TREE_SIZE+2
|
|
|
|
|
|
|
|
.dseg
|
|
|
|
testTree_root: .byte TREE_TEST_OBJECT_SIZE
|
|
testTree_child1: .byte TREE_TEST_OBJECT_SIZE
|
|
testTree_child2: .byte TREE_TEST_OBJECT_SIZE
|
|
testTree_child3: .byte TREE_TEST_OBJECT_SIZE
|
|
|
|
|
|
|
|
|
|
.cseg
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine treeTest_Object_Init
|
|
; @param Y pointer to object to init
|
|
; @param r18 value 1
|
|
; @param r19 value 2
|
|
|
|
treeTest_Object_Init:
|
|
bigcall Tree_InitObject ; (R16)
|
|
std Y+TREE_TEST_OBJECT_OFFS_VALUE1, r18
|
|
std Y+TREE_TEST_OBJECT_OFFS_VALUE2, r19
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
treeTest1:
|
|
ldi yl, LOW(testTree_root)
|
|
ldi yh, HIGH(testTree_root)
|
|
ldi r18, 1
|
|
ldi r19, 2
|
|
rcall treeTest_Object_Init
|
|
mov xl, yl
|
|
mov xh, yh
|
|
|
|
rcall treeTestCreateAndAddChild1
|
|
ldi r16, 1 ; error code
|
|
brcc treeTest1_error
|
|
|
|
rcall treeTestCreateAndAddChild2
|
|
ldi r16, 2 ; error code
|
|
brcc treeTest1_error
|
|
|
|
rcall treeTestCreateAndAddChild3
|
|
ldi r16, 3 ; error code
|
|
brcc treeTest1_error
|
|
|
|
ldi yl, LOW(testTree_root)
|
|
ldi yh, HIGH(testTree_root)
|
|
bigcall Tree_GetFirstChildObject
|
|
ldi r16, 4 ; error code
|
|
cpi xl, LOW(testTree_child1)
|
|
brne treeTest1_error
|
|
cpi xh, HIGH(testTree_child1)
|
|
brne treeTest1_error
|
|
|
|
mov yl, xl
|
|
mov yh, xh
|
|
ldd r16, Y+TREE_TEST_OBJECT_OFFS_VALUE1
|
|
cpi r16, 3
|
|
ldi r16, 5 ; error code
|
|
brne treeTest1_error
|
|
ldd r16, Y+TREE_TEST_OBJECT_OFFS_VALUE2
|
|
cpi r16, 4
|
|
ldi r16, 6 ; error code
|
|
brne treeTest1_error
|
|
|
|
rcall treeTestNextSiblingIs2
|
|
ldi r16, 7 ; error code
|
|
brcc treeTest1_error
|
|
|
|
rcall treeTestNextSiblingIs3
|
|
ldi r16, 8 ; error code
|
|
brcc treeTest1_error
|
|
|
|
rcall treeTestNextSiblingIsNull
|
|
ldi r16, 9 ; error code
|
|
brcc treeTest1_error
|
|
|
|
sec
|
|
ret
|
|
|
|
treeTest1_error:
|
|
clc
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
treeTest2:
|
|
ldi yl, LOW(testTree_child2)
|
|
ldi yh, HIGH(testTree_child2)
|
|
bigcall Tree_UnlinkObject
|
|
|
|
rcall treeTestCheckParentNull
|
|
ldi r16, 1 ; error code
|
|
brcc treeTest2_error
|
|
|
|
bigcall Tree_GetNextSibling
|
|
mov r16, xl
|
|
or r16, xh
|
|
ldi r16, 2 ; error code
|
|
brne treeTest2_error
|
|
|
|
ldi yl, LOW(testTree_root)
|
|
ldi yh, HIGH(testTree_root)
|
|
bigcall Tree_GetFirstChildObject
|
|
ldi r16, 3 ; error code
|
|
cpi xl, LOW(testTree_child1)
|
|
brne treeTest2_error
|
|
cpi xh, HIGH(testTree_child1)
|
|
brne treeTest2_error
|
|
mov yl, xl
|
|
mov yh, xh
|
|
|
|
rcall treeTestNextSiblingIs3
|
|
ldi r16, 4 ; error code
|
|
brcc treeTest2_error
|
|
|
|
sec
|
|
ret
|
|
treeTest2_error:
|
|
clc
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
treeTest3:
|
|
ldi yl, LOW(testTree_child1)
|
|
ldi yh, HIGH(testTree_child1)
|
|
bigcall Tree_UnlinkObject
|
|
|
|
rcall treeTestCheckParentNull
|
|
ldi r16, 1 ; error code
|
|
brcc treeTest3_error
|
|
|
|
bigcall Tree_GetNextSibling
|
|
mov r16, xl
|
|
or r16, xh
|
|
ldi r16, 2 ; error code
|
|
brne treeTest3_error
|
|
|
|
ldi yl, LOW(testTree_root)
|
|
ldi yh, HIGH(testTree_root)
|
|
bigcall Tree_GetFirstChildObject
|
|
ldi r16, 3 ; error code
|
|
cpi xl, LOW(testTree_child3)
|
|
brne treeTest3_error
|
|
cpi xh, HIGH(testTree_child3)
|
|
brne treeTest3_error
|
|
mov yl, xl
|
|
mov yh, xh
|
|
|
|
rcall treeTestNextSiblingIsNull
|
|
ldi r16, 4 ; error code
|
|
brcc treeTest3_error
|
|
|
|
sec
|
|
ret
|
|
treeTest3_error:
|
|
clc
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
treeTest4:
|
|
ldi yl, LOW(testTree_child1)
|
|
ldi yh, HIGH(testTree_child1)
|
|
ldi xl, LOW(testTree_root)
|
|
ldi xh, HIGH(testTree_root)
|
|
bigcall Tree_AddChildObject
|
|
|
|
rcall treeTestCheckParentRoot
|
|
ldi r16, 1 ; error code
|
|
brcc treeTest4_error
|
|
|
|
ldi yl, LOW(testTree_root)
|
|
ldi yh, HIGH(testTree_root)
|
|
bigcall Tree_GetFirstChildObject
|
|
ldi r16, 2 ; error code
|
|
cpi xl, LOW(testTree_child3)
|
|
brne treeTest4_error
|
|
cpi xh, HIGH(testTree_child3)
|
|
brne treeTest4_error
|
|
mov yl, xl
|
|
mov yh, xh
|
|
|
|
rcall treeTestNextSiblingIs1
|
|
ldi r16, 3 ; error code
|
|
brcc treeTest4_error
|
|
|
|
rcall treeTestNextSiblingIsNull
|
|
ldi r16, 4 ; error code
|
|
brcc treeTest4_error
|
|
|
|
sec
|
|
ret
|
|
treeTest4_error:
|
|
clc
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
treeTestCreateAndAddChild1:
|
|
ldi yl, LOW(testTree_child1)
|
|
ldi yh, HIGH(testTree_child1)
|
|
ldi r18, 3
|
|
ldi r19, 4
|
|
rcall treeTest_Object_Init
|
|
|
|
ldi xl, LOW(testTree_root)
|
|
ldi xh, HIGH(testTree_root)
|
|
bigcall Tree_AddChildObject
|
|
|
|
rcall treeTestCheckParentRoot
|
|
brcc treeTestCreateAndAddChild1_error
|
|
sec
|
|
ret
|
|
treeTestCreateAndAddChild1_error:
|
|
clc
|
|
ret
|
|
|
|
|
|
|
|
treeTestCreateAndAddChild2:
|
|
ldi yl, LOW(testTree_child2)
|
|
ldi yh, HIGH(testTree_child2)
|
|
ldi r18, 5
|
|
ldi r19, 6
|
|
rcall treeTest_Object_Init
|
|
|
|
ldi xl, LOW(testTree_root)
|
|
ldi xh, HIGH(testTree_root)
|
|
bigcall Tree_AddChildObject
|
|
|
|
rcall treeTestCheckParentRoot
|
|
brcc treeTestCreateAndAddChild2_error
|
|
sec
|
|
ret
|
|
treeTestCreateAndAddChild2_error:
|
|
clc
|
|
ret
|
|
|
|
|
|
|
|
treeTestCreateAndAddChild3:
|
|
ldi yl, LOW(testTree_child3)
|
|
ldi yh, HIGH(testTree_child3)
|
|
ldi r18, 7
|
|
ldi r19, 8
|
|
rcall treeTest_Object_Init
|
|
|
|
ldi xl, LOW(testTree_root)
|
|
ldi xh, HIGH(testTree_root)
|
|
bigcall Tree_AddChildObject
|
|
|
|
rcall treeTestCheckParentRoot
|
|
brcc treeTestCreateAndAddChild3_error
|
|
sec
|
|
ret
|
|
treeTestCreateAndAddChild3_error:
|
|
clc
|
|
ret
|
|
|
|
|
|
|
|
|
|
treeTestCheckParentNull:
|
|
bigcall Tree_GetParentObject
|
|
mov r16, xl
|
|
or r16, xh
|
|
brne treeTestCheckParentNull_error
|
|
sec
|
|
ret
|
|
treeTestCheckParentNull_error:
|
|
clc
|
|
ret
|
|
|
|
|
|
|
|
treeTestCheckParentRoot:
|
|
bigcall Tree_GetParentObject
|
|
cpi xl, LOW(testTree_root)
|
|
brne treeTestCheckParentRoot_error
|
|
cpi xh, HIGH(testTree_root)
|
|
brne treeTestCheckParentRoot_error
|
|
sec
|
|
ret
|
|
treeTestCheckParentRoot_error:
|
|
clc
|
|
ret
|
|
|
|
|
|
|
|
treeTestNextSiblingIs1:
|
|
bigcall Tree_GetNextSibling
|
|
cpi xl, LOW(testTree_child1)
|
|
brne treeTestNextSiblingIs1_error
|
|
cpi xh, HIGH(testTree_child1)
|
|
brne treeTestNextSiblingIs1_error
|
|
mov yl, xl
|
|
mov yh, xh
|
|
sec
|
|
ret
|
|
treeTestNextSiblingIs1_error:
|
|
clc
|
|
ret
|
|
|
|
|
|
|
|
|
|
treeTestNextSiblingIs2:
|
|
bigcall Tree_GetNextSibling
|
|
cpi xl, LOW(testTree_child2)
|
|
brne treeTestNextSiblingIs2_error
|
|
cpi xh, HIGH(testTree_child2)
|
|
brne treeTestNextSiblingIs2_error
|
|
mov yl, xl
|
|
mov yh, xh
|
|
sec
|
|
ret
|
|
treeTestNextSiblingIs2_error:
|
|
clc
|
|
ret
|
|
|
|
|
|
treeTestNextSiblingIs3:
|
|
bigcall Tree_GetNextSibling
|
|
cpi xl, LOW(testTree_child3)
|
|
brne treeTestNextSiblingIs3_error
|
|
cpi xh, HIGH(testTree_child3)
|
|
brne treeTestNextSiblingIs3_error
|
|
mov yl, xl
|
|
mov yh, xh
|
|
sec
|
|
ret
|
|
treeTestNextSiblingIs3_error:
|
|
clc
|
|
ret
|
|
|
|
|
|
|
|
treeTestNextSiblingIsNull:
|
|
bigcall Tree_GetNextSibling
|
|
mov r16, xl
|
|
or r16, xh
|
|
brne treeTestNextSiblingIsNull_error
|
|
sec
|
|
ret
|
|
treeTestNextSiblingIsNull_error:
|
|
clc
|
|
ret
|
|
|
|
|
|
|