ProgrammationDC

  

 

 

 

Comment programmer sur Dreamcast

Comment programmer sur Dreamcast

par Eldrad Uhltran

(15/05/2002)




Présentation de la console:



La Dreamcast est une console vraiment incroyable et qui porte bien son nom, elle est techniquement très avancée pour son temps: processeur principal SH4 cadencé à 200Mhz (par Hitachi), 16 Mo de mémoire vive, 8 Mo de mémoire video (processeur PowerVR de Nec avec système de compression de texture). Si on devait la comparer à sa rivale directe, j'ai nommé la PS2, la balance serait du côté de la console de Sega, pourquoi? Suis-je vendu à Sega? Ai-je des actions chez Sega? Ou suis-je un anti Sony?

Rien de tout cela, la Playstation 2 dispose d'un processeur cadencé à 300 Mhz, de 32 Mo de mémoire vive (ce qui est bien), mais seulement de 4 mo de mémoire video, sans même qu'il y ait de système de compression de texture, ce qui joue très nettement en la défaveur de la console de Sony, car cela limite très nettement les capacités graphiques de la machine (a-t-on déjà vu un Shen Mue sur PS2? Pourquoi Dead or Alive 2 est-il plus beau sur DC?).

Les capacités techniques sont une chose, encore faut-il pouvoir les exploiter et de ce point de vue là, il y a encore un avantage à la Dreamcast qui se trouve être une plate forme simple à programmer (pas de code assembleur nécessaire, d'où une bonne abstraction du matériel). A tout cela doit s'ajouter le fait que la console de Sega est une console peu onéreuse, et disposant d'une ludothèque incroyable (Soul Calibur, Resident Evil, Jet Set Radio, Msr, Virtua Tennis, Shenmue, Ferrari, Marvel VS Capcom 2 pour ne citer qu'eux), et vous aurez compris qu'il s'agit pour moi d'une des meilleures consoles sorties ces dernières annnées et qui doit injustement son échec commercial. Même si la console est "morte" aujourd'hui,'The Legend Will Never Die' comme qui dirait !

Introduction:



Il est possible contrairement à ce que pourraient croire certaines personnes de développer sur n'importe quelles consoles même pour un amateur. Les professionnels utilisent des kits de développement qu'ils achètent aux constructeurs, mais les amateurs quant à eux, grâce à leur ruse légendaire ont très souvent créé leurs propres kits. Ainsi, il est aujourd'hui possible de développer pour Super Nintendo, PCengine, Playstation 1 & 2, GameBoy Advance, et Dreamcast bien entendu. La seule réelle contrainte vient du fait qu'il faut pouvoir "cracker" ou émuler le support afin de pouvoir tester ses programmes. Fort heureusement sur Dreamcast, tout a été déjà fait et vous n'aurez donc pas à vous en soucier: il est facilement possible, soit d'envoyer des données sur la Dreamcast, soit de graver sur CD un programme qui sera lancer directement par la console.

De plus, il est important de pouvoir disposer de bonnes librairies (=ensemble de routines/programmes facilitant la programmation) afin de programmer de la façon la plus aisée possible. De ce point de vue là, la dreamcast fait encore très fort grâce notamment à Dan Potter qui a avec Libdream puis KallistiOS créé des outils de développement de qualité, rivalisant très bien avec son homologue commercial j'ai nommé la librairie Katana (réservée aux professionnels). Tout cela présenté rentrons dans le vif du sujet!

Ce qui est nécessaire:



Tout d'abord, est-il nécessaire de le préciser, il est indispensable d'avoir une Dreamcast (attention, il me semble que certains modèles, les plus récents, ne lisent pas les CD Audio, ce qui vous empêchera de graver vos programmes sur CD, testez donc avant). Du point de vue du matériel, il vous faut aussi un cable link permmettant de relier votre Dreamcast à votre PC: il est possible d'en fabriquer un soi même (voir http://dcreload.free.fr/fichereparation3.php), mais si vous ne vous sentez pas l'âme d'un bricoleur, je vous conseille très fortement de l'acheter directement sur des sites comme http://liksang.com/, ou http://fl-games.com/ . Si vous ne pouvez brancher de TV à coté de votre moniteur d'ordinateur, achetez un cable VGA box permettant de relier votre Dreamcast à votre moniteur d'ordinateur.

