terça-feira, junho 12, 2018

VGA Serial Terminal para o RC2014

Uma das características do RC2014 (e do computador 6502 que eu montei) é necessitar de um terminal serial. Até o momento eu vinha usando PCs, mas estou estudando algumas alternativas (que irão aparecer aqui no blog se eu tiver sucesso). A opção que eu analiso aqui é uma placa, projetada por Marco Maccaferri, para ser espetada no backplane do RC2014. A placa possui um conector USB para o teclado e um conector para ligação a um monitor VGA. Eu montei o kit que o autor vende no Tindie, mas a documentação está disponível para quem quiser fabricar a placa e ir atrás das peças.




Uma coisa interessante é que a placa utiliza um microprocessador Parallax Propeller. Trata-se de um chip um tanto exótico, mas com recursos que facilitam a conexão do teclado USB e a geração dos sinais de vídeo. O firmware é carregado de uma EEProm 24LC256. A placa obtém a alimentação e os sinais seriais do barramento do RC2014, mas não seria difícil usar a placa em outros projetos, já que ela utiliza só estes sinais.

O firmware implementa um terminal serial que suporta uma boa quantidade de comandos ANSI / VT-100, inclusive os de seleção de cores para os caracteres. No lado USB é suportado somente teclado (portanto nada de ligar um hub, o teclado tem que ser ligado direto).

A montagem foi tranquila e a placa funcionou de primeira. O monitor foi o display LCD que já vimos antes. Eu usei um mini-teclado brasileiro, o que exigiu algumas mudanças no firmware. Por preguiça, decidi mudar diretamente os bytes na EEProm ao invés de alterar os fontes e recompilar. Eu usei um programador TL866 para ler, alterar e regravar o firmware, mas não seria difícil fazer uma gambiarra com um Arduino e algumas linhas de código.

A única tecla complicada foi a "/ ?". Consultando a documentação oficial de códigos das teclas dos teclados USB (que você pode baixar daqui), descobri que o código é 0x87 ("international1"). Entretanto, a tabela no firmware suporta somente códigos de 0 a 0x7F. Para simplificar, coloquei os código de / ? na tecla Ç.

Para testes escrevi um pequeno programa em BASIC:

10 ESC$=CHR$(27)
20 PRINT ESC$+"[2J";
30 FOR I=1 TO 7
40 FOR J=0 TO 7
50 C$=STR$(3*J+1)
60 C$=RIGHT$(C$,LEN(C$)-1)
70 PRINT ESC$+"["+RIGHT$(STR$(I),1)+";"+C$+"H";
80 PRINT ESC$+"["+RIGHT$(STR$(29+I),2)+";"+RIGHT$(STR$(40+J),2)+"m";
90 PRINT " X ";
100 NEXT J
110 NEXT I
120 PRINT ESC$+"[37;40m";

O resultado foi totalmente satisfatório, estou pensando seriamente em adotar esta placa na versão CP/M-80 do RC2014 que vou montar.

Nenhum comentário: