⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tct.s

📁 文件内包含了nuclues的内核代码和针对Power PC的编译器。需要用VirtNet生成一个虚拟网卡才可使用
💻 S
📖 第 1 页 / 共 5 页
字号:
#/* OUTPUTS                                                               */
#/*                                                                       */
#/*      old_level (return in r3)            Previous interrupt enable    */
#/*                                            level                      */
#/*                                                                       */
#/* HISTORY                                                               */
#/*                                                                       */
#/*         NAME            DATE                    REMARKS               */
#/*                                                                       */
#/*      Barry Sellew    06-24-1996       Created initial version 1.0     */
#/*                                                                       */
#/*************************************************************************/
#INT  TCT_Local_Control_Interrupts(new_level)
#{
#
#INT     old_level;                          #/* Old interrupt level       */
    .text
    .align      2
TCT_Local_Control_Interrupts:
#
#   /*  read in the old level of the processor */
#
    mfmsr       r4
#
#   /*  lock out all the interrupts */
#
    ori         r11,r4,0
    rlwinm      r11,r11,0,17,15             # mask off MSR[EE] bit
    mtmsr       r11                         # write current interrupt status
#
#   /*  set the new level passed in */
#
    or          r11,r11,r3                  # or in the interrupt bits
    mtmsr       r11                         # write current interrupt status
#
#   /*  return the old interrupt level */
#
    li          r3,0
    rlwinm      r4,r4,0,16,16               # allow only the MSR[EE] bit
    ori         r3,r4,0
    blr
#
#}    
#
#/*************************************************************************/
#/*                                                                       */
#/* FUNCTION                                                              */
#/*                                                                       */
#/*      TCT_Restore_Interrupts                                           */
#/*                                                                       */
#/* DESCRIPTION                                                           */
#/*                                                                       */
#/*      This function restores interrupts to that specified in the       */
#/*      global TCD_Interrupt_Level variable.                             */
#/*                                                                       */
#/* AUTHOR                                                                */
#/*                                                                       */
#/*      Barry Sellew, Accelerated Technology, Inc.                       */
#/*                                                                       */
#/* CALLED BY                                                             */
#/*                                                                       */
#/*      Application                                                      */
#/*                                                                       */
#/* CALLS                                                                 */
#/*                                                                       */
#/*      None                                                             */
#/*                                                                       */
#/* INPUTS                                                                */
#/*                                                                       */
#/*      None                                                             */
#/*                                                                       */
#/* OUTPUTS                                                               */
#/*                                                                       */
#/*      None                                                             */
#/*                                                                       */
#/*                                                                       */
#/* HISTORY                                                               */
#/*                                                                       */
#/*         NAME            DATE                    REMARKS               */
#/*                                                                       */
#/*      Barry Sellew    06-24-1996       Created initial version 1.0     */
#/*                                                                       */
#/*************************************************************************/
#VOID  TCT_Restore_Interrupts(VOID)
#{
    .text
    .align      2
TCT_Restore_Interrupts:
#
#   /* lock out all interrupts */
#
    mfmsr       r11                         # get current MSR value
    rlwinm      r11,r11,0,17,15             # mask off MSR[EE] bit
    mtmsr       r11                         # write current interrupt status
#
#   /*  read in the current interrupt level */
#
    addis       r4,0,TCD_Interrupt_Level@ha
    lwz         r4,TCD_Interrupt_Level@l(r4)
#
#   /*  restore the current interrupt level */
#
    or          r11,r11,r4                  # or in the interrupt bits
    mtmsr       r11                         # write current interrupt status
#
#   /* return to the caller */
#
    blr
