Every once in a while I come across an ancient UV erasable memory device, for which no programming hardware is available. The typical reason for this is that the device in question uses unusual, normally high programming voltages, making it impractical to support in a cheap universal programmer. Premium programmers typically do support these devices, but often with a $300+ programming adapter (on top of the $600+ we have to pay for the programmer).

Many, including myself, seek a more affordable option. There are plenty of examples of other D.I.Y. programmers for the devices I support in this project, however these are usually quite makeshift and difficult to recreate.

The aim of this project is to provide a good software platform for programming these old devices, and some reliable, easy to build Arduino shields as the programming hardware.

As it is nearly impossible to build hardware which programs everything I support, each device family requires its own programming hardware. To date, there are three device shields, which have their own project pages:

270X/TMS2716/MCM6876X Shield

  • 2704
  • 2708
  • TMS2716
  • MCM68764
  • MCM68766

More about it here.

1702A Shield

  • 1702A (and all compatible devices. The 1702 is not compatible)

Okay, so this one is not so easy to build, but the demand for this is quite low, so I went for elegance and convenience of use rather than ease of construction. If you really want one, it’s going to be a bit of an effort.

More about it here.

MCS-48 Shield

I recently came across an MCS-48 in something I was trying to repair, so HVEPROM gets a new shield!

  • 8741
  • 8742
  • 8748
  • 8749
  • 8048 (Read mask ROM)
  • 8049 (Read mask ROM)

More about it here.

8755 Adapter for MCS-48 shield

The programming approach for 8755 is very similar to MCS-48. Rather than designing an entirely new shield, a passive adapter has been added to support these. More about it here.

Am I missing one?

I actually rather enjoy designing and building these. If there’s a common UV Erasable memory device you’re aware of for which programming hardware is non-existent – drop a comment. I might just build a programmer for it.

Host software

To drive these boards I’ve written a small Windows application which gives an experience similar to a commercial programmer.

Software download

Windows GUI version history

1.0 (10/05/2019)

  • Initial release

1.1 (16/02/2020)

  • Hardware test added
  • Fixed some incorrect labels on form
  • Fixed crash on systems with no serial ports
  • Fixed error in 270x voltage check
  • Added configurable baud rate

1.2 (20/05/2020)

  • Added checksum calculator
  • Fixed bug where status bar showed an incorrect operation when programmer doesn’t respond
  • Fixed bug where operations in menus were enabled at times they shouldn’t have been
  • There is a known bug in this version where the ‘read’ part of the hardware test screen does not work. It will be fixed in the next release.

1.3 (11/10/2020)

  • MCS-48 added
  • Fixed bug in ‘read’ step of hardware test, where readback value wasn’t shown

1.4 (23/11/2020)

  • Added configurable verify delay (application configuration file only)
  • Fixed issue in write checksums where checksum of input file was shown instead of device

1.5 (13/04/2020)

  • Added 8755

1.6 (09/12/2022)

  • Added support for 270x/MCM6876x/TMS2716 (V2) shield
  • Added TMS2716
  • Various minor UI improvements
  • Changed 270x write algorithm to power off the device between write and verify

I don’t distribute the source for the Windows GUI. There shall only be one version of it: My version.

I welcome new implementations of the host software, but it has to be clear that it has not come from me and as such I will not be personally supporting any alternate interfaces.

If you are interested in seeing an implementation of the host side programmer – take a look at the command line version of it on Github.

I do fix bugs and make changes on request (provided the changes are of benefit to all). Please get in touch if you feel there’s something missing.

Command line programmer

For reference I have also provided a command line programmer written in C. I do not distribute binaries for this – any binary should be considered ‘unofficial’. It is very easy to build.

On Linux – clone the git repository to a folder, and run ‘make’ in that directory.

On Windows – It has to be built with Visual Studio. I used Visual Studio 2017 with the C++ add-on. It may build on cygwin – you are on your own with that.

Getting started (YouTube)

I would recommend checking out this YouTube video by Alex Oliva.

Programming the firmware

There is only one version of the firmware, which supports all shields and devices. There is a variant of the firmware: ‘rs232’ which uses the DE-9 serial connector on the shields instead of the Arduino USB interface.

The source code is written in C and compiled with AVR-GCC. There is no Arduino sketch – it cannot be opened with Arduino Studio. It (including pre-compiled .HEX file) is located in my eightoduino repository on github. It can only be used on AVR Arduino Mega boards (unless ported to something else).

Use AVRDUDE with this command and the pre-programmed Arduino bootloader to program the firmware (replace the COM port as appropriate):

