CODINGApprendre pas à pas la programmation en assembleur Z80 par Roudoudou ★ Préparer son environnement de travail ★

Les ports I/O (ou entrée/sortie) sur le CPC
Les ports d'entrée/sortie sur le CPC

On parle souvent d'envoyer une valeur à un port (j'utilise aussi cette expression). Cette expression est correcte. Par contre, quand on parle "du" port de tel ou tel composant, ily a de grandes chances que ça soit faux. On devrait plutôt parler du "port idéal" ou de "un des ports" de ce composant.

Les composants et périphériques réagissent à des état sur leurs broches et le décodage est (à ma connaissance) toujours partiel.

Si vous regardez les trois premiers du tableau (enfin surtout le PAL et la X-MEM), ils ont le même port idéal mais il n'y en a qu'un seul des deux qui contrôle que le bit 8 soit à 1. C'est la différence entrele gestionnaire de mémoire étendue du 6128 (le PAL) et la X-MEM. Le PAL réagira autant au port #7F00 qu'au port #7E00 alors que la X-MEM ne réagira pas au second.

La conséquence directe, c'est que si vous faites un OUT &7F??,&C4, tout le monde va connecter sa page 4 mais la X-MEM va prendre le dessus sur le CPC. Et si vousutilisez un OUT &7E??,&C4, le PAL va réagir, pas la X-MEM et vous pourrez utiliser 512K+64K de mémoire étendue +64K de mémoire centrale.

Bref, les périphériques réagissent à toute adresse qui correspond aux états renseignés dans ce tableau. Les ports "idéaux" ne sont qu'indicatifs et destinés à éviterd'adresser plusieurs périphériques en même temps.

Le CPC décode les ports sur 16 bits (tous les ordinateurs ne font pas ça, coucou l'Oric!) via le registre BC mais les bits du registre C sont réservés aux extensionspar convention (le FDC et la commande moteur sont des extensions du CPC). Toutes les extensions sont supposées respecter le bit 10 à zéro, sauf les extensions mémoire puisque...

...puisque sinon aucun accès habituellement utilisé avec le port #7F ne serait fonctionnel. Ceci pour dire que quand aucun bit n'a a être renseigné dans le registre C, vouspouvez vous en servir pour envoyer la donnée et faire un seul LD pour charger "port idéal"+"donnée".

BREF, à moins de vouloir réaliser des optimisations ultra spécifiques, utilisez les ports idéaux sans vous prendre la tête!
Composants et périphériques   Port  
idéal
Bits décodés sur le CPC
  Valeur du registre B     Valeur du registre C  
1514131211109876543210
PAL/MMU #7F000
Y-MEM #7E0000
X-MEM #7F0001
CRTC sélection de registre #BC00000
CRTC écriture de registre #BD00001
CRTC registre de status (Type 1) #BE00010
CRTC lecture de registre #BF00011
Sélection de la ROM haute #DF000
Imprimante / DigiBlaster #EF000
PPI port A #F400000
PPI port B #F500001
PPI port C #F600010
PPI registre de contrôle #F700011
FDC registre de status (lecture) #FB7E0100
FDC envoi de données #FB7F010
FDC réception de données #FB7F0101
Commande moteur des lecteurs #FA7F000
PlayCity #F88n11111001000rrrr
MultiPlay #F89n111110011rrrr
Souris Kempston (Boutons) #FAEF000
Souris Kempston (position X) #FBEE0100
Souris Kempston (position Y) #FBEF0101
Les périphériques "externes" doivent respecter le bit 10 à zéro

Vous pouvez trouver plus de définitions de ports/décodages d'adresses sur [ cpcWiki.eu ]

Roudoudou

★ ANNÉE: 2025
★ AUTEUR: Roudoudou

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.732-desktop
Page créée en 031 millisecondes et consultée 28 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.