Development Workflow

This is my current development workflow that I use for general z80 development and developing any whizz80 system software. I'm quite new at developing for the z80 and I am sure this isn't an optimal development setup. My development environment is setup on a mac, but a unix based system could adapt a similar process using the same tools as I am using (sorry Windows users, you are on your own here). Please feel free to let me know if you can see any improvements or suggestions to this workflow. More importantly, find a workflow that works for you and stick with it.

There are 4 major steps in my workflow. Each step is described below.

graph LR sublime{1. Text
Editor} --> ASM[whizz80.asm] ASM --> zasm zasm{2. z80
Assembler} --> HEX[whizz80.hex] zasm --> LST[whizz80.lst] zasm --> BIN[.whizz80.rom] HEX --> z80sim{3. z80
Simulator} BIN --> eeprom{4. Upload to

1. Text Editor

You need a way to write your z80 code. Any text editor will do really. I am currently using sublime 3 which has nice syntax coloring and lots of other features. All my code is saved as .asm files

2. z80 Assembler

Once you have your .asm files you need to assemble them using an assembler. I am currently using zasm which seems to be one of the better ones with full documentation and is actively being developed. What separates zasm from other assemblers is that it has some features that I may use in the future, such as macros, that other assemblers didn't support or was clunky

More importantly, zasm can also output Intel Hex so I can run in a simulator (more about that below) as well as raw binary files ready for EEPROM uploading. zasm also produces a nice source listing file for later reading and checking.

The command that I use to assemble my code for simulating:

zasm -u -y -x whizz80.asm (creates a whizz80.hex and whizz80.lst file)

The command that I use to prep for uploading to an EEPROM

zasm -u -y whizz80.asm (creates a whizz80.rom and whizz80.lst file)

3. z80 Simulator

I am currently using the z80 simulator from the z80pack suite. I am only using the z80sim component. Why am I not using the z80asm assembler from the z80pack suite? It doesn't appear to support assembler macros, and it is a rather simple assembler, with a small number of features. There was a limited amount of documentation to get me started with it. Unfortunately, the z80sim application only supports 2 formats, the Intel Hex format and a 'mostek header' format which the z80asm in the suite outputs, and zasm (my preferred assembler) does not. It does however output Intel Hex files so that's why I'm doing that. The z80pack simulator is nice as you can set software breakpoints and manipulate the z80 memory, registers and flags as you step through your code. It also has a nice text input and text output interface (using port 1) for debugging output devices.

I did come across another z80 simulator which looked really nice and with a tty terminal front end to display all the z80 registers, memory, etc, however I couldn't get it to compile on my mac (suspect its a 64-bit thing), and I didn't really want to run a separate virtual linux machine just to run a simulator.

4. Upload to EEPROM

Once I'm happy with my program, and I want to do some real testing on real hardware I re-assemble my code into a binary file (rather than the hex format I use for the simulator). This allows me to upload the raw datafile into my EEPROM programmer, and then insert the EEPROM into my Whizz80 computer system so I can see it running.

I haven't uploaded any EEPROM code as of yet as the hardware is still being developed, but I'll be providing more details about my EEPROM programming at a later date.