overhaul of interpreter, update ships to match; "make test" works now
[fleet.git] / ships / Alu.ship
index fa9dfd8..42003c6 100644 (file)
@@ -88,31 +88,41 @@ public void service() {
               b = box_in2.removeDataForShip();
               box_out.addDataFromShip(a-b); // SUB
               break;
+          case 9:
+              if (box_in1.peekDataForShip()<0 && box_in2.peekDataForShip()<0) {
+                a = box_in1.removeDataForShip();
+                b = box_in2.removeDataForShip();
+                box_out.addDataFromShip(a, false);
+                break;
+              }
+              // fall through
           case 4:
               a = box_in1.peekDataForShip();
               b = box_in2.peekDataForShip();
-              box_out.addDataFromShip(Math.max(a,b)); // MAX
-              box_out.flag_c = !(a>b);
+              box_out.addDataFromShip(Math.max(a,b), !(a>b)); // MAX
               if (a<b) box_in1.removeDataForShip(); else box_in2.removeDataForShip();
               break;
           case 5:
               a = box_in1.peekDataForShip();
               b = box_in2.peekDataForShip();
-              box_out.addDataFromShip(Math.min(a,b)); // MIN
-              box_out.flag_c = a>b;
+              box_out.addDataFromShip(Math.min(a,b), a>b); // MIN
               if (a>b) box_in1.removeDataForShip(); else box_in2.removeDataForShip();
               break;
           case 6:
               a = box_in1.removeDataForShip();
               b = box_in2.removeDataForShip();
-              box_out.addDataFromShip(0); // CMP
-              box_out.flag_c = a==b;
+              box_out.addDataFromShip(0, a==b); // CMP
               break;
-          default:
-              a = box_in1.removeDataForShip();
-              b = box_in2.removeDataForShip();
-              box_out.addDataFromShip(0);
+/*
+          case 7:
+              box_in1.removeDataForShip();      // DROP1
               break;
+          case 8:
+              box_in2.removeDataForShip();      // DROP2
+              break;
+*/
+          default:
+              throw new RuntimeException("invalid opcode: " + op);
       }
   }
 }