Aujourd'hui pensons aux heureux possesseurs d'une Nintendo DS qui veulent développer !

Installation de devkitARM

Devkitpro est un toolchain, c'est à dire un ensemble d'outils permettant de compiler des programmes sur diverses plateformes (ARM, PPC ou MIPS). La DS étant équipée de deux processeurs ARM7 et ARM9, il faut donc choisir de télécharger devkitARM.

mkdir -p nds/devkitpro
cd nds/devkipro
tar xjvf devkitARM_r23b-i686-linux.tar.bz2

Les fichiers Makefile des projets basés sur devkitpro ont besoin de deux variables DEVKITPRO et DEVKITARM. Définissons ces variables dans un script :

cd ..
cat > setup.sh << EOF
#!/bin/sh
export DEVKITPRO=~/nds//devkitpro
export DEVKITARM=$DEVKITPRO/devkitARM
EOF

Avant de lancer une compilation il suffira de taper :

source setup.sh

Installation de libnds

Maintenant que le chaintool est installé, récupérons la librairie libnds et décompresson-la dans un sous répertoire de devkitpro.

mkdir $DEVKITPRO/libnds
mv libnds-20071023.tar.bz2 $DEVKITPRO/libnds
cd $DEVKITPRO/libnds
tar xjvf libnds-20071023.tar.bz2
ln -s basic.arm7 default.arm7
cd ../..

Librairies supplémentaires

D'autres librairies ne sont pas obligatoire mais peuvent se révéler bien pratiques, à commencer par libfat.

mkdir $DEVKITPRO/libfat
mv libfat-src-20080530.tar.bz2 $DEVKITPRO/libfat
cd $DEVKITPRO/libfat
tar xjvf libfat-src-20080530.tar.bz2
cd ..

Après avoir décompressé cette libraire, il faudra appliquer quelques retouches avant de la compiler :

cat > libfat_nfstypes_fix.patch << EOF
--- libfat/include/fat.h    2008-05-10 21:34:41.000000000 +0200
+++ libfat_fixed/include/fat.h    2008-09-16 16:12:50.000000000 +0200
@@ -54,7 +54,7 @@
#  include <gctypes.h>
#else
#  ifdef NDS
-#    include <nds/ndstypes.h>
+#    include <nds/jtypes.h>
#  else
#    include "gba_types.h"
#  endif
diff -ru libfat/nds/include/fat.h libfat_fixed/nds/include/fat.h
--- libfat/nds/include/fat.h    2008-05-10 21:34:58.000000000 +0200
+++ libfat_fixed/nds/include/fat.h    2008-09-16 16:04:56.000000000 +0200
@@ -40,7 +40,7 @@
#define NDS
#endif

-#include <nds/ndstypes.h>
+#include <nds/jtypes.h>

typedef enum {PI_DEFAULT, PI_SLOT_1, PI_SLOT_2, PI_CUSTOM} PARTITION_INTERFACE;

diff -ru libfat/nds/include/nitrofs.h libfat_fixed/nds/include/nitrofs.h
--- libfat/nds/include/nitrofs.h    2008-05-12 11:03:44.000000000 +0200
+++ libfat_fixed/nds/include/nitrofs.h    2008-09-16 16:12:30.000000000 +0200
@@ -31,7 +31,7 @@
#ifndef _NITROFS_H
#define _NITROFS_H

-#include <nds/ndstypes.h>
+#include <nds/jtypes.h>

#ifdef __cplusplus
extern "C" {
diff -ru libfat/source/common.h libfat_fixed/source/common.h
--- libfat/source/common.h    2008-05-10 21:34:41.000000000 +0200
+++ libfat_fixed/source/common.h    2008-09-16 16:12:09.000000000 +0200
@@ -43,7 +43,7 @@
#include <gctypes.h>
#else
#  ifdef NDS
-   #include <nds/ndstypes.h>
+   #include <nds/jtypes.h>
#include <nds/system.h>

#  else
diff -ru libfat/source/libfat.c libfat_fixed/source/libfat.c
--- libfat/source/libfat.c    2008-05-23 21:37:46.000000000 +0200
+++ libfat_fixed/source/libfat.c    2008-09-16 16:05:11.000000000 +0200
@@ -111,7 +111,8 @@

if (setAsDefaultDevice) {
char filePath[MAXPATHLEN * 2] = "fat:/";
-#ifndef GBA
+#if defined(NDS) || defined(GBA)
+#else
if ( __system_argv->argvMagic == ARGV_MAGIC && __system_argv->argc >= 1 ) {

if ( !strncasecmp( __system_argv->argv[0], "fat", 3)) {
EOF
patch -p0 < patch_libfat.patch

cd libfat
make nds-release && make nds-install

Une autre librairie très utile est DSwifi

mkdir $DEVKITPRO/dswifi
mv dswifi-src-0.3.4.tar.bz2 $DEVKITPRO/dswifi
cd $DEVKITPRO/dswifi
make && make install
cd ../..

DevkitPRO et libnds sont à présent fonctionnels. Pour tester cet environnement, quelques exemples nds sont disponibles et de très bons émulateurs nds comme no$gba ou desmume (ce dernier étant disponible en packet debian) permettent de visualiser le résultat.

Have fun Wink