Criando um computador primitivo do zero

Um computador é fácil. Ou não?


Qualquer pessoa interessada no campo da tecnologia da informação, pelo menos uma vez pensou em como o computador realmente funciona. E, de fato, com a ajuda de um computador, você pode fazer tantas coisas surpreendentes que é impossível acreditar que tudo o que acontece dentro dele é a adição de números. Por que não fazer você mesmo?

imagem

Essa ideia é claramente vista no livro de Charles Petzold "Code" - uma boa leitura para quem quer entender o dispositivo do computador com os dedos sem gastar muito tempo. Este livro causou uma forte impressão em mim, tanto que decidi que o computador era uma unidade completamente simples e não havia nada de complicado nisso.

Mas isso não é verdade. Depois de ler, ainda senti que algo estava escondido de mim, que alguns aspectos da arquitetura não foram afetados. Para mais informações, consultei o próximo livro, Computer Architecture, de Andrew Tanenbaum . As informações deste livro eram muito mais extensas, mas não consegui exatamente o que queria.

Nesse ponto, meu caminho no mundo da arquitetura de computadores parou; os estudos começaram; eu estava distraído com outros projetos que eram mais interessantes para mim naquele momento. Mas, infelizmente, sou uma daquelas pessoas que não podem usar nada sem remorso, sem conhecer pelo menos aproximadamente o mecanismo dessa ferramenta. Isso me fez procurar material sobre tudo.

Uma série de decepções ocorreu depois de ler vários capítulos de livros sobre mecanismos de jogos, compiladores, sistemas operacionais etc. Eu estava perdida: um mundo que parecia lógico e moderadamente simples em um momento se tornou enorme e confuso, exigindo uma quantidade impressionante de conhecimento.

O começo de uma grande jornada


O que me salvou foi a resposta de um usuário em algum fórum à postagem de uma pessoa que sofria de um "distúrbio" semelhante, o mundo da TI parecia tão grande para ele que certamente não pôde ser compreendido. Lembro-me dessas palavras e elas me ajudam sempre que me deparo com algo novo. "Não se deixe dominar" é algo que todo novato em TI deve dizer.

E então comecei a navegar na Internet com renovado vigor em busca de literatura. Tive muita sorte de encontrar o maravilhoso livro The Elements of Computing Systems. Construindo um computador moderno a partir dos Primeiros Princípios ”, de Noam Nisan e Shimon Schocken (nenhuma edição russa). É para quem, como eu, mostra a criação de um computador realmente funcional a partir do zero, ou seja, de portas lógicas.

Tive uma ideia e comecei a trabalhar. Ele começou com o que havia feito depois de ler Petzold - adicionadores, registros, multiplexadores. Esses são alguns dos dispositivos mais simples, cujo trabalho não é de todo difícil de entender (se você não pensa em eficiência), e pode fazê-lo em 10 minutos em um aplicativo conveniente no seu smartphone.

Comecei cada capítulo seguinte com uma sede de conhecimento. ALU projetada, orientada pelas tarefas do livro. Não posso dizer que inventei algo, mas eles me deram as peças prontas e as montei em um carro bonito. Mas que prazer tive quando percebi que havia montado uma ULA totalmente funcional com minhas próprias mãos.

Placa de circuito ALU, feita no programa BOOLR
imagem

Primeiras frutas


Foi seguido por um processador de 16 bits totalmente funcional, que concluí hoje. Não há limite para a minha felicidade, mas não vou parar. Para meu pesar, mesmo que todo o processador do livro tenha sido montado completamente do zero, o montador foi uma abstração no próximo capítulo (o que é lógico, o livro foi projetado para uma exposição mais ou menos concisa, embora detalhada). Depois de um pouco de tristeza, percebi que Assemblies também são uma linguagem de programação e criar um Assembler completo a partir do zero levará muito tempo.

Esquema do processador finalizado. O grande ponto preto é o mesmo ALU
imagem

Sobre assembler em um livro
De fato, este tópico no livro não foi completamente omitido. Ele diz que o assembler pode ser escrito usando qualquer linguagem de programação de alto nível. Como idiota e corajosa, essa opção não me agrada muito, quero fazer tudo com minhas próprias mãos usando o processador que tenho. E sim, entendo que vou perder muito tempo, mas vou gostar, tenho certeza.

Escrever seu Assembler é um objetivo ambicioso, mas essa não é a única dificuldade. O caminho que escolhi promete ser difícil. Os registros e, em geral, a memória no programa BOOLR podem ser implementados apenas usando portas lógicas. Por que isso é um problema? É simples: 1024 bytes de RAM insignificantes dezenas de vezes tentam recursivamente colocar seus registros de 16 bits compostos na RAM do meu computador. Aqui está o que vem disso:

Captura de tela da lista de processos do Gerenciador de tarefas

De um modo geral, às vezes um projeto simplesmente não abre devido à falta de RAM. Parece um beco sem saída, mas não pretendo parar por aí.

Source: https://habr.com/ru/post/pt483568/


All Articles