public final Mask DISPATCH_PATH;
public final Mask DISPATCH_INSTR;
public final Mask NOT_INTERRUPTIBLE;
- public final Mask OS;
public final Mask P;
public final Mask P_NOT_A;
public final Mask P_A;
ABORT = new Mask("........1............................");
TAIL = new Mask(".........1...........................");
- OS = new Mask(".......1.............................");
-
// actually "is interruptible"
NOT_INTERRUPTIBLE = new Mask("...........1....1....................");
DISPATCH_PATH = new Mask("vvvvvvvvvvv..........................");
DISPATCH_INSTR = new Mask("...........vvvvvvvvvvvvvvvvvvvvvvvvvv");
NOT_INTERRUPTIBLE = new Mask("...........1.........................");
- OS = new Mask("............1........................");
P = new Mask(".............vvv.....................");
P_NOT_A = new Mask(".............000.....................");
P_A = new Mask(".............001.....................");
if (P_NOT_A.get(inst)) predicate = NotFlagA;
if (P_NOT_B.get(inst)) predicate = NotFlagB;
- boolean looping = !OS.get(inst);
if (FLUSH.get(inst))
- return new Flush(dock, looping, predicate);
+ return new Flush(dock, false, predicate);
if (ABORT.get(inst))
return new Abort(dock, predicate);
- if (SHIFT.get(inst)) return new Shift(dock, looping, predicate, new BitVector(dock.getShip().getFleet().getShiftWidth()).set(SHIFT.getval(inst)));
+ if (SHIFT.get(inst)) return new Shift(dock, false, predicate, new BitVector(dock.getShip().getFleet().getShiftWidth()).set(SHIFT.getval(inst)));
if (SET_IMMEDIATE.get(inst)) {
boolean extend = SET_IMMEDIATE_EXTEND.getval(inst) != 0;
long immediate = SET_IMMEDIATE.getval(inst);
if (extend) immediate |= (-1L << DataLatch_WIDTH);
- return new Set(dock, looping, predicate, SetDest.DataLatch, (immediate));
+ return new Set(dock, false, predicate, SetDest.DataLatch, (immediate));
}
if (SET_OLC_FROM_OLC_MINUS_ONE.get(inst))
- return new Set(dock, looping, predicate, SetDest.OuterLoopCounter, SetSource.Decrement);
+ return new Set(dock, false, predicate, SetDest.OuterLoopCounter, SetSource.Decrement);
if (SET_OLC_FROM_IMMEDIATE.get(inst))
- return new Set(dock, looping, predicate, SetDest.OuterLoopCounter, (SET_OLC_FROM_IMMEDIATE.getval(inst)));
+ return new Set(dock, false, predicate, SetDest.OuterLoopCounter, (SET_OLC_FROM_IMMEDIATE.getval(inst)));
if (SET_ILC_FROM_IMMEDIATE.get(inst))
- return new Set(dock, looping, predicate, SetDest.InnerLoopCounter, (SET_ILC_FROM_IMMEDIATE.getval(inst)));
+ return new Set(dock, false, predicate, SetDest.InnerLoopCounter, (SET_ILC_FROM_IMMEDIATE.getval(inst)));
if (SET_OLC_FROM_DATA_LATCH.get(inst))
- return new Set(dock, looping, predicate, SetDest.OuterLoopCounter, SetSource.DataLatch);
+ return new Set(dock, false, predicate, SetDest.OuterLoopCounter, SetSource.DataLatch);
if (SET_ILC_FROM_DATA_LATCH.get(inst))
- return new Set(dock, looping, predicate, SetDest.InnerLoopCounter, SetSource.DataLatch);
+ return new Set(dock, false, predicate, SetDest.InnerLoopCounter, SetSource.DataLatch);
if (SET_ILC_FROM_INFINITY.get(inst))
- return new Set(dock, looping, predicate, SetDest.InnerLoopCounter, SetSource.Infinity);
+ return new Set(dock, false, predicate, SetDest.InnerLoopCounter, SetSource.Infinity);
if (SET_FLAGS.get(inst)) {
long flag_a = SET_FLAGS_A.getval(inst);
long flag_b = SET_FLAGS_B.getval(inst);
if (SET_FLAGS_VALUE_NOT_B.get(flag_b)) bp = bp.add(NotFlagB );
if (SET_FLAGS_VALUE_C .get(flag_b)) bp = bp.add(FlagC );
if (SET_FLAGS_VALUE_NOT_C.get(flag_b)) bp = bp.add(NotFlagC );
- return new Set(dock, looping, predicate, ap, bp);
+ return new Set(dock, false, predicate, ap, bp);
}
if (MOVE.get(inst))
return new Move(dock,
- looping,
+ false,
predicate,
!NOT_INTERRUPTIBLE.get(inst),
PATH_DATA.get(inst)?null:getPathByAddr(dock, PATH_IMMEDIATE.getvalAsBitVector(inst)),
boolean dl = false;
Instruction pi = d;
- if (!pi.looping) instr = OS.set(instr);
switch(pi.predicate) {
case IgnoreFlagD: instr = P_ALWAYS.set(instr); break;
case FlagD: instr = P_OLC_ZERO.set(instr); break;