|
Hi Ralph,
Here are my results regarding MARKER and multitasker problem: small additional
code in MARKER word could do the trick. It was even easier then I though: you
dont need to put tasks in the sleep mode. Just remove them from the task
chain and they will never get the chance to continue...
Read your opening remarks recently, great speech, Ralph!
(So bad, I wasnt there
).
Sergey
-- assembler code -------------------------------------------------------------
;------------------------------------------------------------------------------
; MARKER ( "<spaces>name" -- ) \ CORE EXT
;
; Create a definition with name. The new definition will
; restore on execution all dictionary allocations and search
; order pointers to the state they had just prior to the
; definition of name.
;
; : MARKER
; HERE
; CREATE
; SystemTask @ \ SystemTask's follower
; BEGIN
; DUP @ , \ save follower
; @ CELL+ \ next follower
; DUP SystemTask @ =
; UNTIL DROP 0 , \ terminator
;
; , GET-CURRENT ,
; FORTH-WORDLIST \ start of wordlist link
; BEGIN CELL+ DUP @ WHILE @ REPEAT \ find end of wordlist link
; , GET-ORDER DUP , 0 DO , LOOP
; DOES>
; SystemTask @ \ SystemTask's follower
; BEGIN OVER @ ?DUP WHILE
; OVER ! \ restore follower
; @ CELL+ \ next task's follower
; SWAP CELL+ SWAP \ next element
; REPEAT DROP CELL+ \ terminator
;
; DUP @ TO HERE
; CELL+ DUP @ SET-CURRENT
; CELL+ DUP @ 0 SWAP ! \ restore end of wordlist
link
; CELL+ DUP @ DUP >R CELLS + R@ 0 DO DUP @ SWAP cell- LOOP
; DROP R> SET-ORDER \ restore search order
; FORTH-WORDLIST \ start of wordlist link
; BEGIN DUP @ \ last word name field of
wordlist
; BEGIN DUP HERE U>
; WHILE cell- @
; REPEAT OVER ! \ restore search order
pointer
; CELL+ @ ?DUP 0= \ repeat to next wordlist
; UNTIL ;
M_COLON(6,``"MARKER"'',Marker,_SLINK)
.word HERE,CREATE
.word SystemTask,Fetch
MARK0: .word DUPP,Fetch,Comma
.word Fetch,CELLPlus
.word DUPP,SystemTask,Fetch,Equals
.word ZBranch,MARK0,DROP,Zero,Comma
.word Comma,GET_CURRENT,Comma
.word FORTH_WORDLIST
MARK1: .word CELLPlus,DUPP,Fetch,ZBranch,MARK2
.word Fetch,Branch,MARK1
MARK2: .word Comma,GET_ORDER,DUPP,Comma,Zero,DoDO
MARK3: .word Comma,DoLOOP,MARK3
; .word DOESGreater,DUPP,Fetch,TO,HERE
.word Pipe,CALLL,DoLIST
.word SystemTask,Fetch
MARK4: .word OVER,Fetch,QuestionDUP,ZBranch,MARK5
.word OVER,Store
.word Fetch,CELLPlus
.word SWAP,CELLPlus,SWAP
.word Branch,MARK4
MARK5: .word DROP,CELLPlus
.word DUPP,Fetch,DoTO,AddrHERE
.word CELLPlus,DUPP,Fetch,SET_CURRENT
.word CELLPlus,DUPP,Fetch,Zero,SWAP,Store
.word CELLPlus,DUPP,Fetch,DUPP,ToR
.word CELLS,Plus,RFetch,Zero,DoDO
MARK6: .word DUPP,Fetch,SWAP,CellMinus,DoLOOP,MARK6
.word DROP,RFrom,SET_ORDER,FORTH_WORDLIST
MARK7: .word DUPP,Fetch
MARK8: .word DUPP,HERE,UGreater,ZBranch,MARK9
.word CellMinus,Fetch,Branch,MARK8
MARK9: .word OVER,Store,CELLPlus,Fetch,QuestionDUP,ZeroEquals
.word ZBranch,MARK7
.word EXIT
-- end of assembler code ------------------------------------------------------
|
|
Message has 2 Replies: | | RE: Multitasker and MARKER word
|
| (...) WOW! This is great Sergey! I haven't had a close look, but are you actually taking ALL of the tasks out of the list, or just the ones defined AFTER the point in the dictionary that is being restored by MARKER ? (...) Thanks for the kind words. (...) (25 years ago, 14-Nov-99, to lugnet.robotics.rcx.pbforth)
| | | RE: Multitasker and MARKER word
|
| Sergey, (...) Never mind my last message. I can see you store the actual task chain in the definition of MARKER and then restore the task chain correctly. WOW! I think pbForth is on the cusp of respectability now! Cheers, Ralph Hempel - P.Eng (...) (25 years ago, 14-Nov-99, to lugnet.robotics.rcx.pbforth)
|
4 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|