Du point de vue matériel, c'est à peu près tout (il vous faut aussi un graveur), du point de vue logiciel, j'en parlerai un peu plus bas, mais sachez qu'en ce qui concerne le système d'exploitation vous pouvez utiliser ce que vous voulez: sur PC, Windows, ou UNIX/Linux, sous Mac, installez donc Linux. Nous prendrons néanmoins comme exemple celui de Windows pour le reste du guide (si vous utilisez UNIX/Linux, j'imagine que vous saurez vous débrouiller tout seul). Quant à savoir quelle version utiliser, je vous conseille très fortement la branche Windows NT/2000/XP plutôt que 95/98/ME bien moins stable et incomplète du point de vue de l'invite de commande. Il est aussi quasi indispensable d'avoir internet, afin de pouvoir être au courant des dernières nouveautés, mais surtout afin d'avoir de l'aide d'autres développeurs (croyez moi, vous aurez toujours besoin d'aide :-)

Dernière chose, du point de vue de vos connaissances, vous devez connaître le langage C (langage de programmation) et le maitriser si possible (être à l'aise en ce qui concerne les structures, et les pointeurs). Si ce n'est pas le cas achetez un livre sur le sujet (si ça parle de C++ c'est aussi bien) et entrainez vous d'abord sur votre PC avec un compilateur freeware du type Dev C++ (http://www.bloodshed.net/). Il est également préférable d'avoir des bases en ce qui concerne la programmation graphique et multimedia de façon générale: en ce qui concerne la 2D amusez vous avec Allegro (http://www.allegro.cc/) et SDL (http://www.sdl.org), si c'est la 3D qui vous intéresse apprenez l'OpenGL (http://opengl.org/, tutoriaux: http://nehe.gamedev.net/). Voilà, si vous avez les prérequis et que vous avez tout le matériel, vous pouvez continuer à lire, sinon, revenez lorsque tout sera bon!

Comment envoyer un programme à la Dreamcast?



Avant de pouvoir être capable de créer ses propres programmes, amusons nous un peu et essayons d'envoyer un programme à la Dreamcast, pour tester si tout est en ordre. Tout d'abord expliquons en quoi ça consiste: il s'agit en fait d'envoyer à la Dreamcast une application (qui aura la forme d'un binaire exécutable uniquement pour la dreamcast, c'est à dire un fichier dans le cas présent un fichier *.bin), le PC devenant le serveur (envoyant les données) et la Dreamcast le client (attend les données). Pour que la console devienne cliente, il lui faut un programme spécifique lui permettant d'attendre qu'on lui envoie quelque chose, il en existe plusieurs, comme le dcload/dctool d'Andrew Kieschnick (http://boob.co.uk/devtools.html), dcload étant le programme Dreamcast, et dctool étant l'application sur PC envoyant les données. Pour ma part, j'utilise le Serial Upload Slave de Marcus Comstedt suite à un tutorial de Phoenix27 (http://www.ifrance.com/dc-prog/) Mais libre à vous de choisir votre méthode. Avec le Serial Upload Slave, j'utilise DCUp32 pour envoyer mes programmes à la Dreamcast. Vous pouvez télécharger un pack contenant tout ce qu'il faut ici: http://creezvosjeux.online.fr/dreamcast/pack.zip

Comment procéder?
C'est très simple, connectez votre Dreamcast à votre PC via le cable adéquat (sur un port COM, juste à côté de l'alimentation en principe). Mettez votre CD Serial Upload Slave dans la Dreamcast, et allumez là. Ensuite téléchargez un petit programme Dreamcast (par exemple celui là: http://creezvosjeux.online.fr/dreamcast/exemple.zip). Lancez DCup32, choisissez le bon port COM (a priori COM1 ou COM2), cliquez sur download file, pour choisir le fichier que vous souhaitez (dans type mettez all files), c'est à dire ex.bin, lancez Boot, et regardez le résultat sur votre console! Vous pouvez de plus vous amusez à transformer via elf2bin (livré avec le pack plus haut) le fichier ex.elf (compilé à partir du code source C) en fichier *.bin lisible par la dreamcast, puis de le transformer grâce à dcsrec en *.srec pour l'uploader via DCup32.

Voilà, vous savez comment envoyer un programme à la Dreamcast, comment convertir un fichier dans le bon format pour uploader correctement un programme. Il ne reste plus qu'à développer ses propres programmes!

P.S : Il est aussi possible de tester ses programmes via demomenu et un CD multisessions, cette solution peut être interessante si vous ne posséder pas encore un coder cable ou que vous devez uploader des binaires de taille importante .

Comment créer des programmes Dreamcast?



Si vous êtes déjà programmeur, vous savez grosso modo comment ça doit marcher: il faut avoir un linker et un compilateur (et un débogueur aussi) pour interprêter puis transformer le code source (écrit en C) en binaire et le tour est joué! C'est en effet à peu près cela, à la différence qu'il y a deux compilateurs (un pour le processeur Hitachi SH4 et un autre pour le processeur sonore ARM, le même que celui de la GameBoy Advance d'ailleurs), fort heureusement vous n'aurez généralement pas à vous soucier de cela grâce aux librairies que vous allez utiliser et qui vous simplifieront bien la vie! Mais avant d'aborder la question, étudions le problème de l'installation des compilateurs qui nécessite quelques approfondissements.

Les compilateurs que nous allons utiliser sont des outils GNU (http://www.gnu.org/) basés sur GCC (http://gcc.gnu.org/) qui est un compilateur libre (c'est à dire livré avec ses sources) et gratuit pour diverses plate forme (à la base pour UNIX mais porté sous Windows et d'autres OS) ainsi que pour divers processeurs (x86, sh4, arm...) et divers langages (C/C++, Java, Perl etc...). Nous ce qui nous intéresse c'est d'avoir GCC pour Windows en langage C pour processeurs sh4 et arm. En théorie, vous devriez charger les sources de GCC (disponibles sur le site) et le compiler pour Windows/C/SH4 puis pour Windows/C/SH4, ce qui est assez lourd et assez compliqué surtout pour un débutant. Vous n'avez qu'à télécharger le compilateur déjà compilé ici

Avant de pouvoir utiliser GCC sous Windows, il faut que vous ayez installé cygwin (http://www.cygwin.com/). Mais qu'est-ce donc? GCC a été à la base conçu pour UNIX (c'est ce qui explique sa portabilité), il vous faut du coup un environnement de type UNIX sous Windows, cygwin en est la réponse. Ce n'est pas à proprement parlé une émulation d'UNIX sous Windows car tout exécutable sous cet environnement reste une application Windows (concrètement une application UNIX compilée fonctionnant sous le vrai système d'exploitation UNIX ne fonctionnera pas sous Cygwin), cela nécessite une recompilation (mais les programmes UNIX sont quasi tous livrés avec leurs sources, donc en fait 99% des programmes UNIX pourront donc du coup fonctionner sous cygwin s'ils ont été recompilés). Bref quoiqu'il en soit, vous êtes obligé d'installer cygwin et avec lui quelques paquetages afin de pouvoir utiliser convenablement l'environnement de développement. Vous pouvez le télécharger ici avec tout ce qu'il faut, sinon si ça ne vous plaît pas allez sur le site officiel (mais il faut être sûr que vous ayez les bons paquetages avec).

Normalement si tout se passe bien vous devez avoir un environnement de type UNIX (c'est à dire en invite de commande comme sous DOS), il vous sera sans doute intéressant de connaître les commandes de base afin que vous ne soyez pas trop perdu. Si vous connaissez déjà le DOS, vous ne serez pas dépaysé, mais attention il n'y a pas de notion de lecteur, C: et D: n'existent pas, la racine est / et les différents répertoires de base sont bin, etc, lib, usr, var ...

pwd: répertoire courant: répertoire dans lequel vous êtes
ls: liste le contenu d'un répertoire (ls -l pour plus de détails)
cd: changer de répertoire courant:
"cd tutu" permet d'aller dans le répertoire tutu situé dans le répertoire courant
/ désigne la racine, donc si le répertoire courant est /var/www/tutu et que je souhaite
aller dans /usr/local, il suffit de taper "cd /usr/local"
cd .. permet d'aller dans le répertoire au dessus, par exemple si le répertoire courant est
/usr/local, en tapant "cd .." je me retrouve dans /usr
chmod: change les attributs d'un fichier
man: suivi d'une commande affiche l'aide correspondante, par exemple "man chmod" affiche le manuel de chmod
source: suivi du nom du fichier permet de modifier les variables d'environnement
en fonction de celles définies dans le fichier, par exemple "source environ-dc.sh", vous comprendrez plus tard

Bon, voilà vous savez comment vous déplacer sous UNIX, ce qui vous sera déjà largement suffisant pour ce que nous allons faire. Avant de voir plus spécifiquement la programmation sur Dreamcast, il serait sans doute temps pour vous de vous procurer un éditeur de texte: à quoi ça sert? tout simplement à taper du texte, mais l'avantage de certains est de vous interprêter le code que vous écrivez, ainsi si vous écrivez du C, l'éditeur de texte mettra en évidence les mots clés, les chaines de caractères, les types, les accolades, bref, cela vous évitera de taper des fautes de syntaxes et ça vous facilitera lors de la lecture du code. Personnellement j'utilise Textpad (http://www.textpad.com/) qui a l'avantage de très bien interprêter le code (mieux que Visual C++!) et d'être très léger (clic droit Textpad et c'est parti!).Mais il en existe toute une pléthore sur internet.

Ca y est tout est prêt? il ne manque plus maintenant qu'une librairie Dreamcast pour utiliser la bête. (enfin!!!) Il n'en existe pas 15 000, mais seulement 3: la librairie Katana de Sega (inutile de vous dire que c'est la meilleure, mais elle est réservée aux professionnels possédant le kit de développement donc jamais vous ne l'aurez!), la librairie Libdream qui est devenue aujourd'hui KallistiOS (http://dcdev.allusion.net/) qui est la plus utilisée dans les développements ammateurs, et enfin libronin (http://peter.bortas.org/scumm/) qui n'en est qu'à un stade expérimental pour l'instant et qui n'est pas documentée (aie!).

Nous nous concentrerons sur KallistiOS qui me paraît vraiment être la librairie idéale, vous pouvez la télécharger ici: http://sourceforge.net/projects/cadcdev/ (téléchargez les sources) Il est à noter que dans KallistiOS il y a le mot OS, tout simplement parcequ'il s'agit à la fois d'une librairie et d'un système d'exploitation. Cette dernière fonctionnalité a été néanmoins quelque peu délaissée par l'auteur privilégiant à juste titre les librairies (qui est le mode d'utilisation par défaut de KallistiOS). Vous n'avez donc pas vraiment à vous en soucier, car lorsque vous compilerez vos programmes ils seront directement liés à la librairies ce qui les rendra indépendants de toute OS. Avant de compiler KOS, et donc de pouvoir l'utiliser après, il faut que vous indiquiez à cygwin que vous allez utiliser les compilateurs sh4 et arm que vous avez téléchargés plus haut. Pour cela, créez un nouveau fichier et entrez y le texte suivant:

@echo off
SET MAKE_MODE=UNIX
SET PATH=C:\CYGWIN\BIN;%PATH%
SET PATH=C:\CYGWIN\USR\LOCAL\DC\SH-ELF;%PATH%
SET PATH=C:\CYGWIN\USR\LOCAL\DC\ARM-ELF;%PATH%
BASH

Vérifiez que les répertoires coincident bien à ceux que vous avez C:\CYGWIN désigne l'emplacement où vous avez installé cygwin C:\CYGWIN\USR\LOCAL\DC\SH4 là où vous avez placé le compilateur SH4. Sauvegardez le texte en dreamcast.bat par exemple et exécutez le. Déplacez vous dans le répertoire où vous avez installé KallistiOS, puis éditez avec Textpad (ou n'importe quel autre éditeur de texte) le fichier situé dans doc environ-dc.sample et remplacez les répertoires suivants par ceux que vous avez sur votre machine (attention cette fois il s'agit de répertoires UNIX et non DOS, donc vous devez utilisez des "/" et non des "\", et vous devez placez KallistiOS dans un répertoire de Cygwin.

là où vous avez installé le compilateur sh4
export KOS_CC_BASE="/usr/local/dc/sh-elf"

là où vous avez placé KOS
export KOS_BASE="/home/bard/prj/kos"

là où vous avez placé le compilateur ARM
export DC_ARM7BASE="/usr/local/dc/arm-elf"

Vous n'avez plus qu'à sauvegarder le fichier en environ-dc.sh (ce n'est plus un sample!), tapez maintenant "source environ-dc.sh" afin de le rendre actif (il est à noté que vous devrez tout le temps retaper cette ligne d'instruction lorsque vous voudrez utiliser KOS utltérieurement). Maintenant retournez à la racine du répertoire KallistiOS et tapez make afin de compiler une bonne fois pour toute la librairie. Cela va prendre beaucoup de temps, et vous ne devriez pas avoir de problème en principe. Maintenant pour vous assurer que ça marche bien vous n'avez qu'à aller dans le répertoires examples/dreamcast/hello par exemple, puis tapez make, ô magie ça compile! Vous savez comment transformer le fichier *.elf généré en binaire éxécutable, comment le transférer sur la Dreamcast et même comment le graver sur CD si vous avez téléchargé mon super pack: http://creezvosjeux.online.fr/dreamcast/pack.zip

Elle est pas belle la vie? Maintenant vous savez comment programmer sur Dreamcast, faire des émulateurs de ouf et des jeux qui vont déchirer grave! (je m'emporte un peu là...)

Quelques conseils pour la route:



Je ne peux pas vous laisser comme ça, alors comme je suis au moins aussi cool qu'Huguy, je vais vous filer encore quelques tuyaux! Ce qu'il vous reste à faire maintenant c'est d'apprendre KallistiOS, pour cela, il n'y a pas 15 000 solutions, il vous faut lire le manuel dans le répertoire doc/manual (il s'agit d'un fichier *.lyx qui doit normalement être lu avec Lyx mais si vous ne l'avez pas ouvrez le avec Textpad, il y aura quelques lignes commençant par "/" que vous devrez ignorer mais ça reste lisible). Il vous faut aussi voir les exemples qui sont un très bon moyen d'apprendre pleins de choses (vous aurez souvent réponse à bon nombre de vos problèmes). Si vous avez besoin d'aide, le meilleur moyen est de contacter la communauté via les mailing list, kesako? Il s'agit tout simplement d'un système de boite aux lettres email ouvertes au public, c'est un bon moyen si vous avez des questions techniques (n'en abusez pas non plus si c'est pour poser des questions évidentes qui ont réponse dans la documentation de KallistiOS, abstenez vous!):
Pour vous inscrire:
http://groups.yahoo.com/group/dcdev/
http://lists.sourceforge.net/lists/listinfo/cadcdev-kallistios

Pour vous guider encore un peu plus dans l'apprentissage de KallistiOS, sachez qu'il est nécessaire d'apprendre et de comprendre comment fonctionne le Tile Accelerator (qui est le procédé de rendu graphique du chipset graphique PowerVR de la Dreamcast), vous trouverez une fois de plus la documentation dans le manuel de KallistiOS. Pourquoi? Tout simplement parceque la Dreamcast a été conçue pour être utilisée comme cela et c'est la méthode la plus rapide et la plus efficace pour afficher des graphismes. Concrètement c"est quoi? Le Tile Accelerator divise l'écran en petits carrés de taille fixe (par exemple 32*32 pixels) totalement manipulables (cela fait d'ailleurs étrangement penser au hardware de la PCengine, normal c'est aussi NEC qui était dans le coup!). Il gère en outre une liste de polygones et de vecteurs qui seront ensuite rendus en hardware. Vous allez voir, c'est assez simple à manipuler. Même si vous faites de la 2D, je vous conseille d'utiliser le Tile Accelerator pour optimiser les performances (vous pourrez en plus faire du bilinear filtering!).
Cerise sur le gâteau, Dan Potter a inclus dans KallistiOS ce que l'on pourrait appeler une simulation d'OpenGL (la Dreamcast ne possède pas de driver OpenGL donc ne peut faire de l'OpenGL à proprement parler), ce qui s'appelle KGL: ça ressemble à l'OpenGl, ça se programme comme l'OpenGL (à quelques exception près), donc c'est du tout bon!
Si ça ne vous suffit pas, sachez que sont livrées avec KallistiOS des librairies annexes (avec des exemples!) permettant d'utiliser du Jpeg ou du PNG dans vos programmes, ainsi que du ogg (format similaire au mp3), à vous de découvrir tout ça! (moi je trouve que c'est la grande classe!)
Une dernière chose pour finir, vous vous demandez peut être si vous avez parcouru les exemples ce que sont les romdisks, hé bien, réfléchissez un instant... Si vous écrivez un programme qui affiche une image "exemple.jpg", vous aurez après avoir compilé votre programme deux fichiers: l'image et le programme, donc comment allez vous faire pour l'envoyer à votre Dreamcast? Tout simplement en créant une rom qui contiendra l'image et le programme pour ne faire au final qu'un fichier *.bin exécutable que vous n'aurez qu'à lancer sur votre Dreamcast! Pour créer une romdisk, allez voir genromfs dans les utilitaires, et consultez la documentation (je ne le dirai jamais assez!). Si vous souhaitez développer par contre un émulateur (par exemple) qui devra lire les roms sur un CD, la situation est différente: vous aurez alors d'un côté le CD sur lequel vous aurez mis les roms que vous introduirez dans votre dreamcast après avoir lancé votreCD de Serial Upload Slave (les bords deviennent bleus), en effet Serial Upload Slave n'a plus besoin de lire sur le CD dès que vous l'avez lancé, il se charge en RAM. Ensuite vous n'avez qu'à uploader sur la Dreamcast l'émulateur sur lequel vous travaillez et ô magie, votre programme aura alors accès au CD ROM!

Voilà, mon petit guide est terminé, et a pour but de vous lancer dans la programmation Dreamcast de la façon la plus aisée possible, en espérant qu'une communauté francophone se développe et devienne forte, et en espérant bien sûr que vous puissiez faire de belles choses avec cette magnifique console qu'est la Dreamcast!


Quelques liens utiles:
http://dcdev.allusion.net/
http://peter.bortas.org/scumm/
http://mc.pp.se/dc/
http://www.boob.co.uk/
http://dev.dcemulation.com/
http://www.consolevision.com/
http://www.dcemulation.com/
les rares sites français:
http://www.ifrance.com/dc-prog/
http://www.dcemulation.fr.st/
http://perso.wanadoo.fr/jplang
http://www.programmationworld.com/


Remerciements:
Phoenix27
Dan Potter
Marcus Comstedt

Ecrit par Eldrad Uhltran
eldrad@rpgtown.com
http://creezvosjeux.online.fr/dreamcast

Vous pouvez librement distribuer ce guide à condition de conserver ces credits.