Ingeniero Hace Doom Correr en Software de Design de Placas Electrónicas: El Arte del Easter Egg
Hola HaWkers, un ingeniero consiguió lo aparentemente imposible: hacer el clásico juego Doom correr dentro de un software de design de placas electrónicas (PCB). Esta hazaña se suma a la larga tradición de "Doom corre en cualquier cosa" y demuestra la creatividad y habilidad técnica que existe en la comunidad de desarrolladores.
¿Ya te preguntaste qué lleva a programadores a invertir tiempo en proyectos aparentemente inútiles, pero técnicamente brillantes?
La Hazaña Técnica
El ingeniero utilizó las capacidades de scripting y renderización de un software de design de PCB para crear un ambiente donde Doom pudiera ser ejecutado.
Cómo Fue Posible
Explorando Capacidades Ocultas:
Softwares de design de PCB modernos son sorprendentemente poderosos:
- Engine de Renderización 3D: Para visualizar placas en 3D
- Lenguaje de Script: Para automatización (generalmente Python)
- APIs Internas: Acceso a funciones de dibujo
- Procesamiento: CPUs modernas son poderosas
Pasos del Hack:
- Identificar API de renderización disponible
- Mapear controles de input para el software
- Portar el engine de Doom para usar esa API
- Optimizar para correr en tiempo real
- Integrar todo en un plugin/script
Contexto: Doom fue lanzado en 1993 y su código-fuente fue liberado en 1997, permitiendo ports para prácticamente cualquier plataforma.
Requisitos Técnicos
Lo Que Doom Precisa:
| Componente | Requisito | Disponible en PCB Software |
|---|---|---|
| CPU | 386/486 equivalente | ✅ Cualquier CPU moderna |
| RAM | 4-8 MB | ✅ Abundante |
| Video | 320x200, 256 colores | ✅ Vía API de renderización |
| Input | Teclado, mouse | ✅ Eventos del sistema |
| Sonido | Sound Blaster | ❓ Depende de la implementación |
La Tradición "Doom Corre en Todo"
Este proyecto hace parte de una larga tradición en la comunidad tech.
Histórico de Ports Inusitados
Donde Doom Ya Corrió:
La lista es impresionante y continúa creciendo:
- ATMs y Cajeros Electrónicos
- Calculadoras Gráficas (TI-84, HP Prime)
- Tests de Embarazo (con hardware modificado)
- Termostatos Inteligentes
- Refrigeradores con Display
- Tractores John Deere
- Macbooks TouchBar
- Impresoras de Red
- Routers
- Relojes Inteligentes
Por Qué Doom?
El juego se tornó benchmark por varias razones:
- Código fuente abierto desde 1997
- Requisitos relativamente bajos
- Bien documentado por la comunidad
- Engine modular y portable
- Culturalmente significativo
La Cultura del "Can It Run Doom?"
Un Meme Técnico:
"¿Pero corre Doom?" se tornó pregunta estándar:
- Testa capacidades reales de un sistema
- Demuestra habilidades de programación
- Desafía límites creativamente
- Conecta comunidades
El Valor de los Easter Eggs
Proyectos como ese revelan aspectos importantes de la cultura de desarrollo.
Creatividad en la Programación
Por Qué Desarrolladores Hacen Esto:
- Desafío Técnico: Probar que es posible
- Aprendizaje: Entender sistemas profundamente
- Diversión: Programar puede ser placentero
- Comunidad: Compartir conquistas
- Portfolio: Demostrar habilidades únicas
Habilidades Desarrolladas:
Proyectos "inútiles" frecuentemente desarrollan:
- Ingeniería reversa
- Optimización de código
- Conocimiento de bajo nivel
- Creatividad en la resolución de problemas
- Persistencia
Easter Eggs Famosos
En la Industria de Software:
Easter eggs tienen larga tradición:
| Software | Easter Egg | Año |
|---|---|---|
| Excel | Flight Simulator | 1997 |
| Word | Pinball | 1997 |
| Chrome | Dinosaur Game | 2014 |
| Android | Versión oculta | Cada versión |
| Firefox | about:mozilla | 1998+ |
| VSCode | Extensiones de juegos | 2016+ |
Lecciones Para Desarrolladores
Este proyecto ofrece insights valiosos para cualquier programador.
Conocimiento Profundo de Sistemas
Entender Tus Herramientas:
El ingeniero precisó conocer profundamente:
// Ejemplo conceptual de cómo explorar APIs ocultas
// en una aplicación desktop
class GameRenderer {
constructor(hostApp) {
// Descubrir capacidades de la aplicación host
this.canvas = this.findRenderingContext(hostApp);
this.inputHandler = this.hookInputEvents(hostApp);
this.frameBuffer = new Uint8Array(320 * 200);
}
findRenderingContext(app) {
// Explorar APIs disponibles
const possibleAPIs = [
app.get3DViewport,
app.getCanvasContext,
app.getRenderingSurface,
app.getDrawingArea
];
for (const api of possibleAPIs) {
if (typeof api === 'function') {
try {
const ctx = api.call(app);
if (ctx && ctx.drawPixel) {
return ctx;
}
} catch (e) {
// API no disponible o protegida
continue;
}
}
}
throw new Error('No suitable rendering API found');
}
hookInputEvents(app) {
// Interceptar eventos de input
const originalHandler = app.onKeyDown;
app.onKeyDown = (event) => {
// Procesar para el juego
this.handleGameInput(event);
// Pasar para handler original si es necesario
if (!this.gameActive) {
originalHandler?.call(app, event);
}
};
return {
getKey: () => this.currentKey,
getMouse: () => this.mouseState
};
}
render(gameState) {
// Convertir estado del juego para pixels
for (let y = 0; y < 200; y++) {
for (let x = 0; x < 320; x++) {
const color = this.frameBuffer[y * 320 + x];
this.canvas.drawPixel(x, y, this.palette[color]);
}
}
}
}
Portabilidad de Código
El Engine de Doom:
La arquitectura de Doom facilita ports:
// Ejemplo simplificado de abstracción de plataforma
// como usado en ports de Doom
// Interface abstracta que cada port implementa
class DoomPlatform {
// Inicialización
init() { throw new Error('Not implemented'); }
// Gráficos
setVideoMode(width, height) { throw new Error('Not implemented'); }
drawScreen(buffer) { throw new Error('Not implemented'); }
// Input
getKeyState() { throw new Error('Not implemented'); }
getMouseState() { throw new Error('Not implemented'); }
// Sonido (opcional)
playSound(id) { /* puede ser vacío */ }
playMusic(track) { /* puede ser vacío */ }
// Timing
getTicks() { return Date.now(); }
sleep(ms) { /* implementar si es necesario */ }
}
// Implementación para el software de PCB
class PCBSoftwarePlatform extends DoomPlatform {
constructor(pcbApp) {
super();
this.app = pcbApp;
this.viewport = null;
}
init() {
// Encontrar área de renderización en el software de PCB
this.viewport = this.app.get3DViewCanvas();
// Configurar callbacks de input
this.setupInputHooks();
return true;
}
setVideoMode(width, height) {
// Usar viewport existente, escalar si es necesario
this.scaleX = this.viewport.width / width;
this.scaleY = this.viewport.height / height;
return true;
}
drawScreen(buffer) {
// Convertir buffer de Doom para formato del viewport
const imageData = this.viewport.createImageData(320, 200);
for (let i = 0; i < buffer.length; i++) {
const color = this.palette[buffer[i]];
imageData.data[i * 4] = (color >> 16) & 0xFF; // R
imageData.data[i * 4 + 1] = (color >> 8) & 0xFF; // G
imageData.data[i * 4 + 2] = color & 0xFF; // B
imageData.data[i * 4 + 3] = 255; // A
}
// Escalar y dibujar
this.viewport.putImageData(imageData, 0, 0);
}
}
// Uso
const platform = new PCBSoftwarePlatform(myPCBApp);
platform.init();
const doom = new DoomEngine(platform);
doom.run();
Ingeniería Creativa
Este proyecto ejemplifica el espíritu de la ingeniería creativa.
Pensando Fuera de la Caja
Abordajes No-Convencionales:
Lo que distingue ingenieros excepcionales:
- Ver posibilidades donde otros ven limitaciones
- Cuestionar "¿por qué no?" en vez de "¿por qué?"
- Combinar conocimientos de áreas diferentes
- No limitarse al uso "correcto" de las herramientas
Proyectos Paralelos
Importancia de Side Projects:
Proyectos personales "inútiles" frecuentemente llevan a:
- Descubrimientos técnicos importantes
- Nuevas bibliotecas y herramientas
- Contrataciones y oportunidades
- Innovaciones comerciales
Ejemplos Famosos:
- Gmail: Comenzó como 20% project en Google
- Slack: Surgió de herramienta interna de game studio
- Twitter: Side project durante hackathon
- Linux: Hobby project de Linus Torvalds
La Comunidad Hacker
El término "hacker" en su sentido original significa exactamente eso.
Cultura Hacker Positiva
Valores Fundamentales:
- Curiosidad sin límites
- Compartimiento de conocimiento
- Elegancia técnica valorizada
- Desafíos como diversión
- Meritocracia técnica
Donde Encontrar:
- GitHub (proyectos open source)
- Hacker News
- Reddit (r/programming, r/itrunsdoom)
- Conferencias (DEF CON, CCC)
- Hackerspaces locales
Contribuyendo Para la Comunidad
Cómo Participar:
- Compartir tus proyectos, por más "inútiles" que parezcan
- Documentar el proceso, no solo el resultado
- Ayudar otros con proyectos similares
- Celebrar creatividad ajena
- Mantener el espíritu de curiosidad
Conclusión
El ingeniero que hizo Doom correr en software de design de PCB no creó nada comercialmente útil - y ese es exactamente el punto. Proyectos como ese representan lo mejor de la cultura de desarrollo: curiosidad técnica, creatividad ilimitada, y la alegría pura de resolver problemas interesantes.
Para desarrolladores en cualquier etapa de la carrera, la lección es clara: no subestimes el valor de proyectos "inútiles". Ellos desarrollan habilidades, construyen comunidad, y a veces llevan a innovaciones que nadie podría prever. El próximo proyecto aparentemente absurdo puede ser exactamente lo que te diferencia en el mercado.
Y si estabas preguntándote: sí, eventualmente alguien va a hacer Doom correr en una placa de circuito real, usando los propios LEDs como display. Es solo cuestión de tiempo.
Si te interesa creatividad en tecnología, confiere también nuestro artículo sobre China y Bloqueo de Starlink para entender cómo tecnología y geopolítica se encuentran de formas inesperadas.

