Z80 Project

Z80 Project Updates and Revision Control

Last updated: March 26, 2010, 10:39 p.m.

It's been a (very) long time since the last update to this project. I've been busy on loads of new stuff for the project. The system is now capable of booting a binary from SD card or USB memory stick formatted in either FAT16 or FAT32. There's also full PS/2 keyboard support, a much more sophisticated interrupt control mechanism and a VGA display now.

I'm planning to go through all these new features and write-up how I've got there but for now I'm just going to do a summary. Since my last update, I have built a basic chassis to contain the growing number of boards and hold all the connectors, there's a new connector board which has the USB host sockets, an SD card slot, PS/2 keyboard connector a composite video output connector and a 3.3V and 5V power supply. This connects up to the original pair of boards providing power and two LEDs (one is driven by the PIC as a "hard disk light" when accessing the SD, the other is driven by a transistor from the Z80's HALT line), the 5-pin header from the PIC connects to the SD card slot to allow the PIC to act as a serial bridge to the SPI interface used to access the SD card.

An entirely new board I call the "user-interface board" is included which has a PIC operating as a PS/2 keyboard to ASCII keyboard converter and key-buffer. Key presses are mapped to a unique, single byte control code for non-printable characters (e.g. arrow keys and 'F' keys) or an ASCII code for printable characters (including enter and backspace). Also on this board is a Parallax Propeller microcontroller which has video-generator hardware in each of its eight processor cores. I've got two of these processors running a 1024x768 VGA display and a third interfacing to the Z80 bus via a pair of I/O ports. There's also the new improved interrupt control system on this board. Modelled on the way the PIC does interrupt handling, there is an interrupt enable register which allows each of the eight available system interrupts to be manually enabled or disabled. A second register, the interrupt flag register, can be read to quickly determine which of the interrupts requires servicing. This allows the simple RST $38 interrupt mode in the Z80 to be used effectively and reduces the complexity of the peripheral devices.

Since I've got the keyboard and mouse working I've built up a simple BIOS/bootloader which allows the user to set some simple system settings (e.g. the time and date in the real time clock, the boot order and select the software controlled main clock speed). There's also been a development in the main processor area, I bought a new Zilog Z80 to replace the NEC part I had been using, the main reason for this is that the new one is rated for 10MHz so I could crank the software controlled clock output from the PIC up to it's full 5MHz speed for lightning performance.

I've implemented both basic block access to the SD card and FAT16/32 filesystem handling. The initialisation of the SD is handled by the PIC and works with all the SD cards I can find including old original and modern HCSD cards (and even the dreaded 2GB fudged card.) The support is read only at the moment, but the BIOS doesn't need to be able to write to disk so I'll wait until I get into OS writing before doing the rest. There's also support for booting from USB connected mass-storage devices using an FTDI Vinculum chip.

There are loads of updates I need to make to the schematics to document all the changes I've made, there's also a fair amount not in the PDF documentation yet. I've moved all the source into a GIT repository, including all the code for all the micro-controllers, the PC code (in Python), the documentation and some of the schematics. You can see it at github (there's even a sneak peak at the memory expansion board which I'm planning to build soon).

Z80 Project
Z80 Mark 2,
Z80 homebrew,
Retro Computing,


Posting comments is not currently possible. If you want to discuss this article you can reach me on twitter or via email.


Email: nathan@nathandumont.com

Twitter: @hairymnstr