Obrigado a Julio Marchi pelo espaço cedido na MSX All
 

Screen 2 Show

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


Como funciona o display com mapa
  Em vez de carregar a imagem direto na VRAM como faz o comando BLOAD do Basic, o programa display funciona através do carregamento da tela para a memória RAM, e depois da cópia da imagem da RAM para a VRAM. Isso nos dá o controle da transferência da imagem para a tela, tornando possível criar efeitos de animação durante o carregamento da imagem na tela.
  Como uma imagem de screen 2 é composta de uma tabela de padrões (pattern) e outra de cores (color), esta cópia é feita em duas etapas. Podemos transferir blocos de 1x8 pixels ou 8x8 pixels de cada vez entre a RAM e VRAM, sendo que é obrigatório transferir os dados do pattern e color do mesmo bloco por vez. A ordem que transferimos esses blocos é que dá o efeito de animação.


 

  Normalmente, a cópia dos blocos para a VRAM é feita através de um programa em Assembly, que determina a ordem em que eles são transferidos. Entretanto, algumas animações podem ser extremamente complexas para serem feitas desse modo.
  Para facilitar a criação de animações, criamos um mapa depois do código de carregamento, contendo a ordem de transferência dos blocos. Esse mapa contém ponteiros para os blocos de 8x8 pixels. Dessa forma, tudo que o código de display principal tem a fazer é ler o mapa, de forma a determinar qual bloco copiar e, então, copiar.


 

  Como a screen 2 possui 768 blocos de 8x8 pixels, necessitamos de 2 bytes para representar cada endereço. Dessa forma, com mais 1536 bytes, podemos colocar nosso mapa na RAM.

  O mapa contém valores de &H0000 a &H17F8 (767 x 8), com salto de 8 em 8. Esses valores com as ordens seguem o padrão da screen 2, mas para blocos de 8x8 pixels. Veja o diagrama a seguir com os valores de ponteiro seguindo a ordem natural da screen 2.
MSX Screen 2:

 col 0 col 1 col 2 col 3 ... col31
+---------------------------------+
|0000H 0008H 0010H 0018H ... 00F8H| Linha 0
|0100H 0108H 0110H 0118H ... 01F8H| Linha 1
  ...   ...   ...   ...  ...  ... 
  Ao mudarmos essa seqüência no mapa, estaremos criando nossa própria animação.
  É importante introduzirmos um delay entre cada transferência de blocos, de modo a tornar a animação mais perceptível. O delay pode ser criado entre a transferência de cada bloco ou de um grupo de blocos (quadro).

  Quando lido, o valor é convertido para os endereços de RAM/VRAM pattern e RAM/VRAM color. Veja o exemplo a seguir.
E = MAP(pos)

RAM_PAT = E + &H9000
VRAM_PAT = E
RAM_COLOR = E + &HA800
VRAM_COLOR = E + &H2000


  Como gerar o mapa

  O mapa pode ser gerado através de imagens de 32x24 pixels contendo o progresso do display. Um programa pode ser criado para converter o progresso das imagens no mapa.
  Percorremos as imagens em ordem, obtendo sempre a imagem diferença entre a imagem atual e a anterior. Os pixels resultantes são os pixels (blocos) novos a serem inseridos no mapa.

 

  Assim, adicionamos ao mapa os novos elementos obtidos na diferença entre as imagens.
MAPA.insert(new_blocks)

  Os mapas da animação contêm exemplos de como criar animações para os displays com mapa.


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