- Projeto que portou o clássico de 1993 DOOM para rodar nos earbuds sem fio PineBuds Pro, com possibilidade de jogar remotamente pela web
- É composto por quatro partes: um servidor serial, servidor web, página web estática e o port de DOOM que conecta os earbuds ao servidor web
- Por meio de uma conexão UART, garante cerca de 2,4 Mbps de largura de banda e transmite vídeo em stream MJPEG, alcançando desempenho teórico de até 27 FPS
- Com overclock da CPU de 100 MHz para 300 MHz e limitado pela codificação JPEG, obtém desempenho real de cerca de 18 FPS
- Supera as restrições de RAM e FLASH com otimizações e o arquivo Squashware WAD enxuto, mostrando o potencial de experimentos de hardware baseados em firmware open source
Visão geral do projeto
- Port de DOOM, lançado em 1993, para rodar nos earbuds PineBuds Pro
- Os PineBuds Pro são citados como os únicos earbuds sem fio com suporte a firmware open source
- Visitantes do site podem entrar na fila e jogar remotamente
- O projeto é composto por quatro partes
- O port de DOOM executado nos earbuds
- O servidor serial, que conecta os earbuds ao servidor web e converte o stream MJPEG para Twitch
- O servidor web, responsável por servir os assets, gerenciar a fila, encaminhar entradas de teclado e exibir o stream
- A página web estática, responsável pela exibição no navegador e pela comunicação com o servidor
Hardware e estrutura de conexão
- Os earbuds não têm display, então transmitem e recebem dados via Bluetooth ou pads de contato UART
- O Bluetooth é lento, em cerca de 1 Mbps, então a UART (2,4 Mbps) é mais adequada
- O framebuffer de DOOM tem resolução de 320×200, 8 bits de cor, totalizando cerca de 96 KB
- Com base na largura de banda da UART, seria possível transmitir cerca de 3 FPS
- Para melhorar isso, foi adotado o formato de stream MJPEG
- Como codificador JPEG, foi usado bitbank2/JPEGENC
- Tamanho médio dos frames JPEG entre 11 e 13,5 KB
- Em teoria, o FPS máximo fica na faixa de 22 a 27 FPS
Ajuste de desempenho da CPU
- O clock padrão da CPU no firmware original é de 100 MHz, mas foi elevado para 300 MHz e o modo de baixo consumo foi desativado
- O Cortex-M4F (300 MHz) é suficiente para rodar DOOM, mas há gargalo na codificação JPEG
- A taxa de quadros real fica em torno de 18 FPS
Otimização de memória (RAM)
- A RAM acessível por padrão é de 768 KB e, com o processador auxiliar desativado, chega a 992 KB
- Como DOOM exige 4 MB de RAM, várias otimizações foram aplicadas
- Pré-geração de tabelas de consulta, armazenamento de variáveis const na flash, desativação do sistema de cache, remoção de variáveis desnecessárias e outras medidas para economizar memória
Problema de capacidade da flash (FLASH)
- O arquivo WAD padrão de DOOM 1 tem 4,2 MB, excedendo o limite de 4 MB de armazenamento dos earbuds
- O problema foi resolvido com a versão enxuta Squashware WAD (1,7 MB), de fragglet
- Todos os assets puderam caber na flash
Open source e acessibilidade
- O código do projeto está disponível em dois repositórios no GitHub
- O site opera com base em fila, e a partir da 5ª posição o stream da Twitch é trocado por um stream MJPEG de baixa latência
5 comentários
"Roda DOOM"
Os mestres em fazer DOOM rodar em qualquer coisa são realmente... incríveis.
Uau, isso é meio que... pqp kkkkk
Meu Deus do céu
Opiniões do Hacker News
Sempre que vejo DOOM rodando em algum dispositivo simples, fico pensando se isso é uma vitória do software ou um fracasso econômico por não conseguirmos fazer hardware dedicado mais barato
Fones Bluetooth com ANC não são produtos simples, e o cancelamento de ruído precisa executar continuamente cálculos muito complexos
Um MCU rápido não é mero desperdício, pois traz vantagens de baixa latência e gerenciamento eficiente de energia
Em vez de criar um ASIC perfeito, é muito mais realista ter uma estrutura atualizável com um MCU de uso geral
No fim das contas, comprar MCUs já consolidados em grande volume é muito mais econômico do que criar um chip sob medida
O custo de mão de obra, testes, treinamento e produção em pequena escala para projetar e fabricar um chip personalizado acaba sendo ainda maior
O custo dos processos de negócio pesa muito mais do que o custo dos materiais
Estamos num mundo em que DOOM roda em earbuds, não há motivo para ver isso de forma negativa
É um exagero de especificações, mas impressiona que tudo isso caiba dentro do ouvido
Eu portei o DOOM para os PineBuds Pro
Dá para acessar pela internet e jogar DOOM nos meus earbuds
Mais detalhes e o link do GitHub estão no meu site
É um pouco triste que sempre portem apenas DOOM
Antigamente havia muitos jogos simples, mas viciantes; hoje os jogos são grandes e complexos demais para serem levados para plataformas pequenas
Parece que a indústria, fora a cena indie, perdeu o rumo
Jogos como o antigo Master of Orion 1 eram simples, mas davam vontade de jogar repetidamente
Hoje, muitos jogos parecem vídeos, com pouca interação e grind de XP, o que reduz o interesse
Já virou uma tradição
Hoje, a maioria dos usuários não se importa muito com tamanho ou desempenho
Como os consumidores adotaram a atitude de “desde que rode bem, tá ótimo”, o valor da otimização diminuiu
Ainda assim, na cena indie, continuam existindo muitos jogos curtos e estilosos
Só que, como jogos curtos estilo filme têm mais dificuldade de causar grande impacto, eles acabam sendo menos conhecidos
A lista de ports de DOOM pode ser vista na página da Wikipédia
Acho que isso é um excelente efeito de divulgação para os PineBuds Pro
Será que os Fairbuds conseguiriam fazer algo assim?
Mas, com DOOM rodando em tantos dispositivos, por que ainda não roda suavemente em um 386?
Lembrei de uma entrevista do John Carmack depois de DOOM 3, em que ele disse que, conforme o motor ficava mais complexo, já não conseguia mais escrever todo o código sozinho
Fico curioso para saber o que ele pensa disso na atual era da IA
Pessoalmente, acho que ele deve ser positivo em relação à IA
E “Masters of Doom” é um livro realmente ótimo, recomendo
Gostaria de saber se alguém já usou os PineBuds Pro
Não havia um canal relacionado no IRC da Pine64, então era difícil perguntar
Não sei sobre conforto ou qualidade de som, mas há uma sala dedicada aos Pinebuds no canal do Discord da Pine64
Instalei de propósito um firmware sem ANC, mas, como earbuds Bluetooth, eles cumprem bem o papel
Daqui a alguns anos, quando os earbuds tiverem um pouco mais de RAM, talvez dê para rodar até um cluster Kubernetes local
Estou esperando o post “portei DOOM para o chip de um vape descartável” 😄
Se a lei de Moore continuar valendo, talvez isso seja possível em cerca de 10 anos
Um visualizador independente conectado diretamente aos earbuds também funciona no celular
Veja o vídeo de demonstração
Não há controles por toque, e apenas o loop de introdução é reproduzido