- Projet portant le jeu classique de 1993 DOOM sur les écouteurs sans fil PineBuds Pro, avec possibilité d’y jouer à distance via le web
- Composé de quatre éléments : un serveur série (serial server) reliant les écouteurs et le serveur web, un serveur web, une page web statique et le port de DOOM
- Grâce à une connexion UART, le projet obtient une bande passante d’environ 2,4 Mbps et transmet la vidéo via un flux MJPEG, pour une performance théorique allant jusqu’à 27 FPS
- Le CPU a été overclocké de 100 MHz à 300 MHz et, malgré les limites de l’encodage JPEG, les performances réelles atteignent environ 18 FPS
- Les contraintes de RAM et de FLASH ont été surmontées grâce à des optimisations et au fichier Squashware WAD allégé, montrant le potentiel des expérimentations matérielles basées sur un firmware open source
Aperçu du projet
- DOOM, sorti en 1993, a été porté pour fonctionner sur les écouteurs PineBuds Pro
- Les PineBuds Pro sont présentés comme les seuls écouteurs sans fil compatibles avec un firmware open source
- Les visiteurs du site peuvent s’inscrire dans une file d’attente pour jouer au jeu à distance
- Le projet se compose de quatre parties
- Un port de DOOM exécuté sur les écouteurs
- Un serveur série qui relie les écouteurs au serveur web et convertit le flux MJPEG en Twitch
- Un serveur web chargé de fournir les ressources, gérer la file d’attente, transmettre les entrées clavier et afficher le flux
- Une page web statique chargée de l’affichage dans le navigateur et de la communication avec le serveur
Matériel et architecture de connexion
- Les écouteurs n’ont pas d’écran ; les données sont donc transmises via Bluetooth ou via des pads de contact UART
- Le Bluetooth, limité à environ 1 Mbps, est plus lent, ce qui rend l’UART (2,4 Mbps) plus adapté
- Le framebuffer de DOOM a une résolution de 320×200 en couleur 8 bits, soit environ 96 KB
- Avec la bande passante de l’UART, cela permettrait de transmettre environ 3 FPS
- Pour améliorer cela, le projet adopte un flux MJPEG
- Utilisation de bitbank2/JPEGENC comme encodeur JPEG
- Taille moyenne des images JPEG : 11 à 13,5 KB
- La cadence théorique maximale atteint 22 à 27 FPS
Ajustement des performances CPU
- Le firmware de base cadence le CPU à 100 MHz, mais celui-ci a été monté à 300 MHz et le mode basse consommation désactivé
- Le Cortex-M4F (300 MHz) est suffisant pour exécuter DOOM, mais l’encodage JPEG devient le principal goulet d’étranglement
- La cadence réelle se situe autour de 18 FPS
Optimisation de la mémoire (RAM)
- La RAM accessible par défaut est de 768 KB, portée à 992 KB lorsque le processeur auxiliaire est désactivé
- DOOM nécessitant 4 MB de RAM, diverses optimisations ont été appliquées
- Pré-génération de tables de recherche, stockage des variables
const en flash, désactivation du système de cache, suppression de variables inutiles, etc., pour réduire l’empreinte mémoire
Problème de capacité de la mémoire flash
- Le fichier WAD standard de DOOM 1 pèse 4,2 MB, ce qui dépasse la limite de stockage de 4 MB des écouteurs
- Le problème a été résolu en utilisant la version allégée Squashware WAD (1,7 MB) de fragglet
- Toutes les ressources peuvent ainsi tenir dans la mémoire flash
Open source et accessibilité
- Le code du projet est publié dans deux dépôts GitHub
- DOOMBuds : port de DOOM pour écouteurs
- DOOMBUDS-JS : prise en charge de l’interaction entre le navigateur et les écouteurs
- Le site fonctionne avec une file d’attente et, à partir de la 5e position, le flux Twitch bascule vers un flux MJPEG à faible latence
Aucun commentaire pour le moment.