[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

2 réflexions sur “[Nintendo DS] Tester libfat avec un emulateur

  1. perso, quand il s’agit de travailler sur une image FAT, je trouve les « mtools » plus pratique que de monter/démonter le fichier image… d’un autre côté, c’est assez surprenant de voir le répertoire image « intégré » au fichier nds (il y avait bien le système de fichier ‘gbafs’ qui permettait déjà de faire ça depuis longtemps). Est-ce qu’on ne se retrouve pas en lecture seule, du coup ?

    Enfin, bref. Je m’étais en son temps amusé à patcher desmume pour lui permettre de simuler une cartouche supercard/compactflash (cf http://sylvainhb.blogspot.com/2006/10/desmume-pypes-edit.html) , mais j’admets que c’est loin d’être commode (impossible de suivre les release des programmeurs officiels, etc).

    Et puis je me suis mis au Wifi et au son, d’où un chute d’intérêt pour tout ce qui est ‘émulateurs’ …

  2. ps: je viens de découvrir l’option –cflash= dans la version 0.7.3 de desmume. Tu utilises quoi, comme émulateur ?

    (tiens, ‘faudra que j’essaie leur support GDB, aussi)

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s