Geen boek over programmeren heeft me meer bezig gehouden dan Programming the Z80 van Rodnay Zaks (met als covertitel How to program the Z80). Zaks heeft het boek ontworpen als een volledig zelfstandige manier om vertrouwd te raken met het programmeren in het algemeen en assembleren voor de Zilog Z-80 microprocessor in het bijzonder. De Z80 (de oorspronkelijke spelling ‘Z-80’ werd zelfs door Zilog niet lang gehandhaafd) is een 8 bit processor, die werd ontworpen door oud-medewerkers van Intel. Hij werd uitgebracht in 1976 en is in essentie een processor die compatibel is met de 8080 van Intel, maar met meer instructies, registers en adresseringsmethoden. In het boek van Zaks komen dan ook verschillende verhandelingen over het werken met de 8080 voor.
Een microprocessor is slechts te gebruiken in combinatie met een door de fabrikant uitgegeven instructieset met vertaling naar machinetaalcode. De instructieset wordt gebruikt om programma’s in assembleertaal te specificeren en de vertaling naar machinecode levert bytes op die in het werkgeheugen door de processor kunnen worden uitgevoerd. Iedere fabrikant levert daarom een handboek met de instructieset van de processor mee: in het geval van de Z80 is dat de Zilog Z80 CPU User’s Manual. Als voorbeeld de instructie LD (nn), A
(“laad de inhoud van register A
in geheugenadres nn
“), uit de User’s Manual van Zilog:
De beschrijving van de instructie in de User’s Manual is beknopt en terzake, maar doet geen enkele moeite om de lezer op de pagina mee te nemen in de werking van de instructie. De User’s Manual lijkt ervan uit te gaan dat de lezer kundig is in de werking van de processor en alleen op zoek is naar de precieze vertaling van de assembleertaalinstructie naar de machinetaalcode.
Dezelfde instructie instructie LD (nn), A
in Programming the Z80:
Het is aardig om te zien, hoe Zaks de droge stof van de instructieset aantrekkelijker wist te maken. De pagina begint direct met een tekstuele omschrijving van de werking van de instructie. Dat is geen overbodige luxe, want veel beginnende Z80 programmeurs hadden moeite met het onderscheid tussen “laad de register met het geheugenadres” en “laad de register met de inhoud van het geheugenadres”, om maar eens een voorbeeld te noemen. Ook een uitgebreidere beschrijving ontbrak niet, om de lezer die nog meer ondersteuning nodig had in het zadel te helpen. Voor de lezer die meer de behoefte hadden aan een afbeelding had Zaks een schematisch overzicht opgenomen van de data zoals die van de register A in het geheugen werd overgenomen.
Hoewel doorgewinterde Z80 programmeurs waarschijnlijk wel een kopie van de Zilog User’s Manual op hun bureau hadden liggen, was het leren programmeren in Z80 assembleertaal een stuk aantrekkelijker met het boek van Zaks op tafel. Ik heb mezelf leren programmeren in Z80 assembleertaal en heb in mijn studie Informatica leren programmeren in 80×86 assembleertaal. 80×86 assembleertaal heeft een op de 8080 gelijkende benaming van instructies, die afwijkend is van die van de Z80 (LD (nn), A
van de Z80 heet STA word
in 8088). De 80×86 heeft echter veel instructies die 16 bits geheugenadressen en resultaten toestaan, wat me motiveerde zowel handig te worden in 8080 assembleertaal, alsook de meer toekomstgerichte 80×86 instructieset.
Externe links
- Rodney Zaks’ Programming the Z80 PDF (Archive.org)
- Zilog Z80 CPU User’s Manual PDF (Archive.org)