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

2/3.4.1 - Exploitation du PIO 8255Coding Classeurs Weka

 

Le système d'exploitation.des CPC fait très largement appel aux possibilités du PIO 8255 pour des tâches aussi variées que la gestion du clavier, la programmation du synthétiseur de sons, le pilotage du lecteur de cassettes et la supervision de l'imprimante.

Moyennant certaines précautions visant à éviter les conflits avec ces opérations, le programmeur peut détourner à son profit une partie des vastes possibilités de ce composant spécialisé dans les entrées/sorties.

Il devra cependant savoir exactement ce qu'il fait, certaines instructions malencontreuses pouvant non seulement bloquer la machine, mais aussi endommager certains de ses composants.

Mode de sélection du PIO 8255

La figure 1 montre comment le 8255 est matériellement incorporé dans le schéma des CPC : la broche de sélection du PIO est directement reliée à la ligne A11 du bus d'adresses du Z80, ce qui signifie que pour communiquer avec le 8255, le microprocesseur devra faire passer cette ligne A11 à zéro, on consultera également la Partie 2 chapitres 2.1 p. 3, 2.2 p. 3, 2.3 p. 3.

Simultanément, le PIO doit être positionné en écriture ou en lecture selon que l'on veut exécuter une opération de sortie ou d'entrée. Pour mettre le 8255 en écriture, il faut appliquer un zéro logique à sa broche WR, tandis que pour le mettre en lecture, c'est sa broche RD qu'il faut amener à zéro.


Fig 1.

La figure 2 montre comment les signaux IORD et IOWR, respectivement appliqués à RD et WR du PIO, sont obtenus à partir des lignes RD, WR, et IORQ du bus de commande du microprocesseur.

La ligne RD passe à zéro toutes les fois que le Z80 exécute une instruction de lecture, soit en mémoire, soit sur un port. Inversement, il positionne WR à zéro lorsqu'il exécute une instruction d'écriture en mémoire ou sur un port.

Parallèlement, il met la ligne IORQ à zéro s'il s'adresse à un port, et la ligne MREQ s'il s'adresse à la mémoire (ce qui nous ne nous concerne pas ici).

On constate ainsi que IORD se positionne à zéro seulement en cas de lecture d'un port, et IOWR en cas d'écriture sur un port : ces deux lignes restent insensibles à toute opération en mémoire.


Fig. 2

 

Mode d'adressage du PIO 8255

te 8255 est donc informé de la direction des échanges qui le concernent, mais doit encore savoir lequel de ses trois ports est « adressé ». Le microprocesseur transmet cette information sur les lignes A8 et A9 de son bus d'adresses, lesquelles rejoignent les entrées A0 et A1 du 8255.

Le tableau 1 résume les différentes combinaisons possibles entre les états de toutes les lignes desservant le PIO. Grâce au tableau 2, vous comprendrez aisément comment sont calculées les adresses de ports des instructions Basic INP et OUT permettant de communiquer avec le 8255.

En théorie, l'état des lignes d'adresse ne desservant pas le 8255 pourrait sembler indifférent, ce qui inciterait à croire que d'autres adresses - mèneraient aux mêmes résultats, ce qui est exact en ce qui concerne le seul 8255. Cependant, d'autres dispositifs d'entrée/sortie sont desservis par les mêmes bus, et réveillés par des états zéro sur d'autres lignes d'adresse.

Tableau 1
[CODE]
         
  Basic A1 (A8)  A0 (A8)  RD WR CS Action  
  E
N INP (29951)
T INP (30207)
R INP (30463)
E
E

0       0       0  1  0   0       0       0  1  0   1       0       0  1  0    1       1       0  1  0

A – Bus de données
B – Bus de données
C – Bus de données
Combinaison illégale
 
  S
O OUT 62719
R OUT 62975
T OUT 63231
I OUT 63487
E
0       0       1  0  0
0       1       1  0  0
1       0       1  0  0
1       1       1  0  0

Bus de données – A
Bus de données – B
Bus de données – C
Bus de données – registre contrôle

 
 
Repos
x       0       x  x  1
x       x       1  1  0
Bus de données en haute impédance
Bus de données en haute impédance
 
         

 

Tableau 2
                                     
  Ao Ai A3 A3 A4 A5 A6 A7 As A9 A10 An A12 A13 Ai 4 A15
OUT
 
    2 4 8 16 32 64 128 256 512 1 024 2 048 4 096 8192 16 384 32 768
/
 
    1 1 1 1 1 1 1 0 0 1 0 1   1 1
62 719
 
    1 1 î 1 1 1 1 1 0 1 0 1   1 1
62 975
 
    1 1 1 1 1 1 1 0 1 1 0 1   1 1
53 231
 
    1 1 1 1 1 1 1 1 1 1 0 1   1 1
63 487
 
                                     

L'imprimante, par exemple, est sélectionnée par un niveau zéro sur la ligne A12.
Tenons-nous en donc strictement aux adresses indiquées au tableau 1 sous peine de risquer de commander plusieurs périphériques à la fois.

Attention :
Par ailleurs, il faut veiller à n'écrire que sur les ports de sortie, et, bien que cela soit moins important pour la santé du matériel, à ne lire que sur les ports d'entrée : écrire sur un port d'entrée risque de causer un conflit de données susceptible de détériorer des composants.

Imaginons que nous tentions de sortir un 1 logique sur une ligne maintenue à zéro par un autre dispositif : nous créons un court-circuit qui va faire circuler un courant nettement plus important qu'en temps normal, d'où un échauffement excessif et dangereux dans les circuits intégrés...

