Dividing Addresses from Data
The 8085 Address/Data Bus
An 8 bit microprocessor typically has 16 address lines, 8 data lines, a number of control and status lines as well as connections for power. The 8085 provides a number of I/O and status lines that make it a nice chip to use. If it had a separate pin for every function, it would require about 47 or so pins to do the job.
However, packaging anything in a larger package than 40 pins in the day of the 8085's introduction was an expensive proposition. It'd be an oddball. And the users would have to track down special sockets for it, get special tooling for dealing with the odd package, and so on.
To prevent this, the 8085's designers took advantage of the fact that some functions are only used at times when others are not. This allowed them to make some pins do more than one thing. Specifically, they combined the lower 8 address lines with the data lines. How to know which job those pins are doing? The 8085's designers added a line to do just that, called ALE for Address Latch Enable. This line tells you that there's an address on the line when it goes high. When it drops to a low voltage state, you should hang on to the address that was there when it was high. When it is low, there are times when the same 8 lines will be used for data.
Intel and other 8085 manufacturers made some special memory and peripheral chips to go with the 8085 that would automatically hold on to the memory address. You could run the 8085's AD0-7 lines directly to them along with the other control signals like ALE, and they would automatically use the lines for the right thing at the right time.
Hold on to That Address
Normal memory chips don't do this, though. So if we want to use some ordinary RAM chip that wasn't specifically made for the 8085 we need to add the circuitry that's built into the special chips. Fortunately this is really easy. All we need to add is a type of chip called a Latch.
A latch will "latch on" to a set of signals when it's told to. The signals come in to it on its inputs. It has a set of outputs that will put out the same signal it gets on its inputs when it isn't latched. When the latch is told to "latch", it hangs on to the values of the signals on its inputs, and puts those signals on its outputs and holds them there, even if the input signals change.
That's what we'll be adding to the free run circuit. For now, the free run circuit will still be a free run circuit, but with a latch added on. Once we get a latch in and make sure it works, we'll then take away the resistors from the free run circuit and put in a real memory.