#
#}    
#
#/*************************************************************************/
#/*                                                                       */
#/* FUNCTION                                                              */
#/*                                                                       */
#/*      TCT_Build_Task_Stack                                             */
#/*                                                                       */
#/* DESCRIPTION                                                           */
#/*                                                                       */
#/*      This function builds an initial stack frame for a task.  The     */
#/*      initial stack contains information concerning initial values of  */
#/*      registers and the task's point of entry.  Furthermore, the       */
#/*      initial stack frame is in the same form as an interrupt stack    */
#/*      frame.                                                           */
#/*                                                                       */
#/* AUTHOR                                                                */
#/*                                                                       */
#/*      Barry Sellew, Accelerated Technology, Inc.                       */
#/*                                                                       */
#/* CALLED BY                                                             */
#/*                                                                       */
#/*      TCC_Create_Task                     Create a new task            */
#/*      TCC_Reset_Task                      Reset the specified task     */
#/*                                                                       */
#/* CALLS                                                                 */
#/*                                                                       */
#/*      None                                                             */
#/*                                                                       */
#/* INPUTS                                                                */
#/*                                                                       */
#/*      task (argument in r3)               Task control block pointer   */
#/*                                                                       */
#/* OUTPUTS                                                               */
#/*                                                                       */
#/*      None                                                             */
#/*                                                                       */
#/* HISTORY                                                               */
#/*                                                                       */
#/*         NAME            DATE                    REMARKS               */
#/*                                                                       */
#/*      Barry Sellew    06-24-1996       Created initial version 1.0     */
#/*                                                                       */
#/*************************************************************************/
#VOID  TCT_Build_Task_Stack(TC_TCB *task)
#{
    .text
    .align      2
TCT_Build_Task_Stack:
#
#   /* Pickup the stack base.  */
#   REG_Stack_Base =  (BYTE_PTR) task -> tc_stack_start;
#    
    lwz         r11,48(r3)
#
#    /* Pickup the stack size.  */
#    REG_Stack_Size =  task -> tc_stack_size;
#    
    lwz         r10,60(r3)
#
#    /* Calculate the stack ending address.  */
#    REG_Stack_End =  REG_Stack_Base + REG_Stack_Size;
#
    add         r9,r11,r10
    rlwinm      r9,r9,0,0,29                # word alignment
#
#    /* Save the stack ending address.  */
#    task -> tc_stack_end =  REG_Stack_End - DIAB/DATA space;
#
    subi        r9,r9,0x10
    stw         r9,52(r3)
#
#          
#    /* Save the minimum amount of remaining stack memory.  */
#    task -> tc_stack_minimum =  REG_Stack_Size - 164;
#
    addi        r10,r10,-164
#
#   /* Store the base size used in the stack */
#
    stw         r10,64(r3)
#
#    /* Reference the task shell.  */
#    REG_Function_Ptr =  (VOID *) TCC_Task_Shell;
#
#
#    /* Build an initial stack.  This initial stack frame facilitates an 
#       interrupt return to the TCC_Task_Shell function, which in turn 
#       invokes the application task.  The initial stack frame has the 
#       following format:
#   (Lower Address) Stack Top, new SP (r1) -> 0 XXX     Empty space to fill next
#                                             4 XXX     Old SP DIAB/DATA uses
#                                             8 XXX     Old LR DIAB/DATA uses
#                                            12 1       (Interrupt stack type)
#                                               SRR1    Old MSR
#                                               r0      Saved GPR0
#                                               r3      Saved GPR3
#                                               r4      Saved GPR4
#                                               r5      Saved GPR5
#                                               r6      Saved GPR6
#                                               r7      Saved GPR7
#                                               r8      Saved GPR8
#                                               r14     Saved GPR14
#                                               r15     Saved GPR15
#                                               r16     Saved GPR16
#                                               r17     Saved GPR17
#                                               r18     Saved GPR18
#                                               r19     Saved GPR19
#                                               r20     Saved GPR20
#                                               r21     Saved GPR21
#                                               r22     Saved GPR22
#                                               r23     Saved GPR23
#                                               r24     Saved GPR24
#                                               r25     Saved GPR25
#                                               r26     Saved GPR26
#                                               r27     Saved GPR27
#                                               r28     Saved GPR28
#                                               r29     Saved GPR29
#                                               r30     Saved GPR30
#                                               r31     Saved GPR31
#                                               CTR     Saved CTR
#                                               XER     Saved XER
#                                               CR      Saved CR
#                                               LR      Saved LR
#                                               SRR1    Saved MSR before IRQ
#                                               SRR0    Saved PC before IRQ
#                                               r9      Saved GPR9
#                                               r10     Saved GPR10
#                                               r11     Saved GPR11
#                                               r12     Saved GPR12
#                                               XXX     Old SP DAIB/DATA uses
# (Higher Address) Stack Bottom, old SP (r1)->  XXX     Old LR DAIB/DATA uses
#  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -