![]() |
||
Obrigado a Julio Marchi pelo espaço cedido na MSX All |
||
Crie displays animados de tela para a screen 2 do MSX como no Graphos III.
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. |
||