;; simple task switcher .symbol stop 0 cnt 20 stack 2000 sp 29 .code 0 :main mv r1 #tswitch st r1 1000 ;; set up int vector mv sp #stack ;; set stack mv r1 #0 st r1 cnt ;; cnt = 0 jmp process1 :process1 :loop ;; count to 10 ld r1 cnt add r1 r1 #1 st r1 cnt eq r2 r1 #10 jf r2 loop trap stop ;; an ISR :tswitch ;; use r3 for ret-ads savt r3 ;; save current process PC to r3 savr sp ;; mv sp #next ;; pointer to data of next process resr sp rest r3 ;; restore next process PC to return-address reti .end