Postagens populares

sexta-feira, 14 de setembro de 2012

Em que estou trabalhando nas horas vagas



É nisso que estou trabalhando ultimamente. 

Estou testando resoluções diferentes para a tela do bom e velho Sega Mega Drive/Genesis. O objetivo é ter espaço livre na memória do VDP (video display processor) para outras coisas, como por exemplo escrever texto ou utilizar sprites, junto com outras imagens. E isso é (mais ou menos) fácil de entender: O Mega Drive possui várias resoluções, conforme as especificações do console, mas estou utilizando como base a resolução de 320 X 224 píxeis.

Agora vem um pouco de matemática para compreender o que estou fazendo. Multiplicando-se a resolução base (320 X 224) obtém-se o valor de 71680 píxeis. Contudo, ó VDP não trabalha diretamente com píxeis, mas com tiles, que são blocos ou quadradinhos de 8 X 8 píxeis. Isto significa que um tile é igual a 64 píxeis (8*8=64). Então os 71.680 píxeis consomem exatamente 1120 tiles (71.680/64=1.120) em uma tela. Isso ocorre caso todos os tiles sejam diferentes entre si ou a imagem não seja otimizada para reaproveitar tiles iguais. Acontece que todo programador que trabalhe com plataformas deste tipo sabe reutilizar tiles ou faz outros truques para evitar ultrapassar os limites da memória VDP.

Parece confuso? Nem tanto.

No meu caso, testei várias resoluções diferentes das imagens, as quais reduzo as cores para teste. A propósito, aqui cabe um parentese sobre outra característica do Mega Drive. O console somente suporta 4 paletas de 16 cores cada, sendo que das 16 cores apenas 15 são cores de fato e mostradas na tela por cada paleta. A cor que sobra é utilizada como "transparência", isto é, não aparece quando o sprite ou imagem é utilizado. Depois de muita tentativa e erro cheguei a uma resolução de imagem de 240 X 224 píxeis, e a explico a razão desta escolha.

Novamente matemática: 240*224 píxeis equivalem a uma resolução com  53.760 píxeis na tela. Transformando isso em tiles temos que esta resolução equivale a 840 tiles (53.760/64=840). O basiegaxorz facilita muitas coisas para o programador. Como, por exemplo, ter vinculado ao comando Print vários caracteres ASCII que já vem embarcados na VDP. Contudo para ter essa facilidade temos de reservar pelo menos 256 tiles da memória. Isto implica em usar no máximo 864 tiles (1120-256=864) para imagens convertidas ou sprites. Como já disse a resolução de 240 X 224 equivale a 840 píxeis, então ainda sobra depois de toda esta matemática 24 tiles (840-864=24) para usar como eu deseja.

Óbvio que a técnica que estou trabalhando é ineficiente por não otimizar a imagem da resolução de 240 X 224. Caso a imagem fosse otimizada, para reutilizar píxeis, por exemplo, a quantidade de memória livre no VDP seria muito maior. Por hora isso me serve para alguns experimentos e testes. Espero logo já ter dominado razoavelmente esta característica do Mega Drive e ter compreendido como implementá-la no Basiegaxorz.

Talvez eu poste o código fonte comentado em breve para quem tive curiosidade fazer seu próprios testes.




Nenhum comentário:

Postar um comentário