Typo fixes.
[forth.jl.git] / src / forth.jl
index 8c5c3de..5978fb1 100644 (file)
@@ -687,17 +687,17 @@ end)
 LBRAC = defPrim("[", () -> begin
     mem[STATE] = 0
     return mem[NEXT]
-end, flags=F_IMMEDIATE)
+end, flags=F_IMMED)
 
 RBRAC = defPrim("]", () -> begin
     mem[STATE] = 1
     return mem[NEXT]
-end, flags=F_IMMEDIATE)
+end, flags=F_IMMED)
 
 HIDDEN = defPrim("HIDDEN", () -> begin
     addr = popPS() + 1
     mem[addr] = mem[addr] $ F_HIDDEN
-    reurn mem[NEXT]
+    return mem[NEXT]
 end)
 
 HIDE = defWord("HIDE",
@@ -718,17 +718,38 @@ SEMICOLON = defWord(";",
     [LIT, EXIT, COMMA,
     LATEST, FETCH, HIDDEN,
     LBRAC,
-    EXIT], flags=F_IMMEDIATE)
+    EXIT], flags=F_IMMED)
 
 IMMEDIATE = defPrim("IMMEDIATE", () -> begin
     lenAndFlagsAddr = mem[LATEST] + 1
-    mem[lenAndFlagsAddr] = mem[lenAndFlagsAddr] $ F_IMMEDIATE
+    mem[lenAndFlagsAddr] = mem[lenAndFlagsAddr] $ F_IMMED
     return mem[NEXT]
-end, flags=F_IMMEDIATE)
+end, flags=F_IMMED)
+
+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
 
@@ -745,7 +766,7 @@ function dump(startAddr::Int64; count::Int64 = 100, cellsPerLine::Int64 = 10)
 
         print("\t$(mem[addr]) ")
 
-        if (mem[addr]>=32 && mem[addr]<176)
+        if (mem[addr]>=32 && mem[addr]<128)
             chars[i%cellsPerLine + 1] = Char(mem[addr])
         else
             chars[i%cellsPerLine + 1] = '.'