CODING ★ PSG (Programming Sound Generator) - BIDOUILLES DURES ET DINGUES ★

Bidouilles ACPC n 05 - Le PSG (2/2)

Salut, c'est encore moi. Sined est de retour pour les nouvelles aventures bidouillesques. Je suis déçu de ne pas avoir de courrier concernant les bidouilles du mois dernier. Déçu dans un sens, mais rassuré dans l'autre, car pas de nouvelles, bonnes nouvelles. Comme vous suivez à un rythme d'enfer, nous pouvons poursuivre l'étude du 8912 sans plus attendre,

Avant tout, parlons de choses qui me préoccupent énormément. En effet, je ne sais pas ce que j'ai bien pu faire aux maquettistes dans des vies antérieures, mais ils m'en veulent à mort. Le listing du mois d'avril a été atrocement mutilé. Grrrr ! J'enrage à l'idée que des êtres sans scrupules torturent ainsi de pauvres petites élucubrations capilo-tractées sans défense, sorties tout droit d esprits vifs et ingénieux de programmeurs plus qu'admirables. Est-il possible de ne pas mépriser des gens qui ne respectent pas la création ??? Bon. accord. Je retire ce que je viens de dire. Mais de grâce, je vous en supplie a genoux, vous les maquettistes, cessez d importuner eu d'amputer de telles œuvres. Vous hériterez ainsi de la bénédiction de milliers de programmeurs qui vous respecteront et vous vénéreront jusqu'à la fin des temps. Dans le cas où vous resteriez sourds à cet appel, je jure devant Krom , dieu de Conan. que mon pulsar électromagnétique intersidéral à énergie solaire fera s'abattre sur vous l'énergie pure de tout l'univers pour que, jamais plus, de telles injustices ne soient commises dans le royaume du grand Cépéssé, maître de ces lieux. Non mais ! Alors ! (Ouais, vas-y Sined, mords-leur-oeil !!! crie Robby). Voilà qui est dit. Maintenant, essayons de ressusciter cette pauvre victime innocente violemment meurtrie. Touu se passe en ligne 130. Le début est à sa place (quoique des lignes soient mélangées sans grave incidence), mais la fin se retrouve juste sous la ligne 290. Comment est-elle arrivée là ? Aucune idée. Elle a dû rencontrer, au détour d'une page, un cutter enragé en mal de violence. Quoi qu'il en soit, la voici guérie. Dans les lignes 2440 et 2460, la fonction DEC$ apparaît. Elle n'est normalement pas utilisée car son intérêt est léger. Elle renvoie une chaîne de caractères formatée à partir d'une valeur numérique. C'est en quelque sorte un Prinu Using en mémoire. Sur 464, cette instruction pose certains problèmes. Allez savoir pourquoi. Cela fait certainement partie des quelques bugs qui traînenu dans le Basic Locomotive. Heureusement nous avons la chance d'avoir un Basic très très peu buggé. et les ennuis du 64 ont été réparés sur 128. donc pas de quoi pousser des complaintes les soirs de pleine iune au fond des bois. Pour en revenir à ce malencontreux bug de DEC$. il suffit de ne pas passer par celle fonction et de formater le nombre de façon mathématique. La simple fonction Round va nous permettre de rendre à César ce qui lui appartient grâce à la ligne suivante :

IF ROUND ( SD* 100 ) / 100 = 43.68 THEN...

Il suffit donc de faire ce genre de changement dans les deux lignes qui portent préjudice et c'est bon. Oh ! Qu'il est facile de changer des instructions lorsque l'on connaît leur réel fonctionnement.
Mis à part ce petit récapitulatif, rien de nouveau. Nous attendons toujours de votre part un courrier dense, et encore du courrier.

ENTREZ, SORTEZ, PRENEZ LES PORTS

