[Nintendo DS] Tester libfat avec un emulateur

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

Publicités

[Nintendo DS] Lecture / Ecriture sur la carte SD du Linker

Un principe pourtant simple, mais enfin .. j’ai eu bien du mal …
Pour débuter j’ai décider d’utiliser le Makefile des exemples de la libnds. Mais dans ce dernier on trouve la ligne suivante :

LIBS := -lnds9

Pour pouvoir utiliser la bibliotheque libnds-fat on doit alors modifier cette ligne comme suit :

LIBS := -lfat -lnds9

Désormais les entrées sorties sont possibles. Je n’insisterai pas sur le sujet, mais voici une adresse bien utile :
Utilisation des commandes d’entrée sortie : http://chishm.drunkencoders.com/libfat/
De même apres compilation, le programme NDS est susceptible de ne pas marcher, il faut penser à lui appliquer le patch DLDI propre à votre linker.

[Nintendo DS] Programmation NDS sous Linux

( une autre note vient de paraître sur la lecture écriture avec la DS )

Voila le sujet me semble peu documenté sous linux, j’ai donc décidé de partager mon experience sur le sujet. Je suis au début de mon parcours mais j’ai de grands projets 🙂

NDS signifiant bien sûr Nintendo DS.

Préparation du dossier de travail :

1. Créer un dossier devkitPro ou bon vous semble.

1. Telecharger devkitARM(last : devkitARM_r20-linux.tar.bz2) et le decompresser dans le dossier devkitPro.

2. Télécharger libnds, libfat-nds et dswifi (http://sourceforge.net/project/showfiles.php?group_id=114505) puis decompresser tout ces dossiers dans un dossier libnds lui même dans le dossier devkitPro.

3. Désormais assurez vous de disposer des variables d’environnement suivantes :

– LIBNDS = …../devkitPro/libnds

– DEVKITPRO = …../devkitPro

– DEVKITARM = …../devkitPro/devkitARM

Il ne reste plus qu’à tester la compilation . Pour ce faire des exemples sont disponibles sur le site de devkitPro. Voici alors un exemple de compilation :

[bodman@bodman hello_world]$ ls
hello_world.pnproj hello_world.prj Makefile source
[bodman@bodman hello_world]$ make
main.cpp
arm-eabi-g++ -MMD -MP -MF /home/bodman/SOURCE_EZFLASH/devkitPro/nds-examples/Graphics/2D/hello_world/build/main.d -g -Wall -O2 -mcpu=arm9tdmi -mtune=arm9tdmi -fomit-frame-pointer -ffast-math -mthumb -mthumb-interwork -I/home/bodman/SOURCE_EZFLASH/devkitPro/nds-examples/Graphics/2D/hello_world/include -I/home/bodman/SOURCE_EZFLASH/devkitPro/nds-examples/Graphics/2D/hello_world/build -I/home/bodman/SOURCE_EZFLASH/devkitPro/libnds/include -I/home/bodman/SOURCE_EZFLASH/devkitPro/libnds/include -I/home/bodman/SOURCE_EZFLASH/devkitPro/nds-examples/Graphics/2D/hello_world/build -DARM9 -fno-rtti -fno-exceptions -c /home/bodman/SOURCE_EZFLASH/devkitPro/nds-examples/Graphics/2D/hello_world/source/main.cpp -o main.o
linking hello_world.elf
built … hello_world.arm9
Nintendo DS rom tool 1.33 – Jan 27 2007 16:00:04
by Rafael Vuijk, Dave Murphy, Alexei Karpenko
built … hello_world.nds