Basic HECTOR - Syntaxe de l'instruction SOUND

L'Hector de Micronique est équipé du synthétiseur SN76477 de Texas Instruments. Le Basic permet de commander ce synthétiseur grâce à l'instruction SOUND, disposant de deux paramètres non décrits par la documentation officielle. Nous donnons ici leur signification.

Auteur............: Daniel Coulom - Octobre 2009
Site internet...: DCHector, émulateur des ordinateurs Micronique.



Avertissement : Cette version du document date du 26 octobre 2009. Elle est provisoire et incomplète. Elle sera corrigée et améliorée en fonction des nouvelles découvertes.

Introduction

Il n'y a pas de règle pratique permettant de déterminer, à priori, la valeur des paramètres produisant un effet sonore recherché. Il faut donc partir à la pêche et le nombre de combinaisons étant particulièrement élevé vous allez pouvoir entreprendre de fructueuses recherches (La pratique du BASIC 3X page 47).

Partons à la pêche ! Ce document a pour objectif de combler l'énorme lacune de la documentation et de permettre ainsi aux programmeurs de générer des sons.

Les tests ayant permis de retrouver les informations ont été effectués par yo_fr sur un Hector HRX. Sans son aide active rien n'aurait été possible. Nos discussions dans le forum system-cfg montrent la difficulté de la reconstitution du fonctionnement de l'instruction.

Vocabulaire


VCO = Voltage Controled Oscillator
NOISE = générateur de bruit blanc
SLF = Super Low Frequency oscillator
INHIBIT = suppression du son en sortie
ATTACK = attaque
DECAY = décroissance
A/D = contrôle de l'attaque et de la décroissance
ONE-SHOT = son émis pendant une durée limitée
VCO_SELECT = le VCO est piloté par le SLF
VCO_CONTROL = tension externe modifiant la fréquence du VCO
ENVELOPE_1 = premier filtre appliqué au bruit blanc
ENVELOPE_2 = deuxième filtre appliqué au bruit blanc

Se reporter à la datasheet du SN76477[1] pour plus de détails

Syntaxe


SOUND m, x

Paramètre m = commande du mixer

Le mixer est commandé par trois entrées du SN76477 :
- A (broche 26)
- B (broche 25)
- C (broche 27)

m est un nombre de 0 à 7

                       C  B  A
0: VCO                 0  0  0
1: NOISE               0  1  0
2: SLF & NOISE         1  0  0
3: SLF & VCO           1  1  0
4: SLF                 0  0  1
5: VCO & NOISE         0  1  1 
6: SLF & VCO & NOISE   1  0  1
7: INHIBIT             1  1  1

Paramètre x = autres réglages

x est un entier sur 16 bits. Les bits sont numérotés de b00 (poids faible) à b15 (poids fort).

b00: Resistance ATTACK      0x40 en 0x2000  Au08 --> broche 10 du SN76477
b01: Condensateur A/D       0x80 en 0x2000  Au00 --> broche 08
b02: Resistance SLF         0x40 en 0x2001  Au09 --> broche 20
b03: Condensateur SLF       0x80 en 0x2001  Au01 --> broche 21
b04: Resistance VCO         0x40 en 0x2002  Au10 --> broche 18
b05: Condensateur VCO       0x80 en 0X2002  Au02 --> broche 17
b06: Resistance DECAY       0x40 en 0x2003  AU11 --> broche 07
b07: Condensateur NOISE     0x80 en 0x2003  Au03 --> broche 06
b08: VCO_SELECT             0x40 en 0x2800  Au12 --> broche 22
b09: Resistance NOISE       0x80 en 0x2800  Au04 --> broche 05
b10: Condensateur ONE-SHOT  0x40 en 0x2801  Au13 --> broche 23
b11: AMPLITUDE              0x80 en 0x2801  Au05 --> broche 11
b12: INHIBIT                0x40 en 0x2802  Au14 --> broche 09
b13: ENVELOPE_1             0x80 en 0x2802  Au06 --> broche 01
b14: VCO_CONTROL            0x40 en 0x2803  Au15 --> broche 16
b15: ENVELOPE_2             0x80 en 0x2803  Au07 --> broche 28

Remarque : Le schéma de l'Hector HRX est faux, de même que le tableau page 7 de l'Hectorien numéro 2. En revanche le schéma du Victor 16K est juste. Au09 contrôle la broche 20 (pas la 07), Au10 contrôle la broche 18 (pas la 20), Au11 contrôle la broche 07 (pas la 18).

Annexe 1 : Désassemblage de l'instruction Basic SOUND

