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.