An easy to build MCS-48 (8748 / 8749 / 8741 / 8742 / 8048 / 8049 / 8050) Programmer / Reader

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.

Supported devices

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, 8049 and 8050. 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.

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.

Schematic

  • Can be downloaded from here.

Gerbers

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.

BOM

Can be downloaded from here (or here CSV).

15 thoughts on “An easy to build MCS-48 (8748 / 8749 / 8741 / 8742 / 8048 / 8049 / 8050) Programmer / Reader

  1. What a great compact little Intel 8749 programmer! Got the PCB made – can’t wait to try it out.
    Didn’t think I’d find one for this old mcu chip.

  2. Hi Matt,

    I’m building your MCS-48 reader and ordered the parts at Mouser, but the transistors are going to take until October to be restocked which is not ideal.

    Are there any equivalent transistors that would fit the bill?

    Thank you for your great projects!

      1. Thank you!

        I’ll send you some pictures once I have it complete.

        Later I’d like to build your 2708 reader too, as they are quite complicated to dump.

        Best regards,
        Rob

  3. Very interesting project. I might decide to build one just for the fun of it 😉 But with your experience, do you know any way to read a 8749 device? The datasheet doesn’t mention anything in this regard.

    All the best, Marcel

    1. Reading is explained in the datasheet. This project does it, source code and schematics all available of course.

  4. Ooops, of course your right, I only remembered the combined “program/verify” cycle. Cool, I’ll give it a try when I’m again ordering some PCB, thanks!

    1. P.S.: Turns out I’m not completely insane, the original P8049/P8749 datasheet only specifies reading of ROM chips. The later D8749 datasheet also shows a verify mode 😉 In any case, good to know that it works, thanks!

  5. OK, technically I don’t *really* need a programmer, but this is so cool that I went ahead and built one anyway 😉 https://www.kilgus.net/images/mcs-48.jpg is the result. Haven’t done this much through-hole in quite some time 😮 But worked perfectly on the first try, yay! I should probably now to continue to write the MCS-48 plug-in for IDA Pro…

    One comment, the avrdude supplied with my Arduino IDE needed “-c wiring” as a parameter instead of “-c arduino” to work.

    Anyway, great stuff, thank you!

      1. And Hex Rays wrote to me that nobody has ever requested a MCS-48 CPU module from the before 😉 So I started writing one based on the MCS-51, but it’s still tedious work and there is the slight chance that he original author of the code I’m after recovers the sources some time…
        The free Ghidra has MCS-48 support, but so far I’m not liking the user interface too much.

Leave a Reply

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