I decided early that I didn't want to 'cheat' and use gates with 0 time to wire up the unit. I'll go into detail about how this affected the wiring later. Most of the ALU's wiring functions were no harder to connect than the earlier operations like JMP, INJ, SDG... However, after adding in a few more of the operations, I realized that I was going to need to be able to OR some operations a lot. Specifically things like SEND the IR Operand, and LOAD MAR. Given my desire to not use devices with a time of 0, I realized I was going to need a different solution to get past an OR-8. (LOAD MAR required an OR-12). The solution to this was to create a new primitive device in LogicWorks 4. The 'ultimate' test program I ran this week was to execute Professor Hasegawa's Self Correcting Code adder.
Add Process:
SC3: SD IR + LD MAR
SC4: SD MBR + LDY
SC5: SDG + LDX
SC6: ADD + LDZ
SC7: SDZ + LDG
What to do with carry?
Also, what is the required
delay time for a full add opperation.
First Carry is d3
Successive Carry's are d2
16 carry's in total =
3 + 15*2 = 33
LD X req's
SC5 + D3 + LDX(D2) = 5.05
ADD req's
5.05 + .33/.20 = 6.18
UNIshift0 req's delay 2
ergo LDZ after
6.18 + 2 = SC6 + D20
Plus the internal time needed to
propigate the signal from the
registers to the 3-state output
This is dangerous as the delay
now overlaps SubCycle 7
So this should yields FFFF + 0001 = 0000
but at SC6 + 19 we get 8000
Thus, LDZ must happen on SC7 with some extra delay to let the add operation complete.
6018 9008 1020 7020 6021 1000 7000 A000 0010 F000 F000 F000 F000 F000 F000 FFFF 0000 6022 7000 6023 7020 C000 F000 F000 0010 0011 0012 8000 0014 0015 0016 8000 0000 0001 6018 0000 F000 F000 F000 F000 602B 77F0 A02C 0000 A011 F000 F000 FFFF XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX