- lf = ctx.loopFactory(alu.getDock("in2"), 0);
- lf.abortLoopIfTorpedoPresent();
- lf.recvToken();
- lf.literal(offset);
- lf.deliver();
+ if (read) {
+ // memory.inAddrRead: just recv and deliver
+ lf = ctx.loopFactory(memory.getDock("inAddrRead"), 0);
+ lf.abortLoopIfTorpedoPresent();
+ lf.recvWord();
+ lf.deliver();
+
+ } else {
+ // memory.inDataWrite: recv a word, send a token to alu.out, deliver the word
+ lf = ctx.loopFactory(memory.getDock("inDataWrite"), 0);
+ lf.abortLoopIfTorpedoPresent();
+ lf.recvWord();
+ lf.setFlags(FlagFunction.ZERO.add(FlagC), FlagFunction.ZERO);
+ lf.setPredicate(Predicate.FlagA);
+ lf.sendToken(fp.getDebugInputDock());
+ lf.setPredicate(Predicate.NotFlagA);
+ lf.sendToken(alu.getDock("out"));
+ lf.deliver();
+ lf.setPredicate(null);
+
+ // memory.inAddrWrite: just recv and deliver
+ lf = ctx.loopFactory(memory.getDock("inAddrWrite"), 0);
+ lf.abortLoopIfTorpedoPresent();
+ lf.recvWord();
+ lf.deliver();
+ }