Extrait de la banque 1 de la rom de l'Hector HR MX 40 colonnes.
(Le contenu de la rom a été extrait par Fabien N.)

----------------------------------
Execution de l'instruction SOUND
L  = commande du mixer
DE = autres reglages
----------------------------------
0C68  C5        PUSH    BC
0C69  7D        LD      A,L          stocker parametres mixer dans A
0C6A  E607      AND     07H          garder les 3 bits de poids faible
0C6C  4F        LD      C,A          stocker parametres mixer dans C
0C6D  3E40      LD      A,40H        40H en 2802 = set Au14        
0C6F  320228    LD      (2802H),A    INHIBIT = 1
0C72  AF        XOR     A            00H en 2801 = clear Au5 et Au13
0C73  320128    LD      (2801H),A    ONE-SHOT = AMPLITUDE = 0     
0C76  2192FE    LD      HL,FE92H     adresse de stockage parametres mixer
0C79  79        LD      A,C          parametre mixer
0C7A  AE        XOR     (HL)
0C7B  E607      AND     07H          
0C7D  AE        XOR     (HL)
0C7E  77        LD      (HL),A       stockage parametre mixer en FE92H
0C7F  320030    LD      (3000H),A    envoi parametre mixer
0C82  210320    LD      HL,2003H     adresse d'envoi des bits 6 et 7
0C85  7B        LD      A,E          autres parametres bits 0-7
0C86  CD8E0C    CALL    0C8EH        envoi des 8 bits
0C89  210328    LD      HL,2803H     adresse d'envoi des bits 14 et 15
0C8C  7A        LD      A,D          autres parametres bits 8-15
0C8D  C1        POP     BC

-----------------------------------
Envoi parametres de SOUND (8 bits)
-----------------------------------
0C8E  77        LD      (HL),A <--   envoi des deux bits de gauche
0C8F  87        ADD     A         |  *2 = decalage gauche de 1 bit
0C90  87        ADD     A         |  *2 = decalage gauche de 1 bit
0C91  2D        DEC     L         |  decremente l'adresse de destination
0C92  F28E0C    JP      P,0C8EH --   boucle jusqu'a 2800 ou 2000
0C95  C9        RET     

Annexe 2 : SLF


Résistances (Ohm):
R0= 180 x 103 et 47 x 103 en parallèle = 37.2687 x 103
R1= 180 x 103

Condensateurs (Farad)
C0= 0.1 x 10-6
C1= 0.1 x 10-6 et 1 x 10-6 en parallèle = 1.1 x 10-6

Fréquence théorique (Hertz)
F = 0.64 / R / C

Comparaison théorie / mesure
L'écart est difficile à expliquer. Toute suggestion sera bienvenue.
DCHector utilise la valeur mesurée.

Frequence theorique  mesuree (Hz)
R0-C0:      171.73    255.0
R1-C0:       35.56     65.0
R0-C1:       16.61     17.0
R1-C1:        3.23      4.3

Annexe 3 : VCO


Résistances (Ohm):
R0= 1000 x 103 et 220 x 103 en parallèle = 180.33 x 103
R1= 1000 x 103

Condensateurs (Farad)
C0= 0.047 x 10-6
C1= 0.047 x 10-6 et 0.47 x 10-6 en parallèle = 0.517 x 10-6

Fréquence de base théorique (Hertz)
F = 0.64 / R / C

Tension VCO_Control (Volt):
Connexion à la masse par une résistance de 10 kOhm
Connexion au signal de contrôle par une résistance de 15 kOhm
V0= 3.75 * 10 / 25 = 1.5
V1= 0
La fréquence du VCO est multipliée approximativement par 10 pour 2.35 V. Avec 1.5 V le facteur multiplicateur estimé est 10 * 1.5 / 2.35 = 6.4

Comparaison théorie / mesure
L'incohérence des résultats est encore inexpliquée.
DCHector utilise la valeur mesurée.

Frequence theorique  mesuree (Hz)
V0-R0-C0:   483.26     5500  
V0-R1-C0:    87.17     1300
V0-R0-C1:    43.93      580
V0-R1-C1:     7.92      132
V1-R0-C0:    75.51     
V1-R1-C0:    13.62
V1-R0-C1:     6.86 
V1-R1-C1:     1.24   


Biliographie

[1] TYPE SN76477 COMPLEX SOUND GENERATOR, Texas Instruments, Bulletin DL-S 12612, July 1978

Cet ouvrage est consultable en ligne sur le site dchector à la page Documentation