quarta-feira, 7 de março de 2007

Hardware

Antes de continuarmos a estudar a linguagem C, vamos olhar um pouco o hardware para o qual iremos desenvolver os programas: o Nintendo DS.

Ele é composto por:
  • um ARM 9 de 66 MHz, responsável pelo processamento principal dos jogos;
  • um ARM 7 de 33 MHz, responsável pela renderização de gráficos 3D e outros processamentos secundários;
  • memória RAM de 32 Mbits (4 MBytes).
Possui duas telas de 256x192 pixels com 32.768 cores - RGB de 5 bits por canal, totalizando 15 bits (2 ^15 = 32.768). O RGB é composto da seguinte forma: os 5 bits menos significativos são o vermelho; os 5 bits seguintes são o verde; os outros 5 bits são o azul e o bit mais significativo sempre vale 1 (o bit mais significativo é o mais à esquerda e o menos significativo é o mais à direita). A tela 0 é a de baixo e a 1 é a de cima. A coordenada 0,0 de cada tela fica no canto superior esquerdo. Os pixels são numerados de 0 a 255 horizontalmente e de 0 a 191 verticalmente. As coordenadas sempre são informadas no formato horizontal,vertical. Perceba isso olhando na figura abaixo:
Cada tela tem 4 níveis de background (fundo), onde são colocadas imagens ou traçados desenhos. O background 0 é o que fica por cima e o 3 é o mais de baixo. Acima desses 4 fundos existem 4 níveis de sprites. Sprites são pequenas imagens que podem ser movidas pela tela. O DS permite utilizar até 128 sprites distribuídos nesses 4 fundos. Para diferenciar background de sprite, imagine um jogo como o 1942. Os aviões e os tiros são sprites. A água e as ilhas (cenário) são o background.

Para fazer um teste, vamos fazer um pequeno programa. Os passos iniciais são os mesmos. Copie a pasta PALibTemplate para outra pasta e renomeie. Abra o Template.pnproj. Na área à esquerda, dê dois cliques em "main.c". Digite o seguinte abaixo de "PA_InitVBL();":
PA_Init16bitBg (1,0);
PA_Put16bitPixel (1,0,0,64512);
PA_Put16bitPixel (1,127,95,33760);
PA_Put16bitPixel (1,255,191,32799);
PA_Put16bitPixel (1,20,120,65535);
PA_Put16bitPixel (1,120,111,33791);

O que o programa faz:
  • Inicializa um fundo com todas as cores da tela do DS na tela 1 no background 0.
  • Desenha um ponto na coordenada 0,0 (canto superior esquerdo) na cor azul. Segundo a regra, 1 bit sempre setado, 5 bits para o azul, 5 bits para o verde e 5 bits para o vermelho: 1111110000000000. Isto transformado para decimal é 64512. Pegue uma calculadora científica (pode ser a do windows mesmo, é só ir em exibir e selecionar científica). Selecione para usar valores em binário. Digite 1111110000000000. Selecione para usar valores em decimal. Vai converter para 64512.
  • Desenha um ponto na coordenada 127,95 (centro da tela) na cor verde.
  • Desenha um ponto na coordenada 255,191 (canto inferior direito) na cor vermelha.
  • Desenha um ponto na coordenada 20,120 na cor branca.
  • Desenha um ponto na coordenada 120,111 na cor amarela.
Não se esqueça de pressionar ALT+2 e depois ALT+1 para gerar o programa para o DS.

3 comentários:

Leonardo Zimbres disse...

Não consegui ver o ponto vermelho no canto extremo da tela. Não sei se o culpado é o emulador, a programação ou minha vista, cansada de monitores de tubo.

Anônimo disse...

Tambem não consegui ver o ponto vermelhor não, deve ser culpa do emulador.

Anônimo disse...

Excelente!