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

6/4 - Programmation du circuit sonore en assembleurCoding Classeurs Weka
6/4 Programmation du circuit sonore en assembleur

Comme nous l'avons vu précédemment, AY3 possède 16 registres. Ils sont utilisés comme suit :

R0 à R5 Générateur de ton
R6 Générateur de bruit blanc
R7 Contrôle du mixage du bruit blanc et des 3 canaux
R8 à R10 Contrôle de l'amplitude des sons
R11 à R13 Contrôle du générateur d'enveloppe
R14 Port d'entrée/sortie

Voyons en détail l'utilisation de chaque registre.

R0 à R5

Définition de la fréquence du son à émettre.

La fréquence du canal A est décrite dans les registres RO et R1, la fréquence du canal B dans les registres R2 et R3, et la fréquence du canal C dans les registres R4 et R5.

Les registres R0, R2 et R4 représentent les poids faibles des sons à émettre sur 8 bits, et les registres R1, R3 et R5 les poids forts de ces sons sur les 4 bits de poids faibles :

R1R0
xxxx
Poids faible LSBPoids fort MSB

MSB = Most Significative Byte = Octet de poids fort.
LSB = Last Significative Byte = Octet de poids faible.
X = non utilisé

En BASIC, nous pouvons calculer LSB et MSB de la façon suivante : supposons que nous voulions émettre un son de fréquence 1000 Hz ; nous aurons :

Per = 10^6/(16 x 1000) = 62.5
MSB = Partie entière (Per/256) = Most significative byte (octet : le plus fort)
LSB = Partie entière (Per - MSB x 256) = Last significative byte (octet : le plus faible)

Les registres « pairs » R0/R1, R2/R3 et R4/R5 sont codés sur 12 bits (8 de LSB et 4 de MSB). Ils peuvent donc prendre des valeurs comprises entre 0 et 2^12 (soit entre 0 et 4096).
Les fréquences minimum et maximum seront donc :

On a Per = 10^6 / (16 x Freq), d'où Freq = 10^6 / (16 x Per)
Freq max = 10^6 / (16 x 1) = 62 500 Hz
Freq min = 10^6 / (16 x 4096) = 15.26 Hz

R6

Programmation du générateur de bruit blanc.

Seuls les cinq bits de poids faibles sont utilisés.

La période du bruit blanc généré est donnée par la même formule que pour la génération de sons :

Freq = 10^6 / (16 x Per)

La « période » du bruit blanc n'a pas de grande signification, puisqu'un bruit blanc est avant tout une succession de fréquences quelconques. Il définit cependant la période moyenne autour de laquelle sera généré le bruit blanc. Par abus de langage, on parlera de la période du bruit blanc généré.

R7

Ce registre permet de mixer le bruit blanc et les trois canaux sonores A, B et C.

Il a la structure suivante :

XPANCNBNASCSBSA

SA, SB et SC valident les canaux A, B ou C. 0 indique que le canal est dévalidé, 1 qu'il est validé.

NA, NB et NC valident l'émission de bruit blanc sur les canaux A, B ou C. 0 indique que le bruit blanc est dévalidé et 1 qu'il est validé.

PA S'il vaut 0, le port A est défini en entrée.

S'il vaut 1, le port A est défini en sortie.

R8 à R10

Définissent l'amplitude du signal sonore sur les canaux A, B et C. R8 pour le canal A, R9 pour le canal B et R10 pour le canal C. Les bits de ces registres sont codés de la façon suivante :

XXXMA3A2A1A0

A0 à A3 donnent l'amplitude codée entre 0 et 15. 0 représente le volume le plus faible, 15 le volume le plus fort.

M donne le mode de fonctionnement du contrôleur d'amplitude. Si M vaut 0, l'amplitude est fixe. Si M vaut 1, l'amplitude est contrôlée par le générateur d'enveloppe.

R11 et R12

Définissent le contrôle du générateur d'enveloppe.

Comme nous l'avons vu plus haut, l'enveloppe est un signal qui module le volume d'un son issu du générateur de ton.

Si F est la fréquence de l'enveloppe, la période d'enveloppe sera égale à :

P = 10*6 / (256 x F)
Elle est codée sur 16 bits. R11 est le registre de poids faible, R12 le registre de poids fort. Comme P peut varier de 0 à 2A16 (de 0 à 65535), les fréquences minimale et maximale de l'enveloppe seront :
F min = 10A6 / (256 x 65535) = 0.059 Hz
F max = 10A6 / (256 x 1) = 3906.25 Hz

R13

Ce registre permet de contrôler la forme de la modulation : Seuls les quatre bits de poids faible de R13 sont utilisés de la manière suivante :

XXXXC0ATALHO

ACO = COntinue
AT = ATtack
AL = ALternate
HO = HOld

Ils ont la signification suivante :

COATALHO
00XX
01XX
1000
1001
1010
1011
1100
1101
1110
1111

Pour que R13 soit pris en compte par le AY3, il faut que le bit MODE (bit 4) des registres de contrôle d'amplitude (R8 à RIO) soit à 1.

R14

C'est par le port A de l'interface parallèle 8255 que va être programmé le AY3. Ce port est accessible par l'intermédiaire du registre R14 du AY3.

La programmation d'un registre du AY3 se déroule comme suit :

1°) Adresse du registre à accéder.

2°) Bits 6 et 7 du registre C à 11.

3°) Valeur à charger/chargée dans le registre du AY3.

4°) Bits 6 et 7 du registre C à 10.

Toutes les opérations sont réalisées par la routine du firmware implantée en # BD34.

Pour utiliser cette routine, il faut positionner les registres A et C comme suit :

— le registre A doit contenir le numéro du registre à charger ;
— le registre C doit contenir la donnée à charger.

Exemple :

Pour définir le volume du canal B à 13, il faudra faire :

a) En assembleur :

LD A,1 ;Volume du canal B dans le registre 1
LD C,13 ;Volume = 13
CALL #BD34 programmation

b) En BASIC :

1000 FOR l = 0 TO 7
1010 READ A : POKE l + &9000,A 1020 NEXT I
1030 DATA &3E, 1, &0E, 13, &CD, &34, &BD, &C9
1040 CALL &9000

Reportez-vous au chapitre sur les banques ROM (voir Partie 4 chap. 2.7) pour avoir plus de détails.


Page précédente : 6/3.1 - Exemples d'utilisation du générateur sonore en Basic (29e Complément)
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 434 millisecondes et consultée 681 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.