Caracteres de 6 bits
Eletrônica

Caracteres de 6 bits


O demo BR?-TK-HUE! foi um excelente exercício de programação assembly no TK90X, que me rendeu aprendizados preciosos. Se prestar atenção na fonte dos caracteres rolando (scroll) na tela em magenta, pode-se perceber que é mais estreita que o padrão do BASIC.


A fonte da ROM do TK90X - gravada a partir do endereço 15616 (#3D00) - é constituída por caracteres de 8×8 pixels. A matrix representando os pixels é armazenada em 8 bytes, sendo que a posição horizontal é dada pelos bits 0 a 7 e a vertical, pelos bytes 0 a 7.

Bit 7 6 5 4 3 2 1 0
Sub-linha 0Byte 00 0 0 0 0 0 0 0
Sub-linha 1Byte 10 1 1 1 1 1 0 0
Sub-linha 2Byte 20 1 0 0 0 0 1 0
Sub-linha 3Byte 30 1 0 0 0 0 1 0
Sub-linha 4Byte 40 1 1 1 1 1 0 0
Sub-linha 5Byte 50 1 0 0 0 1 0 0
Sub-linha 6Byte 60 1 0 0 0 0 1 0
Sub-linha 7Byte 70 0 0 0 0 0 0 0

Os caracteres usados na rotina de scroll do demo são mais estreitos, com 6×8 pixels. Se fosse criar uma nova fonte para os 96 caracteres ASCII, seriam necessários 768 bytes de RAM. Julguei este consumo de memória excessivo e resolvi usar outra abordagem. Na verdade, a técnica descrita a seguir foi baseado no capítulo 6 do livro "Machine code sprites and graphics for the ZX Spectrum: a complete guide to sprite coding" de John Durst (acessível neste link).

Para converter um caractere de 8 para 6 bits, a solução é óbvia: basta descartar dois bits, o que pode ser feito facilmente com as instruções de deslocamento e rotação de bits do Z80. Como os caracteres do TK90X possuem espaçamento dos dois lados, poderia ser removido um deles, o bit 0 ou 7. Faltaria então remover somente mais um bit mas, qualquer que seja, acaba descartando parte do caractere. No livro citado, sugere-se remover o bit 4 que, especialmente para letras maiúsculas, não deforma tanto os caracteres, exceto as letras I, T e Y:


Observa-se ainda que os algarismos também ficam bons, exceto por 1 que fica assimétrico e 7, que é cortado.

Se for removido o bit 1, as letras minúsculas ficam melhores, exceto por b:


Além disso, este é o melhor formato possível para o Y, embora fique meio baixinho. A solução neste caso, não muito elegante, é alterar diretamente um dos bytes desta letra.

A remoção do bit 6 resulta formato melhor para vários dos símbolos, os algarismos 1 e 7 e as letras I e b:


Finalmente, 0 e N, por terem uma linha oblíqua, somente fica bons se for removido o bit 2:


Elaborei a sub-rotina MakeChr6, disponível no código fonte "BR-TK-HUE-P2.asm", que faz um modelo de caractere 6×8 a partir do modelo da ROM, descartando o bit 7 e um outro bit, a escolher entre 1, 2, 4 ou 6. Somente no caso da letra Y é feita uma modificação adicional no byte 1 para aumentar sua altura. O resultado fica quase perfeito:


a não ser pelos símbolos & e ©, mas como não são tão importantes, foram deixados como estão. Na figura, a parte superior mostra os caracteres processados pela rotina e, na inferior, os originais da ROM. Na minha opinião, os caracteres 6×8 são mais agradáveis aos olhos.

A título de esclarecimento, caracteres de dimensão 6×8 não são algo inédito, pois há as bem conhecidas rotinas que imprimem de 40 a 42 colunas. O que considero como algo novo é o fato de não usar uma matriz extra de caracteres, economizando centenas de bytes de RAM.



loading...

- Grotesk
Apesar do nome sugerir algo grotesco, não é nada disso, trata-se de uma fonte FZX para o TK90X. Esta é uma fonte bem grande, com altura de 32 pontos que corresponde a 8 linhas da fonte normal do TK90X. Grotesk é a maior das fontes FZX que conheço....

- Fzx Scroll Demo
Criei a rotina FZX Scroll para permitir o rolamento de um texto na tela do TK90X, usando fontes FZX. A ideia era que esta rotina fosse incorporada em um programa. Para auxiliar quem não tem familiaridade em mexer com assembler, lanço agora o FZX Scroll...

- Término
Eu fiz uma nova fonte em padrão FZX inspirada na Terminus.  Procurei restringir a altura dos caracteres em 8 pontos, para que possa caber dentro de uma linha de atributos de cores. Apesar dos pixels na tela do TK90X serem de alta resolução (192×256),...

- Fontes Fzx Roundel
Roundel é um par de fontes (com e sem serifa) em padrão FZX com formato arredondado e de tamanho grade.  Roundel Sans Roundel Serif Originalmente estas fontes continham apenas caracteres do códigos 32 (espaço) a 127 (copyright). Para torná-las...

- Editando Telas No Zx Paintbrush (parte 1)
O demo BR?-TK-HUE! resultou de um exercício para exibir figuras coloridas de dimensões maiores que o da tela do TK90X. Não digo que fui inteiramente bem sucedido, pois há problemas que causa cintilação na tela, o que me obriga a repensar sobre temporização. ...



Eletrônica








.