; simple task switcher

.symbol
	stop 	0
	cnt1  	100
        cnt2    101
	stack 	2000
	sp   	29

.code 0
:main
	mov r1 #tswitch
	st r1 1000     ; set up int vector
	mov sp #stack  ; set stack
	mov r1 #0
	st r1 cnt1      ; cnt = 0
        st r1 cnt2
	jmp count1

:count1
:loop			; count to 10
	ld r1 cnt1
	add r1 r1 #2
	st r1 cnt1
	eq r2 r1 #100
	jf r2 loop
	trap r0 #stop

:count2
:loop2
        ld r1 cnt2
        add r1 r1 #2
        st r1 cnt2
        lt r2 r1 #100
        jf r2 loop2
        trap r0 #stop

;  an ISR
:tswitch	     ; use r3 for ret-ads
	xch  r3      ; save current process PC to r3
	pushm sp
;	mov sp #next  ; pointer to data of next process
	popm sp
	xch   r3     ; restore next process PC to return-address
	reti
.end
