Hey! This is ancient! But since we’re talking about even more ancient computers, those bits still work. I’d recommend looking at the current installation instructions for z88dk rather than what I’ve got here.
If you crash an Amstrad CPC, you often got some pretty patterns. Like the one above, which was supposed to print the alphabet, but got about as far as R, then started making coloured spots on the screen. My alphabet doesn’t (usually) contain coloured spots, so something went wrong.
This post is only about the Raspberry Pi in that it’s the nearest always-on Linux system that I have. This would likely work fine on any Linux machine. While the Z80 cross compiler I use (z88dk) is available in the repos, I can’t get it to build anything, so I just pulled down the latest version. To build the compiler:
wget http://nightly.z88dk.org/z88dk-latest.tgz
tar xvzf z88dk-latest.tgz
cd z88dk
export Z80_OZFILES=$(pwd)/lib/
export ZCCCFG=${Z80_OZFILES}config/
export PATH=${PATH}:$(pwd)/bin
./build.sh
This should result in a working environment. We can test it with a simple C program:
/* alfa.c - print the alphabet */
#include <stdio.h>
int main(void) {
char a='A';
char b=26;
while (b>0) {
putchar(a);
a++;
b--;
}
}
You can build it with:
zcc +cpc -create-app -make-app -O3 -unsigned -o alfa.bin alfa.c -lcpcfs -zorg=16384
You should end up with a file alpha.bin
of approximately 4749 (!) bytes. You can copy it to a disc image using iDSK:
iDSK blank.dsk -i alfa.bin -c 4000 -e 4000 -t 1
It runs like this:
You can do the same with Z80 assembly language (shown here in the most gratuitously pretty Amstrad assembler, Maxam):
Although this results in only 11 bytes of code, it’s not portable; the C code above compiled and ran on both my Raspberry Pi and my Mac. It wouldn’t even run properly on a different Z80 system, as only the Amstrad CPC knows that call #bb5a
prints the character in the A register. On the ZX Spectrum, for example, it was the completely different instruction rst 16
to print a character.
(There’s a lot more on z88dk on the CPCWiki.)
forget : in #include directive
and -n to create the disk with iDSK