+// output ///////////////////////////////////////////////////////////////////
+#expect 14
+#expect 13
+#expect 12
+#expect 11
+
+// program //////////////////////////////////////////////////////////////////
+#ship debug : Debug
+#ship dscratch : Dscratch
+#ship fifo : Fifo
+
+// dumb configurations
+debug.data: [*] take, deliver;
+dscratch.write_addr: [*] take, deliver;
+dscratch.write_data: [*] take, deliver;
+dscratch.read_addr: [*] take, deliver;
+fifo.in: [*] take, deliver;
+
+// addresses and values to initialize the dscratch with
+1: sendto dscratch.write_addr;
+2: sendto dscratch.write_addr;
+3: sendto dscratch.write_addr;
+4: sendto dscratch.write_addr;
+11: sendto dscratch.write_data;
+12: sendto dscratch.write_data;
+13: sendto dscratch.write_data;
+14: sendto dscratch.write_data;
+
+// send write-completion tokens to the fifo output
+dscratch.write_done:
+ [*] take, sendto fifo.out;
+
+// when the write-completion tokens accumulate, unleash
+// the read addresses
+fifo.out:
+ [4] wait;
+ [4] take, sendto dscratch.read_addr;
+
+// read addresses
+4: sendto fifo.in;
+3: sendto fifo.in;
+2: sendto fifo.in;
+1: sendto fifo.in;
+
+// data read from dscratch goes to the debug ship
+dscratch.read_data:
+ [*] take, sendto debug.data;
+