Nintendo DS

De ROMHackingWiki

(Redirecionado de Nintendo Dual Screen)

Tabela de conteúdo

Sobre o Nintendo DS

O Nintendo DS é o atual portátil da Nintendo. Sua grande inovação foi usar duas telas, sendo que uma delas é sensivel ao toque. Depois do surgimento de Flashcards para o Nintendo DS, começaram a aparecer vários softwares para o console, conhecidos como homebrews.

Especificações Técnicas

Case Mod de um Nintendo DS, baseado no jogo Zelda
  • Processador Principal:ARM946E-S(67 MHz)
  • Processador Secundario: ARM7TDMI(33 Mhz)
  • Memoria Principal: 4Mbyte
  • Memoria Conjunta do ARM9/ARM7: 32kbytes
  • Memoria RAM dedicada do ARM7: 64Kbytes
  • VRAM: 656 Kbytes
  • Telas: 256 x 192 x 2 telas
  • Quantidade de Cores: 256,144 colors(R:G:B=6:6:6)
  • Processador de Graficos 2D: Cenario de Fundo, maximo de 4 camadas. Objetos, maximo de 128 objetos simultaneos.
  • Processador de Graficos 3D: Capacidade de Transformação, máximo de 4 megavertices por segundo. Poligonos, maximo de 120k poligonos por segundo. Taxa de Preenchimento de pixels, maximo de 30 megapixels por segundo.
  • Som: 16ch ADPCM/PCM, saida para microfone.
  • Controles: Painel sensivel ao toque,direcional,A,B,X,Y,R,L,Start,Select.
  • Modo Sleep.
  • Largura: 148 mm. Altura: 85 mm. Profundidade: 28 mm. Peso: 0.276 Kg.

Memória

Layout

ARM7
Nome	         Início 	Término	        Tam.	Espelhada       Largura / modos
BIOS (ARM7)	 0x00000000	0x00003FFF	16 KB	não	        desconhecida
Main RAM	 0x02000000	0x023FFFFF	4/8 MB	sim	        16 / todos
Shared RAM	 0x037F8000	0x037FFFFF	32 KB	?	        32 / 16,32
Private RAM	 0x03800000	0x0380FFFF	64 KB	sim	        32 / 16,32
Registers	 0x04000000	*	        *	*	        *
Wifi Control	 0x04800000	0x04800FFF	*	sim**	        16
Wifi MAC memory 0x04804000	0x04805FFF	8 KB	sim**	        16
GBA cart ROM	 0x08000000	0x09FFFFFF	32 MB	não	        16 / todos
GBA cart RAM	 0x0A000000	0x0A00FFFF	64 KB	sim	        8 / 8
ARM9
Nome	        Início   	Tam.	Espelhada	Largura / modos
ITCM	        0x00000000*	16 KB	sim	        32 / todos
DTCM	        0x00800000*	16 KB	sim	        32 / todos
Main RAM	0x02000000	4/8 MB	sim	        16 / todos
Shared RAM	0x03000000	32 KB	sim	        32 / 16,32
Registers	0x04000000	*	*	        *
Palette RAM	0x05000000	2 KB	sim	        16 / 16,32
Video RAM	0x06000000	?	?	        16 / 16,32
Sprite RAM	0x07000000	2 KB	sim	        16 / 16,32
GBA cart ROM	0x08000000	32 MB	não	        16 / todos
GBA cart RAM	0x0A000000	64 KB	sim	        8 / 8
BIOS (ARM9)	0xFFFF0000	4 KB	não	        desconhecida / todos

Registradores

Registradores
Nome	        Endereço:Largura	Descrição
DISPLAY_CR	0x04000000:32
WAIT_CR	0x04000204:16	        Registrador de Controle do Modo de Espera
KEYS	        0x04000130:16	        Registrador de Chaves
IME	        0x04000208:32	        Habilita Interrupção Master
IE	        0x04000210:32	        Habilita Interrupção
IF	        0x04000214:32	        Flags de Interrupção
CARD_CR1	0x040001A0:32	        Cartão CR1
CARD_CR2	0x040001A4:32	        Cartão CR2
CARD_PARAMS	0x040001A8:64	        Comando de Cartões
CARD_DATA	0x04100000:32	        Data de Cartão
CARD_DATA_RD	0x04100010:32	        Data de Cartão
HALT_CR	0x04000300:16	        Registrador de Controle de Travamento
POWER_CR	0x04000308:16	        Registrador de Controle de Energia
PROTECTION_CR	0x04000308:32	        Registrador de Controle de Proteção (ARM7)
SOUND504	0x04000504:16	        Registrador de Som BIAS (ARM7)

DMA

DMA significa Memória de Acesso Direto (Direct Memory Access), e se refere a habilidade de um
hardware periférico acessar a memória diretamente, independente do CPU Registradores DMA Endereço Nome 0x040000B0:32 R/W DMA0_SRC (0ffffffe) 0x040000B4:32 R/W DMA0_DST (0ffffffe) 0x040000B8:32 R/W DMA0_CR (ffffffff) 0x040000BC:32 R/W DMA1_SRC (0ffffffe) 0x040000C0:32 R/W DMA1_DST (0ffffffe) 0x040000C4:32 R/W DMA1_CR (ffffffff) 0x040000C8:32 R/W DMA2_SRC (0ffffffe) 0x040000CC:32 R/W DMA2_DST (0ffffffe) 0x040000D0:32 R/W DMA2_CR (ffffffff) 0x040000D4:32 R/W DMA3_SRC (0ffffffe) 0x040000D8:32 R/W DMA3_DST (0ffffffe) 0x040000DC:32 R/W DMA3_CR (ffffffff)
Formato dos registradores de controle:
Habilita:
    * W0: Parar DMA
    * W1: Ativar DMA
    * R1: Ocupada
    * R0: Pronta
