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.

TO2026 · EXT 26-102SON4 voix · filtreCouper l’alimentationavant la mise en place.TS-26
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ÉCALAGEREGISTRERÔLE
+0, +1FREQfréquence, octet bas puis haut
+2, +3PWlargeur d’impulsion sur 12 bits : rapport cyclique PW / 4096
+4CONTRÔLEb0 porte, b1 synchro, b2 anneau, b3 test, b4 triangle, b5 dent de scie, b6 impulsion, b7 bruit
+5ADattaque (4 bits hauts), déclin (4 bits bas)
+6SRmaintien (4 bits hauts), relâchement (4 bits bas)
+32, +33FCcoupure du filtre sur 11 bits (3 bits bas, puis 8 bits hauts)
+34RESrésonance (4 bits hauts), voix filtrées (bits 0 à 3)
+35MODEb4 passe-bas, b5 passe-bande, b6 passe-haut, b7 voix 4 coupée ; volume général (4 bits bas)
+36 – +42ÉCHANTILLONSadresse (2 octets), longueur (2 octets), cadence × 100 Hz, contrôle (b0 lecture, b1 boucle), volume
+44, +45LECTUREsortie 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.

INSTRUCTIONEFFET
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, renveloppe 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 nvolume général, de 0 à 15
PLAY partition$mélodie à la manière du MO6, en tâche de fond ; PLAYING, WAIT PLAY
BEEPun bip bref

Une dent de scie grave dont le filtre s’ouvre peu à peu : le son typique des synthétiseurs.

PROGRAMME
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"
À L’ÉCRAN
balayage du filtre fini

PLAY rend la main tout de suite ; WAIT PLAY attend la fin de la mélodie.

PROGRAMME
play "T5 O4 L12 DO RE MI FA L24 SO"
print "en cours :"; playing
wait play
print "fini :"; playing
À L’ÉCRAN
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.

PROGRAMME
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
À L’ÉCRAN
controle : 16  volume : 15