avrdude -c arduino -P COM4 -b 115200 -D -p atmega2560 -U flash:w:hveprom.hex:i

Note: Some have reported to me that the above command doesn’t work. Newer configurations now seem to require “-c wiring” instead of “-c arduino”. Mine prefers “-c stk500v2”. Arduino studio also uses avrdude, so if you find that it is working from there, but not outside of it, turn on Arduino studio’s verbose output and see what switches it’s passing to avrdude.


Operation timed out

This is the most likely problem you’ll see. I’ve been contacted about this issue by quite a few people now, in each case it has turned out to be a problem specific to that person’s setup. Here are some examples:

  • Incorrectly programmed Arduino
  • Shorts or other build mistakes on shield
  • Faulty Arduino
  • Poor quality Arduino clone fitted with counterfeit components
  • Security software blocking access to COM ports
  • Using the RS232 interface with an incorrectly wired home made serial cable.

The first I’d recommend trying is running the hardware test (Setup -> Hardware test) without the shield attached – just in case there’s an issue with your shield which is causing problems with the Arduino its self. At the very least you should see an “Invalid shield attached” error.

There are also some oddities of the on-board USB to RS-232 chip on the Arduino – even the genuine models – it seems to be common for it to get into a “bad state” where it stops passing data between the PC and the AVR. The reset button has no effect on this chip – so usually a combination of power-cycling, disconnecting and re-connecting the USB will fix it. If you’re an Arduino expert and know more about this problem please get in touch with me.

Failing that, build your board with the RS-232 section (and plug it into a serial port), and use the rs232 version of the .HEX file. You will not have these problems.

Using the hardware test function

From the “Setup” menu select “Hardware test”.  You will be prompted with the above dialog which will assist with testing before risking blowing a potentially expensive EPROM.

I strongly recommend doing this before fitting the test socket, or if you have fitted it, put an IC socket into the test socket – this will make contact with multimeter probes a lot easier. Label all of the pin numbers as I have done here. There are quite a few tests to get through – you are not going want to have to keep counting through all of the pins!

