terça-feira, março 22, 2022

Experiências com o Modo Texto do PicoVGA

Neste post vou registrar as minhas experiências (até agora) com o Pico VGA (que eu apresentei aqui). Lembrando, o meu objetivo é fazer um emulador de terminal capaz de apresentar vídeo alfanumérico colorido com entrada através de um teclado USB.


Como falei no post anterior, o projeto PicoVGA não usa o ambiente normal do SDK da Raspberry Foundation. É preciso (como no SDK) ter instalado o "GNU Arm Embedded Toolchain". Uma versão adaptada (simplificada) do SDK está dentro do próprio projeto do PicoVGA.

O ajuste para indicar onde está instalado o compilador consiste apenas em editar dois arquivos bat, como descrito na documentação. Feito isso consegui compilar os exemplos sem problema.

A encrenca foi quando resolvi aproveitar o código de teclado que eu usei com o picoterm. Primeiro tinha umas esquisitices de defines no picoterm que me confundiram bastante. Depois eu vi que o SDK no PicoVGA é antigo, particularmente o tratamento da USB. Eu até tentei atualizar só esta parte, mas deu conflito com outras partes do SDK que usam USB. Atualizar o SDK vai dar bastante trabalho, talvez seja mais fácil compilar o PicoVGA com o SDK padrão.

Estudando um pouco o PicoVGA, verifiquei que existem seis modos de texto! Dois deles são exóticos (usam gradientes de cores), os candidatos para mim são quatro:

  • "mono text": todos os caracteres da tela são apresentados com a mesma cor de frente e fundo. A vantagem é que usa menos memória (só um byte por posição) e é rápido.
  • "foreground color text": aqui são usados dois bytes por posição, onde o primeiro é o código do caracter e o segundo é a cor de frente. A cor de fundo é a mesma para toda a tela. É este modo que o demo "matrix rain" usa.
  • "attribute text": aqui também são dois bytes por posição, o primeiro é o código do caracter e o segundo tem as cores de frente e fundo (4 bits para cada), como nos modos texto da CGA e VGA. Eu queria muito usar este modo, mas o display não ficou bom pois é muito processamento.
  • "color text": aqui são três bytes por posição: caracter, cor de fundo e cor de frente. É um pouco mais rápido que o "attribute text", o suficiente para o display de 80 colunas ficar bom.
Todos estes modos trabalham apenas com largura de 8 pontos para os caracteres. Nos testes que fiz não tinha mais nada rodando, na hora que colocar comunicação serial e teclado pode ser que falte processamento. O clock usado pelo PicoVGA foi 126MHz.

O timing vertical não ficou perfeito no monitor que testei, a primeira linha não aparece e a segunda está cortada. Mais uma coisa para investigar.

O próximo passo parece ser conseguir acertar a conexão de teclado via USB. Com isso e a comunicação serial funcionando vai dar para ver melhor quais modos são viáveis. Eu gostaria de poder controlar as cores de frente e fundo por caracter, mas dá para trabalhar bem com as outras opções.

Nenhum comentário: