Pitch: Emulador no browser de um computador 8 bits
Recentemente me interessei em escrever algum emulador, inspirado pelo repositório Build your own x.
A intenção inicialmente seria emular um processador pra conseguir executar o binário de algum de seus programas. Procurei algumas arquiteturas mais simples de emular, mas me lembrei da série de vídeos do Ben Eater onde ele constrói um computador de 8 bits do zero.
Como a emulação seria simples, por causa da pouca complexidade da arquitetura, decidi fazer uma réplica virtual de todo o conjunto incluindo o clock, micro instruções, todos os registradores e o display.
Como foi feito
Obviamente não me preocupei com qualidade, só queria que funcionasse. Utilizei JavaScript
e o emulador roda no browser.
O projeto roda em dois loops, um deles faz toda a operação do processador a cada ciclo de clock e o outro renderiza os "LEDs" em um elemento canvas utilizando a lib p5.js.
Configuração do computador
Barramento e registradores de 8 bits e memória de 16 bytes.
Instruções:
- NOP: Nenhuma operação;
- LDA X: Carrega endereço x da ram no registrador A;
- ADD X: Soma endereço x da ram no registrador A;
- SUB X: Subtrai endereço x da ram no registrador A;
- STA X: Salva registrador A no endereço x da ram;
- LDI X: Carrega diretamente no registrador A os últimos 4 bits da instrução;
- JMP X: Carrega no registrador program counter os últimos 4 bits da instrução;
- JC X: Se flag carry ativa (ALU com overflow), carrega no registrador program counter os últimos 4 bits da instrução;
- JZ X: Se flag zero (ALU com valor zero), carrega no registrador program counter os últimos 4 bits da instrução;
- OUT: Printa no display o valor do registrador A;
- HLT: Para o programa.
Demo
No desktop, acesse https://fmosbacher.github.io/8-bit-computer. O programa que está rodando conta de 0 a 255 e depois volta de 255 a 0.
Pra fechar, recomendo muito que vejam a série do Ben Eater. Ele faz um passo a passo pra quem quer entender de verdade como um processador funciona.