Par Tuyêt Trâm DANG NGOC (dntt)
Outre ses fonctionnalités ludiques (fonctionnalités premières par ailleurs), la nintendo DS possède un ensemble intéressant de périphériques embarqués de base (microphone, haut-parleur, écran tactile, écran, plein de boutons) et additionnel (caméra, rumble, mémoire additionnelle) ainsi qu'une connectivité WI-FI, une bonne autonomie, robustesse et compacité pour un prix relativement convenable. Ses 2 processeurs ARM en font un excellent support de programmation, parfait pour s'initier à la programmation de ce type de processeur.
Dimensions (console fermée) | largeur 148.7mm, longueur 84.7mm, épaisseur 28.9mm |
Ecran Supérieur | retro-éclairé, 3 pouces, LCD couleur TFT transflectif, résolution 256x192 pixels et pitch de 0,24mm, affichage 260 000 couleurs |
Ecran tactile | Mêmes caractéristiques que l'écran supérieur, plus écran tactile analogique et transparent. |
Communication Sans Fil | Wi-Fi IEE 802.11 et format propriétaire Nintendo. La portée est de 10 à 30 mètres selon les conditions. Plusieurs joueurs peuvent utiliser des jeux multijoueurs avec une seule carte de jeu DS. |
Commandes | Ecran tactile, microphone à reconnaissance vocale intégré, boutons avant A/B/X/Y, manette +, boutons latéraux L/R, boutons Start et Select. |
Ports d'entrée / sortie | Deux ports jeu : l'un pour les cartes de jeu Nintendo DS et l'autre pour les cartouches de jeu Game Boy Advance. Prises pour casque stéréo et microphone. |
Autres caractéristiques | Horloge intégrée, date, heure, et alarme, étalonnage de l'écran tactile |
CPU | ARM7 à 33Mhz + ARM9 à 66Mhz |
RAM | 4 Mb |
Son | Hauts-parleurs stéréo capables de fournir un son surround virtuel selon les jeux |
Energie | Batterie Lithium ion fournissant dix heures de jeu pour quatre heures de charge, selon utilisation. Mode veille. Adaptateur d'alimentation |
Sources http://www.afjv.com/press0503/050302_specifications_techniques_nintendo_ds.htm
Les logiciels alors réalisés sur DS peuvent être alors de très bonnes qualité, en témoigne les deux logiciels suivants :
Le système d'exploitation Linux a également été porté sur Nintendo DS, et a été appelé DSLinux [Site].
Ce mini-tutoriel se décompose en deux phases. La première pour décrire le matériel dont on a besoin et vérifier que le chargement et l'exécution des applications peuvent bien se faire sur la DS. La deuxième phase rentre dans la programmation de la DS en elle-même.
Tout d'abord se procurer une DS Lite :-). Puis deux solutions :
Récupérer une cartouche de boot à mettre dans le slot-1 et une cartouche de stockage à mettre dans le slot-2. Personellement, j'ai utilisé une Superkey pour le slot-1 et une SuperCard Lite Micro SD pour le slot-2. Cette dernière comme son nom l'indique se sert de carte Micro-SD comme support de stockage. La carte Micro-SD doit être formatée en FAT 16 (Attention, la FAT 32 n'est pas supportée dans le Slot-2).
Récupérer quelques logiciels amateurs (homebrew), leur nom se
termine souvent par .nds
. Il y en a plein par là :
Le gros soucis est le problème de compatibilité. En effet, il existe tout un tas de cartouche de boot () et encore un plus gros tas de cartouche de stockage (). Tous évidemment conçus de manière très différentes.
De ce fait, un programme .nds
conçu pour être utilisé par la
cartouche de stockage X ne va pas être utilisable si elle est lue avec la
cartouche de stockage Y. Pendant un moment, le téléchargement des homebrew se
déclinait donc plusieurs versions (version pour la cartouche X, version pour
la Y, version pour la Z, etc.) et si notre cartouche n'était pas listée, eh
ben tant pis.
Heureusement est arrivé le DLDI (Dynamically Linked Device Interface). Les développeurs programment alors en suivant les spécifications de cette interfaces plutôt que de se reposer sur l'interface spécifique à chaque cartouche de stockage. Ensuite, un pilote (driver) spécifique à la cartouche devra être appliqué (patché) sur le programmme pour l'adapter à sa cartouche. Ainsi, plus de problème de compatibilité, il n'y a plus qu'un seul programme mis en téléchargement, et c'est à l'utilisateur de patcher le programme en fonction de son type de cartouche avec le pilote correspondant.
Sous Linux, il suffit de récupérer dlditool [Site officiel][En cache], et de l'appliquer de la manire suivante :
dlditool [-t<type>] [-r<offset>] <dldi>
<app>
Par exemple, pour ma SuperCard Lite, j'ai récupéré le pilote
sclt.dldi
[Site officiel][En cache]. Et pour un homebrew DS
joliedemo.nds
, je tape :
./dlditool -t nds sclt.dldi joliedemo.nds
Mon fichier est alors patché et sera fonctionnel pour ma cartouche SuperCard Lite. Il me suffit alors juste de le copier tel quel (par l'intermédiaire d'un lecteur de cartes) sur la carte MicroSD.
En démarrant alors ma Nintendo DS avec la cartouche de boot et la
cartouche de stockage (avec sa carte MicroSD qu'il ne faut pas avoir oublié
de remettre à l'intérieur), je pourrai alors sélectionner l'application
joliedemo.nds
qui sera chargée et exécutée.
Dans la solution précédente, les deux slots étaient utilisés, et donc, il était impossible d'étendre sa Nintendo DS avec des accessoires supplémentaires : par exemple de la RAM additionnelle comme celle fournie avec Opéra ou le Rumble (vibration) fournie avec Metroid Pinball (quoiqu'une cartouche de stockake incluant le rumble existe : SuperCard Rumble, mais je vous le déconseille car la fonctionnalité rumble a été mise au détriment de la RAM...). De plus, force est de constater que le Slot-1 est sous-utilisé puisqu'il ne sert qu'à booter.
Bref, la nouvelle solution est de fusionner tout ça et de ne faire qu'une seule cartouche qui se logera dans le Slot-1 et qui servira à la fois de boot et de stockage. Cela laisse ainsi le Slot-2 utilisable pour autre chose (RAM supplémentaire, périphérique additionnel comme la caméra fournie avec le jeu Otona No DS Kao Training, Rumble, etc.)
Le principe est ensuite le même que dans la première solution, dldi, stockage dans une Micro-SD...
A noter que dans les cartouches les plus récentes, le patchage DLDI est fait automatiquement par la cartouche.
Pour l'achat des cartouches, j'ai toujours acheté sur http://www.hopebuy.com (société basée à Hong-Kong) et je n'ai personnellement jamais eu aucun soucis avec eux ; délai de livraison très courts (3-4 jours), produits impeccables, supports (mail et forum) très réactifs.
Il y a deux manières principales de programmer sur DS.
Sur http://sourceforge.net/projects/devkitpro/, charger les paquetages suivants :
Créer un répertoire devkitpro
dans lequel vous créerez un
répertoire devkitarm
et libnds
. Positionnez les
variables d'environnement DEVKITPRO, DEVKITARM et LIBNDS respectivement sur
les chemins de ces répertoires.
Vous déasrchiverez/décompresserez le contenu de devkitARM
dans le répertoire pointé par $DEVKITARM
, libnds,
libfat-nds et dswifi dans celui pointé par
$LIBNDS
. Enfin vous désarchiverez nds-examples
là où vous voulez :-)
Testez la compilation d'un exemple en tapant simplement make
dans le répertoire contenant l'exemple. Cela génère alors un fichier
.nds
qu'il suffira alors de copier sur le support de stockage de
votre DS.
DSLinux est un noyau uClinux 2.6.14 modifié. Une fois DSLinux installé sur sa DS, le but sera alors de créer un programme qui sera exécuté au sein du système d'exploitation DSLinux.
Si vous n'avez pas l'intention d'écrire la moindre application sous DSLinux mais désirez installer DSLinux sur voter DS simplement pour frimer, il suffit de télécharger dslinux depuis http://kineox.free.fr/DS/ et de l'installer comme n'importe quelle application (voir section précédente).
Pour installer un environnement de développement pour DSLinux (texte fortement inspiré de http://www.dslinux.org/wiki/Compiling_DSLinux).
svn checkout
svn://dslinux.spline.de/dslinux/trunk dslinux
) PATH
le répertoire bin
de
dslinux et le répertoire bin
de
dslinux-toolchain
.dslinux
, taper make
menuconfig
afin de cross-compiler le noyau
dslinux. Les réglages par défaut marchent très bien.
Néanmoins, afin de personaliser votre noyau voici ce que vous pouvez
paramétrer :
DSLinux build type selection --> (DLDI) --> [*]
DLDI
Il est préférable de garder une construction pour le DLDI générique, néanmoins, vous pouvez choisir les autres type de stockage (DSMEM, GBAMP, etc.).
Enfin pour personnaliser dans la suite la configuration du noyau et aussi pour choisir les logiciels à installer, il est conseillé de sélectionner :
Kernel/Library/Defaults Selection ---> [*] Customize Kernel Settings [*] Customize Vendor/User Settings
Device Drivers ---> Graphics support ---> Console display driver support ---> [*] Mini 4x9 font [*] Mini 6x6 font [*] Mini 4x6 font
System Type ---> Nintendo DS Options ---> [*] Nintendo DS text console [*] Step-by-step debugging of the dslinux boot process [*] Swap L and R buttons x x
make
et attendez que tout se compile. Le
résultat se trouvera dans dslinux/images
.(Texte fortement inspiré de http://www.dslinux.org/wiki/Porting_Howto)
Il faut utiliser le shell de cross-compilation xsh. Pour le lancer taper dans le répertoire dslinux :
make xsh
Dans ce shell, pour compiler le programme C joliprogramme.c
,
taper :
$CC $CFLAGS $LDFLAGS joliprogramme.c -o joliprogramme
A noter que vos variables CC, CFLAGS et LDFLAGS ont été positionnées automatiquement en :
-xsh-> echo $CC ucfront-gcc arm-linux-elf-gcc -xsh-> echo $CFLAGS -O2 -g -fomit-frame-pointer -fno-common -fno-builtin -Wall -mswp-byte-writes -DCONFIG_NDS_ROM8BIT -mcpu=arm946e-s -mfpu=fpe3 -DEMBED -D__PIC__ -fpic -msingle-pic-base -Dlinux -D__linux__ -Dunix -D__uClinux__ -xsh-> echo $LDFLAGS -Wl,-elf2flt -D__PIC__ -fpic -msingle-pic-base -mswp-byte-writes
Le programme alors cross-compilé pourra être copié sur voter carte microSD et être exécuté depuis dslinux.
DSLinux se configure un peu près comme tout système UNIX. Les fichiers de
configurations se trouvent dans /etc
.
a) Configuration réseaux.
L'interface réseau sous DSLinux est appelé nds
et est WI-FI
802.11. Il ne supporte que le chiffrement WEP.
Commandes pour configurer son interface WI-FI :
iwlist nds scanning
iwconfig nds [essid sid] [key clef]
ifconfig nds inet adresse_IP [netmask
masque]
route add default adresse_passerelle
nameserver adresseIP_serveurDNS
udhcp -n -i nds
Toutes les commandes sont appliquées directement mais les effets ne
persistent pas au redémarrage du système. Elles doivent donc être appelées
par le script /etc/rc
qui est lancé par init
au
démarrage et qui lit le fichier de configuration /etc/rc.conf
.
Il suffit donc de paramétrrer les variables idoines dans ce fichier. C'est à
dire :
b) Configuration "graphique"
Le programme nano est utilisé pour offrir un environnement graphique reconnaissant l'écran tactile comme souris.
c) Gestion des terminaux virtuels