VolksForth/st/TASKER.FB

1 line
8.0 KiB
Plaintext
Raw Normal View History

2017-04-23 22:25:49 +00:00
\\ *** Multitasker *** bp 12oct86 Dieses File enth<74>lt die Worte f<>r das Multitasking. Mit TASK werden Tasks eingerichtet. Jede Task hat ihren eige- nen Daten- und Returnstack, deren Gr<47><72>e beim Einrichten der Task angegeben werden mu<6D>. Mit MULTITASK wird der Tasker eingeschaltet, mit SINGLETASK abgeschaltet. Mit TASKS kann man die Tasks im System und ihren Zustand anzeigen. N<>heres zur Funktionsweise des Taskers findet man im Handbuch, ebenso wie ein ausf<73>hrliches Glossar ! \ Multitasker Loadscreen 22nov86bp Onlyforth \needs Code 2 loadfrom assemble.scr \needs multitask 1 +load 02 05 +thru \ Tasker 06 +load \ Spooler \ stop singletask multitask 14sep86we Code stop .l FP IP suba .w IP SP -) move .l FP RP suba .w RP SP -) move UP R#) D6 move D6 reg) A0 lea .l FP SP suba .w SP 8 A0 D) move 2 A0 D) D6 move D6 reg) jmp end-code Label taskpause UP R#) D6 move D6 reg) A0 lea $4E43 # A0 ) move Forth ' stop @ Assembler bra end-code : singletask [ ' pause @ ] Literal ['] pause ! ; : multitask taskpause ['] pause ! ; \ pass activate bp 12oct86 | : (pass ( n0 ... nm-1 Taskaddr m -- ) rdrop swap \ delete IP of ACTIVATE or PASS $4E43 over ! \ awake Task r> -rot \ get the IP; Stack: IP m Taskaddr &10 + >r \ push s0 of Task r@ 2+ @ swap \ Stack-Top: IP r0 m 2+ 2* \ bytes on Taskstack incl. r0 & IP r@ @ over - \ new SP dup r> 2- ! \ into Ssave swap bounds ?DO I ! 2 +LOOP ; : activate ( Taddr -- ) 0 (pass ; restrict : pass ( n0 ... nm-1 Taskaddr m ) (pass ; restrict