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