Menus

Arquitetura da Screen 2

  Introdução

  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.
  256 x 192 pontos requerem 256 vezes 192, ou 49152, bytes para que cada byte da memória de vídeo controle independentemente um pixel. Como só temos 16 cores distintas, ou seja de 0 a 15 (0 a F em hexadecimal), então precisamos de 4 bits (0,5 byte) para armazenar o valor da cor de cada ponto da tela. Isto significa dizer que podemos guardar a informação de dois pontos em um único byte! Deste modo, necessita-se de 49152 divididos por 2, ou 24576, bytes para controlarmos todos os pixels da tela independentemente. Mas na época da criação do MSX, memória era um requinte de luxo. Como só se dispunha de 16 Kb para armazenar informações de vídeo, então criou-se uma maneira especial de armazenamento de informação, que gerou algumas e importantes limitações gráficas neste modo de tela. O sistema apresentado foi implementado mais tarde nas screens 5 e 7 do MSX 2, onde se dispunha de 128 Kb de memória de vídeo.
 

  Controle de pontos na Screen 2

  A screen 2 agrupa grupos de 8x1 pontos, que são representados por dois bytes. Um byte contém a informação das cores de frente e do fundo do grupo, chamado de color. O outro byte contém a informação de como que aparecem os pontos do grupo. O bit 0 indica que o ponto é fundo, enquanto que o bit 1 indica que o ponto tem a cor da frente. Este é o byte do padrão do grupo, chamado de pattern.


  Com a utilização de grupos de 8 pontos, tempos 256 / 8 =32 pontos em cada linha. Ao todo, temos 32 x 192 = 6144 grupos. Então, a memória ocupada total fica de 6144 x 2 = 12288 bytes. Enfim, cabe e sobra na memória de vídeo de 16 Kb.
   A memória de vídeo é então dividida em duas áreas: a área de padrões e a área de cores. A área de padrões vai de 0 a 6143 (ou 0 a 17FFH). A área de cores vai de 8192 a 14335 (2000H a 37FFH). O grupo 0 tem suas informações guardadas em 0000H e 2000H, o grupo 1 fica em 0001H e 2001H e assim sucessivamente.


  Os grupos de 8x1 são dispostos seqüencialmente, de forma que formem blocos de 8x8. Então, os blocos passam a ter a seqüência normal.




  Na imagem acima, observa-se os 4 blocos da imagem maior. Dentro de cada bloco de 8x8 é apresentada a seqüência de grupos.


  Cálculo da posição de memória

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

  Passo 1- Qual o bloco que este ponto pertence?

  bx = 128 / 8 = 16
  by = 95 / 8 = 11

  Bloco = 32*by+bx = 32*11+16 = 368

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

  Cada bloco ocupa 8 bytes. Logo, 368 = 2944.

  Passo 3- Qual a linha desta coordenada?

  Linha inicial do bloco: 11 * 8 = 88
  Linha do ponto: 95
  Linha do bloco = 95 - 88 = 7

  Passo 4- Offset da linha

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

  Pattern = 2951 (0B87H)
  Color = 11143 (2B87H)

Marcelo Teixeira Silveira
Engenheiro de Sistemas e Computação - UERJ
Mestre em Engenharia de Computação - UERJ

© MarMSX 1999-2005