Conteúdo
No ano passado, recebi um Gameboy Color (GBC) bem conservado como presente, o que me inspirou a explorar as suas capacidades além dos jogos tradicionais. Fascinado pelo seu transceptor infravermelho (IR) incorporado, decidi desenvolver uma aplicação que permitisse ao Gameboy controlar o meu ar condicionado (A/C) aproveitando o seu protocolo IR existente, que foi invertido. O Gameboy Color distingue-se dos seus antecessores por várias melhorias, como um ecrã a cores, uma opção para funcionar a dobro da velocidade do processador e díodos infravermelhos para transmitir e receber sinais, localizados no canto superior esquerdo do dispositivo.\n\nO meu projeto começou por investigar se alguém já tinha utilizado o transmissor IR do Gameboy para tais fins. Descobri que o jogo "Mission Impossible" podia gravar e reproduzir sinais IR, provando a viabilidade do conceito. Para implementar isto, precisei de hardware adicional para programar o Gameboy com código personalizado. Adquiri um cartucho de jogo pirata que originalmente continha Pokemon Red, que pode ser reprogramado ao contrário dos cartuchos oficiais que normalmente são de escrita única. A programação do cartucho foi feita usando o programador gbxcart-rw da InsideGadget, uma ferramenta bem documentada e acessível.\n\nCompreender o protocolo de comunicação IR do meu A/C foi essencial. Como a empresa "National" que fabricou o meu A/C já não existe e a documentação era escassa, recorri a capturar fisicamente os sinais IR perfurando cuidadosamente um buraco e soldando um fio fino no transmissor do comando original. Este método invasivo mas eficaz revelou que o sinal IR era modulado a 36,5kHz, ligeiramente diferente da frequência mais comum de 38kHz. Esta discrepância de frequência representou um desafio, pois o hardware do Gameboy não suporta nativamente a comutação do LED IR a uma taxa tão precisa.\n\nDepois de capturar vários comandos para temperatura e modos, analisei os padrões e gerei transmissões com sucesso usando um microcontrolador moderno como plataforma de teste. Com este entendimento, comecei a programar para o próprio Gameboy. Ao escolher um kit de desenvolvimento de software (SDK), encontrei duas opções principais: GBDK, baseado em C, e RGBDS, um assembler. Embora o GBDK ofereça facilidade de uso e exemplos ricos, é limitado por um compilador desatualizado que carece de algumas funcionalidades avançadas como assembly inline. A linguagem assembly oferece controlo total e eficiência, crucial dadas as restrições rigorosas da plataforma como memória limitada, contagem de sprites e velocidade de processamento.\n\nPara o meu projeto, combinei ambos: usei C para lógica geral (UI, entrada, construção de pacotes IR) e assembly para transmissão IR crítica em termos de tempo. O timing preciso era vital, pois o LED IR tinha de ser alternado com atrasos exatos, alcançados através de instruções NOP (sem operação) calibradas. O projeto "GBDK-N", um fork melhorado do GBDK com suporte a compilador moderno, facilitou esta abordagem híbrida.\n\nAtivar o LED IR no GBC foi simples — definir um bit de registo para o ligar. No entanto, gerar a onda portadora IR modulada foi desafiante. Tentativas de usar o temporizador de hardware falharam em alcançar a frequência desejada de 36,5kHz, por isso recorri a ciclos de espera ocupados intensivos em CPU usando instruções NOP cuidadosamente contadas para modular o sinal manualmente. Esta abordagem, embora ineficiente, é paralela a métodos usados pela Nintendo em outros cenários sensíveis ao tempo como geração de som.\n\nPara verificar as transmissões sem modificar o hardware do Gameboy, usei uma propriedade intrigante dos LEDs: quando expostos à luz, produzem pequenas correntes elétricas. Usando um conjunto simples com um díodo IR, resistor e osciloscópio, gravei o sinal de saída do LED IR e ajustei os parâmetros de temporização até que a frequência de modulação correspondesse de perto aos 36,5kHz alvo. Quando a frequência ficou próxima dos 37kHz, o A/C respondeu com um bip, confirmando a comunicação bem-sucedida.\n\nO transmissor IR do Gameboy é altamente direcional e requer linha de visão direta para a unidade do A/C, mas funciona de outra forma idêntico ao comando original. Este projeto destaca a engenhosidade de reutilizar hardware vintage para usos práticos modernos, sublinhando o contraste entre as restrições dos sistemas embebidos legados e a flexibilidade dos ambientes de desenvolvimento de software contemporâneos. No geral, foi uma experiência gratificante, combinando hacking de hardware, análise de sinais e programação de baixo nível para dar nova vida a um dispositivo clássico de jogos.