I have done a number of projects that use embedded microcontrollers, with the control software stored in EEPROM chips. This device allows me to upload the code (which I write on a PC) into an 8k x 8 EEPROM. It uses a ZIF socket for the EEPROM chip, so that the chip can be easily inserted and removed without breaking the pins. It also automatically disconnects the EEPROM chip when the not in use, so that I can safely insert or remove the EEPROM without unplugging the programmer.
The heart of the programmer is the 8255 Programmable Peripheral Interface. The 8255 has three programmable 8-bit I/O port, which I use to control all the signals to the EEPROM chip. One of the ports holds the byte to be written to the EEPROM, one holds the first byte of the memory address, and the second holds the remaining five address lines, plut the control write enable signal. A write to the EEPROM is performed by first sending the byte and address to the appropriate ports in the 8255, and then sending the 8255 the commands to lower and raise the bit that controls the write enable signal.
Since support for sub-milliseconds timing is unreliable, the timing is also handled by the programmer. The write signal to the 8255 is connected to ground through a resistor and a capacitor, and the voltage between the resistor and the capacitor is sent back through one of the parallel port's status lines. When the write signal to the 8255 changes, the time required for the capacitor to charge or discharge causes a short delay before the status line sees the change. Thus to strobe the 8255, I can first lower the 8255's write signal, and then wait for the return signal to change state. The resulting delay is less than a millisecond, and is independent of the hardware that the programming software is running on.