Principe du son 1‑bit
Le beeper du ZX Spectrum ne peut être que on ou off. En modulant la durée de chaque état, on crée une forme d’onde numérique. Deux approches sont décrites : la modulation par code d’échantillon (PCM) qui envoie une suite de bits représentant l’amplitude, et la modulation de largeur d’impulsion (PWM) qui ajuste la largeur du pulse à chaque période. Le PCM utilise un nombre fixe de bits par échantillon, alors que le PWM encode l’amplitude dans la durée du pulse, offrant théoriquement une résolution supérieure malgré le même support matériel.
Implémentation PCM sur le ZX Spectrum
Le processeur Z80 du modèle 48 K fonctionne à 3,5 MHz, soit environ 1 MHz d’accès mémoire. En divisant cette fréquence par le taux d’échantillonnage visé de 16 kHz, on obtient 219 cycles disponibles entre deux sorties du port $FE. L’auteur regroupe huit bits dans un octet, ce qui réduit la charge mémoire à 2 KB/s. Cette consommation reste marginale pour une machine de 48 KB, mais la distorsion inhérente au 1‑bit PCM apparaît rapidement, car chaque transition représente un saut complet de tension.
pcmout: di
.lp: ; jouer 8 échantillons d'un octet
out ($fe),a ; +11 cycles, total 219
; ajuster le compteur d'octets et bouclerLe code montre que la routine ne fait que désactiver les interruptions, sortir le bit courant, puis gérer les compteurs. Aucun traitement de filtrage n’est ajouté, ce qui explique la qualité sonore brute.
Gestion du timing sur le Z80
Le Z80 possède des T‑states dont la durée varie selon l’instruction. Un NOP consomme 4 cycles, INC HL 6 cycles, LD A,n 7 cycles, et un JP 10 cycles même conditionnel. Pour les boucles longues, la combinaison LD B,n ; DJNZ LBL génère 13 n + 2 cycles, permettant d’ajuster précisément les intervalles de 219 cycles. L’auteur utilise ces règles empiriques pour construire des délais « cycle‑exactes », indispensables à la synchronisation du beeper avec le taux d’échantillonnage.
Limites et perspectives
Le principal obstacle reste la distorsion du 1‑bit PCM, qui se manifeste comme un bruit de saturation lorsqu’on pousse le volume. Le PWM, bien que théoriquement plus fin, nécessite un contrôle temporel au niveau de quelques dizaines de microsecondes, ce qui dépasse les capacités de comptage manuel du Z80 sans matériel dédié. L’échec de la mise en œuvre PWM sur le Spectrum indique que, sans timer matériel, le gain de qualité reste limité. Néanmoins, la démonstration de chords multicanaux montre que le beeper peut gérer plusieurs flux simultanés en alternant les bits, ouvrant la voie à des compositions simples sans carte son additionnelle.