1 package edu.berkeley.fleet.loops;
2 import edu.berkeley.fleet.api.*;
3 import edu.berkeley.fleet.api.Instruction.Set.FlagFunction;
4 import static edu.berkeley.fleet.api.Predicate.*;
7 public class DockOutputStream {
8 private FleetProcess fp;
12 private static final BitVector zero_bv = new BitVector(1).set(0);
14 public DockOutputStream(FleetProcess fp,
17 Destination sendTokenTo) throws IOException {
19 if (fp.getFleet() != dock.getShip().getFleet())
20 throw new RuntimeException("Fleet mismatch");
24 pool.assertAllocated(dock.getShip());
25 pool.allocateShip(fp.getDebugInputDock().getShip());
27 CodeBag cb = new CodeBag(fp.getFleet());
29 lf = cb.loopFactory(dock, 0);
30 lf.abortLoopIfTorpedoPresent();
32 lf.setFlags(FlagFunction.ZERO.add(FlagC), FlagFunction.ZERO);
33 lf.setPredicate(Predicate.FlagA);
34 lf.sendToken(fp.getDebugInputDock());
35 lf.setPredicate(Predicate.NotFlagA);
36 if (sendTokenTo!=null) lf.sendToken(sendTokenTo);
38 lf.setPredicate(null);
43 public void writeWord(BitVector bv) {
44 fp.sendWord(dock.getDataDestination(), bv, zero_bv);
48 CodeBag cb = new CodeBag(fp.getFleet());
50 lf = cb.loopFactory(fp.getDebugInputDock(), 1);
54 fp.sendWord(dock.getDataDestination(),
55 new BitVector(fp.getFleet().getWordWidth()),
56 new BitVector(1).set(1));
62 pool.releaseShip(fp.getDebugInputDock().getShip());