quinta-feira, outubro 08, 2020

Memórias dos Anos 80: O Lepus 200 e o TVA 2052

Uma das preocupações nos últimos meses de estágio era se eu seria contratado. Preocupação que se mostrou tola no ambiente de crescimento rápido da Scopus. Não somente todos os estagiários foram contratados, como também vários dos meus colegas de turma (alguns anos mais tarde acho que pelo menos um terço da minha turma estava trabalhando na Scopus).

A minha expectativa era trabalhar no MicroScopus, mas tive a pequena decepção de ser alocado para o desenvolvimento de terminais. Felizmente a Scopus estava planejando duas novas linhas de terminais e projetos interessantes não faltaram. Nesses projeto tive o prazer de trabalhar com um verdadeiro mentor, a quem devo muito da minha competência como desenvolvedor (a minha incompetência eu devo a mim mesmo).


A primeira linha era composta de apenas um modelo, o Lepus 200. O objetivo era ter um terminal "bem simples" (em termos) e portanto de baixo custo (também em termos). Funcionalmente, o terminal emulava um VT52 da DEC, o padrão para os terminais dito "burros". Posteriormente descobrimos que a ideia do hardware veio de um application note da Intel (que você pode baixar daqui).

A linha anterior de terminais, o TVA1000, tinha por base o microprocessador 8080. A geração de vídeo era feita por um 8275, que é um controlador de vídeo alfanumérico. A principal característica dele era ter um buffer interno para uma linha de caracteres, o que reduz as necessidades de acesso à memória de vídeo. Uma vez carregado o buffer, o 8275 cuidava de gerar as "n" linhas de pontos correspondentes. No TVA1000, a carga desse buffer era feito por DMA, usando um 8237 (nesta época a gente sabia de cor os números de todos estes chips da Intel, bem como as suas principais características). O firmware ficava em EPROMs, incialmente a 2708 de 1K e depois a 2716 de 2K. A placa previa várias EProm. A Ram era dinâmica (refrescada pelo acesso ao vídeo), na forma de chips de 4K x 1.

O Lepus 200 simplificava isso usando um 8085, o 8275 (ou um 8276 um versão mais simples e mais barata), um único chip de EProm (uma 2716 ou uma recente 2732 de 4K) e um único chip de Ram estática (uma grande novidade, mas limitada a 2Kbytes). Ao invés de um teclado inteligente, o Lepus usava uma simples matriz de teclas, com a  detecção das teclas feita pelo processador. O ponto importante era a ausência do DMA, A carga do buffer da 8275 também era feita pelo próprio processador. Como isso tinha que ser feito periodicamente, com um requisito não muito relaxado de tempo, esta carga era disparada por interrupção.

A placa lógica usava poucos chips... para a época

Esta técnica abria espaço para alguns truques divertidos. A forma mais eficiente de copiar os dados da memória para a 8275 era usar a instrução POP, que carrega dois bytes. Antes dos POPs era preciso habilitar um hardware adicional para os bytes lidos da memória serem escritos na 8275. Eu falei lá atrás que o Lepus tinha 2048 bytes de Ram, mas a tela apresentava 26 linhas de 80 caracteres. Como? Bem a 26a linha era uma linha de status e era montada copiando trechos da EProm ao invés da Ram (exceção: a indicação da linha e coluna do cursor, olhe de novo a tela lá no alto). A 25a era sempre em branco, para separar a linha de status. Isto era feito escrevendo brancos usando PUSH.

O endereço de memória associado a cada linha da tela não precisava mais ser fixo, uma tabela definia isso. Rolar a tela não envolvia mais mover 23x80 caracteres, mas apenas os 23 ponteiros desta tabela. O refrescamento da tela podia também ser usado para limpeza, bastava usar os PUSHs ao invés dos POPs.

Se alguém fez as contas ali atrás, o vídeo usava 1920 bytes da Ram. Sobravam 128 bytes para as variáveis, buffers de teclado e comunicação e para a pilha. Tivemos muito orgulho de fazer um código não apenas eficiente no uso de memória, mas também limpo e rápido (o terminal aguentava em tempo real quase tudo que fosse enviado a espantosos 19200bps). A única coisa que não conseguimos foi fazer o software caber em uma 2716, foi preciso usar uma 2732.

A segunda linha era o TVA2000, a nova plataforma para terminais. Era bem semelhante ao Lepus, porém com maior capacidade de memória. Nosso trabalho aqui foi criar a infraestrutura para os terminais futuros (talvez esteja me confundindo, mas acho que eu fiz a maior parte disso) e o primeiro modelo, o TVA2052 (também emulando o VT52). Muita coisa do software foi comum entre os dois projetos e acabei ficando com uma "laço sentimental" maior com o Lepus.

Uma "brincadeira" à parte neste projeto foram as "EProms de Teste". Uma das atividades mais complicadas é "fazer nascer" um projeto de hardware baseado em microprocessador. No primeiro momento você não pode ter certeza de nada, tem que ir testando cada parte. A minha amizade com os projetistas de hardware (algo que não era compartilhado por todos os membros da engenharia) e minha formação de engenheiro fazia com que eles me procurassem com frequência pedindo alguma ferramenta de teste. Os primeiros testes eram a EProm com "JMP 0", "escreve 55 na memória", etc). Lembro de um teste mais sofisticado de memória (ainda tenho um xerox do artigo com o algoritmo). Não eram projetos oficiais e alguns ganhavam (por brincadeira) um "(C) DQSoft".

Minha "obra prima" foi o Monitor. Ele começou no projeto de formatura, quando consegui um xerox da listagem de um monitor bem básico de um kit de ensino da Intel. É claro que eu achei que o código era ruim (já falei da minha arrogância juvenil?). Durante o projeto de formatura eu fui reescrevendo algumas partes e acrescentando mais funções. Já na Scopus, eu fiz o comando de "desassembly" (que listava o código Assembly a partir do código de máquina), aproveitando que o conjunto de instruções do 8080 é bem organizado. E aí veio a cereja do bolo: perceber que as tabelas para o desassembly podiam ser usadas no sentido contrário. Com isso ficava fácil criar pequenas rotinas direto na tela do terminal, digitando código Assembly (antes disso o jeito era fazer a conversão manualmente e entrar com o código em hexa). Alguns dos meus colegas de turma usaram bastante esta ferramenta em alguns desenvolvimentos posteriores.

Nenhum comentário: