Author: jquelin
Date: Fri Jan  9 01:23:56 2009
New Revision: 35253

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

Log:
instruction ! implemented (logical not)


Modified: trunk/languages/befunge/befunge.pir
==============================================================================
--- trunk/languages/befunge/befunge.pir (original)
+++ trunk/languages/befunge/befunge.pir Fri Jan  9 01:23:56 2009
@@ -89,7 +89,10 @@
     if char == '<' goto FLOW_GO_WEST
 
     # flow control
+    
     # math functions
+    if char == '!' goto MATHS_NOT
+    
     # stack operations
     if char == ':' goto STACK_DUP
 
@@ -97,6 +100,11 @@
     if char == 'p' goto IO_PUT_VALUE
     
     # unknown instruction
+    if char == ' ' goto MOVE_PC
+    print "unknown instruction: "
+    print char
+    print "\n"
+    end
     goto MOVE_PC
 
 =pod
@@ -114,7 +122,7 @@
         eq S0, "*", MATHS_MUL
         eq S0, "/", MATHS_DIV
         eq S0, "%", MATHS_MOD
-        eq S0, "!", MATHS_NOT
+        #eq S0, "!", MATHS_NOT
 
         # Stack operations.
         #eq S0, ":", STACK_DUP
@@ -160,6 +168,10 @@
     goto MOVE_PC
 
     # maths instructions
+  MATHS_NOT:
+    maths__not()
+    goto MOVE_PC
+    
   MATHS_PUSH_NUMBER:
     maths__push_number()
     goto MOVE_PC

Modified: trunk/languages/befunge/maths.pir
==============================================================================
--- trunk/languages/befunge/maths.pir   (original)
+++ trunk/languages/befunge/maths.pir   Fri Jan  9 01:23:56 2009
@@ -2,6 +2,19 @@
 
 .macro_const RANDMAX 65536.0
 
+#
+# maths__not()
+#
+# logical not.
+# befunge stack:
+#   before:     ... a
+#   after:      ... not(a)
+#
+.sub "maths__not"
+    $I0 = stack__pop()
+    $I0 = not $I0
+    stack_push($I0)
+.end
 
 #
 # push number on befunge's stack.
@@ -127,18 +140,6 @@
     push P2, I12
     branch MOVE_PC
 
-# Logical not.
-# Befunge Stack:
-#   before:     ... a
-#   after:      ... not(a)
-MATHS_NOT:
-    set I10, P2
-    unless I10, MATHS_NOT_POP_1
-    pop I10, P2
-MATHS_NOT_POP_1:
-    not I10, I10
-    push P2, I10
-    branch MOVE_PC
 
 =cut
 

Reply via email to