Soft 968 is the Firmware manual for the Amstrad CPC range of machines. The Firmware contains a wealth of routines for interacting with the machine hardware, i.e. the screen, keyboard and so on, and is an invaluable resource for the Machine Code programmer. If you want to try and outsmart the original Amstrad engineers then you could do all these things directly, but leveraging the Firmware will save you a bucket of time and a world of pain ! Back in the day it was expensive to buy, nowadays the full text is reproduced online.
This book was my Bible, and really my only resource for actually learning how to program in Assembly Language. I consider it to be very well-written, and pitched exactly at the level I was back then. It is now out of print and the publisher Argus Books has been sold and resold, but once again the text is available online. If you did want to to seek out a hard copy second hand, I did a brief search and couldn't find this actual title, but I saw a similar book of theirs for the BBC Micro on Amazon for £115. No, my copy is not for sale !
Even if you are lucky enough to own an actual Amstrad CPC6128, there are many advantages to doing your development or at least your debugging on an emulator running on your PC. There are others, but the most popular and the one I have been using is WinAPE. This has a built-in Assembler and debugging tools one could only dream of when working on the actual machine. Alternatively, you could go old-school and use the HiSoft DevPac assembler/disassembler/editor/monitor package, either on your emulator or an actual machine.
HiSoft DevPac is a complete assembler, disassembler, editor and monitor from Amsoft/Hisoft, and was definitely on my wishlist
when I was programming in my childhood bedroom. At the time, for a kid from a not particularly wealthy family, it was
something I could not afford, which prompted me to write my own.
Nowadays, like much for the Amstrad, it can be found
on the Internet to download for free. Or you could use my home grown version if you like...
Another interesting approach, which if you are familiar with the C programming language can enable you to get quite a long way
quite quickly, is to develop in C and then use SDCC (Small Device C Compiler) to compile down to Z80 machine code.
SDCC is not
specifically for the Amstrad, or even the Z80, in fact it was developed primarily for people to program microcontrollers in their own hardware
projects. However, it supports Z80, and there are some excellent resources online explaining exactly how to use it for the Amstrad.
Given that WinAPE utilises special "Amstrad Disk Image" files, and real Amstrad CPC6128s require 3 inch floppies that were
pretty non-standard even back then, how do you transfer files back and forth between your PC and the Amstrad realm ?
This is something that I spent quite a bit of time exploring. More on transferring to a real Amstrad, and indeed transferring
from those original vintage floppies back to the PC later on. For the emulator at least, the answer is an excellent
utility called CPCDiskXP, which will transfer files between PC and virtual disk images.
Oh, the time I spent with graph paper, felt tip pens and a Hex/Binary/Decimal calculator, designing and encoding sprites for my
games. OK, so actually I wrote a sprite designer utility, but what I would have given for a near-infinite source of images like the Internet and a tool to convert those
to Amstrad-friendly object bytes. That tool is ConvImgCPC. Let's say you want to animate a running horse. Find some video online
and use online tools to convert individual frames to JPG files, then run them through ConvImgCPC, which will
crunch them down to the best representation the lowly Amstrad hardware can manage. There's your set of sprites ready to animate.
DevPac is a Z80 Assembler designed to run on the Amstrad, or an emulator. However, there are advantages
to constructing your Assembly Language project and compiling your code on the PC, before transferring the object to the Amstrad
realm.
You get more flexibility and control over the memory map than you do using SDCC, and it allows you to write more efficient
code as SDCC, although excellent, inevitably makes generalisations which can waste precious bytes and clock cycles. For example, it makes
heavy use of the stack for both passing parameters and variable storage within routines. If your code is not re-entrant, and doesn't need to be
relocatable, it's much more efficient to do this using defined RAM locations.
Having searched the Net and tried several Windows-based
Z80 compilers, I have found Zeus to be the best.
GIMP (GNU Image Manipulation Program) is powerful and free open-source cross-platform image manipulation software, with capabilities that you might otherwise expect to pay serious money for. It takes a little time and effort to learn how to use it to its full potential, but is an incredibly useful tool for anyone doing anything graphical for any computer retro or modern. The icon adorning this panel was created in seconds from a downloaded base image using GIMP.
This is a beta version of a Windows tool I have written for manipulating Amstrad sprites. Essentially it is designed to complement the functionality of ConvImgCPC.