Author: jquelin
Date: Fri Jan  9 01:45:57 2009
New Revision: 35257

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

Log:
new instuction g implemented (get value from playfield)


Modified: trunk/languages/befunge/befunge.pir
==============================================================================
--- trunk/languages/befunge/befunge.pir (original)
+++ trunk/languages/befunge/befunge.pir Fri Jan  9 01:45:57 2009
@@ -99,6 +99,7 @@
     if char == ':' goto STACK_DUP
 
     # i/o operations
+    if char == 'p' goto IO_GET_VALUE
     if char == 'p' goto IO_PUT_VALUE
     
     # unknown instruction
@@ -136,7 +137,7 @@
         eq S0, "~", IO_INPUT_CHAR
         eq S0, ".", IO_OUTPUT_INT
         eq S0, ",", IO_OUTPUT_CHAR
-        eq S0, "g", IO_GET_VALUE
+        #eq S0, "g", IO_GET_VALUE
         #eq S0, "p", IO_PUT_VALUE
 
 =cut
@@ -171,6 +172,9 @@
   IO_PUSH_CHAR:
     io__push_char()
     goto MOVE_PC
+  IO_GET_VALUE:
+    io__get_value()
+    goto MOVE_PC
   IO_PUT_VALUE:
     io__put_value()
     goto MOVE_PC

Modified: trunk/languages/befunge/io.pir
==============================================================================
--- trunk/languages/befunge/io.pir      (original)
+++ trunk/languages/befunge/io.pir      Fri Jan  9 01:45:57 2009
@@ -20,6 +20,26 @@
 
 
 #
+# io__get_value()
+#
+# get a value from the playfield.
+# befunge stack:
+#   before:     ... x y
+#   after:      ... i
+# i = value_at(x,y)
+#
+.sub "io__get_value"
+    .local int x, y
+    y = stack__pop()
+    x = stack__pop()
+    
+    $P0 = get_global "playfield"
+    $I0 = $P0[y;x]
+    stack__push($I0)
+.end
+
+
+#
 # io__put_value()
 #
 # put a value in the playfield.
@@ -39,6 +59,8 @@
     set_global"playfield", $P0
 .end
 
+
+
 =pod
 
 IO_PUSH_CHAR:
@@ -123,24 +145,6 @@
     print S10
     branch MOVE_PC
 
-# Get a value from playfield.
-# Befunge stack:
-#   before:     ... x y
-#   after:      ... i
-# i = value_at(x,y)
-IO_GET_VALUE:
-    set I11, P2
-    unless I11, IO_GET_VALUE_POP_1
-    pop I11, P2
-IO_GET_VALUE_POP_1:
-    set I10, P2
-    unless I10, IO_GET_VALUE_POP_2
-    pop I10, P2
-IO_GET_VALUE_POP_2:
-    set I12, P1[I11;I10]
-    push P2, I12
-    branch MOVE_PC
-
 
 =cut
 

Reply via email to