+# 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
+