23 thoughts on “HVEPROM Project

  1. Flashing the firmware with the Arduino bootloader consistently failed across several different Mega boards and with any avrdude option I tried – only two out of four boards were unused, and I may have overwritten the boot loaders of the others (among them my only original) in the past, but there obviously are compatibility issues even on fresh clone Megas. Using an Avrisp2 on the ICSP header resolved that without any hitch – that should probably be mentioned as an alternative and safe option…

  2. Hi ! What an amazing project, thanks a lot !

    Would it be possible to add support for TMS2716 (the infamous early TI eprom, +5, -5, +12), which of course is absolutely not Intel 2716 compatible ?

    It could also read TMS2532/2532A mask roms I guess.

    Thanks again !

    1. Didn’t even know such a thing existed! I think that might be possible. I’ve just purchased one and I’ll have a crack at it when it arrives.

    2. Finally got around to looking into this. It turns out there’s an important detail I missed on my first look, which is that VCC has to be driven to +12V to program a TMS2716 which is not possible with my current design. I could whip up an adapter board which would need a couple of flyleads down to the main PCB. Ugly, but possible. Maybe I’ll put that in my next PCB order.

        1. It’s not a matter of converting voltage. The necessary voltages are already all available. It’s that the VCC pin has to be driven between +5V and +12V during operation which isn’t a trivial arrangement to put together. Probably several transistors/FETs/diodes/resistors etc plus some software changes.

          It would take me a little while to put a working solution together. As I said, it’s on the list. I may get around to it at some point.

          Also there is nothing stopping one from making the changes themselves. The project is sufficiently open source to do so.

          1. OK I get it, right it is way more complicated than I envisioned. Quite a challenge 🙂

            Thanks anyway for having had a look at it ! I’ll keep an eye !

  3. Hi Matt

    Some time ago I made myself a minimum MCS-85 system board (8085, 8156, 8755, 8185) but I didn’t bother offering it to others because so few can program the 8755 eprom. Your MCS-48 shield and 8755 adapter are making me rethink about offering that board. Can I presume you are OK with me making your boards available on my tindie store for those wanting to build my MCS-85 boards but needing a way to program their 8755s? Is there a chance of talking you into making a direct 8755 shield to avoid the adapter?

    1. I’m OK with you offering it on tindie. People have already been selling my designs on eBay off and on for years. Not worth it myself for a few bucks profit on each piece.

      I might consider doing an 8755 shield. Shouldn’t be too hard but you had better send me an MCS-85 board to build myself. Have you come across my MCS-86 SBC ? https://www.mattmillman.com/projects/8od/

      1. Thanks for the link to your MCS-86 project, I had not seen that.

        As for my MCS-85, after the design is verified I usually give away the rest of that batch of boards to those willing to pay the shipping. This MCS-85 is an old design I am just re-tweaking pin out, so there shouldn’t be any major issues. I probably won’t be submitting boards to the fab house for a couple of months. You could get a MCS-85 and your 8755 shield if you decide to lay it out.

  4. Unable to program 68766C’s. I can read roms fine, it passes all of the hardware tests with a meter, but the writes are garbled.

  5. Hi Matt, I built one of your fantastic programming shields for the 2708 EPROM, thanks very much for this excellent solution.

    It occurs to me that the 270x shield could easily be adapted to program the ‘standard’ 2716 EPROM and even the 2732 which modern USB powered programmers like the TL866 don’t support, not being able to supply the 25V Vpp

    I’m thinking the existing board could do it by swapping a couple of links in place of S1 and a slight adjustment to the programming routine in the host software. The -5V supply could be omitted for a 2716 / 2732 only version but I was wondering if you think the 270x version could accommodate these types in addition to 2708 / TMS2716?

    Thanks again, regards John.

    1. You are not wrong that it could be done. I -have- looked into it previously but it always ends up getting sticky in terms of board layout and user experience. Additionally it’s my general understanding that supply of 2716/2732 programming hardware is not an issue for retro-enthusiasts.

      1. Thanks, yes I can see your point. I guess those devices are supported by other modern programmers. The ‘TL866’ model which I have can program some 2716 ICs with Vpp up to 21V but not the 25V variants so I rely on an older programmer for those.

        The 270x shield is an incredibly useful addition as I previously had no other means of programming or reading the 2708 EPROMS. Thanks again, regards John

  6. Hi Matt, thanks for publishing the programmer shield for the 8748, I think I’m going to get rid of the Windows 85 PC and the EMP-20 and EMP-30 programmers…
    Problem report using Windows GUI:
    Selecting Device: 8748 or 8749, I have had problems trying to load .HEX files, it always reports “Selected file larger than target device”, it is strange since I have not had problems with those files and other programmers before.

  7. I have a hobby that involves industrial machinery (lathes and mills), all of which are large and heavy. I’ve got a few CNC machines and, of course, they have ancient controls. Because EPROMs have a stated life of sometimes less than 20 years, I can guarantee that many machines I’m interested in are well past their EPROM lifespan. Therefore, I always make it a habit of pulling all EPROMs and making an archival copy. I’ve ended up saving several other people’s bacon, so to speak, by having these chips archived.

    One problem I recently ran into with one of my machines is that it has an 8748 in it. My EPROM programmer, however, won’t support this microcontroller. Fortunately, I found your excellent project. My boards have been shipped and I’ll get them around Christmas time. After that, I’ll build them and hopefully be able to make archives of the controller. That is especially important because the machine vendor has been out of business for about 13 years now. 🙁

    Anyhow, thanks for sharing your work. It is appreciated.

  8. I have an programmin error.

    after This:

    avrdude -c arduino -P COM4 -b 115200 -D -p atmega2560 -U flash:w:hveprom.hex:i

    I found this:
    avrdude error: programmer is not responding
    avrdude warning: attempt 2 of 10: not in sync: resp=0x00

    It repeads up to 10 times.

    In the arduino IDE 2.2.1. envoirement the system works corectly.

    I use an usb cable not the rs232

  9. I am putting together the EPROM programmer shield for the MCS-48. I have the PCB and components. I’m in the process of installing the firmware on my Arduino Mega board, following the YouTube video from Reviving Retro. I go to the command prompt, enter the following and get an error. I am hoping someone can point to a simple typo I may have made.
    C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude -C “C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf” -v -p atmega2560 -c wiring -P COM7 -b 115200 -D -U flash:w:hveprom.hex:1
    avrdude OS error: cannot open config file C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\ôC:\Program: Invalid argument
    avrdude error: unable to process system wide configuration file C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\ôC:\Program
    Thank you!

  10. Hi,

    I have a question about the BOM for the MCS-48 shield. Line 4 lists that only two 1 uF ceramic caps are needed in the quantity field, however, there are 7 total positions (5 listed in parenthesis) that require them. I had uploaded the BOM to mouser, so, I was shipped two of them. Are the 5 listed in parenthesis not really needed, or am I going to have to order 5 more to complete the build and use it?

Leave a Reply

Your email address will not be published. Required fields are marked *