Introdução
Então, hoje acordei com uma vontade repentina de desenvolver um emulador.
Começou como um desejo de desenvolver um emulador de Gameboy, porém, depois de algumas pesquisas, descobri isso [BytePusher] (https://esolangs.org/wiki/BytePusher), uma máquina virtual baseada em Chip8.
Parecia bastante simples para começar, então eu escolhi. Mas ainda quero desenvolver um emulador de Gameboy, mas farei isso depois de terminar este.
A propósito, tentarei escrevê-lo usando tecnologias da Web (HTML, CSS e Javascript) usando <canvas> para exibição.
Então, o objetivo desta planta é basicamente registrar minha jornada nesta "aventura" de aprendizado, enquanto ensino a mim mesmo e escrevo de uma forma que possa ser usada para ensinar outras pessoas.
::: informação Aviso legal Então, vou ser honesto, não entendo muito sobre engenharia de computação em profundidade, então hardware e coisas relacionadas não são algo que eu conheça bem, pelo menos no momento em que escrevo esta introdução. :::
Compreender a máquina.
Ok, vou ser honesto. Para entender como isso funciona, tive que ler a página Wiki pelo menos 3 vezes. A maior parte soava (na verdade, ainda soa) como magia negra. Minha dificuldade em entendê-lo é baseada em dois fatores sobre mim:
- Já faz um bom tempo desde a última vez que li sobre memórias e CPU. Fiz um curso de hardware de computador na Uni e li o Manga Guide to Microprocessors;
- Mesmo que eu tenha aprendido da maneira mais básica sobre como os computadores funcionam, muitas das abstrações se perderam ao longo do tempo em minha mente.
Felizmente, contornei o básico, quem quer que seja, isso parecia muito mais complexo do que eu pensava que seria.
A CPU
Portanto, a CPU é a base da máquina ByterPush. Seu código de máquina é baseado em ByteByteJump, que é uma instrução de 3 palavras (também conhecida como 3 bytes), que é algo como:
A >> B -> C
O que se traduz aproximadamente em:
- Obtenha o valor do endereço A;
- Mova-o para o endereço B;
- Vá para C.
A parte mais difícil de tudo isso é que, em bytebytejump, você não tem instruções de operação, então não há "add", "sub" e assim por diante, você mesmo deve escrevê-las.
A máquina mental
Então, fiquei tipo, 3 horas, só coçando a cabeça tentando entender, porque é a forma mais básica de operar: você, sua linguagem de escolha, seus operadores binários e sua criatividade (ou resiliência mental).
Vamos começar!
Ok, então, em vez de tentar ensiná-lo sobre como isso pode funcionar, começarei desenvolvendo sozinho e explicando o que estava tentando fazer em movimento.
Continue lendo em Hello World, eu acho?