Há muito tempo eu li o CODE e fiquei bem impressionado. É uma ótima viagem por todas as camadas de abstração de um computador. O autor começa com elementos muito simples e nos traz cada vez mais perto de entender como um computador funciona.
Vários anos depois, encontrei por acaso a CPU de 8 bits em protoboards do Ben eater. Nessa série de videos, Ben Eater segue um caminho parecido com o do livrop, e monta um computador funcional a partir de circuitos integrados da série 7400.
É óbvio que eu decidi montar um.
Em resumo, eu simplesmente segui os videos e diagramas de circuito publicados por Ben Eater.
A estrutura básica do computador é a seguinte:
É, claro, um computador muito simples. Na verdade, aparentemente ele é baseado no SAP-1 descrito por Albert Paul Malvino no livro Digital Computer Electronics. Na implementação do Ben Eater (e na minha), o conjunto de instruções é muito pequeno. Só existem instruções para manipular dados em um dos registradores e só existem dois pulos condicionais: pula se vai um e pula se zero.
O design usa EEPROMs para substituir a lógica combinatória necessária para decodificar as instruções e disparar os sinais necessários para executá-las. O opcode e o contador de ciclo de instruções são usados para endereçar a EEPROM e as saídas (ou seja: os dados no endereço correspondente) são os sinais de controle. Isso significa que é possível atualizar o microcódigo do computador reprogramando essas EEPROMs.
Com só 4 bits para o endereçamento de memória, precisamos colocar todo o programa e os dados em 16 bytes. Um simples programa pra calcular a sequência de Fibonacci usa quase toda a memória:
Um detalhe em que meu circuito diverge do do Ben Eater é no circuit de reset. Eu não tinha portas NAND à mão quando queria montar o circuito, mas tinha postas NOR. Eu, então, adaptei a lógica de reset dele para usar portas NOR.
Um outro problema que eu encontrei é que às vezes a memória RAM era
sobrescrita quando eu
trocava entre o modo de execução e o modo de programação. A
solução é colocar um
resistor de pull up no pino write enable
do CI de RAM pra que ele
não fique indefinido quando o botão não está sendo pressionado.
Existe um subreddit dedicado ao canal do Ben Eater onde várias pessoas postam programas diferentes e modificações de hardware. Algumas pessoas fizeram programadores, expandiram a memória etc. É uma boa fonte de informações sobre o projeto e um bom lugar pra procurar soluções pra eventuais problemas.