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)

Ce câble vous permettra d’envoyer vos programmes compilés directement à la console.
Vous n’êtes pas obligé de l’avoir. En effet, vous pouvez aussi utilisé un CD multisession avec un programme appelé DemoMenu, mais nous ne traiterons pas cette manière de procéder dans cet article.

{{: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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *