Il s'agit d'un vieux tutoriel, plus forcement d'actualité.
De quoi avons nous besoin ?
Pour programmer sur Dreamcast, il faut investir dans un peu de matériel qui nous facilitera la vie.
Je partirais du fait que si vous êtes entrain de lire ce fichier, c’est que vous avez à votre disposition un ordinateur.
Pour le materiel, il ne change pas que ce soit sous Mac, Windows, Unix.
Pour la partie logicielle seuls les logicels sous Windows et Unix seront vu car je ne possède pas de Mac.
Pour la partie connaissance, sachez qu’il vous faut connaître un minimum le langage C ou C++.
Le matériel
- un ordinateur (PC avec graveur) , Je pense qu’un Pentium devrait suffire avec 128 Mo et 500 Mo d’espace disque dur libre.
- une Dreamcast (en état de fonctionnement :-))
Quand je précise en état de fonctionnement je veux dire une Dreamcast pouvant lire les CD audio.
En effet, pour éviter le piratage, la société SEGA a modifié les dernières versions de la DreamCast pour qu’elles ne puissent plus lire les CD audio au boot. (iniquement sur les dernières versions japonnaise)\
Alors faites attention à cette particularité.
{{:progdream:dc.jpg|}}
Une Vga-Box (facultatif)
Peut-être que votre Dreamcast et votre ordinateur ne sont pas près de votre téléviseur.
Je vous conseille donc d’acheter ce câble qui vous permettra de connecter directement votre console sur l’écran de l’ordinateur.
Un Coder-Cable (facilite vraiment les choses)
{{:progdream:cabledc.jpg|}}
Un cd vierge
Ce câble vous permettra d’envoyer vos programmes compilés directement à la console.
Ce CD vous permettra de copier le programme DC-Serial. Que vous mettrez dans la Dreamcast.
Si vous avez déjà réunit tous ces objets c’est déjà un point positif.
Si vous ne les avez pas alors rendez-vous sur http://www.ebay.fr.
Vous aurez peut-être la chance de les trouver, même ci ces objets se font de plus en plus rares.
Les logiciels
Pour Windows
Un compilateur
La plus part des compilateur “Windows” utilise soit mingw ou cygwin
DEV C++
Dev C++ est un IDE qui permet de compiler des applications comme VC++
Il est basé sur Mingw et il est traduit dans de nombreuses langues.
L@ cible a fait un package spécial (toolchain) pour Dev-C++ possédant un compilateur spécifique Dreamcast.
A la base le compilateur Dev C++ ne peut compiler que des programmes écrits pour PC, alors que ce package a la particularité de pouvoir compiler les programmes écrits pour la Dreamcast..
Il contient des librairies, des exemples et un compilateur Gnu spécifique SH4, le processeur de la DC.
MS Visual C++
MS-VC++est un IDE qui permet de compiler des applications largement utiliser par les professionnels .
Il existe aussi un pack pour MS Visual C++ , il possède un installateur, son kit lui est compiler via Cygwin.
Ce pendant la version de KOS inclut dans le package est assez ancienne .
Cygwin et Mingw
Ce sont deux interpréteurs d’environnement unix pour windows XP, 2000 et NT (instable sous windows 9.x).
Ils permettent de compiler des programmes en lignes de commandes à la façon de tous les Unix-Like mais les applications compiler ne sont pas compatible Unix .
A utiliser uniquement pour les connaisseurs .
Client/serveur
Dc-tool/dc-load
Le couple dc-tool/dcload est un utilitaire qui permet d’envoyer des programme à la Dreamcast.
Dc-load est un serveur pour la Dreamcast, Dc-tool est lui un client, ils existes plusieurs versions pour LAN, BBA et câble coder (serial).\
Il existe aussi un version GUI développé par SiZiOUS (uniquement pour Windows).
Dc-load lui doit être graver sur un cd , divers images sont disponible sur le web.
En mode console a synthaxe de la commande sera du style : dc-tool.exe -x monbinaire.elf\
Dcup/serial slave
Le couple Dcup/serial slave est un utilitaire qui permet d’envoyer des programme à la Dreamcast.
Dcup possède moins d’ option que dc-tool.
Ce pendant Dcup possède un GUI et ne fonctionne uniquement sous Windows.
Le gravage
Nero-Burning 5.5
Pourquoi la version 5.5 me diriez vous ? Parce qu’avec la 6.x on ne peut plus graver les fichier *.cdi préalablement convertis avec Cdi2Nero.
Discjuggler
Ce logiciel permet de graver toutes les fichier *.cdi, sa version gratuite ne peut graver que jusqu’à 700mo en vitesse minimum. Pour le gravage d’une iso pour Dreamcast, utiliser ces paramètre:
{{:progdream:dj.jpg|}}
Selfboot
Ce logiciel permet de faire de cd autobootable pour dreamcast , à partir d’un binaire scrambler et de son IP.BIN.
Il permet soit de faire faire de images aux format nero 5.5 et cdi ou directement de le graver sur un cd via cdrecord (si votre graveur est compatible .\
IP.BIN4WIN
IP.BIN4WIN est un utilitaire windows pour patcher les IP.BIN .
IP.BIN Creator
IP.BIN Creator est un utilitaire windows pour faire des IP.BIN ainsi qu’insérer des logo.
Développé par SiZiOUS
Pour Linux et Unix-like
Un compilateur
En ligne de commande ou en script shell.
Sur les système Unix ou assimilé, le compilateur GCC est généralement déjà installé . (sauf pour les Mandrakelinux 10.1 à 44 e ).
La compilation d’un toolchain (ensemble d’outils nécessaire au développement) néseccite divers archives de sources telque Binutils, Gcc, Newlibs
Client/serveur
Dc-tool/dc-load
le couple dc-tool/dcload est un utilitaire qui permet d’envoyer des programme à la Dreamcast.\
Dc-load est un serveur pour la Dreamcast, Dc-tool est lui un client, ils existes plusieurs versions pour LAN, BBA et câble coder (serial).
Dc-load lui doit être graver sur un cd , divers images sont disponible sur le web.
En mode console a synthaxe de la commande sera du style : dc-tool -x monbinaire.elf
Le gravage
cdrecord
Cdrecord est un utilitaire de gravage en ligne de commande Open Source .
Toolchain et compilateur croisé
Compilation de KOS et de son compilateur croisé
Configuration de test:
OS= OpenSUSE 11.0
Espace nécessaire : 1.8 Go (~1.5 Go pour toolchain – ~280 Mo pour le compilateur croisé – ~58 MO téléchargé – ~34 Mo pour KOS )
Version de GCC: 4.0.4
Version de BINUTILS: 2.18
Version de NEWLIB: 1.16
Version de KOS: 1.3-snapshot-25.12.2004
Téléchargement :
-GCC:[[http://ftp.irisa.fr/pub/mirrors/gcc.gnu.org/gcc/releases/gcc-4.0.4/
-BINUTILS: [[http://www.gnu.org/software/binutils/
-NEWLIB: [[http://sources.redhat.com/newlib/
-KOS: Prenez la dernière version en date de KOS et KOS-PORTS
Liens: [[http://gamedev.allusion.net/svn/snapshots/
Mise en place du toolchain
Pour ne pas avoir à décompacter une archive à chaque fois que l’on veut compiler, nous allons utilisé un système de fichier temporaire pour le compilateur GCC (tout dépend de sa version) .
Cela consiste a créer un répertoire en utilisant la commande mkdir, par exemple: mkdir build-gcc-sh
.
Puis d’entrer dans ceux-ci avec la commande cd, par exemple:cd build-gcc-sh
Et enfin d’exécuter les commandes de configuration et de compilation avec des lignes de commande telles que :
../gcc/configure --target=$target --prefix=$prefix
Téléchargement
wget http://ftp.gnu.org/gnu/binutils/binutils-2.18.tar.gz
wget http://ftp.irisa.fr/pub/mirrors/gcc.gnu.org/gcc/releases/gcc-4.0.4/gcc-4.0.4.tar.bz2
wget ftp://sources.redhat.com/pub/newlib/newlib-1.16.0.tar.gz
Décompression des archives
tar -xzf binutils-2.18.tar.gz
cp -r binutils-2.18 binutils-sh
mv binutils-2.18 binutils-arm
tar -xzf newlib-1.16.0.tar.gz
mv newlib-1.16.0 newlib
tar -xjf gcc-4.0.4.tar.bz2
mv gcc-4.0.4 gcc
Création des répertoires
mkdir build-gcc1-sh mkdir build-gcc2-sh mkdir build-gcc-arm
Le fichier “dc.sh”
Avant toutes chose ,nous allons configurer les variables d’environnement :
target=arm-elf ou sh-elf prefix=$HOME/Dreamcast/toolchain/$target binaries=$prefix/bin PATH=$binaries:$PATH
\
target = arm-elf ou sh-elf (mais pas les 2) suivant le compilateur croisé que l’on veut
ARM=arm-elf
SH= sh-elf
prefix = le chemin de sorti du compilateur (là ou il sera créé)
Gardez le reste comme telle .
Mettez les 4 lignes (que vous avez adapté) dans un fichier texte que l’on va appeler “dc.sh”.
Pour appeler les variables, faites source dc.sh
Compilation du compilateur croisé SH
Compilation de BINUTILS pour SH
Pensez à activer votre “dc.sh”
cd binutils-sh
sh configure --target=$target --prefix=$prefix
make CC=gcc-4.3
make install CC=gcc-4.3
cd ..
Compilation GCC en C pour SH
On fabrique un compilateur croisé avec prise en charge du langage C pour compiler NEWLIB par la suite.
cd build-gcc1-sh
../gcc/configure --target=$target --prefix=$prefix --without-headers --with-newlib --enable-languages=c
make CC=gcc-4.3
make install CC=gcc-4.3
cd ..
Compilation de NEWLIB pour SH
cd newlib
sh configure --target=$target --prefix=$prefix
make all install CC_FOR_TARGET=$prefix/bin/${target}-gcc AS_FOR_TARGET=$prefix/bin/${target}-as LD_FOR_TARGET=$prefix/bin/{target}-ld AR_FOR_TARGET=$prefix/bin/${target}-ar RANLIB_FOR_TARGET=$prefix/bin/${target}-ranlib
cd ..
Compilation de GCC pour SH
Maintenant nous allons compiler notre compilateur croisé avec la prise en charge de du langage C et C++
cd build-gcc2-sh
../gcc/configure --target=$target --prefix=$prefix --without-headers --with-newlib --enable-languages=c,c++
make CC=gcc-4.3
make install CC=gcc-4.3 cd ..
Compilation du compilateur croisé ARM
Compilation de BINUTLIS pour ARM
Avant toute chose modifier la valeur de “target” avec la valeur arm-elf.
Puis retapez “source dc.sh”.
Dans le répertoire de binutils ,faites :cd binutils-arm sh configure --target=$target --prefix=$prefix make CC=gcc-4.3 make install CC=gcc-4.3 cd ..
cd binutils-arm sh
configure --target=$target --prefix=$prefix
make CC=gcc-4.3
make install CC=gcc-4.3
cd ..
Compilation GCC en C pour ARM
cd build-gcc-arm
../gcc/configure --target=$target --prefix=$prefix --without-headers --with-newlib --enable-languages=c
make CC=gcc-4.3
make install CC=gcc-4.3
cd ..
Usr/local: le cas particulier (linux)
Le répertoire urs/local est un peu spécial puisque il sagit d’un repertoire pour les utilisateurs mais dont on doit avoir les droits “super utilisateur” (root) pour y écrire, il permet de séparer les élements du systeme et ceux de l’utiliateur.
Pour l’installation dans ce répertoire modifier le fichier environ.sh :
#target=sh-elf
target=arm-elf
prefix=/usr/local
binaries=$prefix/bin
PATH=$binaries:$PATH
De plus la syntaxe “make all install” doit être remplacé par :
make
acces au mode root
su
vu que le répertoire par défaut en mode root est /usr,il ne trouvera pas vos binutils
source environ.sh
on installe tous
make install
Le fichier environ.sh doit être évidement dans le répertoire où vous êtes .
Installation et compilation de KOS
Compilation de KOS 1.2.x
Récuperez le “environ.sh.sample” dans le repertoire “doc” ,éditez le avec un editeur de texte
Modifiez le :
#Build architecture
export KOS_ARCH=”dreamcast”
# chemin du compilateur SH
export KOS_CC_BASE=”/home/erwan/Dreamcast/Toolchain/gcc-3.0.4_binutils-2.11.2_newlib-1.10/sh-elf”
export KOS_CC_PREFIX=”sh-elf”
# chemin du repertoire de KOS
export KOS_BASE=”/home/erwan/Dreamcast/Toolchain/gcc-3.0.4_binutils-2.11.2_newlib-1.10/kos-1.2.0.1″
export KOS_INCS=”${KOS_BASE}/include”
#Make utility
export KOS_MAKE=”make”
#Load utility
export KOS_LOADER=”dc-tool -x”
#Genromfs utility
export KOS_GENROMFS=”${KOS_BASE}/utils/genromfs/genromfs”
#SH-4 GCC paths
export KOS_CC=”${KOS_CC_BASE}/bin/${KOS_CC_PREFIX}-gcc”
export KOS_CCPLUS=”${KOS_CC_BASE}/bin/${KOS_CC_PREFIX}-g++”
export KOS_AS=”${KOS_CC_BASE}/bin/${KOS_CC_PREFIX}-as”
export KOS_AR=”${KOS_CC_BASE}/bin/${KOS_CC_PREFIX}-ar”
export KOS_OBJCOPY=”${KOS_CC_BASE}/bin/${KOS_CC_PREFIX}-objcopy”
export KOS_LD=”${KOS_CC_BASE}/bin/${KOS_CC_PREFIX}-ld”
export KOS_STRIP=”${KOS_CC_BASE}/bin/${KOS_CC_PREFIX}-strip”
export KOS_CFLAGS=”-Wall -g -ml -m4-single-only -O2 -fno-builtin -fno-strict-aliasing -fomit-frame-pointer -fno-optimize-sibling-calls”
export KOS_CPPFLAGS=”-fno-operator-names -fno-rtti -fno-exceptions”
export KOS_AFLAGS=”-little”
export KOS_LDFLAGS=”-ml -m4-single-only -nostartfiles -nostdlib -Wl,-Ttext=0x8c010000″
# chemin du compilateur ARM
export DC_ARM7BASE=”/home/erwan/Dreamcast/Toolchain/gcc-3.0.4_binutils-2.11.2_newlib-1.10/arm-elf”
export DC_ARM7CC=”${DC_ARM7BASE}/bin/arm-elf-gcc”
export DC_ARM7AS=”${DC_ARM7BASE}/bin/arm-elf-as”
export DC_ARM7AR=”${DC_ARM7BASE}/bin/arm-elf-ar”
export DC_ARM7OBJCOPY=”${DC_ARM7BASE}/bin/arm-elf-objcopy”
export DC_ARM7LD=”${DC_ARM7BASE}/bin/arm-elf-ld”
export DC_ARM7CFLAGS=”-mcpu=arm7 -Wall -O2″
export DC_ARM7AFLAGS=”-marm7″
Renommez le “environ.sh”
./source environ.sh
make
Compilation de KOS 1.3.x
Mettez le contenu du repertoire “kos-ports” dans le répertoire “addons” (sans écraser le repertoire “include”)
Récuperez le “environ.sh.sample” dans le repertoire “doc” ,éditez le avec un editeur de texte
Modifiez le :
# KallistiOS environment variable settings
#
# This is a sample script. Configure to suit your setup. Some possible
# alternatives for the values below are included as an example.
#
# This script should be executed in your current shell environment (probably
# by bashrc or something similar).
#
# Selection de l'architecture pour la compilation de KOS
export KOS_ARCH="dreamcast"
#export KOS_ARCH="gba"
#export KOS_ARCH="ps2"
#export KOS_ARCH="ia32"
# Build sub-architecture. If you need a particular sub-architecture, then set
# that here; otherwise use "pristine".
#export KOS_SUBARCH="pristine"
export KOS_SUBARCH="navi" # DC
# export KOS_SUBARCH="rte" # PS2
# le chemin de Kos à compiler
export KOS_BASE="/home/erwan/Dreamcast/kos-1.3/kos"
# Make utility
export KOS_MAKE="make"
#export KOS_MAKE="gmake"
# Load utility
export KOS_LOADER="dc-tool -x" # dcload, preconfigured
# export KOS_LOADER="dc-tool-ser -t /dev/ttyS0 -x" # dcload-serial
# export KOS_LOADER="vgba -sound 44100 -nocrc" # GBA/vgba
# Genromfs utility
export KOS_GENROMFS="${KOS_BASE}/utils/genromfs/genromfs"
#export KOS_GENROMFS="genromfs"
# le chemin de votre compilateur crossé SH
export KOS_CC_BASE="/home/erwan/Dreamcast/kos-1.3/cross/sh-elf/"
export KOS_CC_PREFIX="sh-elf"
#export KOS_CC_BASE="/usr/local/dc/sh-elf" # DC
#export KOS_CC_PREFIX="sh-elf"
#export KOS_CC_BASE="${EE}" # PS2
#export KOS_CC_PREFIX="ee"
#export KOS_CC_BASE="/usr/local/gba/arm-elf" # GBA
#export KOS_CC_PREFIX="arm-elf"v
#Idem pour ARM uniquement pour Dreamcast.
export DC_ARM_BASE="/home/erwan/Dreamcast/kos-1.3/cross/arm-elf"
export DC_ARM_PREFIX="arm-elf"
#Le chemin de sortie pour la version compiler.
export PATH="${PATH}:${KOS_CC_BASE}/bin:/home/erwan/Dreamcast/kos-1.3/bin"
# Manually add our second addons tree
export KOS_INC_PATHS="-I${KOS_BASE}/../kos-ports/include"
# Setup some default CFLAGS for compilation. The things that will go here
# are user specifyable, like optimization level and whether you want stack
# traces enabled. Some platforms may have optimization restrictions,
# please check README.
export KOS_CFLAGS="-O2 -fomit-frame-pointer"
# export KOS_CFLAGS="-O2 -DFRAME_POINTERS"
# Everything else is pretty much shared. If you want to configure compiler
# options or other such things, look at this file.
. ${KOS_BASE}/environ_base.sh
Renomez le “environ.sh”
./source environ.sh
make
Compilation de ses exemples
Contrairement à KOS 1.2 la compilation des exemple n’est pas automatique.
Pour les compiler :
Activé le fichier “environ.sh” de KOS
Allez dans les repertoire “examples”
Tapez “make” .
Windows
Mingw
Mingw est un logiciel de qui permet de interpreter un environnement UNIX, il permet de porter des application UNIX (Linux, …) sous windows et ce sans dépendance (contrairement a Cygwin) de plus ces performances sont quasi égale a un excutable natif windows .
Ce pendant la compatibilité est nettement inferieure à Cygwin.
Mingw utilise un programme apeller Msys pour simuller une console UNIX
Par rapport à la compilation Linux, Mingw requière l’installation d’un interpreteur Perl (ActivePerl)
Configurer le patch dans le fichier C:\msys\1.0\etc\fstab
Pour la version 4.0.x de gcc faut juste copier le repertoire gcc-4.0.x/gcc dans build-***-gcc/ .
Pour les 3 répertoires
-build-sh4-gcc
-build-sh4-gcc2
-build-arm-gcc
Pour la version de cvs de newlib il faut installer le package TEXINFO
http://gnuwin32.sourceforge.net/
Avertissements de légalité
“Sega” et “Dreamcast” sont des marques déposées de Sega Enterprises, Ltd.
Ce document n’a aucun lien avec Sega ou ses membres, travaillant sur leur matériel.
Toutes les autres marques citées dans ce document sont des marques déposées par leurs propriétaires respectifs.
Crédit
Progdream a été réalisé par NOUGUIER Olivier.
Remerciements:
- JMD
- Erwan
- SiZiOUS