With my retro 6303 board finished I decided to look at an old Z80 board I found in the attic awhile ago. The board design design in question was published in the May 1982 issue of the Elektor magazine. I had originally planned to use it as part of a theatre lighting controller, but ended going down another route.
The board is literally just CPU, buffering and memory, designed to work with the ‘Elektor 80Bus’. Having just a halt LED for feedback testing was a challenge, but when a single halt instruction at location 0000h did not work, clearly there was something not right. Setting up a simple loop I was able to find a track fault on one of the address lines. Once I had fixed that the board sprung into life.
Clearly to do much I was going to need a bit of IO so designed a relatively simple parallel and serial interface board using a Z80 PIO and 8251A, wiring it manually to cut out the PCB fabrication time loop. This worked with few problems, in the main this was down to following the same route as the 6303 board to ‘buzz-out’ and test each sub-element as I built it, rather than go for a ‘big bang’ approach.
With some real-world IO available I started to think about a monitor program, one initial thought was to use the NAS-SYS as I have an existing NASCOM 2 and eventually want to get NASCOM basic running on it.
I had ensured the IO addressing matched that used in the NASCOM, but as there was a lot more complexity than I needed in NAS-SYS so I decided against using it. Still rather than resort to starting from scratch I looked around to see if there was another existing simpler monitor I could re-purpose. There are number of options focussed on implementing CP/M which I was not interested in but after bit of searching I found one on the Glitch Works website. Other than it’s simplicity it is also written with a very modular serial interface avoiding the need to fiddle with main code when you change UART type. As luck would have it someone had already written a set of routines for the 8251a ! The monitor is very simple – around 300 bytes & just 6 commands, but everything I needed.
D – Display memory xxxx to yyyy
E – Enter Data at yyyy
L – Load Hex 8 data
G – Run Code at xxxx
L – Load Hex 8 data
O – Output to Port xx data yy
I – Fetch data from Port xx
Written in 8080 assembly code it ran first time on the Z80 board which was good. That said having used it for a few days I felt the need to add a some ‘home comforts’ and not wanting (or needing) to learn 8080 assembler mnemonics spent a bit of time converting the code to Z80 assembler. Once this was debugged I added the following;
- Validation to trap invalid hex characters and allow you to escape from commands more cleanly
- The H command to display command options
- The T command to make development of new commands without re-programming the monitor EEPROM easier
The T command was to address a concern I have over the CPU EPROM socket which feels quite loose, so I am trying to avoid inserting / removing the chip too often !
I also spent quite a lot of time looking at the HEX8 download code before coming the realisation that the problem was with my HEX8 files not the monitor code ……
In parallel with coding I sourced a simple backplane, initially I tried to use a VME backplane but there was no easy way to sort out the functionality clashes between to the 2 buses. Again hunting around the internet I found a retro Z80 computer group in the US with lots of useful stuff and most importantly Gerbers for a simple 4 way backplane, another problem solved.
Looking forward my ‘to-do, list includes;
- A simple memory board, nothing complicated just 3 or 4, 8K RAM/ROM sockets
- The memory board will hopefully allow me to allow me to implement a modified version of NASCOM BASIC
- A video card, Elektor published a video card design to work with this CPU board, the PCB is no longer but again through another Retro Z80 group this time on FB someone got in touch to say he had re-laid it and had a spare PCB so that will be a bit of a project later in the year I hope
All development stuff and schematics etc, can be found on my GitHub site [ note this is still work in progress ! ]