From a76977af62010a392c16010c367185e61e856ffe Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 30 Oct 2019 20:04:56 +0100 Subject: mv to docs --- docs/j1/toolchain/basewords.fs | 92 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 docs/j1/toolchain/basewords.fs (limited to 'docs/j1/toolchain/basewords.fs') diff --git a/docs/j1/toolchain/basewords.fs b/docs/j1/toolchain/basewords.fs new file mode 100644 index 0000000..6534d2b --- /dev/null +++ b/docs/j1/toolchain/basewords.fs @@ -0,0 +1,92 @@ +( J1 base words implemented in assembler JCB 17:27 12/31/11) + +: T h# 0000 ; +: N h# 0100 ; +: T+N h# 0200 ; +: T&N h# 0300 ; +: T|N h# 0400 ; +: T^N h# 0500 ; +: ~T h# 0600 ; +: N==T h# 0700 ; +: N>T h# 0900 ; +: N<N h# 0010 or ; +: T->R h# 0020 or ; +: N->[T] h# 0030 or ; +: N->io[T] h# 0040 or ; +: RET h# 0080 or ; + +: d-1 h# 0003 or ; +: d+1 h# 0001 or ; +: r-1 h# 000c or ; +: r-2 h# 0008 or ; +: r+1 h# 0004 or ; + +: imm h# 8000 or tw, ; +: alu h# 6000 or tw, ; +: ubranch h# 0000 or tw, ; +: 0branch h# 2000 or tw, ; +: scall h# 4000 or tw, ; + + +:: 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 ; +:: < NN 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 ; +:: io@ io[T] alu ; +:: ! T N->[T] d-1 alu + N d-1 alu ; +:: io! T N->io[T] d-1 alu + N d-1 alu ; +:: rshift N>>T d-1 alu ; +:: lshift N<N d+1 alu ; +:: exit T RET r-1 alu ; + +\ Elided words +\ These words are supported by the hardware but are not +\ part of ANS Forth. They are named after the word-pair +\ that matches their effect +\ Using these elided words instead of +\ the pair saves one cycle and one instruction. + +:: 2dupand T&N T->N d+1 alu ; +:: 2dup< NN d+1 alu ; +:: 2dup= N==T T->N d+1 alu ; +:: 2dupor T|N T->N d+1 alu ; +:: 2duprshift N>>T T->N d+1 alu ; +:: 2dup+ T+N T->N d+1 alu ; +:: 2dupu< NuN d+1 alu ; +:: 2dupxor T^N T->N d+1 alu ; +:: dup>r T T->R r+1 alu ; +:: dup@ [T] T->N d+1 alu ; +:: overand T&N alu ; +:: over> N Nu[T] d-1 alu ; -- cgit v1.2.3