Engenheiro Faz Doom Rodar em Software de Design de Placas Eletronicas: A Arte do Easter Egg
Olá HaWkers, um engenheiro conseguiu o aparentemente impossível: fazer o clássico jogo Doom rodar dentro de um software de design de placas eletrônicas (PCB). Esse feito se soma à longa tradição de "Doom roda em qualquer coisa" e demonstra a criatividade e habilidade técnica que existe na comunidade de desenvolvedores.
Você já se perguntou o que leva programadores a investir tempo em projetos aparentemente inúteis, mas tecnicamente brilhantes?
O Feito Técnico
O engenheiro utilizou as capacidades de scripting e renderização de um software de design de PCB para criar um ambiente onde Doom pudesse ser executado.
Como Foi Possível
Explorando Capacidades Ocultas:
Softwares de design de PCB modernos são surpreendentemente poderosos:
- Engine de Renderização 3D: Para visualizar placas em 3D
- Linguagem de Script: Para automação (geralmente Python)
- APIs Internas: Acesso a funções de desenho
- Processamento: CPUs modernas são poderosas
Passos do Hack:
- Identificar API de renderização disponível
- Mapear controles de input para o software
- Portar o engine de Doom para usar essa API
- Otimizar para rodar em tempo real
- Integrar tudo em um plugin/script
Contexto: Doom foi lançado em 1993 e seu código-fonte foi liberado em 1997, permitindo ports para praticamente qualquer plataforma.
Requisitos Técnicos
O Que Doom Precisa:
| Componente | Requisito | Disponível em PCB Software |
|---|---|---|
| CPU | 386/486 equivalente | ✅ Qualquer CPU moderna |
| RAM | 4-8 MB | ✅ Abundante |
| Video | 320x200, 256 cores | ✅ Via API de renderização |
| Input | Teclado, mouse | ✅ Eventos do sistema |
| Som | Sound Blaster | ❓ Depende da implementação |
A Tradição "Doom Roda em Tudo"
Este projeto faz parte de uma longa tradição na comunidade tech.
Histórico de Ports Inusitados
Onde Doom Já Rodou:
A lista é impressionante e continua crescendo:
- ATMs e Caixas Eletrônicos
- Calculadoras Gráficas (TI-84, HP Prime)
- Testes de Gravidez (com hardware modificado)
- Termostatos Inteligentes
- Geladeiras com Display
- Tratores John Deere
- Macbooks TouchBar
- Impressoras de Rede
- Roteadores
- Relógios Inteligentes
Por Que Doom?
O jogo se tornou benchmark por várias razões:
- Código fonte aberto desde 1997
- Requisitos relativamente baixos
- Bem documentado pela comunidade
- Engine modular e portável
- Culturalmente significativo
A Cultura do "Can It Run Doom?"
Um Meme Técnico:
"Mas roda Doom?" se tornou pergunta padrão:
- Testa capacidades reais de um sistema
- Demonstra habilidades de programação
- Desafia limites criativamente
- Conecta comunidades
O Valor dos Easter Eggs
Projetos como esse revelam aspectos importantes da cultura de desenvolvimento.
Criatividade na Programação
Por Que Desenvolvedores Fazem Isso:
- Desafio Técnico: Provar que é possível
- Aprendizado: Entender sistemas profundamente
- Diversão: Programar pode ser prazeroso
- Comunidade: Compartilhar conquistas
- Portfólio: Demonstrar habilidades únicas
Habilidades Desenvolvidas:
Projetos "inúteis" frequentemente desenvolvem:
- Engenharia reversa
- Otimização de código
- Conhecimento de baixo nível
- Criatividade na resolução de problemas
- Persistência
Easter Eggs Famosos
Na Indústria de Software:
Easter eggs têm longa tradição:
| Software | Easter Egg | Ano |
|---|---|---|
| Excel | Flight Simulator | 1997 |
| Word | Pinball | 1997 |
| Chrome | Dinosaur Game | 2014 |
| Android | Versão oculta | Cada versão |
| Firefox | about:mozilla | 1998+ |
| VSCode | Extensões de jogos | 2016+ |
Lições Para Desenvolvedores
Este projeto oferece insights valiosos para qualquer programador.
Conhecimento Profundo de Sistemas
Entender Suas Ferramentas:
O engenheiro precisou conhecer profundamente:
// Exemplo conceitual de como explorar APIs ocultas
// em uma aplicação desktop
class GameRenderer {
constructor(hostApp) {
// Descobrir capacidades da aplicação host
this.canvas = this.findRenderingContext(hostApp);
this.inputHandler = this.hookInputEvents(hostApp);
this.frameBuffer = new Uint8Array(320 * 200);
}
findRenderingContext(app) {
// Explorar APIs disponíveis
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 não disponível ou protegida
continue;
}
}
}
throw new Error('No suitable rendering API found');
}
hookInputEvents(app) {
// Interceptar eventos de input
const originalHandler = app.onKeyDown;
app.onKeyDown = (event) => {
// Processar para o jogo
this.handleGameInput(event);
// Passar para handler original se necessário
if (!this.gameActive) {
originalHandler?.call(app, event);
}
};
return {
getKey: () => this.currentKey,
getMouse: () => this.mouseState
};
}
render(gameState) {
// Converter estado do jogo 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]);
}
}
}
}
Portabilidade de Código
O Engine de Doom:
A arquitetura do Doom facilita ports:
// Exemplo simplificado de abstração de plataforma
// como usado em ports de Doom
// Interface abstrata que cada port implementa
class DoomPlatform {
// Inicialização
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'); }
// Som (opcional)
playSound(id) { /* pode ser vazio */ }
playMusic(track) { /* pode ser vazio */ }
// Timing
getTicks() { return Date.now(); }
sleep(ms) { /* implementar se necessário */ }
}
// Implementação para o software de PCB
class PCBSoftwarePlatform extends DoomPlatform {
constructor(pcbApp) {
super();
this.app = pcbApp;
this.viewport = null;
}
init() {
// Encontrar área de renderização no software de PCB
this.viewport = this.app.get3DViewCanvas();
// Configurar callbacks de input
this.setupInputHooks();
return true;
}
setVideoMode(width, height) {
// Usar viewport existente, escalar se necessário
this.scaleX = this.viewport.width / width;
this.scaleY = this.viewport.height / height;
return true;
}
drawScreen(buffer) {
// Converter buffer de Doom para formato do 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 e desenhar
this.viewport.putImageData(imageData, 0, 0);
}
getKeyState() {
return this.keyStates;
}
setupInputHooks() {
this.keyStates = {};
// Hook nos eventos do software de PCB
this.app.addEventListener('keydown', (e) => {
this.keyStates[e.keyCode] = true;
});
this.app.addEventListener('keyup', (e) => {
this.keyStates[e.keyCode] = false;
});
}
}
// Uso
const platform = new PCBSoftwarePlatform(myPCBApp);
platform.init();
const doom = new DoomEngine(platform);
doom.run();
Engenharia Criativa
Este projeto exemplifica o espírito da engenharia criativa.
Pensando Fora da Caixa
Abordagens Não-Convencionais:
O que distingue engenheiros excepcionais:
- Ver possibilidades onde outros veem limitações
- Questionar "por que não?" em vez de "por que?"
- Combinar conhecimentos de áreas diferentes
- Não se limitar ao uso "correto" das ferramentas
Projetos Paralelos
Importância de Side Projects:
Projetos pessoais "inúteis" frequentemente levam a:
- Descobertas técnicas importantes
- Novas bibliotecas e ferramentas
- Contratações e oportunidades
- Inovações comerciais
Exemplos Famosos:
- Gmail: Começou como 20% project no Google
- Slack: Surgiu de ferramenta interna de game studio
- Twitter: Side project durante hackathon
- Linux: Hobby project de Linus Torvalds
A Comunidade Hacker
O termo "hacker" em seu sentido original significa exatamente isso.
Cultura Hacker Positiva
Valores Fundamentais:
- Curiosidade sem limites
- Compartilhamento de conhecimento
- Elegância técnica valorizada
- Desafios como diversão
- Meritocracia técnica
Onde Encontrar:
- GitHub (projetos open source)
- Hacker News
- Reddit (r/programming, r/itrunsdoom)
- Conferências (DEF CON, CCC)
- Hackerspaces locais
Contribuindo Para a Comunidade
Como Participar:
- Compartilhar seus projetos, por mais "inúteis" que pareçam
- Documentar o processo, não só o resultado
- Ajudar outros com projetos similares
- Celebrar criatividade alheia
- Manter o espírito de curiosidade
Conclusão
O engenheiro que fez Doom rodar em software de design de PCB não criou nada comercialmente útil - e esse é exatamente o ponto. Projetos como esse representam o melhor da cultura de desenvolvimento: curiosidade técnica, criatividade ilimitada, e a alegria pura de resolver problemas interessantes.
Para desenvolvedores em qualquer estágio da carreira, a lição é clara: não subestime o valor de projetos "inúteis". Eles desenvolvem habilidades, constroem comunidade, e às vezes levam a inovações que ninguém poderia prever. O próximo projeto aparentemente absurdo pode ser exatamente o que diferencia você no mercado.
E se você estava se perguntando: sim, eventualmente alguém vai fazer Doom rodar em uma placa de circuito real, usando os próprios LEDs como display. É só questão de tempo.
Se você se interessa por criatividade em tecnologia, confira também nosso artigo sobre China e Bloqueio de Starlink para entender como tecnologia e geopolítica se encontram de formas inesperadas.

