add Fleet.{getShiftWidth(),getSetWidth()}
[fleet.git] / src / edu / berkeley / fleet / two / FleetTwoFleet.java
index 46938f0..93f145e 100644 (file)
@@ -41,14 +41,15 @@ public abstract class FleetTwoFleet extends Fleet {
     public static final Mask TAIL                       = new Mask("................11...................");
 
     public static final Mask MOVE                       = new Mask("................01...................");
-    public static final Mask TI                         = new Mask("..................1..................");
-    public static final Mask DI                         = new Mask("...................1.................");
-    public static final Mask DC                         = new Mask("....................1................");
-    public static final Mask DO                         = new Mask(".....................1...............");
-    public static final Mask TO                         = new Mask("......................1..............");
-    public static final Mask PATH_IMMEDIATE             = new Mask(".......................1vvvvvvvvvvvvv");
-    public static final Mask PATH_DATA                  = new Mask(".......................01............");
-    public static final Mask PATH_NOCHANGE              = new Mask(".......................00............");
+    public static final Mask TI                         = new Mask("................011..................");
+    public static final Mask DI                         = new Mask("................01.1.................");
+    public static final Mask FLUSH                      = new Mask("................01.01................");
+    public static final Mask DC                         = new Mask("................01.11................");
+    public static final Mask DO                         = new Mask("................01...1...............");
+    public static final Mask TO                         = new Mask("................01....1..............");
+    public static final Mask PATH_IMMEDIATE             = new Mask("................01.....1vvvvvvvvvvvvv");
+    public static final Mask PATH_DATA                  = new Mask("................01.....01............");
+    public static final Mask PATH_NOCHANGE              = new Mask("................01.....00............");
 
     public static final Mask SET_OLC_FROM_IMMEDIATE     = new Mask("................101000100......vvvvvv");
     public static final Mask SET_OLC_FROM_DATA_LATCH    = new Mask("................101000010............");
@@ -127,6 +128,10 @@ public abstract class FleetTwoFleet extends Fleet {
         }
     }
 
+    public int getShiftWidth() { return SHIFT.valmaskwidth; }
+    public int getSetWidth() { return SET_IMMEDIATE.valmaskwidth+1; }
+
+    // FIXME: should use BitVector here
     public Instruction readInstruction(long inst, Dock dispatchFrom) {
         Dock dock = getPathByAddr(dispatchFrom, DISPATCH_PATH.getval(inst)).getDestination().getDock();
 
@@ -142,6 +147,8 @@ public abstract class FleetTwoFleet extends Fleet {
         if (P_NOT_B.get(inst))  predicate = NotFlagB;
 
         boolean looping = !OS.get(inst);
+        if (FLUSH.get(inst))
+            return new Flush(dock, looping, predicate);
         if (SHIFT.get(inst))                return new Shift(dock, looping, predicate, new BitVector(dock.getShip().getFleet().getWordWidth()).set(SHIFT.getval(inst)));
         if (SET_IMMEDIATE.get(inst)) {
             boolean extend = SET_IMMEDIATE_EXTEND.getval(inst) != 0;
@@ -225,6 +232,9 @@ public abstract class FleetTwoFleet extends Fleet {
             instr = SHIFT.set(instr);
             instr = SHIFT.setval(instr, shift.immediate);
 
+        } else if (d instanceof Flush) {
+            instr = FLUSH.set(instr);
+
         } else if (d instanceof Set) {
             Set s = (Set)d;
             switch(s.dest) {