Whizz-80 System Design – it begins here

The system design of the Whizz-80 computer is a little different to what most people seem to be creating. There are many designs of a z80 computer that are based around a single board. While a single board self contained computer is cool and trendy, it doesn’t really give you the flexibility to upgrade, change or expand the system when you want to try something new or add extra functionality. I’m intending on the system to grow and expand as I develop it (it is iterative process as I learn, so mistakes would be made). Because of this I am deciding to use a modular approach and have divided up the computer into 5 distinct core modules. These modules are:

  • Power
  • Timing
  • System
  • IO Bus
  • Monitor
Whizz-80 System Design
Whizz-80 System Design

Each module is designed to be self-contained and can be swapped out with a different (upgraded or fixed) module as required. For example you could swap out the timing module of a slow clock cycle to a faster one, or a manual clock cycle (push button), without impacting the design of the rest of the computer. If I need to up the power requirements I can simply change the power module. If I need more IO output ports or change the entire way input/output is performed then I can swap out this module without affecting the rest of the system.

The system design and concept is heavily influenced by this webpage.  I have taken ideas from this page and have extended it for my own purposes.

Here is a brief description of each module. I will be going into more detail about each individual module as they are built.

Power module

The power module supplies power to the whole system design.
Output of this module is to the System board, and consists of +5v, ground and any reset signals. I’ve linked the reset signal to the powerboard as resets are generally associated with power on/off and restarts. I may create a sub-module of the power module for reset as there are different ways to perform a reset function. (I may need a reset and a /reset signal).

Timing Module

Outputs to the system module. Receives power and /wait /m1 signals (for manual clock controls). Provides a clock signal to the system board (and any other devices as required).
from a simple single step push button, 555 timers, crystal circuilts, and all the way up to a 2Mhz oscillator. I am capping the max speed that I intend to build for to 2Mhz as the faster you make the signals, the more important it becomes with the length of your wires between ICs and interference. I’m not interested in fast clock speeds.

System Module

This is the critical module in the system design as it contains the z80 CPU and memory circuits (ROM/RAM) and any other circuitry required to manage the core system components such as some IO logic circuitry that helps hand off any signals to any other modules (such as the IO Bus module). All other modules connect to the main system module. It is the central module (see diagram above).

IO Bus Module

This module contains the I/O Bus where extra peripherals modules are connect to. It is designed to allow multiple input/output devices to be connected to it via their own ‘sub-module’ card. As this is such an important module (it is the interface to the outside world), more detail would be given on this module later.

Monitor Module

This module is used for debugging the system. Displays the address, data and control busses in a nice format for debugging. It is not a system dependant module, i.e. this module can be removed and the system is still fully functional, you just won’t be able to see the buses. (If you are running a fast clockspeed then you won’t need to watch the bus anyway).

System Design

This is a rather simplified description of the Whizz-80 system, and it only the electronic hardware. This system design is also in a state of flux, as the design may change as new ideas are tested. I am not going to build an enclosure yet as I don’t even know what the final version (if there is one) will look like.

Hopefully I can look back on these blog posts and see how the Whizz-80 system had evolved over time.

No Connection symbol for Eagle

I have created a simple No Connection symbol for Eagle CadSoft.

At the moment I have only 1 symbol/package included in this library and that is the ‘NO CONNECTION’ symbol. The intent is to add more things as I come across it.

no connection symbol for eagle

It is quite simple to use, it simply places an ‘x’ on the schematic. There is no PCB footprint (as there isn’t one) so it is purely for visual aesthetics.

I’m surprised that Eagle doesn’t have this in one of their default libraries.

You can download the latest version of the library from my eagle-lbr github repository. If you don’t know how to use github then you can always download a pre-zipped version here.

Introducing the Whizz-80 computer

The Whizz-80 is my latest electronic project that I am starting. It is a combination of hardware and software so it aligns both my passions.

