Développer sur GameBoy Advance
Développer sur GameBoy Advance
[Méthode manuelle]
Remontez l'arborescence pour trouver la méthode automatique!
Par Linuxshell
Salut à tous pour cette introduction au développement GBA. Nous commencerons ici par une préparation des logiciels indispensables à la programmation GBA. Plusieurs méthodes, plus ou moins simples mais également plus ou moins configurées, sont possibles pour le développement. Nous nous intéresserons dans un premier temps à la configuration manuelle, la plus appropriée à mon goût(bien que des solutions très simples soient possibles, mais nous le verront plus tard).
[Disclaimer On]
Bien que nous essayons d'assurer la fiabilité de l'information figurant sur cette page,
l'auteur (et l'hébergeur) ne peut être tenu pour responsable de quelque perte, dommage
ou désagrément provoqué par le fait d'une erreur, d'une inexactitude ou d'une omission
figurant sur ces pages.
[Disclaimer Off]
Table des matières [Méthode manuelle]
1. Préparation de l'environnement de programmation
->1.1 Obtenir les outils
->1.2 Compiler Binutils
->1.3 Compiler GCC
->1.4 Installer la Newlib
->1.5 Recompiler GCC
2. Utilisation de la LibGBA
->2.1 Installer la LibGBA
->2.2 Tester les exemples fournis
Préparation de l'environnement de programmation
1.1 Obtenir les outils
Tout comme de nombreuses machines, telles la Dreamcast, la Saturn, etc..., la GBA peut se
programmer via les outils gratuits distribués par GNU. Vous aurez besoin de télécharger:
-binutils
-gcc
-newlib
Une fois les outils obtenus, il nous faut configurer l'environnement, j'utiliserai des dossiers
que vous pouvez tout à fait remplacer pour que cela convienne à votre machine:
-répertoire où se trouvent les sources: $SRC = /usr/local/gbadev/src
-répertoire destination des binaires: $BIN = /usr/local/gbadev
-répertoires donc on aura besoin ultérieurement:
# mkdir binutils-build
# mkdir gcc-build
# mkdir newlib-build
1.2 Compiler Binutils
Tout d'abord il vous faudra compiler Binutils. Ce dernier contient les outils tels que l'assembleur,
le débuggeur, et les outils différents nécessaires à la programmation(pas seulement la programmation
GameBoy Advance mais aussi la programmation sur PC, Dreamcast, etc...).
Voilà le directives:
# cd $SRC
# tar zxvf binutils-X-XXX
# cd binutils-build
# ../binutils-X-XXX/configure --prefix=$BIN --target=arm-thumb-elf
# make; make install
# cd ..
# rm -rf binutils-build/ binutils-X-XXX/
Normalement jusque là pas de problème...ou du moins j'espère pas ;)
1.3 Compiler GCC
C'est ici que les choses se corsent! Explications plus en détails:
La compilation de GCC produira une erreur(!). Car à la fin de la compilation de celui-ci, les Makefiles
produiront un test pour vérifier si le compilateur peut produire un exécutable, or afin d'en créer un,
il faut que la newlib soit installée d'abord! Mais pour compiler la newlib, il nous faut GCC!!
Nous procéderons alors quand même à une installation afin d'arriver à nos fins...
# export PATH=$PATH:$BIN/bin
# cd $SRC
# tar zxvf gcc-X-XXX
# cd gcc-build
# ../gcc-X-XXX/configure --prefix=$BIN --target=arm-thumb-elf
# make; make install
# cd ..
Mais on efface pas tout cette fois-ci.
1.4 Installer la Newlib
Installons à présent la Newlib ;)
# cd $SRC
# tar zxvf newlib-X-XXX
# cd newlib-build
# ../newlib-X-XXX/configure --prefix=$BIN --target=arm-thumb-elf
# make; make install
# cd ..
# rm -rf newlib-build/ newlib-X-XXX/
On commence à en avoir l'habitude de cette procédure... ;)
1.5 Recompiler GCC
Maintenant que la Newlib est installée, nous allons recommmencer la construction d'un compilateur
propre. Toute erreur qui surviendrait à présent, n'est pas attendue.
# cd $SRC
# cd gcc-build
# make; make install
# cd ..
# rm -rf gcc-build/ gcc-X-XXX/
Utilisation de la LibGBA
2.1 Installer la LibGBA
Après avoir décompresser la libgba dans le répertoire de votre choix(ici $BIN/src), nous nous confrontons
au premier problème, celui du compilateur. En effet notre compilateur compile(normal :)) pour arm-thumb-elf,
et l'auteur de la lib a un compilateur arm-elf. En fait nous pouvons compiler en arm-thum_elf grâce à l'option
-mthumb dans un shell.
Donc ligne 4 de $BIN/src/libgba/Makefile:
AS = arm-thumb-elf-as -marm7
CC = arm-thumb-elf-gcc
AR = arm-thumb-elf-ar
Et la compilation se fait désormais sans aucun problèmes.
2.2 Tester les exemples fournis
Pour pouvoir profiter de nos créations sur un bel émulateur, il faut traduire le binaire elf en exécutable GBA.
Et encore une fois nous n'avons pas la bonne ligne de commande dans le script approprié! :)
Modifions ligne 6 de $BIN/src/libgba/extra/gba-elf2bin:
OBJCOPY=arm-thumb-elf-objcopy
C'est fini!
Modifions à présent les Makefile pour les accorder avec nos choix...
Ligne 4 de $BIN/src/libgba/tests/Makefile:
CRT = $BIN/src/libgba/extra/crt0/gbacrt0.o
LDSCRIPT = $BIN/src/libgba/extra/gba.ld.Script
(Note: Si $BON n'existe pas remplacer le par le chemin entier...)
Ligne 8 de $BIN/src/libgba/extra/gba-elf2bin:
AS = arm-thumb-elf-as -marm7
CC = arm-thumb-elf-gcc
ELF2BIN = $BIN/src/libgba/extra/gba-elf2bin
Tout compile dès à présent.
Reste plus qu'à mettre ça dans un émulateur ou sur un linker et faire partager le fruit de votre labeur :)
Bon code et à bientôt!