Tamanho:
    * 0: Halfword (16 bits)
    * 1: Word (32 bits) 
Modo de Sincronização:
    * 0: Imediatamente
    * 1: Esperar até V-Blank
    * 2: Esperar até H-Blank
    * 3: Mostrar sincronização
    * 4: ?
    * 5: Cartão
    * 6: ?
    * 7: ? 
Modo Fonte:
    * 0: Incrementa
    * 1: Decrementa
    * 2: Fixa
    * 3: Indefinida
Modo de Destino:
    * 0: Incrementa
    * 1: Decrementa
    * 2: Fixa
    * 3: Incrementa, mas atualiza quando completa 


FIFO

ARM9 view: MAGIC180 (0x04000180:16)
Bits	Modo	Descrição
15	?	?
14	R/W	?
13..12	?	?
11..8	R/W	ARM7.MAGIC180.data
7..4	?	?
3..0	W	data
ARM7 view: MAGIC180 (0x04000180:16)
Bits	Modo	Descrição
15..12	?	?
11..8	W	data
7..4	?	?
3..0	R	ARM9.MAGIC180.data

Homebrew

Nintendo DS homebrew são os softwares escritos para o Nintendo DS por programadores independentes, como hobby, e é um contraste com a indústria de jogos/softwares na atualidade. Os softwares normalmente são escritos usando-se kits de desenvolvimento como [devkitPro], e são aplicados no DS através de cartões regraváveis. Entretanto, homebrewing softwares pode ser um hobby um tanto quanto duvidoso, uma vez que os cartões regraváveis também podem ser usados para piratear softwares e jogos originais.

Programação

IRC DS, um aplicativo homebrew para o Nintendo DS

A maior parte das aplicações Homebrew para o Nintendo DS são programadas em C/C++. Um kit de desenvolvimento muito popular é o já citado devkitARM. Algumas bibliotecas facilitam a programação para Nintendo DS, como libnds e PAlib. libfat ajuda desenvolvedores a escrever um sistema de arquivos FAT no dispositivo de armazenamento Homebrew, enquanto DSWiFi permite que desenvolvedores integrem o WiFi do DS em seus aplicativos. Vários tutoriais já foram escritos sobre os vários aspectos da programação e do sistema do Nintendo DS.

Um dos maiores problemas na programação caseira de DS é como acessar o sistema de arquivos de um cartão. Isso se deve ao fato de cada dispositivo homebrew utilizar uma interface diferente para acessar um cartão selecionado. Esse problema vêm sendo resolvido pela introdução dos drivers DLDI (Dynamically Linked Disc Interface - Interface de Disco Dinamicamente Conectada), que estão sendo utilizados no lugar dos antigos drivers estaticamente conectados, durante a compilação dos aplicativos homebrew do Nintendo DS. A biblioteca FAT atual, libfat, já vem capacitada para o uso desses drivers. Sua predecessora, GBA NDS FAT, pode ser modificada para permitir o uso desses drivers.

Kits populares de desenvolvimento:

Ferramentas e Bibliotecas:

  • Biblioteca GBA NDS FAT para usar o sistema de dados (desatualizada)
  • libfat Biblioteca para usar o sistema de dados (sucessora do GBA NDS FAT)

Documentação

No Developer´s Scene é possível encontrar algumas documentações interessantes para quem quer se aventurar em Nintendo DS Homebrew, o que pode auxiliar em hacks desse console. Um dos mais visualizados é o Grande e Sagrado Guia Introdutório ao Nintendo DS, a Fonte Suprema de Conhecimento Básico de Programação no Nintendo DS, que pode ser baixado juntamente com o código-fonte no link. Inglês.

Ainda no Developer´s Scene, é possível acompanhar passo-a-passo o processo de programação de um jogo, através de sua página de Tutoriais, que permite que você crie seu próprio homebrew. Acompanhando as aulas, em duas semanas já é possível estar com seu homebrew circulando pela internet, completamente jogável. Inglês.

Se você estiver desesperado atrás de informação, ou não tiver mais o que fazer, pode também dar uma olhada no fórum GBAdev.org, que atualmente possui uma compilação com aproximadamente 40 tutoriais. Inglês.

Ferramentas

DSLazy, o mais popular ripper para o Nintendo DS

Como a emulação de DS ainda está caminhando lentamente, assim estão as ferramentas para o console. Os editores hexadecimais usados em traduções de DS são basicamente os mesmos de GBA, sem muitas diferenças. Os editores gráficos também se limitam basicamente à um: Tile Molester, tendo que ser executado uma mudança em sua linha de cógido para permitir que ele abra arquivos maiores. Entretanto, o grande diferencial nas ferramentas de Romhacking para o Nintendo DS são os chamados "rippers", que conseguem extrair informações de uma ROM, e exibí-las de forma organizada para o usuário, permitindo até mesmo a alteração e substituição dos originais sem maiores complicações. Os rippers mais comuns e utilizados são o DSLazy, que foi abandonado em seu processo de desenvolvimento, e o Tahaxan, que é promissor, e está sendo atualizado ainda. Ambos os rippers acompanham uma documentação detahada de como utilizá-los, mas ainda não suportam todos os jogos, portanto, você pode dar sorte de poder usá-los em seu hack, ou não. Um ripper foi lançado recentemente, chamado DSBuff, e é praticamente uma continuação do DSLazy, porém, com outro programador conduzindo o projeto. Pelo visto, vale a pena dar uma olhada.

Links Importantes

Ferramentas pessoais