[Day 1] Iniciando um emulador de gameboy - 100 days of code em C
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, então não tem grandes avanços. 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, 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 lí 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 lívre; É 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. Como ainda não sei como exatamente essas junções de registradores gerais funcionam até o momento minha struct está como:
struct registers {
uint16_t PC;
uint16_t SP;
uint8_t A;
uint8_t B;
uint8_t C;
uint8_t D;
uint8_t E;
uint8_t F;
uint8_t H;
uint8_t L;
};
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. 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
http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf
https://github.com/rhgndf/paxgbc/tree/master
https://gekkio.fi/files/gb-docs/gbctr.pdf