Kana DS

Learning Japanese writing on the Nintendo DS

19 December, 2006

Arquitectura de Nintendo DS

El problema principal al que se enfrenta cualquier programador de Nintendo DS es su atípica organización y esquema de memoria. Entender cómo y para qué se usa cada banco de memoria es fundamental para poder hacer funcionar hasta la más simple de las aplicaciones.

Con esta entrada pretendo mostrar lo diferente que resulta programar un juego para consola de para PC, que es con lo que casi todo el mundo empezamos. Vamos a ver las entrañas de esta consola super-ventas con el siguiente esquema, prestado de Dev-Scene.com:



Los puntos a destacar son:

Memoria principal (4MB)
Almacena los ejecutables y la mayoría de los datos de juego en curso. Los juegos caseros normalmente no pasan de estos 4MB para evitar tener que acceder a la memoria del flashcart mediante FAT16/32, siendo el método dependiente de cada familia de cartuchos.

Procesador ARM 9 ( 32bits / 66Mhz )
Recoge las instrucciones de memoria principal, y cuenta con una caché de 32KB para instrucciones y otra de 16KB para datos. Por lo general, este procesador es el encargado de llevar las riendas del programa, ejecutar la lógica del juego, gestionar los recursos, etcétera.

Procesador ARM 7 ( 32 bits / 33Mhz )
Para minimizar el acceso a memoria principal, al ARM 7 tiene acceso a una pseudo-caché 'IWRAM' de 64KB para instrucciones y datos. Este procesador suele gestionar el audio e input, haciendo las funciones de un DSP a veces. Por lo tanto, es necesario que los ejecutables para el ARM7 sean pequeños y quepan totalmente en la IWRAM(justo debajo en el esquema)

Dejadme remarcar el hecho de que las aplicaciones para la consola requieren usar dos ejecutables diferentes: uno para el ARM9 y otro para el ARM7. El último normalmente será 'esclavo' del primero, y atenderá sus peticiones en cuanto a playback de sonidos, lectura del touchscreen etc. Por tanto, es necesario algun mecanismo para que ambos procesadores puedan comunicarse entre sí.

Una manera es, como se explica en el wiki de NDSTech, usar los dos bancos de memoria compartida etiquetados como 'wram' en el esquema. Cada banco posee 16KB y sólo está disponible para un sólo procesador a la vez. Alternando el acceso a cada banco, se puede implementar un sistema de paso de mensajes para por ejemplo transferir paquetes de red o buffers de sonido. Por suerte, ndslib provee un ejecutable estándar para el ARM7 que ya implementa funcionalidades básicas para gestionar efectos de sonido y lectura de los botones y la pantalla táctil.

Tenía pensado hacer el post más largo, pero para no hacerlo demasiado pesado, lo voy a dejar aquí. Pronto escribiré una continuación hablando un poco sobre el DMA y los bancos de VRAM -cuyo conocimiento es esencial para desarrollar en Nintendo DS- poniendo como ejemplo práctico el juego para la compo de navidad que estoy haciendo.

4 Comments:

At 16:27, Blogger ShAq said...

eih tio, eres un crack, acabo de descubrir este blog del juego, mola, ;)

 
At 16:39, Blogger Julio Gorgé said...

Qué pacha! A ver si nos vemos estas navidades.. este año Alicante no tiene nada que envidiar a Viena, estamos a 8º y con lluvias xD

 
At 15:56, Anonymous NeRu said...

ey, me encanta el trabajo que estas haciendo!! Sigue así!

 
At 03:07, Blogger Eduardo Jiménez said...

Muchas gracias por el post y muy bueno por cierto, es justo lo que necesitaba encontrar para un trabajo de escuela

 

Post a Comment

Links to this post:

Create a Link

<< Home