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

📄 osdualtask.asm

📁 6502双任务OS
💻 ASM
字号:
;***********************************************************************************
;		6502 Dual Task Os
;Author: ZK
;Date:	 2007-8-10 15:54 Update
;Mcu:	 Sunplus  series
;Detail:
;	This mini kernel support 2 task switch,each task provide
;	stack space:	(include interrupt save address,psw and ac,x,y)
;	(0FFH	    ->	C_Task0Bom) Task0 stack
;	(C_Task0Bom ->	080H Task1) stack1 & all ram define
;NOTE:	RAM define cannot location  0FFH->C_Task0Bom(Task0 stack area) 
;***********************************************************************************

;%OsTaskLock			;Lock current task
;%OsTaskFree			;Release lock task
;%OsInitDualTask		;Inital Multi-task,and jmp to Task 0
;%OsMultiTaskIntServer		;Place Interrupt,per run once will swith next task,
				;need set timer obtain switch frequency
;-----------------------------------------------------------------------------------
;	Mutil-Task Kernel RAM
.PAGE0 		
R_MtCurrentTask		.ds	1
R_MtStackPoint 		.ds	2
R_MtFlag   		.ds	1
B_MtTaskLock	=	0x01
;-------------------------------
C_MaxTask   	=	2
C_Task0Bom	=	0E9H
;===================================================================================
.CODE

%OsInitDualTask:	.MACRO
	sei
	lda	#0
	sta	R_MtCurrentTask
	lda	#0FFH-6
	sta	R_MtStackPoint
	lda	#C_Task0Bom-1-6
	sta	R_MtStackPoint+1
	lda	#>Main_Task0
	sta	0FFH
	lda	#<Main_Task0
	sta	0FEH
	lda	#>Main_Task1
	sta	C_Task0Bom-1
	lda	#<Main_Task1
	sta	C_Task0Bom-2
	ldx	#0FFH
	txs
	;jsr	F_OsTaskFree
	cli
	jmp	Main_Task0
		.ENDM
;------------------------------------------------------------------------------------		
%OsDualTaskIntServer:	.MACRO
	lda	R_MtFlag
	and	#B_MtTaskLock
	bne	MT_End	         	
MT_Switch:				
	ldy	R_MtCurrentTask		
	tsx			  
	stx	R_MtStackPoint,y	
	iny			 	
	cpy	#C_MaxTask 	 	
	bcc	?Next	 	 	
	ldy	#0		 	
?Next:				
	sty	R_MtCurrentTask
	ldx	R_MtStackPoint,y	
	txs			  
MT_End:
		.ENDM
;------------------------------------------------------------------------------------
;%OsTaskLock:	.MACRO		
F_OsTaskLock:
	sei
	lda	R_MtFlag
	ora	#B_MtTaskLock
	sta	R_MtFlag
	cli
	rts
;		.ENDM
		
;%OsTaskFree:	.MACRO
F_OsTaskFree:
	sei
	lda	R_MtFlag
	and	#!B_MtTaskLock
	sta	R_MtFlag
	cli
	rts
;		.ENDM
		
;===================================================================================





⌨️ 快捷键说明

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