| ★ CODING ★ Apprendre 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 CPCOn 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!
Vous pouvez trouver plus de définitions de ports/décodages d'adresses sur [ cpcWiki.eu ] Roudoudou
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||