Nous avons vu. le mois dernier, comment fonctionne le PPI8255 A et comment accéder à l'AY3 W 8912 à travers le premier élément cité. Comme nous le précisions précédemment, nous n'avons pas reçu de courrier sur les bidouilles du mois dernier. Etant donné que cela n'a pas l'air de vous passionner outre mesure, nous allons aborder le 8912 en vitesse (pour nous permettre d'arriver plus rapidement au processeur vidéo). De toute façon, de nombreuses revues et livres parlent de ce bon vieux générateur sonore, alors pourquoi radoter sur des points connus de tous ? Parce que des gens n'ont aucune documentation, les enfants. Alors, nous allons quand même en parler, non mais ! C'est parti. Le 8912. appelé aussi PSG (Programming Sound Generator), est un ship sonore à trois voies. Il possède un mélangeur de bruits, un registre de contrôle et un générateur d'enveloppes. Il a, en fait, quinze registres qu'il faut appeler, par convention les registres de 0 à 14. Ils sont organisés comme suit :

- Les six premiers registres, utilisés deux à deux, forment les contrôleurs de fréquence des Irais voies du PSG. Par exemple, pour la première voie, la fréquence est obtenue par les quatre bits de poids faible du registre numéro 1 suivis des huit bits du registre numéro 0. Ainsi, la fréquence résiduelle est stockée sur 12 bits. Mais, attention les musicos, elle n'est pas exprimée en hertz, comme il serait normal. Il faut lui faire subir un petit traitement mathématique que j'espère apprendre par des lecteurs avises (lorsque je dis ce genre de chose, si vous connaissez la réponse à cette question, précipitez-vous sur votre matériel de correspondance pour m'envoyer une petite bafouille. Ainsi, il sera facile de la faire passer dans le prochain numéro de Cent Pour Cent, pour que les gens sur leur faim ne le soient plus. Aide Ion prochain autant que tu désires l'être.) Pour récapituler, les quatre bits de poids faible du registre numéro 1 sont les quatre bits de poids fort de la fréquence du canal 1. et le registre numéro 0 forme les huit bits de poids faible de la fréquence de ce même canal. Il en va de même pour les registres numéro 2 et 3 pour le canal 2. et les registres numéro 4 et 5 du canal 3.

- Le registre numéro 6 ( It is not a number ! it is a free register ! M"enfin ...) contient sur ses cinq biis de poids faible la fréquence du bruit. I] est ainsi possible de choisir le bruit très aigu (0) ou le bruil moins aigu (31) que l'on mixera avec le ou les canal (aux) choisis). Mais nous en reparlerons plus loin.

— Le registre numéro 7 sert à paramétrer trois choses différentes, qui sont I autorisation du bruit sur tes canaux 1, 2 et 3. la même chose pour les sons, et le sens du port du 8912 (qui a son importance car il permet d'atteindre, entre autres, le clavier). Pour ne pas changer, les concepteurs de ce truc ont préféré que les bits de commande soient à zéro pour que le son ou le bruit sorte, plutôt qu'à un, ce qui serait plus logique. M'enfin, faut encore faire avec et c'est reparti. Le bit 0 commande la sortie de son sur le canal 1 s'il est à zéro. Le bit 1 fait la même chose pour le canal 2, et ainsi de suite. je ne répète pas la même chose pour le canal 3 et le bu 2. Le bit 3 autorise la sortie de bruits sur le canal 1 s'il est à zéro (je vais commencer à m' emmêler les pédales). Le bit 4 fait un mélange de bruits sur le canal 2 s'il est à zéro, et le bit 5 fait de même sur le canal 3. Donc, si vous voulez forcer du son sur le canal 1 , du bruit sur te canal 2 et rien sur le canal 3, vous mettrez dans le registre 7 la valeur 46 (=&2E=&X00101110)). Si vous voulez un mélange de bruit et de son sur le canal 1, du bruit sur le canal 2, et du son sur le canal 3, cela donnera 34 (&22, &X00100010). Du son â tout faire péter sur tes trois voies sortira par 56 (&3, &X00111000), et enfin du bruit sur les trois voies nous fera exploser les tympans avec 7 (&7,&X00000111). Mais il est plus sûr, quelqu'un qui utilise et programme le sans passer par les calls de la ROM, de se procurer un ouvrage qui parle de cela par tableaux. C'est plus facile. Le bit 6 de ce même registre doit absolument être remis à un après chaque contact avec ce registre, sans quoi le CPC plante lamentablement. En effet, la routine de scanning clavier ne remet pas ce bit à zéro pour lire le port. Alors, s'il est à un, ce port marche en sortie au lieu de fonctionner en entrée et le clavier reste sans parole. Mauvais plan, méfiez-vous de ce genre de plantage. Ce sont tes plus sournois et les moins faciles à détecter. Le bit 7 ne sert strictement â rien de rien, nous ne nous y attarderons pas. Par contre, je tiens â souligner que, si vous fermez un canal avec ces bits de commande, plus aucun son ne sortira. Cette manière est plus efficace que le fait de mettre un volume à zéro, car aucun bruit ne son, pas même un souffle.

- Les registres 8, 9 et 10 contrôlent le volume de chaque canal. Les quatre bits les moins significatifs du registre 8 permettent de régler le volume du canal 1 ; idem pour le registre 9 et le canal 2, et pour le registre 10 et le canal 3. Mais si dans l'un de ces registres le bit 4 est mis à un alors le contrôleur d'enveloppe de volume entrera en service. Donc, dans tous tes cas. les quatre bits les moins significatifs de ces registres contrôlent le volume, et si te bit 4 d'un de ceux-ci est mis à un, alors le volume du canal correspondant passera sous la tutelle du contrôleur d'enveloppe.

- Les registres 11 et 12 contiennent la fréquence de l'enveloppe de volume, pilotée par le générateur intégré. Là encore, cette fréquence n'est pas exprimée en hertz, et je compte sur vous pour avoir le calcul adéquat
(quoi ???). Le registre 12 contient le poids faible de cette fréquence, et le 11, le fort C'est en fait une échelle de temps qui est contenue dans ce double registre. En effet, il contient le temps d'exécution d'un cycle d'enveloppe.

- Le registre 13 contient le type d'enveloppe de volume que vous voulez utiliser, cela si le bit 4 d'un des contrôleurs de volume est mis à un. Les quatre bits les moins significatifs de ce registre décrivent les caractéristiques de cette enveloppe. Le bit 0 de ce registre précise si le signal sonore sera tenu, après la fin de cycle de l'enveloppe. Sa mise à un donnera un signal continu, sans que le registre double agisse. Le bit 1 indique s'il y aura un retournement de situation. Si le volume montait, il redescendra ; dans le cas contraire, le cas inverse se présentera, et cela dans chaque période. On obtient ainsi un effet en dents de scie de fréquence donnée par le même double registre 11 et 12. Si le bit 2 est à zéro, le volume descendra de son maximum vers son minimum dans te temps fixé par 11 et 12 ; sinon, il montera. Le bit 3 signifie, s'il est à un, que le signal sonore sera répété indéfiniment. Mais le bit 0 est prioritaire sur le bit 3. Voilà qui ne sera bien compris que si vous faites des essais. En fait, il suffit de répertorier les différentes enveloppes sous forme de dessins plus facilement utilisables.

- Le registre 14 est le port d'entrée-sortie du PSG. qui est relié directement au clavier. Nous allons en parler plus en profondeur dans le chapitre suivant.

AH ! CLAVIER DUR !

Elle est bonne celle-là, non ? Dommage qu'elle ne soit pas de moi. C'est Stéphanie, secrétaire de rédaction très sympathique, qui a trouvé ce fantastique jeu de mots, Ah ! que je suis heureux d'avoir une telle vanne à vous offrir. Après avoir cherché pendant des heures et des heures un intertitre avec clavier, je commençais à me lamenter sur mon sort. "Qu'est-ce que je vais bien pouvoir leur écrire?", pensais-je à voix haute. Alors, à ce moment-là, tous les jeux de mots les plus nuls du siècle me sont passés par la tête. De key-bordel à keybordemer, tout n'était que tristesse et grand désarroi. Et, tout à coup, alors que Miss X réajustait ses bas en m'offrant un des plus somptueux spectacles de ma carrière, je vis cette chère et indispensable Stéphanie, accompagnée de son acolyte mais non moins talentueux Michel, arriver vers moi. "Salut Sined", me lancèrent-il en choeur et avec. Et c'est là que ces fantastiques dictionnaires intelligents furent soumis à mon harcèlement impitoyable. Vous voyez le résultat, du propre, du simple, du concis: de l'humour à l'état pur. Allez, c'est parti, trêve de papotage, au boulot. Il va sans dire que le clavier est une des parties les plus importantes du CPC, car. sans lui, nous n'aurions aucun contact avec ce brave microprocesseur, notre Z80 préféré. Nous allons aborder aujourd'hui un programme assez sympathique : le multitouche. Il vous permettra de tester n'importe quelle touche du clavier, que ce soit la touche A, le Shift, ou Contrôle, voire Caps-lock, Il suffit de loger la routine sous interruption, et de scanner de temps en temps un morceau de mémoire qui servira de tampon intermédiaire. Nous allons nous servir de la routine du mois dernier, et de nouvelles, pour parvenir à nos fins. Nous ne reparlerons pas du fait de mettre une routine sous interruption, car cela a été vu dans le deuxième Cent Pour Cent. Nous irons donc droit au but. comme dirait Platini ( que lu vie est dure), et nous mettons le pied dedans.

Nous attaquerons donc directement à la ligne LD HL,X , où les choses commencent à se corser. Il faut alors que le 8912 nous offre en pâture son bon vieux port d'entrée-sortie, soit le registre 14. Donc, nous demandons gentiment au PSG, comme le mois dernier, de bien vouloir travailler un peu, à travers le port C du 8255, c'est-à-dire sur le port situé en F600. Après que ce processeur sonore, gardien de la porte 1ui mène au clavier, est retourné se coucher pour un petit somme égomîste. Il faut programmer les ports du PPI8255 de façon à avoir l'adresse de lecture des données en provenance du PSG en entrée, le port des signaux de contrôle du PSG en sortie, ainsi que le bus de transmission de lignes clavier aussi en sortie. De toute manière, le nombre à envoyer au registre de contrôle du PPI est toujours 92 lorsque l'on désire accéder au clavier, et 82 dans les autres cas musicaux. Après toutes les petites préparations, le PPI est prêt à adresser le 8912 de manière à lire le clavier correctement.

Comme nous l'avons vu dans le dernier numéro, le port F600 sert de contrôleur au PSG. et il est de plus branché directement sur les lignes do clavier. Ainsi, lorsque vous envoyez du courant (en positionnant des bits à un dans ce port), il fait le tour et on le retrouve dans le registre 14 du PSG. Si une touche est appuyée, le courant passe, sinon, le courant ne passe pas. et les petits électrons pris au piège se meurent autan! que moi. lorsque je cherche un jeu de mots. Nous voyons donc qu'il est simple d'accéder en même temps au clavier et au PSG. pour faire d'une pierre deux coups. Simultanément, le numéro lie ligne clavier à scanner est mis sur le bus et le PSG est forcé de donner le résultat de l'opération. Génial, non ? Il faut quand même avouer qu'ils ne sont pas bêtes, les concepteurs du CPC. pour nous avoir fait un coup pareil. Donc, pour en revenir à la routine, la donnée clavier est écrite et lue en même temps, au niveau de l'étiquette LISPSG. Il ne reste qu'à stocker le résultat en mémoire. Ensuite, vient le moment de icsier le nombre tie lignes déjà scannées. et de boucler jusqu'à ce que les dix lignes soient faites. Il faut alors remettre le PPI dans son état de travail normal, et le tour est joué.

BONHEUR ET BATONS

Tout le monde sait que outre-Maache, joie se dit joy et que. dans le même pays, stick veut dire bâton (ou ce genre de chose). Cela pour dire que le clavier est formé de dix lignes, qui contiennent aussi le port joystick. Ainsi, la routine cadeau de ce mois permet non seulement de gérer un rnultitouche, mais en plus, il offre une gestion des deux joysticks avec leurs deux boutons de feu. Pas mal. non ??? Exclusivité Cent Pour Cent. Il vous sera ainsi bientôt possible de virer tous les vecteurs lents d'interruption qui fonctionnent normalement pour les remplacer par vos routines LM qui ne géreront que les touches que vous voudrez, sans passer par tous les décodages et les transferts en codes ASCII qui font perdre du temps cinquante fois par seconde. La routine que vous avez, dans ces pages, est mise tous les trois-centièmes de seconde, mais rien ne vous empêche de l'appeler uniquement dans les cas où vous en avez besoin. Le petit programme Basic livré avec elle montre seulement que la frappe sur des touches transforme des 0 en 1 (bravo Sined ça c'est de l'innovation). Mais nous vous offrons les outils, à vous de les utiliser comme bon vous semble.

AU MOIS PROCHAIN

Voila. comme promis, vous l'avez eue, votre routine clavier. Eh bien, grande nouvelle. dans le prochain numéro de Cent Pour Cent. nous allons nous consacrer au processeur vidéo, soit le 6845. Youpi !!! Il va y avoir des scrollings dans tous les sens, des mélanges de modes, des trucs et des machins partout bref, de quoi s'éclater comme des bêtes. Alors, d'ici là. amusez-vous bien et écrivez-nous si vous avez cinq minutes. Nous sommes là pour vous écouter et nous amuser aussi. Bye !!!

Sined m'était compté , 100% n°3 p38-39

Page précédente : Bidouilles ACPC n 04 - Le PSG (1/2)

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

Lien(s):
» Coding » Assembleur ACPC n°10: ADES un assembleur d'enfer
» Coding » Bidouilles ACPC n 04 - Le PSG (1/2)
» Coding » Bidouilles ACPC n°31 - RSX
» Coding » Assembleur ACPC n°10 - Initiation : Les decalages
» Coding » Bidouilles ACPC n°41 - L'art de la compression
» Coding » Assembleur ACPC n°19 - Création d'RSX
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.73-desktop/c
Page créée en 091 millisecondes et consultée 2394 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.