Skip to content

jhlagado/struct-z80

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 

struct-z80 - Structured Programming in Z80 Assembly Language

title: Structured Programming in Z80 Assembly Language
published: true
description: Using assembly macros to write high level code
tags: Z80, macros, assembler, structured programming

One of the great pains of writing assembly language for old-school microprocessors such as the Z80 is the complexity of implementing algorithms due to the lack of high-level control and looping structures. All you have are conditional jumps and labels and nothing to help you enforce the structure of your code.

It's not exaggerating when someone claims that GOTOs are considered harmful ...at least to your state of mental well-being! ;-)

This lack of structure is what often ends up driving programmers in the direction of high-level languages such as C which people often think of as "low level", "assembler++" or "close to the metal". On 8-bit CPUs, however, this far from the truth and C adds a lot of overhead to your machine-cycle and memory-cell constrained code. This is why assembly language is still the tool of choice for 8-bit programming despite it also being a major source of frustration.

Macros are a huge boon to writing assembly language. Recently I developed a set of macros that were inspired by a coding pattern invented by Garth Wilson and (quite separately by) Dave Keenan which enabled me to write structured programs in assembly language.

See:

Program Structures with Macros

Adding Structured Control Flow to Any Assembler

Both authors were heavily influenced by the Forth programming language and the way that it introduced high-level structured programming concepts to low level programming years before systems languages like C and Pascal became commonplace.

The examples I'm giving here were written using the asm80 macro system but I'm sure they could be easily adapted to your own favourite assembly's macro syntax.

See:

Asm80

Asm80: Macros

Macro library contents

  1. Control structures
  2. Looping structures
  3. Structure stacks

Installation

A repo of all the macros discussed here can be found here:

struct-z80

Include the following files in your project

For _if, _else, _endif, _switch, _case, _endcase, _enddo

.include "struct-macros.z80"

For _do, _while, _until, _break, _continue, _endo

.include "dloop-macros.z80"

Copyleft @ 2019 John Hardy, ALL WRONGS RESERVED This software is released under the GNU public license 3.0

Contact me: jh@lagado.com GitHub: jhlagado Twitter: @jhlagado

About

Structured Programming in Z80 Assembly

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published