Bem eu já tenho um costume em fazer 100 days sempre que quero estudar algo, por algum motivo me ajuda a me manter focado. Meu plano é como sempre não tentar fazer nada muito mirabolante e focar em conseguir me manter sempre fazendo algo simplesmente pela graça de codar algo. Bem dessa vez eu tenho documentado algumas coisas que nunca implementei e que tenho vontade e nesse momento em especifico estou fazendo um emulador de GameBoy Clássico no meu ritmo.

[Day 1] Iniciando um emulador de gameboy - 100 days of code em C

O Microprocessador Z80

Bem basicamente é isso, espero que curtam. Eu já iniciei um pouco do desenvolvimento porém não avançei muito, não tenho nenhum contato com C então estou me divertindo bastante em ir descobrindo como funciona as coisas nele, tenho mais costume com GoLang. Hoje em específico me foquei em aprender mais sobre os registradores do GameBoy Clássico o microprocessador dele é baseado no Zilog Z80 e tem sido bem maneiro conhecer mais sobre esse carinha a partir disso.

Registros do Microprocessador Z80

Basicamente ele possui os registradores A, B, C, D, E, F, H, L em 8 bits e os dois registradores 16 bits que é o SP(Stack pointer) e o PC(Program counter). Até onde li aparentemente o A é mais destinado a ser o acumulador e o F como um registrador de flags tendo dentro dele coisas como zero flag, subtract flag, half carry flag, carry flag e os outros do B. H aparentemente é para uso livre. É interessante também observar que pela documentação estes registradores de uso livre podem ser usados em conjuntos para funcionarem como um registrador de 16 bits como BC, DE, HL.

Estrutura de Registros

Cheguei a olhar em outros documentos e vi a existência de outros registradores específicos (Instruction Register (IR) e Interrupt Enable (IE)) porém apenas em uma documentação vi isso, porém cheguei a ver isso no mame e conhecendo a busca pela fidelidade física por parte do mame acredito que isso exista sim e vai valer uma pesquisa do por que não é muito comum aparecer. Bem meu projeto ainda não está versionado por que eu sou vagabundo e a falta de tempo está complicada, porém vou padronizando nos próximos dias.

Documentação e Padronização

Algumas coisas aqui poderiam ser melhor explicadas porém o intuito é mais eu documentar esses dias do que necessariamente comunicar legal, e como disse estou aprendendo com o processo então posso estar errado em bastante coisa que eu disse qualquer coisa pode indicar coisas que eu poderia ver pra entender/corrigir valeu!

Referências:

  • [Documentação do Microprocessador Z80](http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf)
  • [Repositório do Emulador PaxGB](https://github.com/rhgndf/paxgbc/tree/master)
  • [Documentação do GameBoy Clássico](https://gekkio.fi/files/gb-docs/gbctr.pdf)
CodeDaysEmuladorGameboyIniciando