📄 os_cpu_a.asm
字号:
;OS_CPU_A.ASM 78K/0 Series
VECT20 CSEG AT 0020H
_@vect20: DW _OS_Timer
VECT3E CSEG AT 003EH
_@vect3e: DW _OSCtxSw
PUBLIC _OSStartHighRdy
EXTRN _OSTaskSwHook
EXTRN _OSRunning
EXTRN _OSTCBHighRdy
PUBLIC _OSCtxSw
EXTRN _OSTCBCur
EXTRN _OSPrioHighRdy
EXTRN _OSPrioCur
PUBLIC _OSIntCtxSw
EXTRN _OSIntNesting
EXTRN _OSTimeTick
EXTRN _OSIntExit
PUBLIC _OSCPUSaveSR
PUBLIC _OSCPURestoreSR
PUBLIC _OS_TASK_SW
PORTS CSEG
_OSStartHighRdy:
CALL !_OSTaskSwHook
MOV A, #01H ;OSRunning = 1;
MOV !_OSRunning, A
MOVW AX, !_OSTCBHighRdy
MOVW HL, AX
MOV A, [HL]
MOV X, A
MOV A, [HL+1H]
MOVW SP, AX
POP RP3
POP RP2
POP RP1
POP RP0
RETI
_OSCtxSw:
PUSH RP0
PUSH RP1
PUSH RP2
PUSH RP3
MOVW AX, !_OSTCBCur ; *OSTCBCur = SP */
MOVW HL, AX
MOVW AX, SP
XCH A, X
MOV [HL],A
XCH A, X
MOV [HL+1H],A
CALL !_OSTaskSwHook
MOV A, !_OSPrioHighRdy ;OSPrioCur = OSPrioHighRdy
MOV !_OSPrioCur, A
MOVW AX, !_OSTCBHighRdy ;OSTCBCur = OSTCBHighRdy
MOVW !_OSTCBCur, AX
MOVW AX, !_OSTCBHighRdy ;SP = OSTCBHighRdy->OSTCBStkPtr
MOVW HL, AX
MOV A, [HL]
MOV X, A
MOV A, [HL+1H]
MOVW SP, AX
POP RP3
POP RP2
POP RP1
POP RP0
RETI
_OSIntCtxSw:
MOVW AX, SP
ADDW AX, #6
MOVW SP, AX
MOVW AX, !_OSTCBCur ; *OSTCBCur = SP
MOVW HL, AX
MOVW AX, SP
XCH A, X
MOV [HL],A
XCH A, X
MOV [HL+1H],A
CALL !_OSTaskSwHook
MOV A, !_OSPrioHighRdy ;OSPrioCur = OSPrioHighRdy
MOV !_OSPrioCur, A
MOVW AX, !_OSTCBHighRdy ;OSTCBCur = OSTCBHighRdy
MOVW !_OSTCBCur, AX
MOVW AX, !_OSTCBHighRdy ;SP = OSTCBHighRdy->OSTCBStkPtr
MOVW HL, AX
MOV A, [HL]
MOV X, A
MOV A, [HL+1H]
MOVW SP, AX
POP RP3
POP RP2
POP RP1
POP RP0
RETI
_OS_Timer:
PUSH RP0
PUSH RP1
PUSH RP2
PUSH RP3
MOV A, !_OSIntNesting
ADD A, #1
MOV !_OSIntNesting, A
CALL !_OSTimeTick
CALL !_OSIntExit
POP RP3
POP RP2
POP RP1
POP RP0
RETI
_OSCPUSaveSR:
MOV A, PSW
MOV C, A
DI
RET
_OSCPURestoreSR:
MOV A, X
MOV PSW, A
RET
_OS_TASK_SW:
BRK
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -