the Removers
Accueil du site > en Français > les Articles > la Programmation > Je veux développer sur Atari Jaguar !

Je veux développer sur Atari Jaguar !

partie I : mise en place de l’environnement de développement

mardi 5 décembre 2006, par Seb

Dans cette série d’article, nous allons voir comment se construire un environnement de développement Jaguar assez efficace puis nous ferons un petit tour des bibliothèques made in Removers.

Dans un premier temps, je vais résumer rapidement les outils qu’il faut posséder pour développer sur Jaguar. Ensuite, je détaillerai un peu plus comment construire un cross-compilateur C et je finirai en exposant un Makefile minimal qui permettra une utilisation efficace de ces différents outils. Mon discours sera résolument orienté vers une plate-forme Unix.

 Une Jaguar pour développer

Pour développer sur Jaguar, il vaut mieux posséder une Jaguar (nan ?!?). Pour développer relativement confortablement, il faudra modifier votre Jaguar pour qu’elle intègre le bios BJL (on peut aussi bricoler juste avec le loader BJL de Protector SE ou le CD de Belboz, mais je ne conseille pas cette option). Il vous faudra aussi fabriquer le cable de connexion (fredifredo en a peut-être encore en kit). Si vous avez plus de moyens, vous pouvez aussi choisir de développer plutôt avec une Alpine board et une Jaguar avec le Stubulator plutôt que le BJL. Dans ce cas-là, il vous faudra aussi un cable parallèle droit SUB-D 25 male à chaque bout. Dans les deux cas (BJL et Alpine), la station de développement devra posséder un port parallèle. Pour l’instant, je ne parle que des configurations de développement possible aujourd’hui en octobre 2006. Les sorties imminentes du Catnip cable puis de la JagCF devraient offrir d’autres alternatives pour développer. Pour l’instant, faisons comme si.

 Atari, PC Windows ou PC Linux ?

Dans le reste de cet article, je vais surtout traiter le cas d’un PC Linux comme station de développement mais il est tout à fait possible de développer sous PC Windows ou avec un Atari. Mais je dois tout de suite prévenir le lecteur de ma relative incompétence en ce qui concerne le développement Jaguar dans ces deux dernières configurations. Je crois savoir qu’Orion_ utilise par exemple un PC Windows et GT Turbo, évidemment, utilise un Atari (fidèle parmi les fidèles ;)) Donc si vous choisissez plutôt un PC Windows ou un Atari pour développer sur Jaguar, allez leur demander quelques tuyaux. Je pense néanmoins que ce que je vais exposer par la suite devrait également s’appliquer dans les grandes lignes.

 Les outils de base

Alors voilà, vous vous êtes décidé ? Bravo ! Si vous êtes sous Linux, j’imagine que vous avez quelques outils de base installés tels gmake et gcc. Maintenant, il va falloir vous mettre en quête des outils pour la Jaguar : j’ai nommé la paire MadMac et ALN ! Si vous avez choisi le BJL, n’oubliez pas de prendre le loader BJL (lo chez moi) et si vous avez plutôt une Alpine, il vous faudra aussi rdbjag et wdb. Une fois ces outils récupérés (les versions Linux X86 bien sûr !), le premier test est d’essayer de lancer MadMac par exemple. Il est donc temps d’essayer la commande "./mac" (dans le répertoire où se trouve mac bien sur !). Si ça vous affiche la petite invite avec le numéro de version de MadMac, c’est parfait. Sinon, il est fort probable que votre distribution Linux ne gère plus de base les exécutables au format a.out (les Mandriva récentes par exemple). Pas de panique, un simple petit ajout dans le fichier /etc/modprobe.conf (pour une Mandriva 2006) devrait régler l’affaire. Il m’a suffit d’ajouter la ligne suivante (étant root) dans ce dernier fichier pour régler ce petit problème :

Maintenant, en relançant la commande "./mac", ça devrait beaucoup mieux fonctionner. Le second petit ennui vient des chargeurs de programmes, lo ou bien rdbjag/wdb. En effet, ces programmes font des accès assez bas niveau qui demandent des droits d’exécution élevés. Pour contourner ce problème, j’ai procédé comme suit (étant root) :

(et la même chose pour rdbjag et wdb) En théorie, c’est très mal de faire ça mais bon, ça évite de devoir passer root à chaque fois qu’on veut uploader un programme vers la Jaguar. Le port parallèle doit être configuré en Bidirectionnal.

Niveau organisation, je conseille d’avoir un répertoire Jaguar dans son home et un sous répertoire bin qui contient ces outils de base. Ensuite, ajoutez simplement $HOME/Jaguar/bin à votre variable PATH.

 C vs ASM

