I am trying to make a basic EPROM programmer for M27C322/160/800 chips, mainly as an learning exercise since I know I can buy adaptors for programmers I already own.

I found a very useful resource in the form of an old magazine article that explains how you can make something like this yourself (you can find it here).

I have a similar problem to tackle that the author of this article did, in that several of the pins on my ZIF socket will need to either supply power to the chip or provide an address signal to it. For example, on the '322 pin 32 is the A20 line, but on the '160/'800 that pin is the BYTE line that needs Vpp during programming (+12V). Here is what the author came up with himself:

enter image description here

Now, I'm sure I understand how the power switching works - pulling any of the "xV Enable" lines low individually will allow current to sink through the appropriate resistor and create an output voltage from the '317 based on that resistor's value. What I don't understand is how the A15 control line and associated transistors is working and how this circuit is able to transfer control of ZIF pin 1 between the power signals and address signals... Is someone able to kindly explain what is going on here?

Is it so that if all 3 of the Enable lines (in this case) are driven high, then the output voltage on the '317 will be either +5V or +0V based on the state of the A15 line? It's worth noting for clarity that the "B" line in the diagram is a -1.4V bias, I guess that helps generate the +0V he needs but I'm not sure how.

Thanks for any help.


When PB7 of the 8255 is asserted the 2N2222 sinks the LM317 reference pin (terminal A) to B (-1.4V). The LM317 always outputs whatever the reference voltage is plus 1.25V, so bringing the reference to -1.4V gives us nearly 0V on the output. In this way ZIF pin 1 (A15) is driven low. It could be a little negative but that is tolerable to most EPROMs.

See Bruce Abbott's comment about the function of the 2N2907 (thanks!)

You are correct in that when driving A15 low you'd want to drive the 7407 inputs high so they don't contribute to the voltage at the reference pin.

  • 1
    \$\begingroup\$ "The 8255 alone can't provide enough current to drive the base of the 2N2222, so the 2N2907 goes between them to increase the current available." - not quite. The 2N2907 just does voltage level conversion. The 2N2222 performs the required current amplification. \$\endgroup\$ – Bruce Abbott Dec 14 '17 at 18:26
  • \$\begingroup\$ Thanks for your reply. So if I understand correctly, asserting the 5V, 12.5V and 21V enables lines high will allow us to generate 0V output from the 317 by asserting the A15 line high also? What happens if the voltage enable lines are all high but the A15 line is low? I only ask because I am unsure how the A15 line generates a high voltage on ZIF pin 1 when it needs to (i.e. when I am programming bytes in that part of the eprom). Or is it so that you need to use the 5V enable line in that case? Just seems a little annoying to implement on the software side. Thanks! \$\endgroup\$ – Jaska Dec 14 '17 at 20:20
  • \$\begingroup\$ I think you'd need to use the 5V enable to drive A15 high. With the 2N2222 and 7407 outputs disabled there's nothing to help get the LM317 output over 2.0V to indicate a high logic level. \$\endgroup\$ – user171804 Dec 14 '17 at 22:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.