J'ai choisi de le faire pour GNU/Linux car c'est ce que j'utilise au quotidien et je le préfère largement aux autres OS.
Sous Windows, il est possible d'utiliser Cygwin - ce que je trouve idiot car il ne fait qu’émuler un système Unix, autant utiliser tout de suite un vrai - mais aussi MinGW : vous trouverez ici un tutoriel récent en espagnol, que je n'ai pas testé.
Il vous faudra 1.9Gio pendant l'installation, 850Mio une fois fini.
À noter : en voulant tester ce tuto sur un Fedora 14 et une Ubuntu 11.10, j'ai eu exactement la même erreur que cette personne. Vu qu'il a marché sur mon Archlinux, je pense que c'est à cause de la distribution qui n'est pas complètement à jour.
C'est parti !
I. Télécharger KallistiOS et la toolchain
Pour la théorie : KallistiOS est un kit de développement pour la Dreamcast ; il a été créé par Dan Potter et permet de faire pas mal de trucs. Je vous conseille de chercher sur Google pour plus d'infos
Une toolchain, selon wikipédia, « consiste en un éditeur de texte pour écrire le code source, un compilateur et un éditeur de liens pour le transformer en exécutable, et des bibliothèques logicielles pour s'interfacer avec le système d'exploitation ». Ici cela va être un peu spécial : on utilise l'éditeur de texte dont on a l'habitude, KallistiOS va jouer le rôle de bibliothèque, mais le compilateur va être précisément un cross-compiler (compilateur croisé en bon français).
Quand vous créez un programme avec un langage haut-niveau (comme le C), cela va vous permet de vous abstraire du matériel que vous utilisez, mais il faudra un compilateur pour transformer ce que vous voulez faire en suite d'instructions compréhensibles par votre processeur. Du coup si vous changez d'architecture (par exemple du i686 à ARM), vous programme ne marchera plus car les instructions ne sont plus les mêmes, mais il suffira de recompiler pour créer une autre version utilisable. Dans notre cas, on écrit sur une machine avec le plus souvent un processeur i686 ou x86_64, mais il va falloir créer quelque chose pour transformer notre code en instructions destinées aux processeurs (central, graphique, sonore, ...) de la Dreamcast : c'est le rôle du cross-compiler, qui va permettre de créer des programmes lisibles sur une architecture différente (ici du SH-4) de celle où il s’exécute.
On commence donc par télécharger KallistiOS ; la dernière version dite « stable » va bientôt avoir deux ans, alors qu'elle est toujours activement en développement. Pour profiter de ces changements (nouvelles fonctionnalités, corrections de bugs, optimisations, ...), nous allons donc utiliser cette version de développement.
Pour la suite du tuto, je serai dans ~/Programmation/Dreamcast/SDK, à vous d'adapter ce chemin comme bon vous semble ; le prompt sera matérialisé par $.
On se place dans notre dossier et on clone la dernière version :
Code : Tout sélectionner
$ git clone git://cadcdev.git.sourceforge.net/gitroot/cadcdev/KallistiOS kos
$ git clone --recursive git://cadcdev.git.sourceforge.net/gitroot/cadcdev/kos-ports
À ce moment là, vous devriez avoir deux dossiers : kos et kos-ports. Des scripts existent pour télécharger, extraire et compiler le tout ; on se déplace dedans et on les exécute :
Code : Tout sélectionner
$ cd kos/utils/dc-chain/
$ ./download.sh
$ ./unpack.sh
Code : Tout sélectionner
sh_prefix := ${HOME}/Programmation/Dreamcast/SDK/$(sh_target)
arm_prefix := ${HOME}/Programmation/Dreamcast/SDK/$(arm_target)
Code : Tout sélectionner
$ make
III. Compiler kos et kos-ports
Avant de pouvoir faire quoi que ce soit, il faut personnaliser un fichier utile à la compilation de KallistiOS et de vos futurs projets.
Placez vous à la racine de kos et copiez ce fichier :
Code : Tout sélectionner
$ cd ~/Programmation/Dreamcast/SDK/kos
$ cp doc/environ.sh.sample environ.sh
- 23, pour le répertoire de kos,
- 41, pour celui de sh-elf
- 54, pour celui de arm-eabi.
Code : Tout sélectionner
export KOS_BASE="${HOME}/Programmation/Dreamcast/SDK/kos"
export KOS_CC_BASE="${HOME}/Programmation/Dreamcast/SDK/sh-elf"
export DC_ARM_BASE="${HOME}/Programmation/Dreamcast/SDK/arm-eabi"
Pour le charger et compiler, avec votre cross-compiler tout frais, kos (le système de base) et kos-ports (les bibliothèques pour pouvoir charger et utiliser des images, des sons...), il y en a pour moins de 5 minutes :
Code : Tout sélectionner
$ source environ.sh
$ make
$ make kos-ports_all
IV. On teste !
Pour tester, rien ne vaut une Dreamcast, cela dit on se contentera d'un émulateur au début.
lxdream est le seul émulateur Dreamcast dispo sous GNU/Linux avec le support des elf (les binaires pour la Dreamcast), après installation il vous faudra les fichiers dcboot.rom, dcflash.rom et (éventuellement) IP.bin dans ~/.lxdream/. L'émulateur n'est plus activement développé, et sa dernière version stable date de presque 6 ans, donc je vous conseille de prendre là encore la version de développement (lxdream-hg sous Archlinux).
Une autre solution est d'utiliser nullDC avec wine.
Pour tester que tout est en ordre, on va utiliser les exemples se trouvant dans kos/examples/dreamcast/. Sans oublier d'avoir sourcé votre environ.sh avant, tapez make puis lxdream -e nom_de_l_exemple.elf dans ces répertoires :
- hello/ : un test simple, il va afficher le fameux Hello World dans le terminal
- parallax/raster_melt/ : une photo de Dan
- kgl/demos/tunnel/ : un tunnel en 3D
- 2ndmix/ : une démo complète, avec musique, police, 3D, background
V. Pour aller plus loin
Pour supprimer tous les fichiers qui n'ont plus d’utilité (les fichiers temporaires du cross-compiler), on se place dans le dossier qui contient kos, kos-ports, arm-elf et sh-elf :
Code : Tout sélectionner
$ cd ~/Programmation/Dreamcast/SDK
$ cd kos/utils/dc-chain
$ rm -rf binutils-* gcc-* newlib-* logs gmp-* mpc-* mpfr-*
Pour des tutos sur le C et le C++ (KallistiOS supporte les deux) ainsi que la SDL, je ne peux que vous conseiller le Site du Zéro. Pour l'utilisation de KallistiOS lui-même, les nombreux exemples permettent de bien démarrer.
Sinon j'ai vu que GDB (un puissant debugger) serait utilisable directement à partir de la Dreamcast, SiZiOUS peut peut-être donner un retour
Ce tuto est fini, si vous avez des questions n’hésitez pas