CODINGLA BIBLE DU CPC 6128

La bible du CPC 6128 : 1.02.03 Particularités du Z80 du CPC

Les nombreuses possibilités du Z80 laissent une grande marge de manœuvre aux concepteurs de matériel ou de logiciel dans la construction d'un ordinateur. Cette CPU (unité centrale) peut être utilisée avec la même efficacité dans des systèmes très réduits ainsi que dans des machines aussi puissantes que le CPC.

Les développeurs du CPC se sont ingéniés à obtenir un maximum de puissance avec un minimum de composants. D'où certaines particularités qu'il est nécessaire de connaître pour pouvoir programmer et utiliser efficacement cette machine, particulièrement en Iangagenmachine. Ce sont ces particularités que nous allons maintenant étudier.
Tout d'abord la gestion des interruptions du CPC. La seule source d'interruptions du CPC est le gâte array, ce composant fantastique qui contribue de façon décisive à la puissance de cet ordinateur. Toutes les 3,3 millisecondes, soit 300 fois par seconde, le gâte array produit une brève impulsion qu'il place sur l'entrée IRQ* du Z80.

L'entrée NMI* du processeur n'est pas utilisée et est disponible sur le connecteur d'extensions pour des extensions éventuelles.
La fréquence du signal d'interruptions est obtenue, à partir du signal H-Sync du CRTC 6845, au moyen d'un diviseur de fréquence.

L'impulsion H-sync qui apparaît environ toutes les 65 microsecondes est ici divisée par 52.
Comme le Z80 fonctionne sur le CPC en mode d'interruption IM1, chaque interruption IRQ identifiée provoque un RST 7 ou encore un CALL &0038. Le processeur interrompt immédiatement le programmeen cours, place l'état actuel du PC sur la pile et saute à l'adresse &0038. Ici figure, sur le CPC, un saut à l'adresse où se trouve la routine d'interruption proprement dite. Comme l'endroit où s'est produit l'interruption est enregistré sur la pile, le programme interrompu peut être repris une fois terminée la routine d'interruption.

Comme l'entrée IRQ* du processeur se trouve également sur le connecteur d'extension, on peut bien sûr se demander comment une interruption par le gâte array peut être distinguée d'une interruption externe. Les développeurs du CPC ont eu ici recours à une astuce. A l'intérieur de la routine d'interruption, l'interruption est à nouveau autorisée un court instant. Comme l'impulsion produite par le gâte array ne dure pas plus de 5 microsecondes, cette autorisation de l'interruption n'a aucun effet, puisque l'impulsion est terminée depuis longtemps. Par contre, les sources externes d'interruption ne mettent fin à l'émission de leur signal que sur instruction expresse du processeur. Lorsqu'il y a une interruption externe, la routine d'interruption est donc elle^ême interrompue. Ce cas peut être identifié et traité d'une manière spéciale. C'est ainsi que sont rendues également possibles les sources d'interruptions externes. La seule condition qu'elle doivent remplir, c'est une impulsion suffisamment longue.

Le second cas particulier qui doit être pris en compte, c'est la possibilité limitée d'utiliser les instructions de port.

En liaison avec le signal IORQ* (Input/Output ReQuest), le Z80 peut adresser un maximum de 256 ports différents, de façon analogue à l'adressage de cases mémoire. Pour cela, l'adresse du port souhaité est placée dans les 8 bits inférieurs d'adresse AO à A7. Ces ports sont essentiellement utilisés pour connecter des éléments périphériques.
Sur d'autres processeurs qui ne connaissent pas l'adressage de port, le concepteur est toujours tenté d'adresser les éléments périphériques comme des cases mémoire. Ce procédé est appelé Memory Mapped et il présente l'inconvénient de réduire la zone d'adresses disponible pour la RAM

Pour l'utilisation de l'adressage de port, le Z80 fournit le groupe très puissant des instructions IN et OUT. Si l'on étudie plus attentivement les instructions de ce groupe, on trouve dans les instructions IN(C),r et OUT(C),r une possibilité élégante d'adresser plus que les 256 ports normalement prévus. Dans ces instructions, l'état des 8 bits d'adresse inférieurs est déterminé par le contenu du registre C mais le contenu de B est en outre placé dans les bits d'adresse A8 à A15. C'est ainsi 65536 adresses de ports qui sont disponibles. C'est justement cette caractéristique du Z80 que les concepteurs du CPC ont utilisée. Tous les circuits intégrés périphériques sont sélectionnés au moyen des bits d'adresse A8 à A15.

De telles astuces ont malheureusement souvent un inconvénient. En l'occurence l'inconvénient réside dans une nette limitation du jeu d'instructions du Z80. Aucune des autres instructions I/O du Z80 ne peut plus être utilisée. Ceci vaut notamment pour les instruction I/O avec automatisme de boucle. Ces instructions utilisent le registre B comme compteur et ne peuvent donc pas 'fournir' l'octet fort de l'adresse de port. C'est en particulier le cas des instructions INI, INIR, IND et INDR ainsi que OUTI, OTIR, OUTD et OTDR.

L'utilisation des cycles wait constitue une troisième particularité du CPC.

La nécessité de cette connexion du Z80 remonte à l'époque où les circuits intégrés de mémoire disponibles se la coulaient encore douce. Les premières EPROMs notamment n'étaient pas en mesure de préparer les données, après réception de l'adresse, avant un délai de quelques microsecondes.

Pour faire fonctionner le Z80 avec de tels 'paresseux', il fallait attendre un certain temps. Ce délai peut être produit par le signal WAIT*. Lors de chaque signal négatif sur l'entrée de l'horloge, le processeur examine l'état de la connexion WAIT*. Si cette connexion est à 0 Volt, le Z80 exécute ce que l'on appelle un cycle d'attente de la durée d'un mouvement d'horloge. Une fois écoulé le signal d'horloge, donc avec le signal négatif, l'état du canal WAIT* est à nouveau examiné, etc.. L'utilisation de ce signal sur le CPC n'a cependant aucun rapport avec les circuits intégrés de mémoire utilisés. Ils sont tous suffisamment rapides pour un Z80 d'une fréquence de 4 MHz. La raison de l'utilisation de cette connexion est la nécessaire synchronisation entre processeur et contrôleur vidéo. Comme les deux circuits intégrés peuvent accéder à la mémoire, il faut contrôler de qui c'est le tour à un moment donné. Le contrôleur vidéo est d'ailleurs toujours prioritaire car sinon l'affichage sur le moniteur pourrait être sérieusement endommagé. Pour obtenir cette synchronisation, un signal WAIT* est produit pour le processeur tous les 4 mouvements d'horloge. Bien que le processeur fonctionne à 4 MHz (Méga Hertz= millions de vibrations par seconde), du fait des cycles d'attente, la fréquence de travail effective est d'environ 3,3 MHz.
Les signaux BUSRQ* et BUSAK*, les signaux de commande du DMA ne sont pas utilisés sur le CPC. Ils sont cependant placés sur le connecteur d'extension et sont donc disponibles pour des extensions externes.

Le signal HALT*, qui n'est pas non plus utilisé sur le CPC est également disponible sur le connecteur d'extension.

★ ANNÉE: ???

Page précédente : La bible du CPC 6128 : 1.02.02 La structure des registres du Z80
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 478 millisecondes et consultée 1584 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.