November 26, 2022

The ARM EMUP project -- the big idea

Before I even get started, I want to start by writing down the "big idea" at the highest overall level.

I have two MOD EMUP programmers (with abundant details on them elsewhere). These are device programmers from the 1990's. They allow me to read and program EPROM devices (such as the 27C256) as well as PAL and GAL devices. To use one of these, I have to keep a machine around that runs DOS and that has an ISA bus. This is because a specific ISA bus card is required, which connects via a 25 pin cable to the EMUP device.

The idea with the ARM EMUP project is to replace that DOS machine and ISA board. The 25 pin cable is fairly simple. Aside from power and grounds, it has an 8 bit directional "bus" along with 3 control signals. It should be "no big deal" to replace the DOS machine with some single board computer with an ARM cpu and some interface circuitry.

What ARM board? General thoughts

I have always said that the best microcontroller to use for a project is the one you used for the last project. In other words, the one you are most familiar with and can work with most efficiently

A serious concern would be what the host to ARM interface would be. Should it be a serial port, USB, or network?

Cost is of no particular concern. We could most assuredly use a $2.00 "blue pill" for this project and interface via a serial port (or USB if we ever master that). We could use any of the larger ARM boards that run linux (Beaglebone, Raspberry PI, Orange Pi, or any number of others). I am inclined towards something like the Orange Pi because I have worked with them a lot, have them laying around, and could run my Kyu RTOS on them. But I have another idea entirely, namely to use one of the surplus bitcoin mining boards with the Zynq chip on board. To be honest, these are the cheapest boards I have laying around that are linux capable, but more below.

A nice fringe benefit

Now that I understand the EMUP a little better, I realize there are untapped possibilities. There is a 40 pin socket and the ability to control each and every pin. It is much like 40 pins of general IO (GPIO). You can read or write any pin, which makes all kinds of testing and experimenting possible. The EMUP works at 5 volt logic levels of course.

As an example, consider a PAL with the security fuse blown. You can plug it in and exhaustively try all the possibilities, especially if it is a combinatorial PAL. If you are reverse engineering (and you probably are), the circuit it is in will give a lot of clues and you can go from there.


Although the electrical aspect of things is fairly simple, software will be crucial. The protocol to talk to the EMUP will need to be understood and then software will need to be written. Some simple example software is available for EPROM devices. Not only that, but the programming algorithms for EPROM devices have always been well documented.

It is an entirely different story for GAL (and PAL) devices. I do not see myself having anything to do with PAL devices, but GAL devices could still be useful. I find more need to read out (and disassemble) GAL and PAL devices than I do to program them. In any case, doing anything with these will require disassembling and reverse engineering the software that runs under DOS to control the EMUP.

Plan A - use an i2c IO device

I actually intend to use plan B, but it is worth recording this idea for others who may follow.

If you used something like a Raspberry Pi or Beaglebone Black, you would just need 11 gpio pins and away you go once you add some level shifters. Perhaps this simple approach would be the best, but it has always annoyed me not to have some way to just deal with 8 bits all at once both in hardware and in software. Of course you could just set and read individual bits in the 8 bit bidirectional "bus" to/from the EMUP. Another approach would be to use an i2c IO expander. This would offer 8 bit groups as well as individual bits. I think of using something like the MCP23017 which is a 16 bit expander. On the other hand an MCP23008 is an 8 bit device. It could be used for the bidirectional bus and 3 individual bits from the ARM SoC GPIO could be used for the other signals.

Plan B - use an EBAZ4205

This is a single board ARM with FPGA based on the Xilinx Zynq chip. Clearly the FPGA here is massive overkill, but I have a bunch of these on hand, am somewhat up the curve with using them (and the Vivado software).

As much as anything else, this would just be an opportunity to use one of these boards for something useful. I would like to work up some generic digital IO capability for the FPGA and archive those bitstreams so that other projects could be done in the future using this board without diving into FPGA programming. But I will postpone more details on this for a more specific "manifesto".

I will call this idea and project "Zynq EMUP".

It is worth noting that I bought my EBAZ boards for about $12 each, and I see them available again for about $15 each (as of November 2022). Note that the cost of the hardware will soon be forgotten as work begins and is truly irrelevant.

Have any comments? Questions? Drop me a line!

Programmable devices /