DESCRIPTION ----------- epromseed is a simple, crappy EPROM programmer. It connects to a bidirectional parallel printer interface. It reads 8-bit-wide ROMs, EPROMs and flash ROMs up to 8 megabits (1 megabyte); writes flash ROMs up to 2(?) megabits (software not yet implemented); and writes 27C010 (1 megabit, 128 kilobytes) EPROMs. WARNING ------- Like most homebrew EPROM programmers, epromseed does not fully comply with the manufacturers' programming specs (supervoltages and timings). It works but is not suitable for production use. This circuit will devour your soul. I cannot be responsible. PARTS ----- Two CD4015 dual shift-register chips An IC socket for the EPROM (regular socket or fancy ZIF socket) One male 25-pin D-sub connector Wire Header pins to use for jumper blocks Two 0.1uF or so ceramic disc capacitors A board to mount the parts on CONSTRUCTION ------------ I used pad-per-hole perfboard with stranded PVC-insulated wire (from a cut up IDE cable) soldered to it. It probably would have been much easier if I had used thin gauge solid Kynar-insulated wire for all but the power pins. If you want to throw this circuit together quickly, you could build it on solderless breadboard (and even do without the socket, in that case). For correct operation, keep the wires fairly short. The D-sub connector goes directly to the computer. I used ~5" wires for this, and the board sits to the side of the back of the computer. CIRCUIT OPERATION ----------------- The software sends 4 address bits to the shift registers over the data lines, and then clocks them. The only tricky bit there is that the clock line doubles as an extra address bit: since the registers are rising-edge-triggered, the software leaves the clock line high after shifting all the address bits if the "extra" bit is supposed to be a 1, or else transitions it low for a 0. For a read, after loading the registers, the software sets the parallel port data lines to be inputs, and then asserts the EPROM's output-enable line. For a write, it instead puts the data on the data lines, and sends a program pulse. The same data lines are used both to talk to the EPROM's data lines and to load the shift registers. POWER SUPPLY ------------ My workbench computer has a 2-pin +5V connector on the power supply (intended for a front-panel display or something), so I put a 2-pin header on my board for +5. You could also use the +5 pins off of a 3.5" drive power connector (be sure to use the right wires!) For the Vpp supply (for programming EPROMs and non-single-voltage flash; not needed for reading EPROMs or programming single-voltage flash), I put two terminals on the board that I can alligator-clip to an adjustable power supply. SOFTWARE -------- A program "dumprom.c" for Linux will read ROMs to stdout. "blowrom.c" will write EPROMs. Don't run it with a command-line argument or it may DESTROY your chip by sending tons of pulses to the same address! Note that it does not blank-check chips before writing them; it'll start writing and then fail if the chip is not blank. Also, it may attempt to write to an empty socket, since its initial readbacks will appear successful due to parasitic capacitance; it'll write the whole "chip" and then fail on the full-chip verify. blowrom reads from a file "rom" in the cwd. Compiling with -O3 is recommended. If you have a "fast" machine you may need to uncomment the inside of read_delay(). The programs use the ppdev driver to access the parallel port. The port is accessed through ioctl calls. Unfortunately, a sys call takes about 4us (on a 486/100). dumprom takes about 600us to read each byte. This is rather slow! Note that usleep() takes *20ms*, but nanosleep can be faster. nanosleep isn't accurate either though. A nanosleep for 90000ns ends up being closer to 30000ns on my machine, while nanosleep for 0ns would end up being around 4000ns. Note also that the scheduler can freeze the process at any time, resulting in a program pulse being much longer than you wanted. ABOUT ----- epromseed was developed by Uns Lider beginning in 2003-01. blowrom.c was not written until 2004-01. This document was completed on 2004-01-20. No further work is planned on epromseed, but I may develop other EPROM programmers in the future.