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:
More about it here.
- 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.
I recently came across an MCS-48 in something I was trying to repair, so HVEPROM gets a new shield!
- 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.
To drive these boards I’ve written a small Windows application which gives an experience similar to a commercial programmer.
- Programmer firmware source (includes pre-compiled .HEX files)
- Command line host software source
- Windows GUI binary download (not open source)
Windows GUI version history
- Initial release
- 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
- 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.
- MCS-48 added
- Fixed bug in ‘read’ step of hardware test, where readback value wasn’t shown
- Added configurable verify delay (application configuration file only)
- Fixed issue in write checksums where checksum of input file was shown instead of device
- Added 8755
- 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.
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!
10 thoughts on “HVEPROM Project”
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…
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 !
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.
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.
Too bad … wouldn’t a module like this one help : https://fr.aliexpress.com/item/4001066566291.html ? I used it on some ram tester I built.
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.
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 !
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?
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/
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.