Operação Básica do COSMAC Elf
O funcionamento do Elf depende da posição das chaves LOAD e RUN, que estão (entre outras coisas) conectadas aos pinos /WAIT e /CLEAR do microprocessador 1802.
Com as duas chaves abaixadas (/WAIT em nível alto e /CLEAR em nível baixo), o processador é ressetado, zerando os registradores R0, I, N, X e P.
Se levantarmos a chave RUN (mantendo LOAD abaixada), os dois sinais estarão em nível alto e o processador sairá executando as instruções ma memória, a partir da posição apontada por R0 (P = 0 seleciona o R0 como contador de programa).
É claro que antes de começar a execução nós queremos colocar um programa na memória e aí entra o "Load Mode". Partindo das duas chaves abaixadas (para garantir R0=0), levantamos a chave LOAD. Neste modo o processador está parado, porém aceitando requisições de DMA. Ao pressionar o botão IN o conteúdo das chaves de dados é colocado na via de dados e o sinal DMA IN é pulsado. O processador comanda uma escrita na memória, no endereço indicado por R0. Em seguida ele comanda um ciclo de leitura na memória (no mesmo endereço). O nosso circuito apresenta nos LEDs o valor lido. Por último, o registrador R0 é incrementado. Desta forma podemos carregar um programa na memória: basta ir colocando os bytes nas chaves e pressionando IN, tomando o cuidado de manter a chave MP (Memory Protect) abaixada.
Para revisar o programa, colocamos para cima a chave MP. Nesta posição o sinal de escrita do processador não chega até a memória. Aí colocamos as chaves LOAD e RUN para baixo (reset) e levantamos a chave LOAD. Cada vez que pressionarmos o botão IN o processador tenta gravar o valor das chaves de dados, mas não consegue. Os LEDs apresentarão o valor que já estava na memória.
O que acontece se levantarmos as duas chaves? A execução do programa é suspensa.
Hora de Piscar o LED
Pois é, em 1976 já existia o costume de piscar LED. O programa abaixo vem do artigo da Popular Electronics de Setembro de 1976.
0000 ; 0001 0000 ; 0002 ORG #0 0000 ; 0003 0000 ; 0004 INICIO: 0000 7A; 0005 REQ .. apaga o LED 0001 ; 0006 LACO1: 0001 F810; 0007 LDI #10 0003 B1; 0008 PHI R1 .. contador = 10xx 0004 ; 0009 LACO2: 0004 21; 0010 DEC R1 .. decrementa contador 0005 91; 0011 GHI R1 0006 3A04; 0012 BNZ LACO2 .. repete até contador = 00xx 0008 3100; 0013 BQ INICIO .. volta ao começo se LED aceso 000A 7B; 0014 SEQ .. acende o LED 000B 3001; 0015 BR LACO1 .. reinicia contador 000D ; 0016 000D ; 0017 ENDNós Estamos Aqui Para Somar
Vamos fazer algo mais complicado: somar números entrados com as chaves de dados. O nosso circuito permite usar as instruções IN e OUT para ler o valor nas chaves e apresentar um valor nos LEDs. Mas para usar estas instruções precisamos de SEX!
Diferente de outros processadores, as instruções IN e OUT do 1802 usam a memória ao invés do acumulador. Qual posição de memória? A apontada por um registrador. Qual registrador? O indicado por um registrador especial de 4 bits, chamado X. Rx também é usado para indicar um operando da instrução ADD (o outro é o acumulador). O nosso programa começa com SEX 1, selecionando R1 para esta função. R0 é o contador de programa e vamos usar o byte menos significativo de R2 para armazenar temporariamente a soma.
O meu programa, que "compilei" com o assembler que eu descrevi anteriormente, ficou assim:
0000 ; 0001 0000 ; 0002 ORG #0 0000 ; 0003 0000 ; 0004 INICIO: 0000 E1; 0005 SEX 1 .. R1 é o índice para acessar memória 0001 F813; 0006 LDI A.0(AUX) 0003 A1; 0007 PLO R1 .. e aponta para o nossa variável 0004 F800; 0008 LDI 0 .. soma = 0 0006 ; 0009 LACO: 0006 51; 0010 STR R1 .. salva soma em AUX 0007 64; 0011 OUT 4 .. mostra nos LEDs 0008 21; 0012 DEC R1 .. OUT incrementa Rx 0009 3F09; 0013 BN4 * .. espera apertar IN 000B A2; 0014 PLO R2 .. salva D em R2 000C 6C; 0015 INP 4 .. lê as chaves p/ AUX e D 000D 82; 0016 GLO R2 .. recoloca a soma em D 000E F4; 0017 ADD .. soma o valor lido 000F 370F; 0018 B4 * .. espera soltar IN 0011 3006; 0019 BR LACO .. repete 0013 ; 0020 0013 00; 0021 AUX: ,#0 0014 ; 0022 0014 ; 0023 ENDO vídeo abaixo mostra tudo isto na prática.
3 comentários:
Poderia disponibilizar a lista de componentes eletronicos que são utilizados e o diagrama do circuito ?
Está no post anterior aqui no blog.
Hello, Daniel.
A very nice write-up and execution, Sir. Thank you for sharing.
Cheerful regards, Mike, K8LH (Michigan, USA)
Postar um comentário