+# Threading Primitives
+
+NEXT = defPrim("NEXT", :(begin
+ W = memory[IP]
+ IP += 1
+ X = memory[W]
+ jmp = X
+end))
+
+DOCOL = defPrim("DOCOL", :(begin
+ pushRS(IP)
+ IP = W + 1
+ jmp = NEXT
+end))
+
+EXIT = defPrim("EXIT", :(begin
+ IP = popRS()
+ jmp = NEXT
+end))
+
+
+# Basic forth primitives
+
+DROP = defPrim("DROP", :(begin
+ popPS()
+end))
+
+SWAP = defPrim("SWAP", :(begin
+ PS[PSP], PS[PSP-1] = PS[PSP-1], PS[PS]
+end))
+
+DUP = defPrim("DUP", :(begin
+ pushPS(PS[PSP])
+end))
+
+LIT = defPrim("LIT", :(begin
+ pushPS(memory[IP])
+ IP += 1
+end))
+
+# Memory primitives
+
+STORE = defPrim("!", :(begin
+ addr = popPS()
+ dat = popPS()
+ memory[addr] = dat
+end))
+
+FETCH = defPrim("@", :(begin
+ addr = popPS()
+ pushPS(memory[addr])
+end))
+
+ADDSTORE = defPrim("+!", :(begin
+ addr = popPS()
+ toAdd = popPS()
+ memory[addr] += toAdd
+end))
+
+SUBSTORE = defPrim("-!", :(begin
+ addr = popPS()
+ toSub = popPS()
+ memory[addr] -= toSub
+end))
+
+
+# Built-in variables
+
+defVar("STATE", :STATE)
+defVar("HERE", :HERE)
+defVar("LATEST", :LATEST)
+defVAR("PSP", :PSP)
+defVAR("BASE", :BASE)
+
+# Constants
+
+