CODINGCLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

8/5.5 - OUT et les ports de sortieCoding Classeurs Weka
8/5.5 - OUT et les ports de sortie

L'instruction Basic OUT, qui possède d'ailleurs un équivalent en Assembleur, permet d'exécuter des opérations de sortie sur ports.

Un port de sortie n'est pas forcément un connecteur accessible à l'arrière de l'ordinateur : ce peut bien sûr être, par exemple, la prise d'imprimante mais aussi l'interface purement interne entre le microprocesseur et le synthétiseur de sons ou le clavier.

En fait, un port est au départ une simple entité logique : une combinaison de niveaux logiques sur les bus du microprocesseur Z80. La façon dont ces signaux sont exploités par la circuiterie périphérique est une toute autre affaire, qui ne regarde finalement pas vraiment l'unité centrale.
L'exécution d'une instruction OUT A,B se traduit de la façon suivante au niveau des bus :

  • la ligne IORQ du bus de commande est mise à zéro par le microprocesseur, exactement comme MREQ le serait en cas d'écriture en mémoire ;
  • simultanément apparaît sur le bus d'adresse un ensemble de 16 niveaux logiques traduisant, en binaire, la valeur de A ;
  • toujours en même temps apparaît sur le bus de données un ensemble de 8 niveaux logiques traduisant, en binaire, la valeur de B.

En pratique, ces états ne persistent que quelques centaines de nanosecondes (soit moins d'un millième de seconde) : c'est aux circuits périphériques du microprocesseur qu'il appartient de les intercepter au vol et, si nécessaire, de les mémoriser avant de les faire agir sur des dispositifs externes à temps de réponse plus élevé.

L'information véhiculée par le bus d'adresses quand IORQ est à zéro identifie tout simplement le périphérique destinataire de l'opération de sortie, tandis que celle présente sur le bus de données n'est autre que la représentation codée des états devant être pris par le périphérique en question.

Le tableau 1 explique comment faire correspondre l'argument A de OUT A,B aux états des lignes d'adresse : pendant l'exécution d'un OUT 62719,B, par exemple, toutes les lignes du bus d'adresse resteront à 1, sauf A8, A9 et A11 qui viendront à 0. Dans le cas d'un OUT 61439,B par contre, seule A12 viendra à 0.


Tableau 1

Le cas du bus de données est pour sa part traité au tableau 2 : compte tenu du poids de chaque ligne, OUT A,32 déclenchera par exemple le passage à 0 de toutes les lignes de données à l'exception de D5 qui passera à 1.

Inversement, OUT A,243 mettra D2 et D3 à 0, les autres lignes de données restant à 1.


Tableau 2

Physiquement, un port de sortie sera le plus souvent matérialisé par un groupe de huit bascules chargées de mémoriser les états du bus de données au moment où ceux-ci sont désignés comme significatifs par les bus d'adresse et de commande.

Pour faciliter ce travail, deux signaux internes au CPC sont élaborés à partir de IORQ, WR et RD en provenance du Z80 : la figure 1 permet de constater que IOWR à zéro indique une opération de sortie sur port, tandis que IORD passe à zéro en cas d'entrée sur port (par INP), ce qui ne nous concerne pas directement ici.


Fig. 1

Plusieurs ports remplissant des fonctions importantes sont matériellement regroupés dans le circuit intégré PIO {Parallel Input Output) 8255: on y accède par les adresses 62719,62975,63231 et 63487, grâce aux branchements décrits à la figure 2. Compte tenu de la relative complexité des modalités d'accès à ces ports, un chapitre entier est consacré à ce sujet [voir Partie 2, chapitre 3.4.1).


Fig. 2

Quelques ports sont réservés aux communications avec des périphériques spécialisés (Gate Arrays ou contrôleur d'écran) et nécessitent, pour être manipulés, une profonde connaissance de leur fonctionnement interne»

Le port d'imprimante parallèle, par contre, se prête bien à toutes sortes d'expérimentations.
Le port d'imprimante est matérialisé par un circuit intégré 74LS273 ou 74HC273, regroupant huit bascules D interposées chacune entre l'une des lignes du bus de données et l'une des sorties de la prise d'imprimante. Seule la ligne D7, véhiculant le STROBE, possède en plus un inverseur (74LS132).
La figure 3 montre que l'entrée d'horloge commune aux huit bascules est commandée par le résultat d'un OU logique entre les signaux IOWR et A12: les informations circulant sur le bus de données seront donc gelées sur les sorties des bascules au moment précis où une opération de sortie sera exécutée vers un port dont l'adresse est telle que la ligne A12 est à zéro (voir table de vérité ci-dessous).

Afin d'éviter tout conflit avec d'autres ports, il est souhaitable que toutes les autres lignes d'adresse soient à 1 à ce moment-là, et donc d'utiliser l'adresse 61439 même si beaucoup d'autres peuvent sembler convenir.


Fig. 3

Cela étant posé, le tableau 3 donne quelques exemples d'états pris par les broches de la prise d'imprimante en fonction de ceux du bus de données, eux-mêmes fonction de l'argument de l'instruction OUT 61439.

On notera que, conformément à la conception matérielle de ce port, le niveau présent sur la broche 1 du connecteur (STROBE) est inverse dt celui de la ligne D7, mémorisé par la bascule correspondante.


Tableau 3

La figure 4 fournit un schéma très simple permettant la commande d'un petit relais « REED » 500 fi 5V à partir de la ligne de STROBE, en l'absence d'imprimante bien sûr : pour le manœuvrer, il faudra faire alterner des OUT 61439,128 et des OUT 61439,0.
Signalons d'ailleurs que plusieurs applications pratiques décrites dans la Partie 10 exploitent cette facilité...


Fig. 4

Page précédente : 8/5.4.2 - La structure logicielle
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 936 millisecondes et consultée 1367 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.