Voltar para o Blog

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:

  1. Identificar API de renderização disponível
  2. Mapear controles de input para o software
  3. Portar o engine de Doom para usar essa API
  4. Otimizar para rodar em tempo real
  5. 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:

  1. Desafio Técnico: Provar que é possível
  2. Aprendizado: Entender sistemas profundamente
  3. Diversão: Programar pode ser prazeroso
  4. Comunidade: Compartilhar conquistas
  5. 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:

  1. Compartilhar seus projetos, por mais "inúteis" que pareçam
  2. Documentar o processo, não só o resultado
  3. Ajudar outros com projetos similares
  4. Celebrar criatividade alheia
  5. 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.

Bora pra cima! 🦅

Comentários (0)

Esse artigo ainda não possui comentários 😢. Seja o primeiro! 🚀🦅

Adicionar comentário