LE VIRTUAL TO2026 / EXTENSIONS / EXT 26-102
Le générateur de son.
Le module EXT 26-102 porte la puce TS-26 : quatre voix dans l’esprit du SID du Commodore 64, un filtre résonant et un canal d’échantillons. Le son est calculé à l’échantillon près dans le navigateur, sans saccade quand l’image ralentit.
- Référence
- TO2026 · EXT 26-102
- Module
- Générateur de son
- Puce
- TS-26
- Port
- port d’extension EXT 26-112, sur le côté de l’écran
- Mise en place
- cocher le module dans EXTENSIONS, sur la page Explorer la machine
- VOIX4 + 1
quatre oscillateurs et un canal d’échantillons
- FRÉQUENCE0,0596 Hz
le pas d’un oscillateur : 1 MHz / 2^24, comme le SID
- FILTRE11 + 4 bits
coupure sur 11 bits, résonance sur 4, trois modes combinables
- REGISTRES&HA600
64 octets dans la carte mémoire
01 / CE QU’IL FAIT
Un synthétiseur à quatre voix.
Chaque voix est un oscillateur qui produit une forme d’onde : triangle (doux), dent de scie (cuivré), impulsion à rapport cyclique réglable (de creux à nasal) ou bruit (percussions, explosions). Une enveloppe ADSR règle son volume dans le temps : attaque, déclin, niveau de maintien, relâchement. Deux voix peuvent se synchroniser ou se moduler en anneau, pour des timbres métalliques.
Les voix choisies passent dans un filtre passe-bas, passe-bande ou passe-haut, à résonance réglable. Un cinquième canal joue des échantillons de 8 bits rangés en mémoire, à la cadence choisie. PLAY et BEEP, hérités du MO6, jouent sur la voix 1 ; les instructions du BASIC 2026 donnent accès à tout le reste.
02 / LES REGISTRES
64 octets à partir de &HA600.
La voix n (de 0 à 3) occupe 8 octets à partir de &HA600 + 8 × n. La fréquence en hertz vaut le registre FREQ multiplié par 0,0596 : pour un la à 440 Hz, FREQ = 440 / 0,0596 = 7382, soit &H1CD6.
| DÉCALAGE | REGISTRE | RÔLE |
|---|---|---|
| +0, +1 | FREQ | fréquence, octet bas puis haut |
| +2, +3 | PW | largeur d’impulsion sur 12 bits : rapport cyclique PW / 4096 |
| +4 | CONTRÔLE | b0 porte, b1 synchro, b2 anneau, b3 test, b4 triangle, b5 dent de scie, b6 impulsion, b7 bruit |
| +5 | AD | attaque (4 bits hauts), déclin (4 bits bas) |
| +6 | SR | maintien (4 bits hauts), relâchement (4 bits bas) |
| +32, +33 | FC | coupure du filtre sur 11 bits (3 bits bas, puis 8 bits hauts) |
| +34 | RES | résonance (4 bits hauts), voix filtrées (bits 0 à 3) |
| +35 | MODE | b4 passe-bas, b5 passe-bande, b6 passe-haut, b7 voix 4 coupée ; volume général (4 bits bas) |
| +36 – +42 | ÉCHANTILLONS | adresse (2 octets), longueur (2 octets), cadence × 100 Hz, contrôle (b0 lecture, b1 boucle), volume |
| +44, +45 | LECTURE | sortie de l’oscillateur 4 et enveloppe de la voix 4, sur 8 bits : de quoi tirer des nombres au hasard ou suivre un son |
03 / EN BASIC
Les instructions du BASIC 2026.
| INSTRUCTION | EFFET |
|---|---|
VOICE v, forme$ [, largeur] | forme d’onde de la voix 1 à 4 : "tri", "saw", "pulse", "noise", avec "+ring" ou "+sync" |
ENVELOPE v, a, d, s, r | enveloppe de volume, chaque valeur de 0 à 15 |
NOTE v, fréquence [, durée] | joue une fréquence en hertz, relâchée après la durée en ms ; NOTE v OFF la coupe |
FILTER coupure, résonance, mode$ [, voix] | filtre "lp", "bp", "hp" ou "off" ; voix = somme de 1, 2, 4, 8 |
VOLUME n | volume général, de 0 à 15 |
PLAY partition$ | mélodie à la manière du MO6, en tâche de fond ; PLAYING, WAIT PLAY |
BEEP | un bip bref |
Une dent de scie grave dont le filtre s’ouvre peu à peu : le son typique des synthétiseurs.
voice 1, "saw" : envelope 1, 0, 0, 15, 2 note 1, 110 for fc = 100 to 1500 step 40 filter fc, 12, "lp", 1 wait vbl next note 1 off print "balayage du filtre fini"
balayage du filtre fini
PLAY rend la main tout de suite ; WAIT PLAY attend la fin de la mélodie.
play "T5 O4 L12 DO RE MI FA L24 SO" print "en cours :"; playing wait play print "fini :"; playing
en cours :-1 fini : 0
04 / À LA MAIN
PEEK et POKE, comme en 1986.
Les registres répondent à POKE depuis les deux BASIC : un programme du BASIC 128 peut jouer sur le TS-26 sans aucune instruction nouvelle. Ici, un la à 440 Hz en triangle sur la voix 1 : fréquence, enveloppe, puis la porte qui déclenche la note, et qui la relâche quand on la ferme.
&H11 = triangle + porte ouverte ; &H10 = triangle, porte fermée : la note entre dans son relâchement.
poke &HA600, &HD6 : poke &HA601, &H1C poke &HA605, &H09 : poke &HA606, &HF0 poke &HA604, &H11 sleep 0.5 poke &HA604, &H10 print "controle :"; peek(&HA604); " volume :"; peek(&HA623) and 15
controle : 16 volume : 15