Muitos meses atrás, eu brinquei um pouco com isso, mas não tive sucesso em gerar vídeo de 80 colunas. Mais ou menos na mesma época, sem que eu soubesse, o pessoal do RC2014 estava trabalhando nisso também e conseguiram gerar um módulo de vídeo para o RC2014. As consequências do Brexit me impediram de comprar essa placa (frete e impostos para a União Europeia subiram muito), mas felizmente o software está disponível no github. Após muita procrastinação, resolvi olhar o código e entender o que foi feito.
Temos uma tela! |
O código no repositório está bem confuso e com comentários mínimos. Vou me concentrar aqui na versão de 80 colunas monocromático. O primeiro passo foi conseguir compilar, alguns arquivos precisam ser copiados do sdk da PiPico:
- pico_sdk_import.cmake de pico-sdk
- pico_extras_import.cmake de pico-extras
- fonts.h de pico-playground\scanvideo\textmode
Compilou mas não rodou... hora de arregaçar as mangas, levantar o capô e começar a depurar. No final era um erro bobo, um '<=' onde devia ser '<', o que fazia escrever onde não devia na memória. (Já reportei o erro e já foi corrigido no repositório)
O código foi claramente gerado pela combinação de exemplos do SDK e (provavelmente) trechos de outros programas. Um efeito colateral é a grande quantidade de linhas comentadas e trechos inúteis. O passo seguinte foi tentar limpar isso, para ficar mais fácil de entender. Durante a limpeza aproveitei para comentar um pouco o código.
Alguns comentários:
- Embora seja monocromático, o hardware é o padrão (capaz de gerar cores com 15 bits).
- O fonte dos caracteres não tem apenas pontos acesos e apagados, mas usa tons de cinza (o resultado nem sempre é bom) e está armazenado num formato complexo
- No início da execução o fonte é processado para gerar um formato apropriado para a rotina de display
- Na memória de vídeo os caracteres 0x20 a 0x7E são armazenados como 0x00 a 0x5E. Os códigos a partir de 0x5F correspondem aos caracteres reversos
Ainda falta limpar muita coisa, mas já ficou bem mais legível. O resultado está no meu github. Ainda não testei a comunicação serial, teclado e as sequências de controle.
O próximo passo é criar uma versão minha, com as seguintes alterações:
- Mudar o hardware e o software para trabalhar com somente duas cores (branco e preto) ou 16 tons de cinza, para reduzir o número de pinos de I/O usado (pensando em rodar no XIAO RP2040)
- Trocar o fonte de caracteres por um de duas cores e simplificar o seu pré-processamento
- Tratar teclado pt-br (aka ABNT2)
- Rever o código de tratamento dos caracteres recebidos pela serial
- Rever a implementação de cursor (não está robusta), tentar implementar cursor piscante.
Nenhum comentário:
Postar um comentário