-
Instruction set expansion - STORE AC -> [X++,D]
09/24/2018 at 13:44 • 0 commentsMaking the previous changes to the instruction also gives a few extra instructions: ST AC->[X,X] and ST AC->[X++,X++]. These are not super useful, so I decided to make a change to give me ST AC->[X++,D] instead. I can do this by forcing the lower byte to be D when the /OVERRIDE is active.
Current the lower byte MAU select line EL selects X when 0 and D when 1. I want to reverse this behavior by removing the wired-ROM diodes that are there, and putting in diodes for the instructions not currently selected. Then I swap the X and D inputs to the lower byte MAU chips. This results in the same behavior as before, but now EL selects D when 0 and X when 1.
Now I can add one more diode from the EL line to the /OVERRIDE line. So when the /OVERRIDE is low (active), it forces EL to be low as well selecting D. And BAM I have my ST AC->[X++,D] function for only 3 extra diodes.
-
Instruction set expansion - STORE AC-> [X,D]
09/24/2018 at 13:30 • 0 commentsOne improvement I'm making to the Gigatron is to increase the instruction set. I wanted this to be 100% compatible with the original, so that means I can't really replace any instructions that anyone may use; however, there are some instructions that no-one will use. The STORE instruction has some possibilities to store to memory and read from memory at the same time. This is an undefined mode for the RAM. So nobody would be using these instructions. So I'm assuming these are up for grabs.
I decided that I wanted to have a store instruction with X as the high byte. Then it is easy to do a LOAD Y,D and then STORE X,D to move data around. The upper byte in the MAU is currently only connected to Y, so it isn't too hard to connect up the other side to X. Then I just need an enable wire to select X.
I can identify when these undefined instructions are called by looking for both the STore instruction and the /OE is enabled. This gives me the new enable for X which I call /OVerride. However, I still need to fix the undefined problem, so instead of selecting /OE, I will now select the ACcumulator register /AE instead. So this leads to three new equations:
/OV = /OE or ST
/OE = /oldOE or /ST
/AE = /oldAE and /OV
I can accomplish this with one more quad OR chip and a wired-AND.