Author: jquelin
Date: Fri Jan  9 01:17:27 2009
New Revision: 35251

Modified:
   trunk/languages/befunge/befunge.pir
   trunk/languages/befunge/io.pir

Log:
instruction p implemented (put value)


Modified: trunk/languages/befunge/befunge.pir
==============================================================================
--- trunk/languages/befunge/befunge.pir (original)
+++ trunk/languages/befunge/befunge.pir Fri Jan  9 01:17:27 2009
@@ -88,19 +88,19 @@
     if char == 'v' goto FLOW_GO_SOUTH
     if char == '<' goto FLOW_GO_WEST
 
+    # flow control
+    # math functions
+    # stack operations
+    if char == ':' goto STACK_DUP
+
+    # i/o operations
+    if char == 'p' goto IO_PUT_VALUE
+    
     # unknown instruction
     goto MOVE_PC
 
 =pod
 
-
-        # Direction changing.
-        eq S0, "^", FLOW_GO_NORTH
-        eq S0, ">", FLOW_GO_EAST
-        eq S0, "v", FLOW_GO_SOUTH
-        eq S0, "<", FLOW_GO_WEST
-        eq S0, "?", FLOW_GO_AWAY
-
         # Flow control.
         eq S0, "`", FLOW_COMPARE
         eq S0, "_", FLOW_EW_IF
@@ -117,7 +117,7 @@
         eq S0, "!", MATHS_NOT
 
         # Stack operations.
-        eq S0, ":", STACK_DUP
+        #eq S0, ":", STACK_DUP
         eq S0, "$", STACK_POP
         eq S0, "\\", STACK_SWAP
 
@@ -127,7 +127,7 @@
         eq S0, ".", IO_OUTPUT_INT
         eq S0, ",", IO_OUTPUT_CHAR
         eq S0, "g", IO_GET_VALUE
-        eq S0, "p", IO_PUT_VALUE
+        #eq S0, "p", IO_PUT_VALUE
 
 =cut
 
@@ -155,12 +155,20 @@
   IO_PUSH_CHAR:
     io__push_char()
     goto MOVE_PC
+  IO_PUT_VALUE:
+    io__put_value()
+    goto MOVE_PC
 
     # maths instructions
   MATHS_PUSH_NUMBER:
     maths__push_number()
     goto MOVE_PC
-
+    
+    # stack operations
+  STACK_DUP:
+    stack__duplicate()
+    goto MOVE_PC
+    
 
     # instruction executed, now move the pc
 

Modified: trunk/languages/befunge/io.pir
==============================================================================
--- trunk/languages/befunge/io.pir      (original)
+++ trunk/languages/befunge/io.pir      Fri Jan  9 01:17:27 2009
@@ -18,6 +18,27 @@
     set_global "stack", $P1
 .end
 
+
+#
+# io__put_value()
+#
+# put a value in the playfield.
+# befunge stack:
+#   before:     ... i x y
+#   after:      ...
+# value_at(x,y) = i
+#
+.sub "io__put_value"
+    .local int x, y, v
+    y = stack__pop()
+    x = stack__pop()
+    v = stack__pop()
+
+    $P0 = get_global "playfield"
+    $P0[y;x] = v
+    set_global"playfield", $P0
+.end
+
 =pod
 
 IO_PUSH_CHAR:
@@ -120,26 +141,6 @@
     push P2, I12
     branch MOVE_PC
 
-# Put a value in the playfield.
-# Befunge stack:
-#   before:     ... i x y
-#   after:      ...
-# value_at(x,y) = i
-IO_PUT_VALUE:
-    set I11, P2
-    unless I11, IO_PUT_VALUE_POP_1
-    pop I11, P2
-IO_PUT_VALUE_POP_1:
-    set I10, P2         # offset
-    unless I10, IO_PUT_VALUE_POP_2
-    pop I10, P2
-IO_PUT_VALUE_POP_2:
-    set I20, P2
-    unless I20, IO_PUT_VALUE_POP_3
-    pop I20, P2
-IO_PUT_VALUE_POP_3:
-    set P1[I11;I10], I20
-    branch MOVE_PC
 
 =cut
 

Reply via email to