Desde pequeno, eu era fascinado pelos consoles que estavam sendo lançados. Peguei a época em que o PlayStation 1 ainda estava muito presente e depois vi o PlayStation 2 se tornar quase onipresente.

Hoje meu contato com desenvolvimento está muito mais próximo da web do que de jogos. Ainda assim, quando a nostalgia bate, acabo baixando algum emulador para jogar alguma coisa antiga. No meio disso, comecei a prestar mais atenção nessas máquinas e no pouco hardware que elas tinham disponível para fazer tanta coisa.
Foi olhando para esse “tão pouco” que acabei me aproximando mais do hardware. Em consoles antigos, os recursos eram bem mais escassos e havia pouco espaço para desperdício. Algumas escolhas que hoje poderiam passar despercebidas tinham um peso muito maior naquele contexto.
Um bom exemplo disso é o Game Boy Advance. Ele tinha menos de 300 KB de RAM, uma quantidade tão pequena que uma única foto tirada por um celular atual pode ocupar dezenas de vezes mais espaço.

Quando coloquei esse número em perspectiva, a pergunta deixou de ser apenas sobre o quanto aquele hardware era limitado e passou a ser outra: como um jogo conseguia funcionar com tão pouco?
Parte da resposta começa na maneira como esses jogos eram construídos. Era preciso conhecer bem a máquina, seus limites e os recursos que ela oferecia. O jogo não precisava funcionar em qualquer lugar, mas naquele hardware específico, o que permitia explorar suas características de maneira muito mais direta.
Ao olhar para isso com mais atenção, começam a aparecer detalhes que normalmente ficam escondidos. Uma instrução executada pela CPU, um valor guardado em determinado endereço ou uma região usada para representar algo na tela deixam de parecer partes isoladas e começam a formar um sistema.
Foi seguindo esse caminho que comecei a estudar emulação e a construir um emulador de Game Boy Advance em Rust. Aos poucos, reproduzir partes dessa máquina virou também uma forma de observar como ela funciona, começando pela CPU e avançando conforme novas peças entram no caminho.
Caso queira acompanhar esse processo, deixei o projeto no GitHub.