aboutsummaryrefslogtreecommitdiff
path: root/j1demo/firmware/basewords.fs
diff options
context:
space:
mode:
authorDimitri Sokolyuk <ds@doozer.de>2017-05-23 17:06:09 +0200
committerDimitri Sokolyuk <ds@doozer.de>2017-05-23 17:06:09 +0200
commit6f86ce7057dd7cd1b491e8f09501258822d2ea74 (patch)
treeb3bfa11f0f72d0e1ca7c84d948af20b7494dd26b /j1demo/firmware/basewords.fs
Import j1demo
Diffstat (limited to 'j1demo/firmware/basewords.fs')
-rw-r--r--j1demo/firmware/basewords.fs60
1 files changed, 60 insertions, 0 deletions
diff --git a/j1demo/firmware/basewords.fs b/j1demo/firmware/basewords.fs
new file mode 100644
index 0000000..e529f66
--- /dev/null
+++ b/j1demo/firmware/basewords.fs
@@ -0,0 +1,60 @@
+( Base words implemented in assembler JCB 13:10 08/24/10)
+
+meta
+: noop T alu ;
+: + T+N d-1 alu ;
+: xor T^N d-1 alu ;
+: and T&N d-1 alu ;
+: or T|N d-1 alu ;
+: invert ~T alu ;
+: = N==T d-1 alu ;
+: < N<T d-1 alu ;
+: u< Nu<T d-1 alu ;
+: swap N T->N alu ;
+: dup T T->N d+1 alu ;
+: drop N d-1 alu ;
+: over N T->N d+1 alu ;
+: nip T d-1 alu ;
+: >r N T->R r+1 d-1 alu ;
+: r> rT T->N r-1 d+1 alu ;
+: r@ rT T->N d+1 alu ;
+: @ [T] alu ;
+: ! T N->[T] d-1 alu
+ N d-1 alu ;
+: dsp dsp T->N d+1 alu ;
+: lshift N<<T d-1 alu ;
+: rshift N>>T d-1 alu ;
+: 1- T-1 alu ;
+: 2r> rT T->N r-1 d+1 alu
+ rT T->N r-1 d+1 alu
+ N T->N alu ;
+: 2>r N T->N alu
+ N T->R r+1 d-1 alu
+ N T->R r+1 d-1 alu ;
+: 2r@ rT T->N r-1 d+1 alu
+ rT T->N r-1 d+1 alu
+ N T->N d+1 alu
+ N T->N d+1 alu
+ N T->R r+1 d-1 alu
+ N T->R r+1 d-1 alu
+ N T->N alu ;
+: unloop
+ T r-1 alu
+ T r-1 alu ;
+: exit return ;
+
+\ Elided words
+: dup@ [T] T->N d+1 alu ;
+: dup>r T T->R r+1 alu ;
+: 2dupxor T^N T->N d+1 alu ;
+: 2dup= N==T T->N d+1 alu ;
+: !nip T N->[T] d-1 alu ;
+: 2dup! T N->[T] alu ;
+
+\ Words used to implement pick
+: up1 T d+1 alu ;
+: down1 T d-1 alu ;
+: copy N alu ;
+
+: module[ there [char] " parse preserve ;
+: ]module s" Compiled " type count type space there swap - . cr ;