Added TICK, BRANCH, 0BRANCH
authorTim Vaughan <tgvaughan@gmail.com>
Fri, 22 Apr 2016 03:21:16 +0000 (15:21 +1200)
committerTim Vaughan <tgvaughan@gmail.com>
Fri, 22 Apr 2016 03:21:16 +0000 (15:21 +1200)
src/forth.jl

index 8c5c3de..101cca8 100644 (file)
@@ -726,9 +726,30 @@ IMMEDIATE = defPrim("IMMEDIATE", () -> begin
     return mem[NEXT]
 end, flags=F_IMMEDIATE)
 
+TICK = defWord("'", [WORD, FIND, TOCFA, EXIT])
+
+# Branching
+
+BRANCH = defPrim("BRANCH", () -> begin
+    reg.IP += mem[reg.IP]
+    return mem[NEXT]
+end)
+
+ZBRANCH = defPrim("0BRANCH", () -> begin
+    if (popPS() == 0)
+        reg.IP += mem[reg.IP]
+    else
+        reg.IP += 1
+    end
+
+    return mem[NEXT]
+end)
+
+# Strings
+
 #### VM loop ####
 function runVM()
-    jmp = NEXT
+    jmp = mem[NEXT]
     while (jmp = callPrim(jmp)) != 0 end
 end