aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/tests
diff options
context:
space:
mode:
Diffstat (limited to 'amforth-6.5/tests')
-rw-r--r--amforth-6.5/tests/assembler-test.frt58
-rw-r--r--amforth-6.5/tests/multitask-test.frt45
-rw-r--r--amforth-6.5/tests/quotations-test.frt19
-rw-r--r--amforth-6.5/tests/test-quotations.frt19
-rw-r--r--amforth-6.5/tests/test-rega.frt41
5 files changed, 182 insertions, 0 deletions
diff --git a/amforth-6.5/tests/assembler-test.frt b/amforth-6.5/tests/assembler-test.frt
new file mode 100644
index 0000000..b769f3d
--- /dev/null
+++ b/amforth-6.5/tests/assembler-test.frt
@@ -0,0 +1,58 @@
+\ ----- Test AvrAsm -----
+
+only forth also assembler
+
+: loadtos, 24 Y+ ld, 25 Y+ ld, ; \ define macro
+: savetos, -Y 25 st, -Y 24 st, ; \ from macros.asm
+
+code dup_ savetos, end-code \ insert asm code
+code drop_ loadtos, end-code
+
+code ++_ \ ( x1 x2 x3 -- x4 )
+ R14 2 ldi, \ + +
+ label>
+ R16 Y+ ld,
+ R17 Y+ ld,
+ R24 R16 add,
+ R25 R17 adc,
+ R14 1 subi,
+ <radr brne,
+end-code
+
+previous
+
+\ code demojmp \ demo jump + dup
+\ adr> 0 jmp, \ -+
+\ label> \ | +>-+
+\ clc, \ | | |
+\ adr> rjmp, \ | | +-+
+\ nop, \ | | |
+\ <labelr \ | | +<+
+\ adr> brcc, \ | | +-+
+\ nop, \ | | |
+\ rot <labell \ +> | |
+\ swap <radr rjmp, \ '-+ |
+\ <labelb \ <-+
+\ savetos,
+\ end-code
+
+\ code demojmp \ version with vector
+\ adr> 0 jmp, 0 >lbl \ addr->lbl[0]
+\ label> 1 >lbl
+\ clc,
+\ adr> rjmp, 2 >lbl
+\ nop,
+\ 2 <lbl <labelr
+\ adr> brcc, 3 >lbl
+\ nop,
+\ 0 <lbl <labell \ lbl[0]->tos
+\ 1 <lbl <radr rjmp,
+\ 3 <lbl <labelb
+\ savetos,
+\ end-code
+
+
+2 3 4 ++_ . \ 9
+5 6 drop_ dup_ . . \ 5 5
+
+\ end of file
diff --git a/amforth-6.5/tests/multitask-test.frt b/amforth-6.5/tests/multitask-test.frt
new file mode 100644
index 0000000..a479280
--- /dev/null
+++ b/amforth-6.5/tests/multitask-test.frt
@@ -0,0 +1,45 @@
+\ lib/multitask-test.frt
+
+$38 constant PORTB
+$37 constant DDRB
+
+include lib/multitask.frt \ load the multitasker
+
+: ms ( n -- ) \ call pause on wait
+ 0 ?do pause 1ms loop ;
+
+ \ create a persistent task
+variable N
+: init
+ $ff PORTB c! \ portB: all pins high
+ $ff DDRB c! \ all pins output
+ 0 N !
+;
+\ --- task 2 ---
+: run-demo
+ begin
+ N @ invert PORTB c!
+ 1 N +!
+ &500 ms
+ again
+;
+$40 $40 0 task: task_demo \ create task space
+: start-demo
+ task_demo tcb>tid
+ activate \ words after this line are run in new task
+ run-demo
+;
+: starttasker
+ task_demo task-init \ create TCB in RAM
+ start-demo \ activate tasks job
+
+ onlytask \ make cmd loop task-1
+ task_demo tcb>tid alsotask \ start task-2
+ multi \ activate multitasking
+;
+: run-turnkey
+ applturnkey
+ init
+ starttasker
+;
+' run-turnkey is turnkey \ make run-turnkey start on power up
diff --git a/amforth-6.5/tests/quotations-test.frt b/amforth-6.5/tests/quotations-test.frt
new file mode 100644
index 0000000..26057a8
--- /dev/null
+++ b/amforth-6.5/tests/quotations-test.frt
@@ -0,0 +1,19 @@
+\ anonymous definitions in a definition
+
+: if-else ( ... f xt1 xt2 -- ... )
+\ Postscript-style if-else
+ rot if
+ drop
+ else
+ nip
+ then
+ execute ;
+
+: test ( f -- )
+ [: ." true" ;]
+ [: ." false" ;]
+ if-else ;
+
+\ 1 test cr \ writes "true"
+\ 0 test cr \ writes "false"
+
diff --git a/amforth-6.5/tests/test-quotations.frt b/amforth-6.5/tests/test-quotations.frt
new file mode 100644
index 0000000..87c99d5
--- /dev/null
+++ b/amforth-6.5/tests/test-quotations.frt
@@ -0,0 +1,19 @@
+\ anonymous definitions in a definition
+
+: if-else ( ... f xt1 xt2 -- ... )
+\ Postscript-style if-else
+ rot if
+ drop
+ else
+ nip
+ then
+ execute ;
+
+: test ( f -- )
+ [: ." true" ;]
+ [: ." false" ;]
+ if-else ;
+
+1 test cr \ writes "true"
+0 test cr \ writes "false"
+
diff --git a/amforth-6.5/tests/test-rega.frt b/amforth-6.5/tests/test-rega.frt
new file mode 100644
index 0000000..58e06c1
--- /dev/null
+++ b/amforth-6.5/tests/test-rega.frt
@@ -0,0 +1,41 @@
+\ #requires tester-amforth.frt
+
+TESTING VM Register A
+hex
+
+\ ------------------------------------------------------------------------
+TESTING basic assumtions
+
+variable atest 10 allot
+atest >a
+
+0 constant false
+-1 constant true
+
+$55aa constant pattern
+
+
+{ a> atest = -> true }
+{ pattern a! -> }
+\ address must not change
+{ a> atest = -> true }
+{ a@ pattern = -> true }
+\ address must not change
+{ a> atest = -> true }
+
+TESTING address changes.
+{ pattern a!+ -> }
+\ address must increase by 1 cell
+{ a> atest cell+ = -> true }
+
+{ pattern a!- -> }
+\ address must decrease by 1 cell
+{ a> atest = -> true }
+
+{ a@+ pattern = -> true }
+\ address must increase by 1 cell
+{ a> atest cell+ = -> true }
+
+{ a@- pattern = -> true }
+\ address must decrease by 1 cell
+{ a> atest = -> true }