Recently I was repairing an old piece of equipment which was based on Intel’s first microcontroller: The MCS-48.
The nice thing about the MCS-48 is that it largely predates the concept of code security. With the exception of some newer dated parts, usually 8042 / 8049, if you’ve got the thing, you can steal the code from it, disassemble it, and learn lots about the equipment it’s fitted to.
In the past I have built a series of Arduino shields for programming old UV erasable devices for which programming hardware is difficult to come by (read more here). This is not so much the case for MCS-48 as hardware can be obtained for a hundred dollars or so, however, I wasn’t going to pass up on the opportunity to build another one of these, and, mine can be built for less money plus it has the ability to read mask ROMs.
At the same time as I designed the shield, I also built an entirely new project based on one of these. More about that here.
Programming and reading the list of devices mentioned in the title requires quite a range of different voltages including 5V, 12V, 18V, 21V, 23V and 25V. This programmer can generate all of them and software select between them as needed.
Regular UV erasable MCS-48
Parts 8748 and 8749. Vpp = 21V.
These were made also made under license by NEC. This programmer supports both NEC and Intel parts.
UV erasable UPI-41/42
Parts 8741 and 8742. Vpp = 21V for 8742. Vpp = 25V for 8741.
As with above, NEC parts also supported.
Mask ROM MCS-48
Read code only. Parts 8048 and 8049. EA = 12V. Note that not all MCS-48 mask ROM parts will allow the code to be read out.
Warning to those building other designs
All home-brew MCS-48 programmers have pin drivers resembling the above, mine differs in that it uses a P-Ch FET to get the fastest possible rise time, and a 2K2 “pull-down” is also present to keep fall times within specification (< 2μS).
This is particularly important when programming CMOS parts, otherwise the timings specified in Intel datasheets cannot be achieved, instead arbitrary delays would have to be inserted throughout the programming algorithm to allow charge to bleed away from these inputs, as is frequently seen in other efforts.
The most important difference however, is the 220Ω resistor. Some batches (particularly 8742’s and some 8749’s) are very sensitive to over-current on the PROG pin. I purchased about 50 MCS-48 samples when designing my programmer, and blew a quarter of them discovering this.
Put a 220Ω resistor before the PROG pin as I have done here. This value was chosen because it reliably programs the earliest 1K NMOS parts, which require more current on this pin, and don’t appear to have this problem, while not destroying sensitive 2K parts.
Host software / firmware
Please see the main project page for more information.
- Can be downloaded from 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.