Autant le dire tout de suite, si vous choisissez de développer surtout en assembleur, vous avez quasiment fini la configuration de l’environnement et vous pouvez passer à la partie Makefile. Par contre, si vous projetez de faire du C pour le code 68k, alors il faut encore construire un cross compilateur m68k-aout ; chose que je vais expliquer comment faire maintenant. Pour être tout à fait honnête, j’ai suivi surtout les explications de MIKRO disponibles ici. J’ai construit avec succès un cross compilateur gcc m68k-aout avec binutils 2.16.1 et gcc 3.3.6. J’ai d’abord construit gcc 3.3.6 et binutils 2.16.1 pour mon Linux X86 comme expliqué par MIKRO et dont je copie les explications ici :

Puis j’ai adapté ses explications pour construire mon cross compilateur avec pour target m68k-aout.

Je suppose que tout se passe bien et qu’à la fin vous avez votre cross compilateur situé en /usr/local/m68k-aout (il aura peut être fallu passer root pour faire "make install")

 Make

Si vous êtes un pro de Linux, vous savez probablement utiliser gnu make et donc comment faire un Makefile pour gagner du temps et du confort de développement. Sinon, les quelques indications qui vont suivre vont, je l’espère, vous être utiles (je ne suis en aucun cas un expert de make). En fait, je vous propose le Makefile suivant :

Ce Makefile est prêt pour utiliser les bibliothèques des Removers ;). Il mentionne également le fichier crt0.o et les fichiers libgcc.a et jlibc.a. L’archive libgcc.a contient certaines fonctions nécessaires à gcc et est installé en même temps que gcc. Les fichiers crt0.o et jlibc.a sont des fichiers que votre serviteur a écrit ; crt0.o est le code "startup", c’est-à-dire ce qui est exécuté au démarrage du programme. Sur Jaguar, ça initialise la pile, le DSP, le GPU, la mémoire en Big Endian et quelques autres trucs puis appelle la fonction main (sans arguments). L’archive jlibc.a est une mini libc que j’ai écrite spécialement pour la Jaguar avec certaines fonctions en ASM 68k pour une meilleure efficacité. Certaines fonctions de la libc sont utilisées par le code produit par gcc (citons par exemple bcopy). Vous devrez modifier par ailleurs la variable JAGPATH, la variable PROJECT (qui sera le préfixe du nom du fichier généré), les variables SRCC, SRCS et SRCH, ainsi que RMVLIBS.

 Installation de jlibc, crt0

Pour installer ces deux fichiers nécessaires pour compiler les programmes C, j’ai tout simplement copié ces deux fichiers dans le répertoire /usr/local/m68k-aout/lib/gcc-lib/m68k-aout/3.3.6/m68000/ où doit se trouver normalement déjà le fichier libgcc.a. Ensuite j’ai fait un lien symbolique comme ceci :

J’ai aussi copié les fichiers headers dans /usr/local/m68k-aout/m68k-aout/include. Le Makefile ci-dessus suppose une telle organisation. Le problème est que ALN ne gère qu’un seul répertoire include, c’est pour cela que j’ai tout copié dans le répertoire contenant libgcc.a. On peut tout à fait préferer faire des liens symboliques et choisir une autre organisation mais là, je vous laisse maître.

 La prochaine fois

Nous verrons dans la prochaine partie l’utilisation des bibliothèques made in Removers avec un petit exemple à l’appui.

 Addendum

La carte PCMCIA parallèle SPP-100 de chez Quatech permet d’ajouter un port parallèle à une machine n’en possédant pas. Cette carte fonctionne sous Linux avec les outils Brainstorm. Il faudra par contre peut être patcher ces outils pour qu’ils cherchent la carte à la bonne adresse. Normalement, le port LPT1 est en 0x378 et les autres ports scannés par rdbjag et/ou wdb sont en 0x278 et 0x3bc. Pour changer les ports mappés par rdbjag, il faut chercher la chaine hexa BC 03 78 03 78 02 (normalement à l’offset 5114) et la remplacer par ce qu’on veut pour les trois ports (c’est en little endian). Pareil pour wdb mais l’offset est normalement 5204.

 Deuxième Addendum

J’ai mis en section téléchargement un script permettant de construire le cross compilateur gcc. Ce script a été testé avec une Mandriva 2007 Spring.

 Troisième Addendum

Sur une distribution 64 bits, le module binfmt_aout a été renommé en ia32_aout. Il faut donc définir l’alias suivant pour modprobe :

Répondre à cet article

SPIP | squelette | | Plan du site | Suivre la vie du site RSS 2.0