My Whizz-80 computer will be a retro based computer using the Z80 CPU. The Z80 was used in early microcomputers (such as the Microbee and the TRS-80). It will however run it’s own operating system and it’s own specific hardware configuration. I don’t intend on making a clone, (there are plenty of emulators for that) but a unique computer just for me.  It’s a great way to learn how computers actually work and since studying it I have a greater appreciation and respect of the hardware of modern computers.

So why use a Z80 chip instead of a different one like based on the 6502 (as in Commodore64)? There are many blogs out there compring the 2, but the reason why I chose the Z80 over the 6502 was simplicity and documentation. The Z80 requires minumum components to get started while the 6502 needs a few extra chips to get started. There also seems to be a better supply of Z80 components (They still make them!) than the 6502, so Z80 components are more easier for me to obtain (I’m sure your milage might be different). Also, since this is my first major build, I wanted to keep it as simple as possible and have something up and running as early as possible.

My initial thoughts, goals and ideas for the Whizz-80 computer are as follows:

Whizz-80 Hardware Specs:

  • The CPU will be based on the Z80 CPU running at around 6Mhz max.
  • 32Kb ROM and 32Kb RAM. This is more than enough memory for our needs, however it simplifies the amount of extra logic circuitry required if you use smaller memory chips.

Whizz-80 Software:

  • Operating System I will write and will be Forth based. I’ve always been intrigued with the Forth language, but I will probably tackle this once I have the hardware built

Stay tuned for upcoming blog posts on more of the Whizz-80 computer.

Beyond the Arduino

I’ve been playing around with the Arduino for a while now (offline to the blog) and while it is a great platform to get into the embedded arena (and electronics in general), I am yearning for something a little bit more, something beyond the Arduino.

I haven’t done a blog post in a while (I had great plans on posting my experiments and circuits as I learned) but the time it takes to create a post on a simple circuit that I built during the learning iteration process just didn’t work.

I was keen to move onto the next ‘idea’ so by the time it came to sit down and write something it was 3 mini-projects later. All I can say is that the best way to learn is to just physically build it.

Recently I’ve been studying digital circuits (nand2tetris is a good course) instead of analogue circuits and have been fascinated on how an actual the computer works (right down to the inner workings of the logic chips).

I think it is now time to move beyond the Arduino and get myself into some other projects. Maybe something that isn’t Arduino but is a little bit old and feeds my nostalgic urge (hint: z80).

Learning to fail

Learning to fail and how you move on from it: In my previous two posts I had designed and created a pcb layout for a simple 555 timer flasher. I thought it would be a simple thing to do because I really wanted to test the workflow on how to create a pcb from start to finish.

learning to fail
555 pcb with components

After placing and soldering all the components on my pcb, and applying power to it, I expected to see some nice flashing lights just like my breadboard model was doing. The first LED blinked on and off, the second blinked on.. and stayed on… Strange.

I double checked that the pcb matched the schematic – yep that is all correct. I turned on the circuit on the breadboard (I still have it on the breadboard as a working circuit when I created it) – and that was working. What could the problem be?

When showing off my excitement of designing my first pcb to an electrical engineering forum (EEVBlog) a kind soul (Hero999) pointed out that there was an error on my original schematic and that my circuit would not work.

After analysing it a bit further I had come to the conclusion that I had failed to copy my breadboard layout to a schematic correctly. Because this was wrong, everything else was wrong. During this time I also must have altered the breadboard circuit without updating the schematic file.

FlashingLights
FlashingLights

My original breadboard circuit was based on the one here and you can clearly see my schematic doesn’t follow this (R2 connects to +V instead of pin3).

Doh!

Learning to Fail

So what have I learnt from all this?

I was so worried about creating a perfect schematic -> pcb workflow that I didn’t spend enough time on the breadboard -> schematic step causing everything to fail.

So while I did fail – I also succeed as the pcb is a correct representation of the schematic – just that the schematic was all wrong.

I also need to pay more attention to ALL the steps in the workflow and not just focus on one step. Each step is important and can have a cascading effect if you get it wrong.

All is not lost though – the same kind soul on EEVBlog (Hero999) has also suggested that I can fix it by removing a solder joint and running a manual wire to the correct location. I’m going to give that a go the next time I’m doing some soldering.