- Un proyecto que porta el clásico juego de 1993 DOOM para ejecutarlo en los earbuds inalámbricos PineBuds Pro, con juego remoto disponible vía web
- Está compuesto por cuatro elementos: un servidor serial, un servidor web, una página web estática y el port de DOOM que conecta los earbuds con el servidor web
- Mediante una conexión UART se asegura un ancho de banda de unos 2.4 Mbps, y el video se transmite como stream MJPEG, logrando un rendimiento teórico de hasta 27 FPS
- Se hizo overclock del CPU de 100 MHz a 300 MHz y, debido a los límites de la codificación JPEG, se obtuvo un rendimiento real de alrededor de 18 FPS
- Las restricciones de RAM y FLASH se resolvieron con optimizaciones y con el archivo Squashware WAD liviano, mostrando el potencial de los experimentos de hardware basados en firmware open source
Resumen del proyecto
- Se porteó DOOM, lanzado en 1993, para ejecutarlo en los earbuds PineBuds Pro
- Se menciona que los PineBuds Pro son los únicos earbuds inalámbricos compatibles con firmware open source
- Los visitantes del sitio web pueden entrar a una cola y jugar de forma remota
- El proyecto se compone de cuatro partes
- El port de DOOM que corre en los earbuds
- Un servidor serial que conecta los earbuds con el servidor web y convierte el stream MJPEG a Twitch
- Un servidor web encargado de servir los recursos, gestionar la cola, enviar entradas de teclado y mostrar el stream
- Una página web estática encargada de la visualización en el navegador y de la comunicación con el servidor
Hardware y estructura de conexión
- Los earbuds no tienen pantalla, así que envían y reciben datos por Bluetooth o por pads de contacto UART
- Bluetooth es más lento, con alrededor de 1 Mbps, por lo que UART (2.4 Mbps) resulta más adecuado
- El framebuffer de DOOM tiene una resolución de 320×200, color de 8 bits, y ocupa unos 96 KB
- Con el ancho de banda de UART, se podrían transmitir cerca de 3 FPS
- Para mejorar esto, se adoptó un esquema de stream MJPEG
- Como codificador JPEG se usó bitbank2/JPEGENC
- El tamaño promedio de cada cuadro JPEG es de 11~13.5 KB
- En teoría, el FPS máximo ronda los 22~27 FPS
Ajuste del rendimiento del CPU
- El reloj del CPU en el firmware base es de 100 MHz, pero se elevó a 300 MHz y se desactivó el modo de bajo consumo
- Aunque el Cortex-M4F (300 MHz) es suficiente para ejecutar DOOM, el cuello de botella aparece en la codificación JPEG
- La tasa de cuadros real fue de alrededor de 18 FPS
Optimización de memoria (RAM)
- La RAM accesible por defecto es de 768 KB, y al desactivar el procesador auxiliar se obtienen 992 KB
- Como DOOM requiere 4 MB de RAM, se aplicaron varias optimizaciones
- Precomputación de tablas de búsqueda, almacenamiento de variables const en flash, desactivación del sistema de caché y eliminación de variables innecesarias, entre otras, para reducir el uso de memoria
Problema de capacidad de flash
- El archivo WAD base de DOOM 1 pesa 4.2 MB, superando el límite de 4 MB de almacenamiento de los earbuds
- El problema se resolvió usando la versión liviana Squashware WAD (1.7 MB) de fragglet
- Así, todos los recursos pudieron caber en la memoria flash
Open source y accesibilidad
- El código del proyecto está publicado en dos repositorios de GitHub
- DOOMBuds: port de DOOM para los earbuds
- DOOMBUDS-JS: soporte para la interacción entre el navegador y los earbuds
- El sitio web funciona con un sistema de cola, y a partir del quinto turno el stream de Twitch cambia a un stream MJPEG de baja latencia
5 comentarios
"Ejecuta DOOM"
Los maestros de hacer correr DOOM de verdad... son increíbles.
Wow, esto sí está... 😱😱😱😱😱
Dios mío.
Opiniones en Hacker News
Cada vez que veo que DOOM corre en algún dispositivo simple, me hace pensar si esto es una victoria del software o un fracaso económico por no haber podido fabricar hardware dedicado más barato
Los earbuds Bluetooth con ANC no son un producto simple, y la cancelación de ruido requiere realizar cálculos muy complejos de forma continua
Un MCU rápido no es solo desperdicio, también aporta ventajas en baja latencia y gestión eficiente de energía
En vez de hacer un ASIC perfecto, es mucho más realista tener una arquitectura actualizable con un MCU de propósito general
Al final, comprar MCU probados a gran escala es mucho más económico que fabricar un chip personalizado
El costo de mano de obra, pruebas, capacitación y producción en pequeños volúmenes para diseñar y fabricar un chip personalizado termina siendo más alto
Los costos de procesos de negocio pesan mucho más que el costo de materiales
Vivimos en un mundo donde DOOM corre en unos earbuds, no hay razón para verlo de forma negativa
Son especificaciones excesivas, pero igual impresiona que todo eso quepa dentro del oído
Yo porteé DOOM a los PineBuds Pro
Si accedes por internet, puedes jugar DOOM en mis earbuds
En mi sitio están los detalles y el enlace a GitHub
Siempre me da un poco de pena que siempre terminen porteando DOOM
Antes había muchos juegos simples pero adictivos, pero los juegos de hoy son demasiado grandes y complejos como para llevarlos a plataformas pequeñas
Siento que la industria, salvo por la escena indie, perdió el rumbo
Juegos como Master of Orion 1 eran simples, pero daban ganas de volver a jugarlos una y otra vez
Los juegos actuales parecen más videos, con poca interacción y centrados en grindear XP, así que me interesan menos
Ya se volvió toda una tradición
Ahora a la mayoría de los usuarios no les importa mucho el tamaño ni el rendimiento
Como los consumidores adoptaron la actitud de “mientras funcione”, el valor de la optimización se fue reduciendo
Aun así, en la escena indie todavía hay muchos juegos cortos y con estilo
Solo que, como los juegos cortos al estilo de una película difícilmente dejan una gran impresión, no suelen hacerse muy conocidos
La lista de ports de DOOM puede verse en la página de Wikipedia
Me parece un gran efecto publicitario para los PineBuds Pro
Me pregunto si los Fairbuds podrían hacer algo así
Pero si DOOM corre en tantos dispositivos, ¿por qué todavía no funciona fluidamente en un 386?
Me acordé de que John Carmack dijo en una entrevista después de DOOM 3 que, a medida que el motor se volvió más complejo, ya no podía escribir todo el código él solo
Me pregunto qué pensará ahora en esta era de la IA
Personalmente, creo que sería positivo respecto a la IA
Y “Masters of Doom” es un libro realmente bueno, lo recomiendo
Me pregunto si alguien aquí ha usado los PineBuds Pro
No había un canal relacionado en el IRC de Pine64, así que era difícil preguntar
No sé cómo sean la comodidad ni la calidad de sonido, pero en el canal de Discord de Pine64 hay una sala dedicada a Pinebuds
A propósito instalé un firmware sin ANC, pero como earbuds Bluetooth cumplen perfectamente su función
En unos años, si los earbuds tienen un poco más de RAM, quizá también puedan correr un clúster local de Kubernetes
Estoy esperando el post de “porteé DOOM al chip de un vape desechable” 😄
Si la ley de Moore sigue vigente, quizá sea posible en unos 10 años
El visor independiente conectado directamente a los earbuds también funciona en móvil
Ver video de demostración
No tiene controles táctiles, solo reproduce el loop de la intro