change CBD size field from 6 bits to 9 bits
[fleet.git] / src / edu / berkeley / fleet / two / FleetTwoFleet.java
index ba3ebfe..0559065 100644 (file)
@@ -89,8 +89,8 @@ public abstract class FleetTwoFleet extends Fleet {
         PACKET_SIGNAL              = new Mask("......................................v...........");
         PACKET_DEST                = new Mask(".......................................vvvvvvvvvvv");
 
-        CBD_SIZE                   = new Mask("...............................vvvvvv");
-        CBD_OFFSET                 = new Mask("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv......");
+        CBD_SIZE                   = new Mask("............................vvvvvvvvv");
+        CBD_OFFSET                 = new Mask("vvvvvvvvvvvvvvvvvvvvvvvvvvvv.........");
 
         WHOLE_WORD                 = new Mask("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
 
@@ -99,19 +99,17 @@ public abstract class FleetTwoFleet extends Fleet {
             DISPATCH_PATH              = new Mask("v....................................");
             DISPATCH_INSTR             = new Mask(".vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
             P                          = new Mask(".vvvvvv..............................");
-            P_NOT_A                    = new Mask(".100001..............................");
-            P_A                        = new Mask(".100010..............................");
-            P_NOT_B                    = new Mask(".100100..............................");
-            P_B                        = new Mask(".101000..............................");
+            P_NOT_A                    = new Mask(".010001..............................");
+            P_A                        = new Mask(".010010..............................");
+            P_NOT_B                    = new Mask(".010100..............................");
+            P_B                        = new Mask(".011000..............................");
             P_UNUSED                   = new Mask(".111111..............................");
-            P_OLC_ZERO                 = new Mask(".010000..............................");
-            P_OLC_NONZERO              = new Mask(".100000..............................");
+            P_OLC_ZERO                 = new Mask(".100000..............................");
+            P_OLC_NONZERO              = new Mask(".010000..............................");
             P_ALWAYS                   = new Mask(".000000..............................");
 
-
-            // use these when Marina gets updated to 07-Jan-2009 version of internal encoding
             HEAD                       = new Mask(".......1.............................");
-            ABORT                      = new Mask("........1............................");
+            ABORT                      = new Mask("........1......1.........000100000001");
             TAIL                       = new Mask(".........1...........................");
 
             // actually "is interruptible"
@@ -132,13 +130,13 @@ public abstract class FleetTwoFleet extends Fleet {
             PATH_DATA                  = new Mask("............1..........00............");
             PATH_NOCHANGE              = new Mask("............1..........01............");
 
+            SET_OLC_FROM_OLC_MINUS_ONE = new Mask(".............1..1....................");
+            SET_OLC_FROM_DATA_LATCH    = new Mask("..............1.11...................");
             SET_OLC_FROM_IMMEDIATE     = new Mask("..............1.10.............vvvvvv");
-            SET_OLC_FROM_DATA_LATCH    = new Mask("...............1.11..................");
-            SET_OLC_FROM_OLC_MINUS_ONE = new Mask("...............1.10..................");
 
-            SET_ILC_FROM_IMMEDIATE     = new Mask("...............1.00..........0.vvvvvv");
-            SET_ILC_FROM_INFINITY      = new Mask("...............1.0...........1.......");
-            SET_ILC_FROM_DATA_LATCH    = new Mask("...............1.01..................");
+            SET_ILC_FROM_DATA_LATCH    = new Mask("..............1.01...................");
+            SET_ILC_FROM_IMMEDIATE     = new Mask("..............1.00...........0.vvvvvv");
+            SET_ILC_FROM_INFINITY      = new Mask("..............1.0............1.......");
 
             SET_FLAGS                  = new Mask("...............1.....................");
             SET_FLAGS_A                = new Mask("...............1...............vvvvvv");
@@ -263,6 +261,19 @@ public abstract class FleetTwoFleet extends Fleet {
     public int getShiftWidth() { return SHIFT.valmaskwidth; }
     public int getSetWidth() { return SET_IMMEDIATE.valmaskwidth+1; }
 
+
+    public int getMaxCodeBagSize() {
+        return (1<<CBD_SIZE.valmaskwidth)-1;
+    }
+    public BitVector makeCodeBagDescriptor(long offset, long length) {
+        BitVector descriptor = new BitVector(getWordWidth());
+        CBD_OFFSET.setval(descriptor, offset);
+        CBD_SIZE.setval(descriptor, length);
+        return descriptor;
+    }
+
+
+
     // FIXME: should use BitVector here
     public Instruction readInstruction(long inst, Dock dispatchFrom) {
         Dock dock = getPathByAddr(dispatchFrom, DISPATCH_PATH.getvalAsBitVector(inst)).getDestination().getDock();