Menus

Screen 2 Show

  Crie displays animados de tela para a screen 2 do MSX como no Graphos III.


Arquitetura da Screen 2
  Para que o programador possa fazer aberturas para a screen 2, é necessário o entendimento de sua arquitetura, pois este modo de tela do MSX 1 tem algumas características em particular.
  A screen 2 é uma matriz que possui 256 colunas e 192 linhas, numeradas de 0 a 255 e 0 a 191 respectivamente. Até aí nenhum problema. Porém, ela apresenta um modo particular de armazenamento de dados.
  Esse modo de tela agrupa 8x1 pontos, que são representados por dois bytes. O primeiro byte contém a informação das cores de frente e do fundo do grupo, chamado de color. O outro byte indica o padrão de como que aparecem as duas cores nesse grupo e é chamado de pattern. Nesse byte, cada bit 0 indica que o ponto é da cor de fundo, enquanto que o bit 1 indica que o ponto tem a cor de frente.
  Veja o exemplo a seguir.


  A metade mais significativa do byte color possui a cor vermelha (código 6 ou &B0110) para a cor de frente, enquanto que a metade menos significativa do byte possui a cor amarela (código 10 ou &B1010) para a cor de fundo. Observe na ilustração a correspondência entre os bits 0 e 1 do byte pattern nos pontos acessos.
  Com a utilização de grupos de 8x1 pontos nesse modo de tela, temos 256 / 8 ou 32 grupos em cada linha. Para a tela toda, temos 32 x 192 ou 6144 grupos. Como cada grupo ocupa 2 bytes, necessitamos de 12.288 bytes para armazenar uma tela.
  A memória de vídeo para a screen 2 possui duas áreas contíguas para o armazenamento de telas: a tabela de padrões e a tabela de cores. A tabela de padrões vai de 0 a 6143 (ou 0 a 17FFH), enquanto que a área de cores vai de 8192 a 14335 (2000H a 37FFH).
  Observe na ilustração abaixo a correspondência dos dois primeiros grupos de 8x1 com as duas tabelas.


  Conforme podemos observar na figura acima, os grupos de 8x1 são dispostos verticalmente. Entretanto, cada grupo de 8x1 pixels forma um outro grupo maior com 8 elementos. Assim, temos um bloco de 8x8 pixels chamado de caractere.
  A figura a seguir apresenta dois caracteres. O primeiro caractere (retângulo em azul claro) possui os grupos de 8x1 numerados de 0 a 7. O segundo caractere (retângulo em amarelo) possui os grupos de 8x1 numerados de 8 a 15.



  A disposição dos caracteres na tela é apresentada na figura a seguir. Observe a superposição dos caracteres da figura anterior nessa figura, no canto superior esquerdo.



  Qual seria o valor da primeira linha (grupo de 8x1 pixels) do caractere 32 (verde)? E a primeira linha do grupo 33 (laranja)?
  Se cada caractere possui 8 linhas, então calculamos a primeira linha de um caractere da seguinte maneira:
PLC = No_caractere x 8

  Dessa forma, a primeira linha do caractere 32 é:
PLC = 32 x 8 = 256

  Para o caractere 33, temos:
PLC = 33 x 8 = 264


  Cálculo da posição de memória a partir de uma coordenada de tela

  Quais as posições de memória de vídeo ocupadas pelo pixel (128,95)?


  Passo 1- A qual caractere que este ponto pertence?

  Primeiro calculamos as coordenadas do caractere na tela (sistema de coordenadas dos caracteres). Para isso, converta os valores das coordenadas de pixel para caracteres, utilizando a seguinte fórmula:
cx = FLOOR(X / 8)
cy = FLOOR(Y / 8)
  Então, temos:
cx = FLOOR(128 / 8) = 16
cy = FLOOR(95 / 8) = 11
  A partir dessas coordenadas, calculamos o número do caractere. Para isso, utilize a seguinte fórmula:
Ncaractere = cx + cy x 32
  Assim, temos:
Ncaractere = 16 + 11 x 32 = 368


  Passo 2- Qual a posição inicial deste caractere na memória de vídeo?

  Como vimos na seção anterior:
PLC = 386 x 8 = 2944


  Passo 3- Qual linha do caractere é esta coordenada?

  Coordenada de tela correspondente à linha inicial do caractere: 11 x 8 = 88
  Coordenada y do ponto em questão é: 95
  A linha do caractere é: 95 - 88 = 7


  Passo 4- Cálculo do offset da linha

  A posição de memória será: 2944 + 7 = 2951

  Para o byte pattern, temos o endereço 2951 (0B87H)
  Para o byte color, temos o endereço &H2000 + 2951 = 11143 (2B87H)


Marcelo Silveira
Engenheiro de Sistemas e Computação
Especialista em Processamento de Imagens e Inteligência Artificial
© MarMSX 1999-2020