Let's Make Robots!

I am building a Z80 computer

May 20, 2013

I am building a Z80 computer, based on the Zilog Z80 Z84C0006, a 6MHz CMOS version. bdk6 has started a very similar project at nearly the same time, We will certainly exchange ideas along the way. Other than bdk6 I will build a modular system with several extension boards, and my version will probably run Microsoft BASIC later. Much later...

As I have never built a Z80 computer before I will start with a bare minimum version, devided in 3 mile stones respectively boards:

Board one (200 x 150 mm perfboard) will carry the CPU, the ROM (EEPROM), oscillator(s), reset, PIO and power supply circuitry. There is enough place left to add serial access, RAM and other fancy stuff later.

Board two (150 x 100 mm perfboard) will carry 7-segment displays with according drivers and control circuitry to display current data and address bus status.

Board three  will be a kind of homebrew Arduino shield EEPROM programmer (I am too lazy to move a lot of DIP SPST switches).

Next steps will be to draw the schematics of each board and gather parts.

 

May 23, 2013

I managed to finish the bare bone version schematic of the Z80 computer for first experiments. I mainly followed the instructions and explanations on The First Great Z80 Project, beside studying all the data sheets. The computer is in the moment just clocked by a 1 Hz Schmitt trigger inverter oscillator, later it will be clocked by a 6.144 MHz OSC.

The next step was to make a kind of wiring plan for the address and data bus. You can find the wiring plan in the attachments. As I have no wire wrap equipment and I am not a fan of cable spaghetti, I desided to put the address and data bus wires on the top side of the board. The chips and wires are aligned at a grid of 2.54mm. I have also included the RAM already on my wiring plan; I will just leave the IC socket blank in the moment. The connection dots in the wiring plan are actually single male pin headers, so it's easy to connect several wires on one spot and have access to every address and data line with a logic probe etc. This makes the board bigger than it must be, but it hopefully helps to keep track and I can later route a PCB if this ever goes beyond experiment and prototype status.

AttachmentSize
Bare_minimum_Z80_computer.JPG456.73 KB
Address_and_data_bus_wiring_plan.JPG171.48 KB

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

With recent life events, (unemployed, and scrapping a LOT of my old scavenged equipment), I've begun thinking of wiring-up something based on a Z80..  Most of my robots, have been either Parallax BS2 or Arduino based, but I've been thinking of building a controller to both handle output to the arduinos, and connect to the outside world, back to a PC using simple 433Mhz 2-way digital modems. (Parallax parts)..  I only wish I could remember, what i did 20 years or so ago.. I used to cut my teeth writing 8080/85 assembly, for either an old TRS-80 Model-100, or an Osborne-1 computer...  Now, I've recently inherited (Okay, Rescued from the scrap heap) 8080 computer trainer.. (already been in contact with someone who still has the manuals, but he doesn't want to part with them.) ..  I've seen someone out on the net has a full operating Z80 based computer using only 9 chips.. I've run across several other plans, schematics and even a bare metal source for CP/M 2.2, but I still can't quite remember my old hard-hacking days...  Not giving up though!  Stephen Griswold

I had a quick look at the bare minimum schematic and your bus plan. There is something that is confusing me.

Because the data and address busses are shared by both memory and I/O devices the Z80 uses MREQ and IORQ to enable either you Memory or PIO. This is very important when reading data from the memory or I/O device as it prevents them from both trying to write to the data bus at the same time.

You seem to have ignored the IORQ pin on the Z80 and just permanently enable the PIO for output. The big problem here is that when the processor accesses memory the output pins will produce gibberish.

Normally your MREQ connects to CE of your memory chips and IORQ goes to CE of your PIO. The RD and WR pins of the CPU need to then connect to the RD and WR pins of your memory and PIO.

I cannot see this working. Perhaps I have misunderstood your design.

 

Hi Oddbot,

You are right, but as I wrote I leave the SRAM IC socket blank in the moment. If I use both memory devices I have to re-wire. In the moment the Z80 just reads from the EEPROM. To configure the ports of the PIO 82C55 as outputs, there is more to do then just put READ on HIGH level. The control data bus on the PIO must be selected and then a special control word written to the data bus to configure the ports as output ports. I have not tested this so I could be wrong. To be save I should at least connnect MREQ and IOREQ as you said. Thanks.

Let me know if you're looking for parts from that era. I have some Timex / Sinclair ZX81's and some of the memory & interface chips.

I even had an S-100 buss computer built around the Z80. Don't know if I still have it, may not have survived the last purging of my shop.

The power supply you've shown is fine for use with an AC wall transformer but I would not recommend it for battery opperation as it is very inefficent.

You will drop 1.2V across the full bridge rectifier and then your regulator has a 2.5V dropout voltage. This means your input needs to be at least 8.7V for reliable opperation and if your current was 1A then 3.7W would be wasted as heat to give you 5W of power.

The circuit below is a better choice for battery opperation. Reverse polarity protection is provided by the FET. The FET I've shown is not the most efficient for the job but is fairly common, cheap and won't require a heatsink. It will be equivalent to aproximately a 0.2Ω resistor when the power is connected the correct way.

The L4940V5 regulator is rated for 1.5A and has a typical dropout voltage of 500mV @ 1.5A. With a current of 1A, 0.7W would be wasted as heat to give you 5W of power. Using a more efficient FET on the input could bring this down as low as 0.5W wasted as heat.

The less power we waste as heat the longer our batteries last between recharges.

 

Thanks for the advice, Oddbot. Will certainly consider this if my Z80 computer ever get mobile :D

 

I have also constructed Z80 systems... i spent many an hour typing in Hex code....errr more time debugging.... it was my initiation into instruction code programming.... Later it was possible to use Microsoft basic...

Check out builds around the Z80 based Nascom 1 & 2 system there is a heap of schematics that may help.

Good luck and i hope the attaching of memory goes well.....

Well good luck to you on this project. I've built a Z80 based computer before so it will be interesting to see how your computer compares.