|
Utilisation de Visual C++ pour faire du Dev sur DC avec KOS par JMD // Mai 2003
Ce document a pour but de montrer comment configurer un environnement de développement pour Dreamcast sous Windows avec Visual C++ 6. Tout d'abord, il est préférable d'avoir une connexion rapide car il y a un certain nombre de fichiers volumineux à télécharger. Note légale Bien sûr, ce document n'engage que moi et vous utilisez son contenu à vos risques et péril. Ce document est librement distribuable. Toutefois, si vous utilisez une partie ou l'ensemble du document, merci de me le signaler et de ne pas oublier de me citer. Installation On s'appuie sur la méthode de Thepernproject.com La première chose à faire est de se munir d'une version de visual C++ . Une version 'd'apprentissage' était fournit avec certains journaux (Un hors série de PC Team par exemple) ou avec certains bouquins sur VC++. Une fois l'appli installée, il faut télécharger le compilateur et KOS. Le plus simple est de récupérer la 'toolchain' déjà pré-configurée fournie sur le site : www.thepernproject.com. C'est un fichier (DKDC_Setup.exe) qui pèse un peu plus de 16 MO et qui comprend le compilateur GCC, certains outils et une version (assez vieille) de KOS pré compilée. Installez ce package. Je vous conseille de l'installer dans DevkitDC tel que c'est proposé. Tant qu'on y est, on va télecharger l'assistant de création de programme DC qui est fournit sur le site (DC_DK_AW_Setup.exe). Il suffit de l'installer. Tout est maintenant prêt pour commencer.
Mise au goût du jour de l'ensemble Malheureusement tout n'est pas si rose car vous pouvez effectivement commencer comme ça mais vous avez une configuration qui date déjà pas mal et vous allez vous priver de pas mal de choses sympas (nouvelles fonctions de KOS et Sdl par exemple) La première chose à mettre à jour est KOS. La version la plus rapide est d'aller sur le site de Cryptic Allusion (http://sourceforge.net/projects/cadcdev/) pour télécharger la dernière version de KOS (version 1.1.9 pour ce doc) . Choisir la version des binaires (pas les sources car il vous faudrait les recompiler) et décompacter là dans votre répertoire DevKitDC. Vous allez écraser votre vieille version de KOS pas belle par une super nouvelle.
Un nouveau programme... C'est bien beau, mais quand ça marche pas ... Maintenant que tout est OK, vous ouvrez fébrilement votre Visual C++, vous créer un nouveau projet en choisissant dans la liste 'Dreamcast Project' et en remplissant bien le nom et le Path. Vous ne lisez pas ce qu'il y a écrit et vous vous précipitez sous OK. Là, vous avez un nouveau Workspace avec un main qui a été écrit dans lequel il y a plein de baratin. Vous faites un Built/Built All et là .... fatal error U1081: 'ÜXX€T\bin\gcc' : program not found Et oui ... Par défaut, le path du compilateur n'est pas écrit correctement dans le Makefile ! Il faut donc aller le rajouter à la main. Aller dans le fichier .mak et remplacer la ligne DEVDIR = ÜXX€T## par DEVDIR = c:\DevKitDC
Biens surs, si vous n'avez pas suivi mes conseils, mettez y le nom du répertoire dans lequel vous avez GCC et KOS. De plus, changer la ligne : LDFLAGS = -L $(LIBDIR) -L $(LIBDIR2) -lgl -ldcutils -lkallisti -lgcc -Ttext=0x8c010000 par LDFLAGS = -L $(LIBDIR) -L $(LIBDIR2) -lgl -ldcutils -lSDL -lm -lkallisti -lgcc -Ttext=0x8c010000 Ceci vous permettra de compiler la librairie SDL (vous verrez, vous l'utiliserez :). Bon, c'est tout pour le fichier mak. Dans tous les cas, il y a plein de baratin en anglais, assez facile à comprendre qui vous guiderons si vous avez besoins de rajouter des fichiers où autre. On y va, on compile ... Et bam ... ça marche pas ... Je sais, c'est énervant. l'erreur doit être un truc du genre : `ALL_ENABLE' undeclared (first use in this function) En effet, l'assistant crée un début de programme pour une vieille version de KOS. Hors depuis, le principe de l'initialisation a changé. Il vous faut donc enlever les lignes : kos_init_all(ALL_ENABLE, ROMDISK_NONE); et kos_shutdown_all(); Pour les remplacer par une version plus récentes (et plus efficace !). Ajouter donc avant le main() la ligne suivante : KOS_INIT_FLAGS(INIT_DEFAULT); Il existe tout un tas de possibilité pour 'shutter down' la DC (des fois, vous regretterez d'ailleurs:) mais une qui marche bien et qui est bien pratique est : arch_reboot(); qui fait un reset de la DC. On a donc le petit programme suivant : #define
_arch_dreamcast // Initialisation de KOS : Options par
défaut int main(int argc, char **argv){ arch_reboot(); Ce programme ne fait rien. En fait si, il reboote la Dreamcast ... C'est déjà quelque chose. Tout est
maintenant prés pour que vous commenciez. Bonjour le monde .... Un bon début si vous avez un câble DC-PC (Coder Câble) , vous pouvez déjà commencer à vous amuser. Le programme le plus simple est le classique Hello World.
#define
_arch_dreamcast // Initialisation de KOS : Options par défaut KOS_INIT_FLAGS(INIT_DEFAULT); int main(int argc, char **argv){ // Bonjour le monde printf(« Bonjour le monde .... »); // on reboote la DC arch_reboot(); On compile et hop ... on a deux fichiers en plus : HelloWorld.bin et HelloWorld.elf On va chercher le CD de DCLoad 1.0.3 et la petite appli DC-TOOL et on passe sous DOS. On lui passe : dc-tool -x " HelloWorld.bin" -t COM2 J'ai rajouté -t COM2 car mon câble est branché sur mon 2nd port COM. On attend un peu et la Dreamcast reboote. Quand on regarde à nouveau la console DOS, on voit qu'un tas de trucs sont écrit et qu'au milieu il y a Bonjour le monde. C'est vraiment chouette ça comme 1er programme (Il y a des conventions comme ça ...). Bonjour tout le monde Jusqu'à présent, seul le PC avait droit à son petit bonjour. On va arranger ça en écrivant la même chose sur l'écran de la DC. #define
_arch_dreamcast KOS_INIT_FLAGS(INIT_DEFAULT); int main(int argc, char **argv){ printf("Bonjour le monde ...."); while(1200) Même manip
que précédemment et un bonjour s'écrit devant vos yeux. Vous êtes émus. Non ?!
Vous devriez ... Utilisation d'un Romdisk Utiliser un
Romdisk est bien pratique. Un Romdisk est un périphérique virtuel attaché
au programme. Quand on utilise un câble, il est bien pratique de mettre des
infos dans un Romdisk pour ne pas avoir à graver un CD qui stocke uniquement les
images par exemples. Allez voir la doc de KOS pour plus d'infos. Le premier truc à faire est d'aller chercher bin2oDC sur mon site : http://jm1200.ifrance.com/jm1200/ Ce programme a pour but de transformer un Romdisk en objet linkable. Il vous faut le copier dans le répertoire C:\DevKitDc\utils (il doit aussi il y avoir un fichier genromf livré avec KOS). Ensuite, il faut créer un répertoire Romdisk dans le répertoire du projet. On y déposera tous les fichiers à inclure dans le Romdisk. Attention, ne pas oublier que ce sera monté en mémoire de la Dreamcast donc pas de vidéos du petit cousin ... Enfin, il
faut rajouter les infos suivantes dans le makefile :
#
------------------------------------------ $(UTILSDIR)\genromfs.exe -f
"$(SRCDIR)\romdisk.img" -d "$(SRCDIR)\romdisk" -v romdisk.o:romdisk.img $(UTILSDIR)\bin2odc.exe "$(SRCDIR)\romdisk.img"
"$(SRCDIR)\romdisk.o" après la partie qui s'appelle # Define the flags
for the compilers; Notes pour la fin Cette méthode n'est sans doute pas la seule et reste assez artisanale. Il existe, par exemple, un AppWizard pour VC++ plus récent crée par Vorrtexx pour lequel on peut trouver un peu plus d'infos (pas beaucoup quand même) sur les forums DCEmulation ou Consolevision. Personnellement,
après des premiers essais enthousiastes, je n'ai jamais réussi a faire
fonctionner le Romdisk correctement. Je suis donc revenu à ma bonne vieille
méthode qui a fait ses preuves. |