Made multitasker keep sp only, and implicitly loop.
This commit is contained in:
@ -1,7 +1,7 @@
|
|||||||
( Trying some things with tasks )
|
( Trying some things with tasks )
|
||||||
|
|
||||||
: printer1 begin 42 emit 1000 ms again ;
|
: printer1 42 emit 1000 ms ;
|
||||||
: printer2 begin 43 emit 500 ms again ;
|
: printer2 43 emit 500 ms ;
|
||||||
: runner begin pause again ;
|
: runner begin pause again ;
|
||||||
|
|
||||||
' printer1 1000 1000 task print1
|
' printer1 1000 1000 task print1
|
||||||
|
|||||||
@ -4,13 +4,22 @@ vocabulary tasks tasks definitions
|
|||||||
|
|
||||||
variable task-list
|
variable task-list
|
||||||
|
|
||||||
forth definitions tasks
|
forth definitions tasks also internals
|
||||||
|
|
||||||
: task ( xt rsz dsz "name" )
|
: pause
|
||||||
create here >r 0 , 0 , 0 ,
|
rp@ sp@ task-list @ cell+ !
|
||||||
here cell+ r@ cell+ ! cells allot
|
task-list @ @ task-list !
|
||||||
here r@ 2 cells + ! cells allot
|
task-list @ cell+ @ sp! rp!
|
||||||
dup 0= if drop else >body r@ 2 cells + @ ! then rdrop ;
|
;
|
||||||
|
|
||||||
|
: task ( xt dsz rsz "name" )
|
||||||
|
create here >r 0 , 0 , ( link, sp )
|
||||||
|
swap here cell+ r@ cell+ ! cells allot
|
||||||
|
here r@ cell+ @ ! cells allot
|
||||||
|
dup 0= if drop else
|
||||||
|
here r@ cell+ @ @ ! ( set rp to point here )
|
||||||
|
, postpone pause ['] branch , here 3 cells - ,
|
||||||
|
then rdrop ;
|
||||||
|
|
||||||
: start-task ( t -- )
|
: start-task ( t -- )
|
||||||
task-list @ if
|
task-list @ if
|
||||||
@ -22,14 +31,6 @@ forth definitions tasks
|
|||||||
then
|
then
|
||||||
;
|
;
|
||||||
|
|
||||||
: pause
|
|
||||||
rp@ task-list @ 2 cells + !
|
|
||||||
sp@ task-list @ cell+ !
|
|
||||||
task-list @ @ task-list !
|
|
||||||
task-list @ cell+ @ sp!
|
|
||||||
task-list @ 2 cells + @ rp!
|
|
||||||
;
|
|
||||||
|
|
||||||
DEFINED? ms-ticks [IF]
|
DEFINED? ms-ticks [IF]
|
||||||
: ms ( n -- ) ms-ticks >r begin pause ms-ticks r@ - over >= until rdrop drop ;
|
: ms ( n -- ) ms-ticks >r begin pause ms-ticks r@ - over >= until rdrop drop ;
|
||||||
[THEN]
|
[THEN]
|
||||||
|
|||||||
Reference in New Issue
Block a user