CODINGAMSLIVE ★ AMSLIVE n°15 - PEPE YVES ET MAMI GRECQUE ★

AMSLIVE n°15 - PPI / PSGCoding Amslive

Je me suis rendu aux meetings et compte que le fonctionnement du couple PPI (8255) / PSG (AY-3-891 2) était mal perçu. Ce qui suit éclairera je l'espère les programmeurs mais aussi ceux désirant mieux savoir comment marche leur machine (le CPC ! Laissez votre épouse tranquile !).

Je n'allais pas rater la rédaction d'un article sous protext que je n'ai pas Semword, ni refuser un calembourg venu du tréfond de je ne sais quoi (c'est vraiment trop tréfond).

PPI - PARALLELE PORT INTERFACE

Grâce à Siou et son gros calumet (NSNN : Je confirme !), vous savez tout du port imprimante. Un latch "gèle" la donnée envoyée sur le bus du Z80, pour la rendre accessible sur le port, quand bien même le bus ne contient plus du tout cette donnée.

Eh bien, le PPI effectue en gros le même travail (du moins, dans son mode de fonctionnement 0), sur 3 ports de 8 bits (appelé À, B, et Q. "Seule différence", les ports peuvent aussi se (ire. (NDSNIM : c'est marqué sur leur groin !)

Pour déterminer le port désire, on utilisera les adresses #F4xx, #F5xx ou #F6x> respectivement. La commande (sélectior lecture/écriture justement, et choix di mode de fonctionnement) se fait quant à elle via #F7xx.

A QUOI CA SERT ?

Dans le CPC, le PPI permet d'accéder à plusieurs composants et signaux externes sans électronique de décodage d'adresse supplémentaire. Il s'agit simplement, comme son nom l'indique, d'une interface. Il n'y a aucun protocole particulier à respecter, aucune histoire de validation (dans le mode 0 je reprécise).

LE BUG DU PPI ?

Dans les contrées de l'ouest oriental, pour endormir les enfants (et les esprits), on raconte une vieille histoire, comme quoi certaines routines mal programmées de test clavier ne répondaient plus sur CPC+.

Si la conséquence est réelle (plus de scanning clavier), la faute est à imputer au CPC+ qui émule mal le PPI et non aux routines.

Explications :

L'état d'une ligne clavier (8 petits bits qui renseignent suri l'état de 8 touches) passe par l'AY-8912 (le processeur sonore, qui joue là le même rôle que le PPI !).
Si cela vous paraît étrange, dites-vous bien que ça répond à une vision industrielle : qui dit générateur programmable dit besoin probable d'un interfaçage entre le microprocesseur et l'extérieur. Sur PC, la carte son comprenait le port joystick puis une interface pour CD-ROM !

L'AY comprend 4 modes de fonctionnement :
— Sélection d'un registre
— Lecture
— Ecriture
— Inactif (INACTIVITE ! REPOS ! Je n'ai pas écrit VALIDATION)

Un numéro de registre ou une donnée se transmettent via le port A du PPI. Quant au (hou ha !) mode, il se définit grâce aux broches BDIR et BC1 de l'AY, relié aux bits 7 et 6 (respectivement) du port C. Ok?

Voici comment charger la donnée Y dans le registre X.

1 - Envoie de X dans port A

2 - BDIR/BC1 3 - BDIR/BC1 4 - Envoi de Y dans port A

5 - BDIR/BC1 6 - BDIR/BC1 Comme on le voit, le cas 00 n'est pas une validation mais un état qui permet de modifier le port A en toute sécurité.

Pour scanner une ligne clavier, il faut sélectionner le registre 14, et le lire via le port A, ce qu'on résume ainsi :

1 - Port A 2 - BDIR/BC1 <-1/1

3 - BDIR/BC1 <-0/0

4 - Registre de commande 5 - BDIR/BC1 6 - Lecture du port A.

7 - BDIR/BC1 8 - Reg. corn. Or, lors de l'accès au registre de commande, le PPI met à zéro tous les ports (donc le port C, donc BDIR et BC1). La notice INTEL l'indique en toutes lettres. Cette particularité ne se révèle pas forcément utile, néanmoins elle existe. Les programmeurs se sont aperçus qu'on pouvait négliger les étapes 3 et 7. Ca ne respecte plus tout à fait le timing AY, mais ça marche !

Sur +, le PPI émulé ne fait pas la remise à zéro. S'il n'y a plus l'étape 3, l'AY se trouve toujours en mode "sélection de registre" lorsque le port A est mis en entrée pour le PPI. Or, il reste un court instant aussi en entrée pour l'AY, et une valeur indéterminée est alors prise comme registre. Ainsi, c'est un registre bidon qui est sélectionné, et sa lecture ne donne plus du tout le résultat escompté.

SAMPLE COMME BONJOUR !

Le faisceau de la connaissance ayant balayé un mythe de plus, passons maintenant à quelques détails pratiques.

Lorsqu'on souhaite envoyer plusieurs données de suite sur le même registre (quand on joue un sample par exemple), on est tenté de laisser PAY en mode écriture, sans le laisser se reposer. Et ça ne fonctionne pas. Là encore, la réponse figure dans la notice du composant :

Write Data Puise Width max = 10 us

Autrement dit, l'AY ne peut rester en écriture que 10 us. Sinon, il se passe une drôle de chose, que l'on ne pensait rencontrer que dans les jardins enchantés de Puppyland : les autres registres que celui sélectionné se voient petit à petit ANDer avec les données qu'on envoie. Tous les canaux s'ouvrent (mixés avec le générateur de bruit) et votre sample devient tellement dégueulasse que Shap s'en retourne dans sa tombe. Comment ? Shap n'est point décédé ? Ah ! Ca doit être la poste qui fait mal son travail, alors.

LA SURPRISE DU CHEF !

Pour vous consoler, voici une astuce permettant de gagner quelques cycles, quand on doit mettre à jour plusieurs registres :

— il suffit de passer directement de l'état d'écriture à celui de sélection de registre.

Bien zûr, un mauvais registre est alors momentanément sélectionné, mais peu importe, on rétablit en plaçant la bonne valeur.

UN DERNIER POUR LA ROUTE ?

Je vous sens friands de tous ces détails. Alors voilà une info de plus sur l'AY ; il ne connaît pas la période 0. Pour lui, elle équivaut à une période de 1. Les registres 6 et 11/12 en témoignent. Ainsi donc par conséquent, quand on joue un sample sans fermer le canal sur la voie correspondante, il est proutomixé avec une fréquence (inaudible) de 62.5 kHz. Remarquez, il sera alors joué moins fort. Cette propriété avait déjà été soulignée par Zik. Elle reste valable pour les sons produits par le générateur d'enveloppe.

Et pour terminer, le dicton du jour : Quand RAM7 passe à la maison, il en sort toujours quelque chose de bon.

LE MOT CLE DU MOIS :

Décodage d'adresse : dispositif à base de portes logiques (NON ET, etc) déterminant à partir d'une adresse (binaire) si tel ou tel composant est... adressé.

AMSLIVE n°15

★ ANNÉE: ???
★ AUTEUR: MADRAM

Page précédente : AMSLIVE n°15 - la Vie en 16

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Clefs1 33 Circuit Ay3 8912 Psg - Registres
» Coding » AMSLIVE n°17 - Comment Reagit Tout Crtc
» Coding » AMSLIVE n°17 - 3D
» Coding » AMSLIVE n°14 - Multiplication Saignee a Mort
» Coding » AMSLIVE n°19 - Crtc Detection - Retour Au Source
» Coding » AMSLIVE n°04 - Initiation Au Soundtracker
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 186 millisecondes et consultée 2769 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.