mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-11-29 05:49:26 +00:00
171 lines
11 KiB
Plaintext
171 lines
11 KiB
Plaintext
Screen 0 not modified
|
|
0 \ Multitasking Extension to volksFORTH cas 26jan06
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
Screen 1 not modified
|
|
0 \ Tasker Loadscreen
|
|
1
|
|
2 \NEEDS CODE abort( Assembler needed )
|
|
3 hex
|
|
4 1 5 +thru \ load Tasker
|
|
5 7 load \ Task-Demo
|
|
6 decimal
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
Screen 2 not modified
|
|
0 \ MULTITASKER BP 13.9.84 )
|
|
1
|
|
2 CODE STOP
|
|
3 SP 2DEC IP LDA SP X) STA IP 1+ LDA SP )Y STA
|
|
4 SP 2DEC RP LDA SP X) STA RP 1+ LDA SP )Y STA
|
|
5 6 # LDY SP LDA UP )Y STA INY SP 1+ LDA UP )Y STA
|
|
6 1 # LDY TYA CLC UP ADC W STA
|
|
7 TXA UP 1+ ADC W 1+ STA W 1- JMP END-CODE
|
|
8
|
|
9 | CREATE TASKPAUSE ASSEMBLER
|
|
10 2C # LDA UP X) STA ' STOP @ JMP END-CODE
|
|
11
|
|
12 : SINGLETASK [ ' PAUSE @ ] LITERAL ['] PAUSE ! ;
|
|
13
|
|
14 : MULTITASK TASKPAUSE ['] PAUSE ! ;
|
|
15
|
|
Screen 3 not modified
|
|
0 \ PASS ACTIVATE KS 8 MAY 84 )
|
|
1
|
|
2 : PASS ( N0 .. NR-1 TADR R -- )
|
|
3 BEGIN [ ROT ( TRICK ! ) ]
|
|
4 SWAP 02C OVER C! \ AWAKE TASK
|
|
5 R> -ROT \ IP R ADDR
|
|
6 8 + >R \ S0 OF TASK
|
|
7 R@ 2+ @ SWAP \ IP R0 R
|
|
8 2+ 2* \ BYTES ON TASKSTACK
|
|
9 \ INCL. R0 & IP
|
|
10 R@ @ OVER - \ NEW SP
|
|
11 DUP R> 2- ! \ INTO SSAVE
|
|
12 SWAP BOUNDS ?DO I ! 2 +LOOP ; RESTRICT
|
|
13
|
|
14
|
|
15
|
|
Screen 4 not modified
|
|
0 \
|
|
1
|
|
2 : ACTIVATE ( TADR --)
|
|
3 0 [ -ROT ( TRICK ! ) ] REPEAT ; -2 ALLOT RESTRICT
|
|
4
|
|
5 : SLEEP ( TADR --) 4C SWAP C! ; \ JMP-OPCODE
|
|
6
|
|
7 : WAKE ( TADR --) 2C SWAP C! ; \ BIT-OPCODE
|
|
8
|
|
9 | : TASKERROR ( STRING -)
|
|
10 STANDARDI/O SINGLETASK ." TASK ERROR : " COUNT TYPE
|
|
11 MULTITASK STOP ;
|
|
12
|
|
13
|
|
14
|
|
15
|
|
Screen 5 not modified
|
|
0 \ BUILDING A TASK BP 13.9.84 )
|
|
1
|
|
2 : TASK ( RLEN SLEN -- )
|
|
3 ALLOT \ STACK
|
|
4 HERE 00FF AND 0FE =
|
|
5 IF 1 ALLOT THEN \ 6502-ALIGN
|
|
6 UP@ HERE 100 CMOVE \ INIT USER AREA
|
|
7 HERE 04C C, \ JMP OPCODE TO SLEEP TASK
|
|
8 UP@ 1+ @ ,
|
|
9 DUP UP@ 1+ ! \ LINK TASK
|
|
10 3 ALLOT \ ALLOT JSR WAKE
|
|
11 DUP 6 - DUP , , \ SSAVE AND S0
|
|
12 2DUP + , \ HERE + RLEN = R0
|
|
13 UNDER + HERE - 2+ ALLOT ['] TASKERROR OVER
|
|
14 [ ' ERRORHANDLER >BODY C@ ] LITERAL + ! CONSTANT ;
|
|
15
|
|
Screen 6 not modified
|
|
0 \ MORE TASKS KS/BP 26APR85RE)
|
|
1
|
|
2 : RENDEZVOUS ( SEMAPHORADR -) DUP UNLOCK PAUSE LOCK ;
|
|
3
|
|
4 | : STATESMART STATE @ IF [COMPILE] LITERAL THEN ;
|
|
5
|
|
6 : 'S ( TADR - ADR.OF.TASKUSERVAR)
|
|
7 ' >BODY C@ + STATESMART ; IMMEDIATE
|
|
8
|
|
9 \ SYNTAX: 2 DEMOTASK 'S BASE ! \ MAKES DEMOTASK WORKING BINARY
|
|
10
|
|
11 : TASKS ( -) ." MAIN " CR UP@ DUP 1+ @
|
|
12 BEGIN 2DUP - WHILE
|
|
13 DUP [ ' R0 >BODY C@ ] LITERAL + @ 6 + NAME> >NAME .NAME
|
|
14 DUP C@ 04C = IF ." SLEEPING" THEN CR 1+ @ REPEAT 2DROP ;
|
|
15
|
|
Screen 7 not modified
|
|
0 \ TASKDEMO 27APR85RE)
|
|
1 : TASKMARK ;
|
|
2
|
|
3 VARIABLE COUNTER COUNTER OFF
|
|
4
|
|
5 100 100 TASK BACKGROUND
|
|
6
|
|
7 : >COUNT ( N -) BACKGROUND 1 PASS COUNTER !
|
|
8 BEGIN COUNTER @ DUP 1- COUNTER ! ?DUP
|
|
9 WHILE PAUSE 0 <# #S #> type REPEAT stop ;
|
|
10
|
|
11 : WAIT BACKGROUND SLEEP ;
|
|
12
|
|
13 : GO BACKGROUND WAKE ;
|
|
14
|
|
15
|
|
Screen 8 not modified
|
|
0
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
Screen 9 not modified
|
|
0
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|