gui2: added Object_Alloc, OBJ_GetRoot
This commit is contained in:
@@ -43,11 +43,10 @@
|
|||||||
|
|
||||||
; signals
|
; signals
|
||||||
.equ OBJECT_SIGNAL_NONE = 0
|
.equ OBJECT_SIGNAL_NONE = 0
|
||||||
.equ OBJECT_SIGNAL_CREATE = 1
|
.equ OBJECT_SIGNAL_DESTROY = 1
|
||||||
.equ OBJECT_SIGNAL_DESTROY = 2
|
.equ OBJECT_SIGNAL_TIMER = 2
|
||||||
.equ OBJECT_SIGNAL_TIMER = 3
|
.equ OBJECT_SIGNAL_RECVMSG = 3 ; X=msg
|
||||||
.equ OBJECT_SIGNAL_RECVMSG = 4 ; X=msg
|
.equ OBJECT_SIGNAL_NEXTFREE = 4
|
||||||
.equ OBJECT_SIGNAL_NEXTFREE = 5
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -58,19 +57,54 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine Object_Alloc @global
|
||||||
|
;
|
||||||
|
; @return CFLAG set if object created, cleared otherwise
|
||||||
|
; @return Y address of created object in SDRAM (if CFLAG set)
|
||||||
|
; @param r25:r24 size of object to allocate
|
||||||
|
; @clobbers !r16, !r17
|
||||||
|
|
||||||
|
Object_Alloc:
|
||||||
|
push r16
|
||||||
|
push r17
|
||||||
|
bigcall Heap_Alloc ; X=mem allocated (r16, r17, r18, r19, r24, r25, X)
|
||||||
|
pop r17
|
||||||
|
pop r16
|
||||||
|
brcc Object_Alloc_ret
|
||||||
|
mov yl, xl
|
||||||
|
mov yh, xh
|
||||||
|
sec
|
||||||
|
Object_Alloc_ret:
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine OBJ_Init @global
|
; @routine OBJ_Init @global
|
||||||
;
|
;
|
||||||
; @param Y address of object in SDRAM
|
; @param Y address of object in SDRAM
|
||||||
|
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||||
|
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||||
; @clobbers r16, r17, X
|
; @clobbers r16, r17, X
|
||||||
|
|
||||||
OBJ_Init:
|
OBJ_Init:
|
||||||
mov xl, yl
|
push r16
|
||||||
mov xh, yh
|
push r17
|
||||||
clr r16
|
mov xl, yl
|
||||||
ldi r17, OBJECT_SIZE
|
mov xh, yh
|
||||||
bigcall Utils_FillSram ; (r17, X)
|
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
|
||||||
|
|
||||||
|
; set default signal map
|
||||||
ldi r16, LOW(Object_DefaultSignalmap*2)
|
ldi r16, LOW(Object_DefaultSignalmap*2)
|
||||||
std Y+OBJECT_OFFS_SIGNALMAP_LO, r16
|
std Y+OBJECT_OFFS_SIGNALMAP_LO, r16
|
||||||
ldi r16, HIGH(Object_DefaultSignalmap*2)
|
ldi r16, HIGH(Object_DefaultSignalmap*2)
|
||||||
@@ -132,13 +166,9 @@ OBJ_Free_ret:
|
|||||||
|
|
||||||
OBJ_OnDestroy:
|
OBJ_OnDestroy:
|
||||||
rcall OBJ_Unlink ; (r16, r17, r18, r19, r20, r21, X)
|
rcall OBJ_Unlink ; (r16, r17, r18, r19, r20, r21, X)
|
||||||
|
|
||||||
#ifdef MODULES_HEAP
|
|
||||||
mov xl, yl
|
mov xl, yl
|
||||||
mov xh, yh
|
mov xh, yh
|
||||||
bigcall Heap_Free ; (r16, r17, r24, r25, X)
|
bigcall Heap_Free ; (r16, r17, r24, r25, X)
|
||||||
#endif
|
|
||||||
|
|
||||||
sec
|
sec
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
@@ -386,6 +416,28 @@ OBJ_Unlink_ret:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine OBJ_GetRoot @global
|
||||||
|
;
|
||||||
|
; @param Y address of object
|
||||||
|
; @return Y address pointer to root object
|
||||||
|
; @clobbers r18, r19
|
||||||
|
|
||||||
|
OBJ_GetRoot:
|
||||||
|
OBJ_GetRoot_loop:
|
||||||
|
rcall OBJ_GetParent ; (none)
|
||||||
|
brcc OBJ_GetRoot_found ; no parent, return current Y
|
||||||
|
mov yl, r18
|
||||||
|
mov yh, r19
|
||||||
|
rjmp OBJ_GetRoot_loop
|
||||||
|
OBJ_GetRoot_found:
|
||||||
|
sec
|
||||||
|
OBJ_GetRoot_end:
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine OBJ_EmitSignal @global
|
; @routine OBJ_EmitSignal @global
|
||||||
;
|
;
|
||||||
@@ -687,6 +739,8 @@ objGetPredecessor_ret:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ***************************************************************************
|
||||||
|
; data in FLASH
|
||||||
|
|
||||||
Object_DefaultSignalmap:
|
Object_DefaultSignalmap:
|
||||||
.db 0, OBJECT_SIGNAL_DESTROY, LOW(OBJ_OnDestroy), HIGH(OBJ_OnDestroy)
|
.db 0, OBJECT_SIGNAL_DESTROY, LOW(OBJ_OnDestroy), HIGH(OBJ_OnDestroy)
|
||||||
|
|||||||
Reference in New Issue
Block a user