Here's a cool optimization on the V20 I'm calling write forwarding.
I can call it whatever I want. If you want to call microcode stuff something then decode your own microcode.
This is from the MOVSW instruction:
0A51: SI -> DP --- EC=MR
0A52: SIGMA -> SI DI -> tmpB --- ALU ADD, tmpC
0A53: DI -> DP --E EC=MW, SR=ES
The V20 has a register, OPR, which holds the results of bus operations. Duh. But notice here, there's no OPR. That's odd.
What's happening is that we can pipeline the bus requests. EC=MR requests a read operation from the BIU and before it even starts EC=MW requests a write.
So where the hell is OPR? Well the key is we don't actually need the value. MOVSW just copies it blindly.
So as best as I can tell, if you queue a read and a write back to back the result of the read just goes right back out the write, automatically.
write forwarding. fuck yeah.