Avoir un Z80 c'est bien, mais s'il est tout seul ca ne sert pas à grand chose.
Aussi celui-ci est donc accompagné de divers périphériques comme le Gate Array; le CRTC ou encore le PPI...
Le but de cet article est d'une part de vous expliquer grossièrement comment fonctionne la chose; puis de vous expliquer comment adresser ces périphériques.
La liste des périphériques existants étant longue, on ne donnera ici que ceux intégrés (oubliez donc les cartes d'extensions).
Bien que le but de ce site est de vous donner de la documentation et des exemples pour développer sur GX4000, j'ai tout de même ajouté le FDC (après avoir hésité) puisque vous pourrez vouloir l'utiliser sur CPC+...
Adresser un périphérique se fait de deux façons: Soit vous le lisez; soit vous lui envoyez des données. Il s'agit donc soit de IN; soit de OUT.
Ces opérations sont donc appelées IO (pour IN/OUT... Suivez un peu !!!)
Lors d'une IO, le Z80 place le registre C sur les 8 bits de poids faible du bus d'adresse. B est lui placé sur le poids fort.
Ainsi, le couple BC forme l'adresse du périphérique que l'on souhaite adresser.
Pour chaque périphérique, nous avons donc quelques bits significatifs. Les autres bits seront mis à 1.
Voici donc un schémas de ces quelques ports:
Comme vous pouvez le voir, pour la plupart des ports, seul le poids fort compte. Le registre C est donc libre pour y mettre ce qui vous plait.
Comme je l'ai dit, hormis les bits significatifs, nous avons des bits qui ne sont pas spécifiques au port adressé. Ceux-ci sont mis à 1 par défaut dans le but de n'adresser qu'un seul périphérique, mais finalement ce n'est pas toujours le cas et le risque est bien d'adresser plusieurs périphériques à la fois.
Multi-adressage: la plaie !!!
Imaginons que vous adressiez le Gate Array pour changer vos couleurs.
Vous utilisez donc le port #7F00.
On commencera donc par:LD BC,#7F00:OUT (C),C ;pour sélectionner notre encre.
Mais certains voulant faire des splits raster ont trouvé le moyen d'utiliser l'instruction OUTI.
Cette instruction est bien pratique pour ce cas car pointe automatiquement sur une table de couleurs qu'elle incrémente en plus à chaque instruction OUTI.
OUI MAIS !!!
OUTI décrémente aussi B...
Hors regardons bien:
#7F00: %01111111 : Le GA (et le pal) sont sélectionnés. Tout est OK
#7E00: %01111110 : idem, pas de soucis
#7D00: %01111101 : toujours rien de spécial.
#7C00: %01111100 : pour l'instant ca marche comme sur des roulettes... Pour l'instant ...
#7B00: %01111011 : tout va bien
#7A00: %01111010 :OHHHHHH Le lecteur de D7 c'est allumé !!!
Regardons y de plus près...
Le bits 15 et 14 sont à 0 et 1. Le GA est donc bien sélectionné.
Mais regardez les bits 10 et 8: 0 et 0... Et si on regarde en plus notre registre C, le bit 7 est lui aussi à 0 !!!
Regardez #FA7F: Commande moteur du FDC: bits 10;8 et 7 à 0 !!! On remplis donc bien aussi cette condition !!!
Ainsi, ET le GA ET le FDC sont sélectionnés !!!
C'est un exemple parmi quelques autres. Vous pourrez aussi envoyer à la fois au PSG et à l'imprimante des données par exemple.
Pour adresser vos périphériques vous avez le choix entre deux types d'instructions: Les IN pour lire et les OUT pour envoyer. Voir la liste des instructions du Z80.