Doom fonctionne sur n’importe quoi, dit-on. Nous l’avons vu fonctionner sur un test de grossesse, un oscilloscope et un lecteur de livre électronique. Mais des images publiées par un codeur basé au Texas Graham Sanderson du FPS 2.5D démoniaque original fonctionnant sur le Raspberry Pi Pico prouve que notre micro-contrôleur préféré à 4 $ a le pouvoir de « déchirer et déchirer » à travers d’autres cartes.
Le code en question provient de Chocolate Doom, un port source historiquement précis du jeu. Le problème pour obtenir un jeu précis de Doom à partir d’un Pico, cependant, est le stockage. Avec 2 Mo de mémoire flash sur la carte, le fichier WAD de 4 Mo qui comprend les niveaux originaux du shareware Doom va devoir être considérablement compressé. Et wow, la rédaction de GitHub de Sanderson sur son projet entre dans les détails à ce sujet – c’est une bonne lecture si vous aimez les entiers à nombre d’octets variables et le codage Huffman. Ou même si vous ne l’êtes pas, car il y a aussi beaucoup de détails sur le fonctionnement de Doom.
Sa technique de compression s’appelle WHD, pour ‘Where’s Half the Data?’, et parvient à écraser le fichier WAD de 57%, réencodant l’audio en cours de route. L’exécutable résultant tient dans les 256 Ko de RAM du Pico avec 34 Ko de réserve, ce qui permet six emplacements de sauvegarde.
La sortie graphique du jeu est en VGA, pour cette sensation des années 90, à une résolution de 1280 x 1024, un multiple de la résolution d’origine que les téléviseurs modernes sont plus susceptibles de prendre en charge. Heureusement, ce type de doublage de pixels peut être effectué facilement par la bibliothèque pico_scanvideo, en laissant les valeurs de pixel sur les broches plus longtemps pour obtenir une mise à l’échelle horizontale, et en répétant les valeurs sur plusieurs lignes de balayage pour une mise à l’échelle verticale.
Et tandis que le processeur double cœur du Pico est occupé à rendre le jeu, les broches GPIO sont utilisées pour connecter jusqu’à quatre joueurs en multijoueur. Il y a beaucoup plus de détails dans l’écriture du projet par Sanderson, couvrant des sujets tels que l’affichage de texte et les parties de l’écran qui ne sont pas rendues en 3D, ainsi que l’écran de fin distinctif du jeu et ses choix quant à savoir si ou non d’implémenter un frame buffer.
Sanderson note qu’une version 8 Mo du Pico (Pimoroni’s Tiny 2040 et Adafruit’s Feather RP2040 par exemple) pourrait également exécuter Doom II et Ultimate Doom, si vous n’en avez pas assez des démons des années 90. Il y a plus de vidéos sur la chaîne YouTube de Sanderson, qui valent la peine d’être visionnées.