Les sons cachés de Wolfenstein 3D avec le PC Speaker

En lisant le site de Fabien Sanglard (spécifiquement le Black Book sur Wolfenstein 3D), je suis tombé sur un truc intéressant : le jeu proposait un mode audio caché avec des sons de meilleure qualité sur le haut-parleur système (PC Speaker).

J’en parle un peu par nostalgie : j’ai découvert Wolfenstein 3D sur une machine sans carte son, avec les bruits du haut-parleur système. Par défaut, il propose différents types de périphériques audio, avec différents types de son. Le jeu date du début des années nonante, avant la standardisation des API, donc il y a plusieurs implémentations.

Premièrement, du PCM, avec du 8 bits à 7 000 Hz en mono. Ca fonctionne sur les premières Sound Blaster et sur le Disney Sound Source, une carte son externe en bus parallèle. Pour schématiser, à l’époque, il fallait interrompre le code principal, envoyer les données audio au périphérique audio, et revenir au code principal. Dans le premier cas, avec la Sound Blaster, la charge sur le processeur est faible, la carte son dispose de fonctions DMA (Direct Memory Access) qui permettent de transférer les données en arrière-plan et le code audio fonctionne à 140 Hz. Donc 140 fois par seconde, le jeu s’occupe du son. Avec la carte Disney Sound Source, le code envoie environ 10 octets à chaque itération, donc il fonctionne à 700 Hz. La carte externe dispose en effet d’un tampon de 16 octets qui doit être alimenté en permanence pour obtenir du son. Assez logiquement, le processeur a plus de travail.

Les options

Maintenant, parlons du haut-parleur. Techniquement, il ne fonctionne qu’avec des ondes carrées, mais on peut jouer sur la fréquence pour obtenir… un peu mieux que de simples bips. Dans ce mode, le code audio fonctionne à 140 Hz (donc 140 interruptions par seconde). C’est assez moche, mais c’est mieux que rien.

Maintenant, la partie intéressante : le PCM sur le haut-parleur. Ce mode caché, reprend les effets sonores 8 bits / 7 000 Hz, mais comme le haut-parleur n’est pas réellement un DAC, on est sur du 1 bit. Le code transforme donc le 8 bits en 1 bit, ce qui donne un résultat… pas si mauvais. Mais il a un défaut, ce qui explique que le jeu ne le propose pas : il n’y a pas de tampon, donc le code audio doit être appelé 7 000 fois par seconde. Et sur les CPU de l’époque, c’était visiblement trop. Pour rappel, la norme était plutôt un 286 à 12 MHz qu’un 486 à 66 MHz. Dixit le Black Book, la fonction a été cachée parce qu’elle cause des saccades sur les petites machines.

L’activation et le test

Pour l’activer, il faut modifier manuellement le fichier de configuration, en passant la valeur de l’offset 0x01D2 à 01. Si vous n’avez pas compris, vous n’avez jamais modifié de sauvegardes avec un éditeur hexadécimal dans les années nonante. Plus sérieusement, une personne propose les fichiers modifiés là. Il y a une vieille vidéo qui montre le résultat, mais j’ai essayé de faire quelque chose de mieux.

A la base, je voulais tester sur un vrai PC, mais je me suis retrouvé devant un problème : mon seul PC rétro n’a pas de boîtier et donc pas de haut-parleur PC. J’ai donc d’abord testé dans DOSBox avec Boxer (attention, ça ne fonctionne pas sous Catalina). Une fois le jeu intégré, ça fonctionne assez bien. Je comptais vous faire une vidéo direct, mais j’avais la flemme d’installer les outils pour enregistrer la sortie son interne.

Ensuite, j’ai essayé sur une machine sur laquelle je pouvais capturer l’audio directement : un Power Mac avec une carte DOS. En effet, la carte DOS redirige les effets du haut-parleur PC directement sur la partie audio du Mac. Ce n’est pas exactement ce que ça donne avec un vrai haut-parleur de PC, mais c’est déjà assez représentatif du gain. Là, j’ai juste fait une capture en direct de la sortie casque de la machine. Pour l’entendre, c’est à partir de 1 minute et 48 secondes.

Comme vous pouvez l’entendre, c’est nettement meilleur et on peut même presque comprendre l’allemand des nazis. Sur la carte avec un 486 à 66 MHz, ça ne change pas réellement la fluidité du jeux. Avec Boxer, en limitant les performances manuellement, ça semble un peu plus saccadé quand on descend sur des paramètres très bas (équivalent à un 286), mais c’est peut-être tout à fait subjectif. Et en testant, je suis revenu 30 ans en arrière (ou presque)…