gui2: more work (vlayout doesn't work, yet).
This commit is contained in:
@@ -51,15 +51,14 @@
|
||||
.equ OBJECT_OFFS_SELECTOR = 7
|
||||
.equ OBJECT_OFFS_TARGET_LO = 8
|
||||
.equ OBJECT_OFFS_TARGET_HI = 9
|
||||
.equ OBJECT_OFFS_OPTS_LO = 10
|
||||
.equ OBJECT_OFFS_OPTS_HI = 11
|
||||
.equ OBJECT_OFFS_SIGNALMAP_LO = 12 ; byte address (for LPM!)
|
||||
.equ OBJECT_OFFS_SIGNALMAP_HI = 13
|
||||
.equ OBJECT_SIZE = 14
|
||||
.equ OBJECT_OFFS_SIGNALMAP_LO = 10 ; byte address (for LPM!)
|
||||
.equ OBJECT_OFFS_SIGNALMAP_HI = 11
|
||||
.equ OBJECT_OFFS_OPTS = 12
|
||||
.equ OBJECT_SIZE = 13
|
||||
|
||||
; object opts_lo
|
||||
.equ OBJECT_OPTSLO_TIMER_BIT = 7
|
||||
.equ OBJECT_OPTSLO_MSGRECV_BIT = 6
|
||||
.equ OBJECT_OPTS_TIMER_BIT = 7
|
||||
.equ OBJECT_OPTS_MSGRECV_BIT = 6
|
||||
|
||||
; SignalMap entries
|
||||
.equ OBJECT_SIGNALMAP_OFFS_HEADER = 0
|
||||
@@ -99,12 +98,21 @@ Object_Alloc:
|
||||
push xh
|
||||
push r16
|
||||
push r17
|
||||
bigcall Heap_Alloc ; X=mem allocated (r16, r17, r18, r19, r24, r25, X)
|
||||
push r24
|
||||
push r25
|
||||
bigcall Heap_Alloc ; X=mem allocated (r16, r17, r18, r19, r24, r25, X)
|
||||
pop r25
|
||||
pop r24
|
||||
pop r17
|
||||
pop r16
|
||||
brcc Object_Alloc_ret
|
||||
mov yl, xl
|
||||
mov yh, xh
|
||||
clr r18
|
||||
Object_Alloc_loop:
|
||||
st X+, r18
|
||||
sbiw r25:r24, 1
|
||||
brne Object_Alloc_loop
|
||||
sec
|
||||
Object_Alloc_ret:
|
||||
pop xh
|
||||
@@ -118,24 +126,12 @@ Object_Alloc_ret:
|
||||
; @routine OBJ_Init @global
|
||||
;
|
||||
; @param Y address of object in SDRAM
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @clobbers r16, r17, X
|
||||
|
||||
OBJ_Init:
|
||||
push r16
|
||||
push r17
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
clr r16
|
||||
ldi r17, OBJECT_SIZE
|
||||
bigcall Utils_FillSram ; (r17, X)
|
||||
pop r17
|
||||
pop r16
|
||||
|
||||
; set opts
|
||||
std Y+OBJECT_OFFS_OPTS_LO, r16
|
||||
std Y+OBJECT_OFFS_OPTS_HI, r17
|
||||
std Y+OBJECT_OFFS_OPTS, r16
|
||||
|
||||
; set default signal map
|
||||
ldi r16, LOW(Object_DefaultSignalmap*2)
|
||||
@@ -287,8 +283,8 @@ OBJ_GetFirstChild:
|
||||
brne OBJ_GetFirstChild_notNull
|
||||
rjmp OBJ_GetFirstChild_clcRet
|
||||
OBJ_GetFirstChild_notNull:
|
||||
ldd r18, Y+OBJECT_OFFS_PARENT_LO
|
||||
ldd r19, Y+OBJECT_OFFS_PARENT_HI
|
||||
ldd r18, Y+OBJECT_OFFS_CHILD_LO
|
||||
ldd r19, Y+OBJECT_OFFS_CHILD_HI
|
||||
tst r18
|
||||
brne OBJ_GetFirstChild_secRet
|
||||
tst r19
|
||||
@@ -394,7 +390,7 @@ OBJ_AddChild:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine objAddObjXAsChildToY
|
||||
;
|
||||
; @param Y object to add to
|
||||
; @param Y designated parent
|
||||
; @param X object to add
|
||||
; @clobbers r18, r19
|
||||
|
||||
@@ -551,7 +547,15 @@ OBJ_HandleSignal_loop:
|
||||
; try this table
|
||||
push zl
|
||||
push zh
|
||||
rcall objHandleSignalWithMap ; (any, !Y)
|
||||
push r16
|
||||
push r17
|
||||
push xl
|
||||
push xh
|
||||
rcall objHandleSignalWithMap ; (any, !Y)
|
||||
pop xh
|
||||
pop xl
|
||||
pop r17
|
||||
pop r16
|
||||
pop zh
|
||||
pop zl
|
||||
brcs OBJ_HandleSignal_ret
|
||||
@@ -608,18 +612,18 @@ OBJ_TreeHandleSignal_done:
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine OBJ_TreeHandleSignalIfMatchingOptsLo @global @recursive
|
||||
; @routine OBJ_TreeHandleSignalIfMatchingOpts @global @recursive
|
||||
;
|
||||
; @param Y address of object
|
||||
; @param R16 signal number
|
||||
; @param R17 selector
|
||||
; @param xl param1
|
||||
; @param xh param2
|
||||
; @param r20 mask for OBJECT_OFFS_OPTS_LO
|
||||
; @param r21 value for OBJECT_OFFS_OPTS_LO to match
|
||||
; @param r20 mask for OBJECT_OFFS_OPTS
|
||||
; @param r21 value for OBJECT_OFFS_OPTS to match
|
||||
; @clobbers any, !R16, !R17, !X, !Y
|
||||
|
||||
OBJ_TreeHandleSignalIfMatchingOptsLo:
|
||||
OBJ_TreeHandleSignalIfMatchingOpts:
|
||||
push yl
|
||||
push yh
|
||||
; call signal handler
|
||||
@@ -627,30 +631,30 @@ OBJ_TreeHandleSignalIfMatchingOptsLo:
|
||||
push r17
|
||||
push xl
|
||||
push xh
|
||||
ldd r18, Y+OBJECT_OFFS_OPTS_LO
|
||||
ldd r18, Y+OBJECT_OFFS_OPTS
|
||||
eor r18, r21
|
||||
and r18, r20
|
||||
brne OBJ_TreeHandleSignalIfMatchingOptsLo_l1
|
||||
brne OBJ_TreeHandleSignalIfMatchingOpts_l1
|
||||
push r20
|
||||
push r21
|
||||
rcall OBJ_HandleSignal ; (any, !Y)
|
||||
pop r21
|
||||
pop r20
|
||||
OBJ_TreeHandleSignalIfMatchingOptsLo_l1:
|
||||
OBJ_TreeHandleSignalIfMatchingOpts_l1:
|
||||
pop xh
|
||||
pop xl
|
||||
pop r17
|
||||
pop r16
|
||||
; handle children
|
||||
rcall OBJ_GetFirstChild ; r19:r18=object (none)
|
||||
OBJ_TreeHandleSignalIfMatchingOptsLo_loop:
|
||||
brcc OBJ_TreeHandleSignalIfMatchingOptsLo_done
|
||||
OBJ_TreeHandleSignalIfMatchingOpts_loop:
|
||||
brcc OBJ_TreeHandleSignalIfMatchingOpts_done
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
rcall OBJ_TreeHandleSignalIfMatchingOptsLo ; recursion!
|
||||
rcall OBJ_TreeHandleSignalIfMatchingOpts ; recursion!
|
||||
rcall OBJ_GetNext ; r19:r18=object (none)
|
||||
rjmp OBJ_TreeHandleSignalIfMatchingOptsLo_loop
|
||||
OBJ_TreeHandleSignalIfMatchingOptsLo_done:
|
||||
rjmp OBJ_TreeHandleSignalIfMatchingOpts_loop
|
||||
OBJ_TreeHandleSignalIfMatchingOpts_done:
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
@@ -678,8 +682,8 @@ OBJ_TreeHandleSignalIfFlagsSet:
|
||||
push xl
|
||||
push xh
|
||||
ldd r18, Y+OBJECT_OFFS_FLAGS
|
||||
and r18, r20
|
||||
eor r18, r20
|
||||
and r18, r20
|
||||
brne OBJ_TreeHandleSignalIfFlagsSet_l1
|
||||
push r20
|
||||
rcall OBJ_HandleSignal ; (any, !Y)
|
||||
|
||||
Reference in New Issue
Block a user