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 0 | Byte 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Sub-linha 1 | Byte 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
Sub-linha 2 | Byte 2 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
Sub-linha 3 | Byte 3 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
Sub-linha 4 | Byte 4 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
Sub-linha 5 | Byte 5 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
Sub-linha 6 | Byte 6 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
Sub-linha 7 | Byte 7 | 0 | 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