Processador TTA. Parte 2

Prefácio


Esta é a segunda parte da tentativa de criar um processador TTA no Logisim. No processo de criação, havia uma necessidade de memória adicional na qual alguns valores intermediários podiam ser armazenados e, para essa memória, havia a necessidade de alterar o dispositivo de controle.

Parte 1
Parte 2

Memória adicional


Como é difícil armazenar comandos e constantes na memória, será difícil criar uma memória totalmente endereçável; portanto, você precisa de algo mais simples, uma pilha ou fila é boa para isso.

A fila não parece muito conveniente e a linguagem Forth foi inventada para a pilha , cujo compilador gostaria de escrever. Implementamos a pilha como um dispositivo funcional:


Parece confuso, mas, na verdade, esse dispositivo executa funções simples: o contador aponta para a próxima célula, quando os dados chegam, eles são gravados na célula para a qual o contador aponta e aumenta; quando os dados são coletados, eles são dados da célula anterior à célula indicado pelo contador e o contador diminui. Em seguida, surge outro problema: como você sabe quais dados foram retirados da pilha? Você precisa de um sinalizador para isso e o dispositivo de controle (UU) terá a seguinte aparência:


Para facilitar a conexão, as saídas estarão localizadas à esquerda e as entradas à direita, depois a unidade de controle e outros dispositivos funcionais (pilha, somador, AND, OR, registro, etc.):


Vamos montar um circuito simples com memória de comandos, duas pilhas, dois registros, um somador, um negador, And, Or e alguma constante (seja 5):


Resta criar memória para as constantes e você pode escrever o Forth compilador, mas, por enquanto, vamos tentar escrever algumas palavras diretamente na memória.

Dup


A palavra dup faz uma coisa simples: duplica os dados da célula superior da pilha de volta na pilha. Primeiro, você precisa carregar, por exemplo, nossa constante (in6 -> o1) na pilha, agora temos dados na primeira célula da pilha, mas quando você pega os dados, ele meio que desaparece da pilha, o que devo fazer? Existem registros para isso, carregamos a célula da pilha no registrador e salvamos lá, após o que a carregamos na pilha duas vezes, duplicando-a, o pseudo-código fica assim:

1. in6 -> o1 // Carregando a constante na pilha
2. in1 -> o3 // Carrega uma célula da pilha no registrador
3. in3 -> o1
4. in3 -> o1 // Carrega duas vezes o conteúdo do registrador na pilha

Isso é tudo, na memória ele se parece com isso:


E após a execução, a pilha fica assim:


Como esperado, nossas duas constantes. Isso é tudo, de maneira semelhante, você pode soltar, trocar, apodrecer etc.

Obrigado pela atenção, espero que não tenha sido chato!

Link do Github: GitHub

All Articles