Développer sur SEGA Saturn avec libYaul

libYaul est un kit de développement open-source pour la SEGA Saturn crée par Israel Jacquez. Le SDK offre la possibilité de créer des jeux pour la Saturn en utilisant essentielement des fonctions bas niveau. Dans ce tutoriel, je vais détailler chaque étape pour mettre en place un environnement de dévelopement avec libYaul sur Linux. Si vous êtes débutant en programmation ou que vous n'avez pas l'habitude de développer sur d'anciennes consoles comme la Saturn, je vous suggère dans un premier temps d'approfondir vos connaissances avec des ouvrages dédiés.

Pré-requis

Avant de commencer, il est nécéssaire d'installer les paquets make gcc wget unzip zip p7zip diffutils dos2unix patch qui sont indispensables pour compiler avec succès la librairie. J'indiquerais les étapes pour les distributions ArchLinux et Debian. Cependant, si vous utilisez une distribution telle que Manjaro ou Ubuntu, les étapes sont identiques.

ArchLinux :

$ sudo pacman -S git make gcc wget unzip zip p7zip diffutils dos2unix patch

Debian :

$ sudo update
$ sudo apt install git make gcc wget unzip zip p7zip diffutils dos2unix patch

Construction du toolchain

Pour utiliser libYaul afin de développer sur SEGA Saturn, nous avons besoin d'un toolchain gcc pour le processeur Hitachi SuperH2 qui nous permettra de compiler la librarie, mais aussi de futurs projets.

Si vous disposez déjà un toolchain opérationnel, vous pouvez naturellement sautez cette étape, mais dans le cas contraire, vous pouvez utiliser le script bash que j'ai écris afin de construire automatiquement le toolchain. Bien entendu, vous pouvez alternativement compiler le toolchain par vos propres soins, mais je n'expliquerais pas dans ce tutoriel les différentes étapes du processus.

$ git clone https://github.com/kentosama/sh2-elf-gcc.git
$ cd sh2-elf-gcc

Avant de construire le toolchain, assurez-vous d'avoir préalablement installé l'environnement de développement pour votre distribution :

ArchLinux :

$ sudo pacman -Syu
$ sudo pacman -S base-devel

Debian :

$ sudo apt install build-essential texinfo

A présent exécutez build-toolchain.sh pour démarrer la construction du toolchain. Le processus de compilation devrait durer approximativement 15 minutes en fonction de la puissance de votre ordinateur.

$ ./buid-toolchain.sh

Installation du toolchain

Une fois la construction terminée avec succès du toolchain pour le processeur Hitachi SuperH2, vous pouvez alors procédez à son installation. Idéalement copiez directement le dossier sh2-toolchain vers /opt/toolchains ou bien /usr/local.

$ sudo mkdir -p /opt/toolchains
$ sudo chmod -R utilisateur:utilisateur /opt/toolchains
$ cp -R sh2-toolchain /opt/toolchain
$ cd /opt/toolchains
$ mv sh2-toolchain sh2-elf

Compilation de libYaul

Maintenant que le toolchain gcc pour le processeur Hitachi SuperH2 est installé, nous pouvons récupérer libYaul depuis le repository sur github et procéder à sa compilation.

Clonez le repository de libYaul de préférence dans votre dossier utilisateur ou le dossier que vous utilisez généralement pour compiler des sources :

$ git clone https://github.com/ijacquez/libyaul.git
$ cd libyaul

Il faut également récupérer tous les modules nécéssaires :

$ git submodule init
$ git submodule update -f --recursive

Editez le fichier yaul.env.in afin de configurer l'environnement de libYaul. Au début du fichier, un exemple pour vous permet de vous aider à définir les différentes variables, mais si vous avez installé le toolchain gcc dans /opt/toolchains/ vous pouvez directement copier ce fichier de configuration prêt à l'emploi :

# Path to tool-chain installation directory
export YAUL_INSTALL_ROOT=/opt/toolchains/sh2-elf

# SH-2 tool-chain program prefix (leave empty if the same as YAUL_ARCH_SH_PREFIX)
export YAUL_PROG_SH_PREFIX=

# SH-2 tool-chain prefix
export YAUL_ARCH_SH_PREFIX=sh-elf

# M68k tool-chain prefix
export YAUL_ARCH_M68K_PREFIX=m68k-elf

# By default, this is the same path that contains the tool-chain, but
# it can be set to another path instead
export YAUL_PREFIX=""

# Path to where the build is to be located
export YAUL_BUILD_ROOT=${HOME}/libyaul

# Name of build directory
export YAUL_BUILD=build

# JSON compilation database support
#  0: Disable
#  1: Enable generation of compile_commands.json
export YAUL_CDB=1

# RTags RC executable absolute path
export YAUL_CDB_RC_PATH="/usr/local/bin/rc"
# RTags RDM executable absolute path
export YAUL_CDB_RDM_PATH="/usr/local/bin/rdm"

# Option: Development cart used:
#  0: None
#  1: USB flash cartridge
#  2: Datel Action Replay cartridge
export YAUL_OPTION_DEV_CARTRIDGE=0

# Option: Memory allocator used:
#  tlsf: Use TLSF (Two-Level Segregated Fit)
#  slob: Use SLOB (Simple List of Blocks)
export YAUL_OPTION_MALLOC_IMPL="tlsf"

# Option: Spin on calling abort():
#  0: System reset on release when aborting
#  1: Spin when aborting
export YAUL_OPTION_SPIN_ON_ABORT=1

# Compilation verbosity
#   : Verbose
#  1: Display build step line only
export SILENT=

# Display ANSI colors during build process
#   : Display
#  1: Do not display
export NOCOLOR=

Enregistrez le fichier à la racine de votre dossier utilisateur sous le nom de .yaul.env puis ajoutez ce dernier temporairement à votre environnement :

$ source ~/.yaul.env 

Ou bien de manière permanente à votre session utilisateur :

$ echo 'source ~/.yaul.env' >> ~/.bash_rc

Vous pouvez à présent démarrer la compilation de la librairiec suivi de ses outils :

$ SILENT=1 make install-release
$ SILENT=1 make install-tools

Si vous n'avez obtenu aucune erreur durant la compilation, vous pouvez compiler tous les exemples afin de vous assurer que tout fonctionne correctement puis de les tester avec un émulateur :

$ SILENT=1 make examples

Installation de l'émulateur Yabause

Yabause est un émulateur SEGA Saturn sous licence GNU GPL. Il a le mérite de fonctionner relativement bien sur FreeBSD, Linux, Windows et macOS en plus de diposer de nombreuses fonctionnalités très utiles pour débuguer la console.

ArchLinux :

$ sudo pacman -S yabause-qt

Debian :

$ sudo apt install yabause-qt
Article précédent

Final Fight 2

Article suivant

Riot City

0 commentaire

Laisser un commentaire