Ingeniería inversa y optimización extrema llevan Doom a una cámara infantil
El ingeniero Andrew Spode ha completado un proyecto que culmina en la ejecución del clásico videojuego Doom en una cámara digital infantil X9S. La iniciativa, detallada en hackster.io, comenzó con la curiosidad de Spode por el firmware de la cámara de su hija, un dispositivo con un procesador indocumentado y una cantidad mínima de memoria.
La cámara está equipada con un sistema en chip (SoC) HX3302B y un chip de memoria flash de 4 MB. Tras un proceso de ingeniería inversa del firmware, que incluyó la extracción con un programador XGecu T48 y el análisis con Ghidra y asistencia de Claude, Spode desarrolló un kit de desarrollo de software (SDK), modificó un compilador y creó un emulador específico para el hardware.
Las especificaciones técnicas iniciales revelaron un procesador capaz de ejecutar aproximadamente 120 millones de instrucciones por segundo y 2 MB de RAM total, de los cuales solo 891 KB estaban disponibles para aplicaciones personalizadas. La pantalla del dispositivo ofrecía una resolución de 320×240 píxeles con 256 colores. Ante estos recursos limitados, especialmente la memoria —el Doom original requería 4 MB de RAM—, la gestión de la memoria se convirtió en el principal desafío.
Spode abordó esta limitación utilizando doomgeneric, una versión de Doom diseñada para la portabilidad. A través de la identificación de regiones de memoria no utilizadas, consiguió expandir el espacio disponible a 1.4 MB. Otras optimizaciones cruciales incluyeron la reducción de la fragmentación de la memoria y una mejora en la carga de los activos del juego desde la tarjeta SD. Un paso adicional fue dividir el código ejecutable del juego entre la RAM y la memoria flash, manteniendo las instrucciones más frecuentemente utilizadas en los 29 KB de RAM responsables del 99% del tiempo de ejecución.
El resultado es un port funcional que se ejecuta a aproximadamente 30 fotogramas por segundo, incluyendo efectos de sonido, música chiptune sintetizada de 16 voces y capacidad para guardar y cargar partidas. Los controles se adaptaron a los botones existentes de la cámara: los botones direccionales manejan el movimiento, el botón del obturador dispara y el botón de encendido permite cambiar de arma. La funcionalidad de abrir puertas se implementó haciendo que estas se abran al cargar el jugador contra ellas. La cámara conserva su operatividad original, y Spode planea reinstalar Doom una vez que su hija finalice el uso del dispositivo.
Fuente original: Hackster.io







