Certains vous le diront, même sans jamais avoir programmé en C, tant d’exemples l’utilisent que l’on en connaît forcement les bases. C’était aussi mon cas, mais après avoir commencé à vraiment l’utiliser, je pense que certaines notions restent indispensable.

Par exemple je viens de decouvrir que lorsqu’un programme est compilé avec l’option -g , il est possible d’executer une applicationavec ddd ( un debugger graphique) et objdump.

De même pour générer une bibliothèque on utilisera l’option -c (on obtient un fichier .o) et il est ensuite possible de rassembler des .o au sein d’un .a avec la commande ar -cvr qqchose.a qqchose.o.

Ce sera tout votre honneur :)

Je suis en train de faire des essais de lecture/écriture. Pour éviter d’avoir à tester mes programmes sur la console DS, j’ai donc recherché quelques liens pour rendre possible les tests sur emulateur.

Les sources que j’ai trouvé sont toutes plus ou moins clair, je vais donc centraliser quelques informations de base.

Pour tester des accès fichiers sur emulateur il va falloir greffer un système de fichier à notre binaire.

Etape 1 - construire un fichier image à partir d’un dossier

On utilise un script bash (fcsrimage). Celui-ci requière des droits root pour certaines de ses commandes, vérifier que votre compte figure dans la liste des sudo utilisateurs.

Usage : ./build.sh fichier.img dossier_a_utiliser/

Pour information voici la forme de ce script :

#création d’un fichier de taille équivalente à celle du contenu du dossier majorée de 64 octets.
SIZE=`du “$2″|cut -f1|tail -n1`
SIZE=`expr $SIZE + 64`
#Utilisation d’un programme C externe pour réaliser cette opération
$DEVKITARM/bin/zero “$1″ $SIZE
# format FAT fs
echo Formatting as FAT12
sudo /sbin/mkfs.vfat -F 12 “$1″
# make a temp dir for mounting
mkdir _disktmp
# mount the image
echo Mounting Image
sudo mount -o loop “$1″ _disktmp
# copy data into image
echo Copying Data
sudo cp -r “$2″/* _disktmp
# unmount image
echo Unmounting
sudo umount _disktmp
# remove mount point
rmdir _disktmp
# ‘bless’ est un programme c++ fournie avec ce script
echo Blessing image
$DEVKITARM/bin/bless “$1″

Etape 2 - lier le programme nds au système de fichier

Pour cela on utilise le programme padbin (disponible dans les binaries du devkitARM) :

padbin 512 rom.nds
cat rom.ds
fichier.img > out.ds

Etape 3 - Adapter le DLDI à son système de fichier particulier
on utilise dlditool (disponible dans les binaries du devkitARM) et le fichier fcsr.dldi (google is your friend)

dlditool fcsr.dldi out.ds

Désormais le fichier out.ds est exécutable avec un emulateur et permet donc de traiter les fichiers présents dans son système de fichier ajouté.

Etape BONUS - Forme d’un MakeFile

Pour faciliter la réalisation de tel patch durant la compilation voici la forme d’un Make file :


…….
run:
@padbin 512 $(TARGET).nds
@cat $(TARGET).nds $(TARGET).fat > $(TARGET).fat.nds
@dlditool fcsr.dldi $(TARGET).fat.nds
……


ATTENTION
: Ce Makefile nécessite un fichier .fat du même nom que le projet ,il s’agit du fichier image de la première partie, il est équivalent au fichier.img dont je parlais plus tôt. Il ne sera pas généré lors d’un make run.

Mes sources :

www.portabledev.com

www.playeradvance.org

Sujet assez récurrent, c’est pas trop mal d’augmenter un lieu ou trouver ‘une’ solution :)

Edit : Nouvelle méthode trouvée (source : http://ubuntuforums.org/showthread.php?t=496169).

Lorsque le problème survient il suffit d’exécuter la commande suivante :

xmodmap -e 'add mod4 = Super_L'

Il est recommandé de la mettre au démarrage.