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.
|