quinta-feira, 8 de setembro de 2022

Estrutura da tela do TK90X

A organização da tela do TK90X na RAM é complexa, como se pode observar no vídeo abaixo:

Um pequeno programa BASIC faz poke na memória de vídeo linearmente, de 16384 (#4000 hex) a 22527 (#57FF hex). O que se observa é que a tela vai sendo preenchida de forma não linear. Embora haja várias publicações que explicam essa organização, resolvi escrever sobre o tema também, com abordagem um pouco diferente.

O ponto de partida é o caractere, que pode representar letras, algarismos, símbolos, blocos gráficos ou, no caso do UDG, virtualmente qualquer coisa. Um caractere é um conjunto de 64 pixels, organizados numa matriz 8×8. O estado de cada pixel é representado por um bit, portanto são necessários 8 bytes para representar um caractere. Segue o exemplo do caractere “A”.

Byte 0: 00000000
Byte 1: 00111100
Byte 2: 01000010
Byte 3: 01000010
Byte 4: 01111110
Byte 5: 01000010
Byte 6: 01000010
Byte 7: 00000000

A tela do TK90X é formada por 256 pixels horizontais por 192 pixels verticais, portanto comporta no total 768 caracteres, em 24 linhas e 32 colunas. As linhas são numeradas de 0 a 23, em direção de cima para baixo. As colunas são numeradas de 0 a 31, em direção da esquerda para a direita.

Para construir um endereço dentro da RAM da tela, basta saber a linha (bits L0 a L4) e a coluna (bits C0 a C4) do caractere e a posição do byte desejado (bits B0 a B2):

Linha

Coluna

Byte

L4

L3

L2

L1

L0

C4

C3

C2

C1

C0

B2

B1

B0


Agora, basta rearranjar esses 13 bits como mostrado abaixo, para formar o endereço de 16 bits:

Endereço (byte mais significativo)

Endereço (byte menos significativo)

b15

b14

b13

b12

b11

b10

b9

b8

b7

b6

b5

b4

b3

b2

b1

b0

0

1

0

L4

L3

B2

B1

B0

L2

L1

L0

C4

C3

C2

C1

C0

Em Assembly Z80 há instruções para manipular bits, portanto não é difícil de se fazer o rearranjo acima. Entretanto no BASIC Sinclair, não há comando ou função equivalente, então a equação torna-se mais complicada. Considerando as variáveis L (linha), C (coluna) e B (byte), ficaria:

LET Endereco = 16384+2048*INT(L/8)+256*B+32*(L-8*INT(L/8))+C

O comando BASIC acima pode ser simplificado como:

LET Endereco = 16384+1792*INT(L/8)+256*B+32*L+C

Da posse dessas informações, agora fica possível de se fazer um poke linear na tela do TK90X. Segue a listagem do programa BASIC:

10 FOR L=0 TO 23
20 FOR B=0 TO 7
30 FOR C=0 TO 31
40 POKE 16384+1792*INT (L/8)+256*B+32*L+C,255
50 NEXT C: NEXT B: NEXT L
60 PAUSE 0

O vídeo mostrando a exibição do programa acima rodando é:

Para maiores informações sobre o assunto, veja:

  • Mike James, Guia avançado para o Spectrum. Lisboa/São Paulo: Editorial Verbo, 1984, p. 94.
  • Álvaro F. F. Borja, A tela do TK90X, Micro Sistemas, Nº 56, Maio/1986, p. 22.

2 comentários:

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.