Pitch: Fiz um Interpretador/Emulador de Chip8 com Python
Depois de muito tempo sem publicar nada por aqui, e de ter desistido de estudar programação algumas vezes, há algum tempo eu terminei um projeto relativamente complicado de se fazer do jeito certo, um interpretador de Chip8.
obs: Para ver uma screenshot do emulador, clique aqui
para esse projeto eu fiz uso de:
- Python (3.12);
- Tkinter como gerenciador da interface mais básica do emulador;
- Pygame para a tela dos jogo em si;
Eu fiz uso principalmente do ChatGPT para criar as telas e economizar tempo com o que pra mim era essencial, implementar todas as instruções, suas logicas internas, e a questão da lógica de forma geral. Aprender a questão das telas me custaria mais tempo, e tiraria o foco do objetivo principal que era o emulador.
Foi um desafio interessante entender a questão dos registradores, operações bitwise e como são interpretadas as instruções.
Atualmente o emulador passa em todos os testes que estão aqui neste link após varias correções da logica usando o registrador VF.
Eu baixei as roms e coloquei em /test_roms (preciso verificar se eu posso realmente fazer isso, ou se descumpri a licença do criador delas)
Na verdade, além do emulador, eu fiz também um assembler básico e funcional, mas que ainda não é tão simples de usar, pois necessita mexer no código do assembler em si, o que não é o ideal.
o assembler fica na pasta /mychipssem
Também estou fazendo uma especie de monitor/REPL para programar em chip8 de forma mais direta usando um simulador de terminal que gravará os seus comandos, mas esse monitor ainda não está funcional.
o monitor está em /recorder
Concluindo, foi um desafio muito gratificante e que não demorou tanto quanto eu imaginava, eu duvidei muito de que eu conseguiria fazer isso, mas eu consegui, e isso me animou a voltar a programar, pelo menos programar o que me diverte.
Obs: Atualmente, a única forma de rodar o emulador é se você tiver o python no seu computador, baixar o pygame e o tkinter e rodar
python3 mychip8.py
na raiz do projeto, eu preciso criar um release no GitHub e assim poderei dizer que está finalizado por hora.