An easy to build programmer for 2704 / 2708 / MCM68764 / MCM68766 EPROMs

This project was released in conjunction with another which programs 1702A EPROMs. More about that here.


Some time ago I needed to program an MCM68766 EPROM to upgrade the BIOS in an IBM PC 5150, and in the process discovered that hardware which can program these is rather difficult to come by. Despite having a collection EPROM programmers, including one fairly expensive model (which apparently could, but wouldn’t do it in practice) – in the end none were up to it.

So I set out to build my own. Knowing that the pin-out for 2708 EPROMs was quite similar to MCM68766 – I thought I’d tick that off while I was at it, as this is another type that is very difficult to find hardware to program.

Why is MCM68766 difficult to program?

There is nothing algorithmically complicated about programming one of these – the main difficulty centres on the high Vpp voltage (26V). Most cheap EPROM programms have a max Vpp of 13V. That having been said, there are some cheap programmers which support the 2716 EPROM, also needing a Vpp of 26V, so quite why MCM68766 is such a difficulty, may also depend on other things, such as pin arrangements, or perhaps just limited demand for it.

Why is 2708/2704 difficult to program?

This type of EPROM is genuinely more difficult to deal with. It also needs the same high Vpp voltage, as well as an additional cocktail of voltages. +26V, +12V, +5V and -5V being the full list. All of these are required during programming – quite a headache for the designers of universal programmers. Models that do support it, require a special adapter which doesn’t come cheap. This adapter typically supplies the extra voltages which aren’t practical to provide through the universal socket. Like the MCM68766 – they are algorithmically simple to program, so no complicated software stuff to worry about.


The physical design is in the form of an Arduino Mega shield. I chose this because it was large enough to accommodate all of the components, and there would be enough I/O pins without needing I/O expanders or other complicated stuff.

The only supported Arduino is the Mega 2560 R3 or compatible.

When designing it I was aware that I was likely the only person that’d want something that did both, so have allowed for it to be constructed as a dual 270x/MCM6876x programmer, or 270x only / MCM6876x only.

When built in its dual type form, selection between devices is made by a 6PDT switch, which software can query before powering on the device, checking against the selected device in the user interface, limiting the chance of accidentally blowing an EPROM (which will certainly happen if the switch is in the wrong position).

When programming 270x EPROMs, the Arduino must be supplied with a regulated +12V supply as the shield does not generate its own +12V rail. There is a software check to ensure this voltage is correct before powering on the EPROM.

There is also a footprint for an RS-232 connection + MAX232 but this is not required for most applications as the Arduino can provide a serial interface through its USB port.

Constructing it as a dual type programmer

All components must be fitted except for the RS-232 section.

Constructing it as a MCM68764/MCM68766 programmer

I figured it would be easier to just show a picture of this. All fitted components are as specified on the schematic, unless omitted or replaced with a wire link.

SW1 is hard wired in the left hand position.

Constructing it as a 2704/2708 programmer

When constructing as a 2708 programmer, only the following components can be omitted: SW1, J1, U4, D2, C1, C8, C9, C10, C11, R9.

SW1 must be hard wired in the right hand position.

I haven’t yet built one in this configuration to show a picture of but I may get around to it at some stage.


Can be downloaded here.


There are two versions of the gerbers. A “Long” version which has the exact dimensions of an Arduino Mega. Choose this if your PCB house doesn’t charge extra for exceeding 100x100mm dimensions. Total size is 101.5mm x 53.5mm.

The “Short” version has the tab at the end clipped to keep it under 100mm. Total size is 99.95mm x 53.5mm.


Can be downloaded from here.


The source code for the programmer is written in C and compiled with AVR-GCC (programmed directly with avrdude). It is located in my eightoduino repository on github. There is no Arduino sketch, therefore it can only be used on AVR Arduino Mega boards (unless ported to something else).