📄 tct.s
字号:
MOVE.L D0,-(A0) ; Put task entry point on stack
MOVE.L #INIT_SR,D0 ; Pickup initial SR value for task
MOVE.W D0,-(A0) ; Put initial SR on the stack
MOVE.W #$4000,D0 ; Set up COLDFIRE Format word
MOVE.W D0,-(A0) ; Exception Format word for Coldfire
CLR.L D0 ; Clear D0 for initial reg values
MOVE.L D0,-(A0) ; Unused area
MOVE.L D0,-(A0) ; Place initial A6 on the stack
MOVE.L A5,-(A0) ; Place initial A5 on the stack
MOVE.L D0,-(A0) ; Place initial A4 on the stack
MOVE.L D0,-(A0) ; Place initial A3 on the stack
MOVE.L D0,-(A0) ; Place initial A2 on the stack
MOVE.L D0,-(A0) ; Place initial A1 on the stack
MOVE.L D0,-(A0) ; Place initial A0 on the stack
MOVE.L D0,-(A0) ; Place initial D7 on the stack
MOVE.L D0,-(A0) ; Place initial D6 on the stack
MOVE.L D0,-(A0) ; Place initial D5 on the stack
MOVE.L D0,-(A0) ; Place initial D4 on the stack
MOVE.L D0,-(A0) ; Place initial D3 on the stack
MOVE.L D0,-(A0) ; Place initial D2 on the stack
MOVE.L D0,-(A0) ; Place initial D1 on the stack
MOVE.L D0,-(A0) ; Place initial D0 on the stack
MOVE.W #1,D0 ; Interrupt stack type is a 1
MOVE.W D0,-(A0) ; Place stack type on the stack
;
; /* Save the new stack pointer into the task's control block. */
; task -> tc_stack_pointer = (VOID *) (A0);
;
MOVE.L A0,44(A1) ; Save the top of the stack in TCB
RTS ; Return to caller
;
;}
;
;/*************************************************************************/
;/* */
;/* FUNCTION */
;/* */
;/* TCT_Build_HISR_Stack */
;/* */
;/* DESCRIPTION */
;/* */
;/* This function builds an HISR stack frame that allows quick */
;/* scheduling of the HISR. */
;/* */
;/* AUTHOR */
;/* */
;/* Barry Sellew, Accelerated Technology, Inc. */
;/* */
;/* CALLED BY */
;/* */
;/* TCC_Create_HISR Create HISR function */
;/* */
;/* CALLS */
;/* */
;/* None */
;/* */
;/* INPUTS */
;/* */
;/* hisr HISR control block pointer */
;/* */
;/* OUTPUTS */
;/* */
;/* None */
;/* */
;/* HISTORY */
;/* */
;/* NAME DATE REMARKS */
;/* */
;/* B. Sellew 02-21-1997 Created and verified version 1.0 */ */
;/* */
;/*************************************************************************/
XDEF _TCT_Build_HISR_Stack
_TCT_Build_HISR_Stack:
;VOID TCT_Build_HISR_Stack(TC_HCB *hisr)
;{
;
MOVEA.L 4(A7),A1 ; Pickup HISR pointer in A1
;
; /* Pickup the stack base. */
; REG_Stack_Base = (BYTE_PTR) hisr -> tc_stack_start;
;
MOVE.L 36(A1),D0 ; Pickup start of stack area
;
; /* Pickup the stack size. */
; REG_Stack_Size = hisr -> tc_stack_size;
;
MOVE.L 48(A1),D1 ; Pickup size of stack area
;
; /* Calculate the stack ending address. */
; REG_Stack_End = REG_Stack_Base + REG_Stack_Size;
;
ADD.L D1,D0 ; Compute bottom of stack
AND.L #$FFFFFFFC,D0 ; Insure long word alignment
SUBQ.L #4,D0 ; Backup the stack
MOVEA.L D0,A0 ; Put stack pointer into A0
;
; /* Save the end of the stack area in the control block. */
; hisr -> tc_stack_end = (VOID *) REG_Stack_End;
;
MOVE.L D0,40(A1) ; Save end of stack area
;
; /* Save the minimum amount of remaining stack memory. */
; hisr -> tc_stack_minimum = REG_Stack_Size - 80;
;
SUB.L #80,D1 ; Requires this many bytes
MOVE.L D1,52(A1) ; Save minimum in control block
;
; /* Build an initial stack. */
;
CLR.L D0 ; Clear D0 for initial reg values
MOVE.L D0,-(A0) ; Put a NULL return address on the
; stack. This is primarily for
; source level debuggers
MOVE.L #_TCT_HISR_Shell,D1 ; All HISRs have same entry point
MOVE.L D1,-(A0) ; Put HISR entry point on stack
MOVE.L D0,-(A0) ; Place initial A6 on the stack
MOVE.L A5,-(A0) ; Place initial A5 on the stack
MOVE.L D0,-(A0) ; Place initial A4 on the stack
MOVE.L D0,-(A0) ; Place initial A3 on the stack
MOVE.L D0,-(A0) ; Place initial A2 on the stack
MOVE.L D0,-(A0) ; Place initial D7 on the stack
MOVE.L D0,-(A0) ; Place initial D6 on the stack
MOVE.L D0,-(A0) ; Place initial D5 on the stack
MOVE.L D0,-(A0) ; Place initial D4 on the stack
MOVE.L D0,-(A0) ; Place initial D3 on the stack
MOVE.L D0,-(A0) ; Place initial D2 on the stack
; D0 contains 0, which is indicates
; a solicited stack type
MOVE.W D0,-(A0) ; Place stack type on the stack
;
; /* Save the new stack pointer into the HISR's control block. */
; hisr -> tc_stack_pointer = (VOID *) (A0);
;
MOVE.L A0,44(A1) ; Save the top of the stack in TCB
RTS ; Return to caller
;
;}
;
;/*************************************************************************/
;/* */
;/* FUNCTION */
;/* */
;/* TCT_Build_Signal_Frame */
;/* */
;/* DESCRIPTION */
;/* */
;/* This function builds a frame on top of the task's stack to */
;/* cause the task's signal handler to execute the next time */
;/* the task is executed. */
;/* */
;/* AUTHOR */
;/* */
;/* Barry Sellew, Accelerated Technology, Inc. */
;/* */
;/* CALLED BY */
;/* */
;/* TCC_Send_Signals Send signals to a task */
;/* */
;/* CALLS */
;/* */
;/* None */
;/* */
;/* INPUTS */
;/* */
;/* task Task control block pointer */
;/* */
;/* OUTPUTS */
;/* */
;/* None */
;/* */
;/* HISTORY */
;/* */
;/* NAME DATE REMARKS */
;/* */
;/* B. Sellew 02-21-1997 Created and verified version 1.0 */ */
;/* */
;/*************************************************************************/
XDEF _TCT_Build_Signal_Frame
_TCT_Build_Signal_Frame:
;VOID TCT_Build_Signal_Frame(TC_TCB *task)
;{
;
MOVEA.L 4(A7),A1 ; Point at thread control block
;
; /* Pickup the stack pointer. */
; REG_Stack_Ptr = (BYTE_PTR) task -> tc_stack_pointer;
;
MOVEA.L 44(A1),A0 ; Point at the task's stack
;
; /* Build a signal stack. */
;
CLR.L D0 ; Clear D0 for initial reg values
MOVE.L D0,-(A0) ; Put a NULL return address on the
; stack. This is primarily for
; source level debuggers
MOVE.L #_TCC_Signal_Shell,D1 ; All HISRs have same entry point
MOVE.L D1,-(A0) ; Put HISR entry point on stack
MOVE.L D0,-(A0) ; Place initial A6 on the stack
MOVE.L A5,-(A0) ; Place initial A5 on the stack
MOVE.L D0,-(A0) ; Place initial A4 on the stack
MOVE.L D0,-(A0) ; Place initial A3 on the stack
MOVE.L D0,-(A0) ; Place initial A2 on the stack
MOVE.L D0,-(A0) ; Place initial D7 on the stack
MOVE.L D0,-(A0) ; Place initial D6 on the stack
MOVE.L D0,-(A0) ; Place initial D5 on the stack
MOVE.L D0,-(A0) ; Place initial D4 on the stack
MOVE.L D0,-(A0) ; Place initial D3 on the stack
MOVE.L D0,-(A0) ; Place initial D2 on the stack
; D0 contains 0, which is indicates
; a solicited stack type
MOVE.W D0,-(A0) ; Place stack type on the stack
;
; /* Save the new stack pointer into the task's control block. */
; task -> tc_stack_pointer = (VOID *) REG_Stack_Ptr;
;
MOVE.L A0,44(A1) ; Save in the thread control block
RTS ; Return to caller
;
;}
;
;/*************************************************************************/
;/* */
;/* FUNCTION */
;/* */
;/* TCT_Check_Stack */
;/* */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -