📄 z80_a.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 + -