About a year ago amongst the many puzzles and board games at a local thrift store I found an original Micro Professor MPF-1B for a measly $10. I vaguely remembered them from years and years ago, but I didn't recall what exactly it was. Finding a Z80 CPU on board, a hex keypad, six 7-segment LED displays and a button overlay that had writing on it vaguely reminiscent of BASIC, I was sure that this was a computer (in the original sense). I immediately bought it, fearing someone else might know what goldmine I had in my hands, and try to take it from me. Once I got it home and fired it up I instantly realized what potential this computer had. I had been looking to get into some assembly programming, and this was perfect for the job.
After running some simple programs on it (hand assembled Z80) and getting acquainted with the hardware I figured why not just make my own version of the MPF that is smaller, battery powered, portable and uses only SMD parts and can run the original monitor/BASIC program. What a hell of an idea.
I have been throwing some ideas around and so far this is what I have come up with. First, I'll give a rundown of the original hardware and see what we can clone, and what needs to be changed (this was made in 1981 and a couple of the parts have been discontinued.)
Z8400A CPU running at 1.79MHz
Z80 Parallel Input/Output controller (didn't come with my MPF)
Z80 Counter/Timer Circuit (didn't come with my MPF)
8255 Programmable Peripheral Interface that drives the display and reads the keyboard
9128 2Kbyte parallel RAM
2532 4Kbyte parallel EPROM (includes BASIC)
glue logic (memory decoding, LED drivers, inverters, etc)
36 key keypad (32 are multiplexed and driven by 8255)
6 common cathode 7-segment displays
tape interface for recording/playback of "files"
HALT and TONE LEDs
The monitor program performs basic functions like drive the display, read the keyboard, send and receive data via ear and mic jacks, output tones via the speaker and a couple other more mundane tasks like setting breakpoints and calculating relative addresses. I will be entirely rewriting the monitor program to my own liking but I want it to be able to run the original monitor without modification. (Although recently I discovered that it will have to be modified at least a little, sadly.)
A Microprofessor clone...
Now some of the details of the clone. I'll call it the uPFC (microprofessor clone) for now. I am aiming on using the Intelligent Peripheral Controller Z80 chip (Z84C1510), which includes Z80 CPU, two channel SIO, PIO, four channel CTC, and CGC (central processing unit, serial input/output, parallel input/output, counter/timer circuit, clock generator controller). This reduces the size and complexity of the clone quite a bit, while adding some additional features. This chip comes in 100-QFP and 100-VQFP packages and I have been having a hard time picking which one to go with. Esthetically I prefer the 100-VQFP because of the smaller and thinner size, but it seems that the larger 100-QFP is a more popular size and also scales between the 6, 10, and 16 MHz chips (and Zilog gave me free samples of the 100-QFP so that seals the deal).
As for memory I was a little stuck. My initial plan was to keep the same memory map of the MPF and use 74 series glue logic to decode it. The Z80 has a 16-bit wide address bus so it can address 64KBytes, so the 2K of RAM and 4K of EPROM seems uninspiring. A secondary goal of this project is to be able to run CP/M which has a vastly different memory map than the MPF (and normally uses the full 64K). I have since settled on using a CPLD to do the address decoding (among other things). That leaves it wide open for whatever memory I would like to put in it. I am routing the PCB (when I get there) for two 32-TSOP packages for memory so that gives me max 512Kbytes of memory. I will have to bank the memory, but I will figure that part out later. I will use a flash ROM IC and an SRAM IC. I couldn't find a reason to include an EEPROM with this computer, although if I can implement SPI or I2C I can use a serial EEPROM, or SD card, for large data sets and programs.
The CPLD will be an Altera MAX 3000A or 7000A in a 44-TQFP package. I might be pressed for pins if I leave the JTAG pins only for programming, but I will dive into their datasheet a little deeper to see what I can get away with. It sure would be nice to have the extra four I/O pins. Also, there is four input pins that I haven't investigated whether I can use them or not.
I know having a CPLD performing such a rote task as address decoding is against better judgement, but for a two dollar IC that eliminates half a dozen power hungry logic chips (that cost over two dollars), simplifies the PCB routing and is customizable, I couldn't find a better alternative. Some might think I should just program an HDL Z80 core in the CPLD (or FPGA), which is possible, but that isn't the purpose of this project.
The next part of the design I am tackling is powering the unit. The CPLD needs 2.5V or 3.3V, but accepts TTL levels on the I/O pins. The Z80 is a 5V device, as is most every other device on the board. The problem lies in that I want this to be portable, so that means battery power. A standard lithium polymer cell outputs 3.7V , so that would work for the CPLD if I used a low dropout regulator for the 3.3V. It doesn't help for the rest of the ICs that need 5V. I haven't researched enough about hooking LiPo cells in series enough to attempt it. This also complicates the charging circuit. The other option is to use one 3.7V LiPo cell and a DC-DC boost converter to get the 5V. After the boost converter it will have to pass through a 5V regulator (which means I need at least 7V from the DC-DC unless I can get an LDO regulator). I will have to calculate the efficiency of this setup, but it doesn't seems promising for a battery powered device that already has between 100-200mA of current draw.