I confirmed that all the 74LSxx Plastic DIP chips are active production via the Texas Instruments website. No parts should be difficult to order when the schematics are done. Since I'm only addressing 4 registers in this design, I have to do more address decoding to select them. I'll use a 74'11 triple AND gate with three inputs each, to do the decoding. Basically if A2-A7 are high, and A8 is low, then A0-A1 select one of the four registers. I'll post some schematics next week.
Previously:
I did the 8K eeprom + 2K static ram changes to the schematics, system diagram and register map.
The original prom address block, 0000h-01FFh, it is now split into two 256 byte blocks; eeprom in the low half, 0000h-00FFh, and ram and the high half, 0100h-01FFh. The register block is in the top of the eeprom at addresses 00FCh-00FFh. It only consumes 4 bytes of each 256 byte page.
I've switched to 74'273 latches so I can clear them with a power-on-reset (POR#) or mode register bit to assure eeprom and ram always start on the same base page. It also assures that the flag register is selected (FLG#=0).
Previously:
Your suggestion to have the Arduino drive the cable lines directly is a good one.
The Arduino transfer during eeprom programming would probably be something like this:
The Lanier asserts a handshake signal requesting the Arduino to send a byte. The Arduino takes the next byte to be programmed and latches it into its shift register and then signals the Lanier that a byte is ready with a handshake line.
The Lanier then clocks 8 bits down the cable, reads the arriving byte and stores in a 128 byte buffer in the static ram. When 128 bytes are buffered buffered in ram, the Lanier temporarily delays another byte request and reconfigures to program-mode, copies the 128 bytes from ram to the eeprom and waits until it switches from busy to ready. At that point it requests the Arduino to send another 128 byte block as it repeats the process above, block by block.
Note that the eeprom has to be programmed by the Arduino to start with this firmware to thereafter program the eeproms in-circuit. So the Arduino will likely have to jumper into this board to run the program by the Arduino. I might add a connector to make that easier.
Previously:
The firmware to make the Lanier program the eeprom requires two pieces of code: (1) runs in eeprom and (2) runs in static ram. Ram allows firmware to be fetched while the eeprom is busy programming a 128 byte block.
Where Do.Rom is eeprom code and Do.Ram is static ram code:
(0) Do.Rom copies Do.Ram from rom, to static ram.
(1) Do.Rom downloads 128 bytes of new code from the Arduino into a ram buffer.
(2) Do.Rom jumps to Do.Ram where it changes to program-mode.
(3) Do.Ram writes the 128 byte buffer into the eeprom.
(4) Do.Ram waits until the eeprom is ready by looping on the BUSY flag.
(5) Do.Ram then changes out of program mode.
(6) Do.Ram jumps back to a Do.Rom entry point.
(7) Do.Rom exits if done, otherwise loops back to (1).
As noted previously, it possible that the Do.Ram code might also manage the download and buffering from the Arduino. There is only 128 bytes for code in the ram as it holds 128 bytes for buffer too. If there is codespace available, Do.Ram could be downloading a new buffer while monitoring the BUSY signal. The eeprom would likely be ready before the download is complete, but that's not a coding problem.
Previously:
Theory of Operation: The Lanier (Host) has these signals to interface in the prom socket:
A00-A08 to address 512 Bytes of original Prom space
CE# to select the board
D0-D7 to originally fetch|read the prom.
The host data bus connects to an internal data bus through a 74'245 transceiver to access four special registers. A08 selects the static ram when high and the eeprom when low. A00-A07 address a 256 byte page of either device.
The eeprom and ram blocks are independent, a necessary feature to allow the Lanier to program the eeprom while running the program in ram.
A mode register latches values to control the board. A flag register allows the Lanier to read status bits.