Exploitation du MO 8255 dans les Amstrad

En temps normal, le système d'exploitation des CPC affecte comme suit les trois ports d'entrée/sortie du 8255 :

  • port A : tantôt en entrée, tantôt en sortie (communications bidirectionnelles avec le AY-3-8912 utilisé tour à tour en synthétiseur de son et en port d'entrée/sortie pour le clavier et les manettes de jeu) ;
  • port B : toujours en entrée (données lues sur cassettes, synchronisation vidéo, broche d'expansion du connecteur, cavaliers de configuration LK1 à LK4);
  • port C (séparé en deux moitiés) : toujours en sortie (données à écrire sur cassette, moteur du magnétophone, commande du AY-3-8912).

Sans modifier ces choix effectués par le système d'exploitation, nous allons illustrer ces informations par un exemple pratique.
Le schéma électrique du CPC 464 nous montre que le moteur du magnétophone est mis en service par une tension positive (1 logique) sur la ligne C4 du port C du PIO. Le tableau 3 rappelle par ailleurs que le « poids » décimal de toute ligne de données numérotée « 4 » est de 16 (2 à la puissance 4).

Tableau 3

Bus de données
-------------------------------------------------------------------
D0    D1    D2    D3    D4    D5    D6    D7    Ligne n°
1      2     4     8    16    32    64   128    Poids décimal
-------------------------------------------------------------------

Le tableau 1 nous permet de déterminer que pour positionner à 1 la ligne C4, il faut programmer, en Basic, OUT 63231,16. Essayons, et constatons que cette commande fait bien démarrer le moteur, à condition évidemment que la touche PLAY soit enfoncée afin de débloquer la mécanique.

Vérifions inversement que OUT 63231,0 arrête bien le moteur. Nous disposons dorénavant de commandes identiques aux MOTOR ON et MOTOR OFF présentes sur des machines d'autres marques (Thomson par exemple).

A titre d'exercice, essayez de lire, par un INP approprié, l'état de la broche BUSY du connecteur d'imprimante (reliée à la ligne B6 du 8255)...
Possibilités supplémentaires de programmation

Même s'il nous faut insister sur les risques que suppose toute expérimentation hasardeuse à ce niveau, nous devons, pour être complets, donner les informations permettant de modifier les modalités d'utilisation des ports A, B et C du 8255.

Précisons bien que de telles modifications ne sont guère envisageables que sous langage machine, le système d'exploitation se chargeant généralement, sous Basic, d'annuler toute commande ne lui convenant pas.

Il faut savoir que le 8255 possède trois modes de fonctionnement pouvant être sélectionnés par programmation :

  • le mode 0, qui permet d'effectuer des opérations d'entrée/sortie directes sur chacun des trois ports, sans aucun contrôle. Le port C peut, pour sa part, être séparé en deux ports à quatre lignes ;
  • le mode 1, dans lequel les entrées/sorties peuvent être contrôlées par le port C, dont quatre bits sont affectés aux signaux handshake (poignée de main) entre le 8255 et les périphériques avec lesquels il communique ;
  • le mode 2, permettant des liaisons bidirectionnelles sur le port A: cinq bits du port C contrôlent ces échanges, conformément aux affectations résumées aux tableaux 4 et 5.

Insistons encore une fois sur le fait que, bien que le registre de contrôle défini au tableau 4 soit accessible en Basic par OUT 63487, la modification de son contenu est une affaire de programmeur averti, possédant une bonne connaissance du matériel. Cela d'autant plus que ce registre ne peut pas être lu : il n'est pas possible, dès lors, de prendre connaissance de son contenu afin de pouvoir le restaurer après une modification.
La lecture des registres du AY-3-8912, à l'inverse, est possible. Et comme ce composant dialogue avec le 8255 par l'intermédiaire du port A, il y a là une voie à explorer, avec l'aide de la Partie 6.

Tableau 4

----------------------------------------------------------------
D0   4 bits de poids faible de C : 1  = entrée, 0 = sortie |
D1   B   1  = entrée - 0 = sortie                        ;  |> Groupe 2
D2   mode : 0 ou 1                                       ;  |
----------------------------------------------------------------
D3   4 bits de poids fort de C : 1  = entrée, 0 = sortie   |
D4   A  1 = entrée - 0 = sortie                           ; |
D5     0         ;0         ;1         ;1                 ;   ;|> Groupe 1
     MODE 0    MODE 1    MODE 2    MODE 2                ;  |
D6     0         ;1         ;0         ;1                 ;   ;|
----------------------------------------------------------------
D7 1 : sélection de mode - 0 : positionnement de bits
----------------------------------------------------------------

Tableau 5

----------------------------------------------------------------
D0          Valeur du bit : 1 ou 0  ?
----------------------------------------------------------------
D1  |             ;0  1  2  3  4  5  6  7
    |             ;----------------------
D2  | N° du bit   0  1  0  1  0  1  0  1
    |             ;0  0  1  1  0  0  1  1
D3  |             ;0  0  0  0  1  1  1  1
----------------------------------------------------------------
D4  |
D5  | Inutilisés
D6  |
----------------------------------------------------------------
D7      1: sélection de mode - 0 : positionnement de bits.
----------------------------------------------------------------

Page précédente : 2/3.4 - L'interface parallèle PIO 8255A

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 069 millisecondes et consultée 1917 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.