Hello World no Nintendo DS

O Nintendo DS é um console portátil que curto bastante e que fez bastante sucesso ao longo de sua existência. Gosto muito de utilizá-lo como passatempo desfrutando de toda sua biblioteca de games.

Com o tempo surgiu a curiosidade sobre como desenvolver alguns homebrews para o NDS. Pretendo compartilhar aqui no blog os meus estudos e minhas brincadeiras explorando o desenvolvimento no NDS.

Nesse primeiro post vamos criar um simples Hello World e começar a entender algumas características do NDS.

Espero que gostem…

Para compilar o código utilizaremos o devkitpro que também é utilizado para outras plataformas da Nintendo. A sua instalação é bem simples e na página do próprio devkitpro é possível encontrar o passo-a-passo para cada OS. Irei utilizar o VS Code para escrever o código, porém nada impede que utilize o editor da sua preferência.

A partir desse ponto vou considerar que o devkitpro já está instalado e que também foi instalado a biblioteca nds-dev utilizando o devkitpro pacman.

Nos testes utilizo um NDS Lite velho de guerra, porém com um emulador de NDS o resultado deve ser o mesmo. Fica aqui a recomendação do DeSmuME. Para conseguir adicionar o executável .NDS no Nintendo DS irei utilizar um flash card com um cartão de 2GB. Existem várias marcas e modelos de flash card, escolha o que for mais interessante pra você. Um busca simples no Google por Flash card Nintendo DS já vai resultar em várias opções.

A tela do NDS possui 256 pixels de comprimento por 192 pixels de largura, cada caractere vai ocupar um quadrado de 8×8 pixels. Então teremos 32 colunas (numeradas de 0 a 31) e 24 linhas (numeradas de 0 a 23). Dessa forma o texto “Hello World!” irá ocupar 12 colunas e 1 linha.

Nesse exemplo estou utilizando o template hello_world que fica dentro da pasta examples, que está dentro da pasta onde o devkitpro foi instalado. Fiz apenas algumas modificações no arquivo main.cpp, como podemos vê abaixo:

// Inclui a biblioteca nds
#include <nds.h>
// Inclui a biblioteca padrão do C
#include <stdio.h>

int main(void) {
	irqSet(IRQ_VBLANK, 0);

	// Inicializa as funcionalidades do console na biblioteca
	// permitindo que a função iprintf imprima um texto
	consoleDemoInit();

	while(1) {
		// Tratador de interrupções VBlank
		swiWaitForVBlank();

		// Exibe o texto HELLO WORLD! no centro da tela
		// na coluna 12 e na linha 10
		iprintf("\x1b[12;10HHELLO WORLD!")
	}

	return 0;
}

Como podemos ver o arquivo é escrito em C/CPP. Ele não possui nada de complexo e para os pontos dignos de nota no momento adicionei comentários.

Vamos entender apenas um pouco mais a forma como exibimos o texto na tela do Nintendo DS.

Para exibir o “Hello World!” fazemos uso do método iprintf, como quero exibir o texto no centro da tela preciso posicionar o curso em um determinado ponto dela. A forma como consigo posicionar o cursor em um determinado ponto é fazendo uso do ANSI Escape sequences. O escape Cursor Position segue essa estrutura Esc[Line;ColumnH como no método iprintf informamos utilizando hexadecimal, a estrutra fica essa forma: \x1b[Line;ColumnH

Baseado nas informações do tamanho da tela e quanto cada caractere vai ocupar, chegamos nessa configuração:

iprintf("\x1b[12;10HHELLO WORLD!");

Depois foi apenas compilar utilizando o devkitpro e temos o resultado:

Código disponível nesse repo do Github.

Assim termina o primeiro post de como fazer um Hello World no Nintendo DS.

Abraço a todos.

Leave a Comment

Your email address will not be published. Required fields are marked *