Collanews

🔒
☐ ☆ ✇ Le journal du lapin

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

Par Pierre Dandumont — 17 décembre 2019 à 07:00

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 90, 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 beep. 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 90. 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)…

☐ ☆ ✇ Le journal du lapin

Choisir une carte CardBus pour un PowerBook, et les limites de l’USB 2.0

Par Pierre Dandumont — 11 novembre 2019 à 07:00

Récemment, j’ai eu une question par mail au sujet d’un de mes PowerBook Wallstreet. En effet, j’utilise une carte CardBus avec deux ports USB (1.1) et la personne me demandait si installer une carte USB 2.0 était possible. La réponse n’est pas évidente : oui… et non.

Commençons par la réponse oui. Sous Mac OS X, avec un Jaguar à jour (10.2.8), les cartes qui contiennent une puce Opti ou une puce NEC devraient fonctionner nativement. La première fonctionne en USB 1.1, la seconde généralement en USB 2.0. Les cartes Via fonctionnent mal et demandent dans le meilleur des cas un pilote, donc c’est à éviter. Sous Mac OS X, les cartes USB 2.0 fonctionnent bien en USB 2.0. Une carte comme celle-ci, qui ne dépasse pas du connecteur, fonctionne a priori (ma carte n’est pas exactement ce modèle là).

Une carte USB 1.1


Une carte USB 2.0 (chipset NEC)


Une carte Cardbus vers ExpressCard avec un lecteur de cartes

Maintenant, la réponse non. Sous Mac OS 9, les cartes ne fonctionnent pas en USB 2.0. L’OS ne supporte pas la norme et quelle que soit la carte, vous allez rester bloqué en USB 1.1 (12 Mb/s, donc en gros des débits pratiques de l’ordre de 1 à 1,5 Mo/s quand tout va bien). Sur un Wallstreet (et plus généralement sur les Mac qui n’ont pas d’USB nativement), vous allez devoir installer les pilotes USB, qui sont disponibles sur le site d’Apple. Une fois la mise à jour « USB Adapter Card Support 1.4.1 » installée, les cartes USB devraient fonctionner.

Mac OS 9 voit la clé USB


La carte prend un logo USB sur le bureau

Dans mon cas, j’ai testé avec une carte à base d’Opti (donc USB 1.1), une carte à base de NEC en USB 2.0 et un adaptateur CardBus vers ExpressCard qui contient une puce NEC. Il permet d’utiliser un lecteur de cartes ou une carte mémoire en ExpresCard, pour peu que la carte utilise la partie USB de l’ExpressCard.

Donc pour résumer : l’USB 2.0 ne fonctionne pas sous Mac OS 9, mais il fonctionne sous Mac OS X. Et dans les deux cas, je vous recommande une carte à base de NEC.

Et à la question « Comment déterminer la puce utilisée ? », je ne peux pas réellement répondre. Sur une carte PCI, la solution la plus simple consiste à regarder. Sur une CardBus, il faut croire le vendeur s’il l’indique, ou tester. Techniquement, on peut aussi récupérer les identifiants une fois la carte en main, mais c’est un peu inutile : si vous avez la carte, vous savez forcément si elle fonctionne… ou pas.

❌