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

📄 z80_a.asm

📁 UCOSII使用Z80单片机开发
💻 ASM
字号:
;********************************************************************************************************
;                                                uC/OS
;                        Microcomputer Real-Time Multitasking Operating System
;
;                         (c) Copyright 1994, Jean J. Labrosse, Plantation, FL
;                                          All Rights Reserved
;
;
;                                          Z-80 Specific code
;
; File : Z80_A.ASM
; By   : Jean J. Labrosse
;********************************************************************************************************

;*********************************************************************************************************
;                                          START MULTITASKING
;                                      void OSStartHighRdy(void)
;
; Total execution time : 144 bus cycles
;*********************************************************************************************************

_OSStartHighRdy

            LD     HL,(_OSTCBHighRdy)                 ; 16~, OSTCBCur = OSTCBHighRdy
            LD     (_OSTCBCur),HL                     ; 16~
;
            LD     E,(HL)                             ;  7~, SP = OSTCBHighRdy->OSTCBStkPtr
            INC    HL                                 ;  6~
            LD     H,(HL)                             ;  7~
            LD     L,E                                ;  4~
            LD     SP,HL                              ;  6~
;
            POP    IY                                 ; 14~, Pop task's stack
            POP    IX                                 ; 14~
            POP    HL                                 ; 10~
            POP    DE                                 ; 10~
            POP    BC                                 ; 10~
            POP    AF                                 ; 10~
;
            RETI                                      ; 14~, Run task

            PAGE                                      ; /*$PAGE*/
;*********************************************************************************************************
;                                PERFORM A CONTEXT SWITCH (From task level)
;                                           void OSCtxSw(void)
;
; Total execution time : 279 bus cycles
;*********************************************************************************************************

_OSCtxSw:
;
            PUSH   AF                                 ; 11~, Save current task's context
            PUSH   BC                                 ; 11~
            PUSH   DE                                 ; 11~
            PUSH   HL                                 ; 11~
            PUSH   IX                                 ; 15~
            PUSH   IY                                 ; 15~
;
            LD     HL,0                               ; 10~, OSTCBCur->OSTCBStkPtr = SP
            ADD    HL,SP                              ; 11~
            LD     D,H                                ;  4~
            LD     E,L                                ;  4~
            LD     HL,(_OSTCBCur)                     ; 16~
            LD     (HL),E                             ;  7~
            INC    HL                                 ;  6~
            LD     (HL),D                             ;  7~
;
            LD     HL,(_OSTCBHighRdy)                 ; 16~, OSTCBCur = OSTCBHighRdy
            LD     (_OSTCBCur),HL                     ; 16~
;
            LD     E,(HL)                             ;  7~, SP = OSTCBHighRdy->OSTCBStkPtr;
            INC    HL                                 ;  6~
            LD     H,(HL)                             ;  7~
            LD     L,E                                ;  4~
            LD     SP,HL                              ;  6~
;
            POP    IY                                 ; 14~, Restore new task's context
            POP    IX                                 ; 14~
            POP    HL                                 ; 10~
            POP    DE                                 ; 10~
            POP    BC                                 ; 10~
            POP    AF                                 ; 10~
;
            RET                                       ; 10~, Return to new task

            PAGE                                      ; /*$PAGE*/
;*********************************************************************************************************
;                                PERFORM A CONTEXT SWITCH (From an ISR)
;                                        void OSIntCtxSw(void)
;
; Total execution time : 209 bus cycles
;*********************************************************************************************************

_OSIntCtxSw:
;
            LD     HL,4                               ; 10~, Ignore calls to OSIntExit and OSIntCtxSw
            ADD    HL,SP                              ; 11~
;
            LD     D,H                                ;  4~, OSTCBCur->OSTCBStkPtr = SP
            LD     E,L                                ;  4~
            LD     HL,(_OSTCBCur)                     ; 16~
            LD     (HL),E                             ;  7~
            INC    HL                                 ;  6~
            LD     (HL),D                             ;  7~
;
            LD     HL,(_OSTCBHighRdy)                 ; 16~, OSTCBCur = OSTCBHighRdy
            LD     (_OSTCBCur),HL                     ; 16~
;
            LD     E,(HL)                             ;  7~, SP = OSTCBHighRdy->OSTCBStkPtr;
            INC    HL                                 ;  6~
            LD     H,(HL)                             ;  7~
            LD     L,E                                ;  4~
            LD     SP,HL                              ;  6~
;
            POP    IY                                 ; 14~, Restore new task's context
            POP    IX                                 ; 14~
            POP    HL                                 ; 10~
            POP    DE                                 ; 10~
            POP    BC                                 ; 10~
            POP    AF                                 ; 10~
;
            RETI                                      ; 14~, Return to new task


            PUBLIC _OSStartHighRdy
            PUBLIC _OSCtxSw
            PUBLIC _OSIntCtxSw

            EXTRN  _OSIntEnter
            EXTRN  _OSIntExit
            EXTRN  _OSTCBCur
            EXTRN  _OSTCBHighRdy

            END

⌨️ 快捷键说明

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