đŸ Archived View for blog.flozz.fr âș 2018 âș 10 âș 01 âș developpement-gameboy-1-hello-world captured on 2023-09-08 at 16:00:08. Gemini links have been rewritten to link to archived content
âŹ ïž Previous capture (2023-04-19)
-=-=-=-=-=-=-
2018-10-01
Il y a quelques années, je m'étais intéressé au développement de jeux rétro pour la GameBoy de Nintendo. J'avais entrepris de développer un Snake-like sans prétention, mais je ne l'ai malheureusement jamais terminé. J'ai décidé aujourd'hui de retenter l'expérience et je vais en profiter pour écrire une série d'articles sur le développement pour la GameBoy.
Le présent article est donc le premier de la série, il portera sur les bases : l'écriture d'un programme « Hello world » ainsi que l'obtention d'un environnement de développement fonctionnel (un compilateur pour... compiler notre programme et un émulateur pour l'exécuter).
--------------------------------------------------------------------------------
â ïž Warning
--------------------------------------------------------------------------------
Attention : L'article que vous ĂȘtes en train de lire est obsolĂšte. Je le laisse en ligne car il peut encore ĂȘtre utile Ă ceux qui ont crĂ©Ă©s un projet avec GBDK. Si vous commencez un nouveau projet, je vous recommande d'utiliser SDCC et GBDK-n Ă la place de GBDK, et de lire la nouvelle version de cet article d'introduction au dĂ©veloppement GameBoy. đïž
la nouvelle version de cet article d'introduction au développement GameBoy
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
đïž Note:
--------------------------------------------------------------------------------
NOTE : Pour cette série d'articles, je partirais du principe que le lecteur dispose de quelques connaissances de base en C et en utilisation de la ligne de commande sous Linux.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
đïž Note:
--------------------------------------------------------------------------------
Cet article fait partie d'une série sur le développement GameBoy en C avec le compilateur SDCC et la bibliothÚque gbdk-n. Cette série est toujours en cours et de nouveaux articles paraissent de temps à autre.
Articles de la série :
--------------------------------------------------------------------------------
La GameBoy est une console portable sortie en 1989 au Japon et aux Ătats Unis et en 1990 chez nous. Ses principales caractĂ©ristiques sont :
Les jeux GameBoy sont distribués sous forme de cartouches interchangeables dont les caractéristiques varient d'un jeu à l'autre :
--------------------------------------------------------------------------------
đïž Note:
--------------------------------------------------------------------------------
NOTE : J'ai résumé ici les caractéristiques de la machine, mais vous pouvez trouver tout le détail sur le hardware de la GameBoy dans le document « Everything You Always Wanted To Know About GAMEBOY » (en anglais).
« Everything You Always Wanted To Know About GAMEBOY »
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
â ïž Warning
--------------------------------------------------------------------------------
Le compilateur présenté dans cette section est obsolÚte (plus mis à jour depuis 2002), et génÚre du code machine buggé dans certaines situations.
génÚre du code machine buggé dans certaines situations
Je vous recommande vivement d'utiliser SDCC et GBDK-n à la place. Vous Trouverez toutes les informations dans mon nouvel article d'introduction au développement GameBoy.
nouvel article d'introduction au développement GameBoy
--------------------------------------------------------------------------------
GBDK (The GameBoy Developer's Kit) est un ensemble d'outils permettant de développer des programmes pour la GameBoy. Il contient notamment tout ce qu'il faut pour générer une ROM depuis un code en C (compilateur, éditeur de lien,...) ainsi qu'un ensemble de bibliothÚques facilitant grandement le développement pour cette machine.
Pour installer GBDK, il faut le compiler depuis les sources. Ătant donnĂ© que la base de code originale (hĂ©bergĂ©e sur SourceForge) n'est plus maintenue depuis 2002, il n'est plus possible de la compiler sur une distribution rĂ©cente. Heureusement, quelqu'un a forkĂ© le projet sur Github et a corrigĂ© les diffĂ©rents problĂšmes qui empĂȘchaient la compilation.
Pour commencer on va installer les dépendances nécessaires à la compilation de GBDK. Il nous faut :
Pour installer tout ça, on peut taper la commande suivante sous Debian / Ubuntu (pour les autres distributions, les paquets doivent avoir des noms assez similaires) :
sudo apt install build-essential bison flex
En suite, il faut cloner le dépÎt git :
git clone https://github.com/gheja/gbdk.git
puis se rendre dans le dossier du projet :
cd gbdk
et enfin lancer la compilation :
make
Si tout s'est bien passé, on se retrouve avec un dossier build/ppc-unknown-linux2.2/gbdk/ qui contient nos outils.
Il est ensuite possible d'installer tout ça sur le systÚme à l'aide de la commande make install, ce qui aura pour effet d'installer GBDK dans le dossier /opt/gbdk par défaut... Personnellement je préfÚre ne pas l'installer et l'utiliser directement depuis le dossier de mon projet.
Une fois le compilateur prĂȘt Ă fonctionner, il reste une derniĂšre Ă©tape avant de se lancer dans le dĂ©veloppement d'un programme GameBoy : installer de quoi exĂ©cuter nos futures ROM sur notre PC.
De nombreux Ă©mulateurs sont disponibles pour chaque OS. Personnellement j'utilise Mednafen, il supporte pas mal de consoles et fonctionne bien.
Pour l'installer, il faut taper la commande suivante sous Debian / Ubuntu :
sudo apt install mednafen
Ensuite, il est possible de configurer Mednafen, notament l'assignation des touches, à l'aide du fichier ~/.mednafen/mednafen-09x.cfg. Comme le fichier de configuration est assez long et pas trÚs pratique, je vous colle ci-dessous un extrait du mien :
gb.enable 1 gb.system_type auto gb.xscale 3.000000 gb.yscale 3.000000 gb.input.builtin.gamepad.up keyboard 122 gb.input.builtin.gamepad.left keyboard 113 gb.input.builtin.gamepad.down keyboard 115 gb.input.builtin.gamepad.right keyboard 100 gb.input.builtin.gamepad.a keyboard 109 gb.input.builtin.gamepad.b keyboard 108 gb.input.builtin.gamepad.select keyboard 118 gb.input.builtin.gamepad.start keyboard 98
La configuration ci-dessus définit le mapping suivant :
Mednafen GameBoy assignation des touches clavier
--------------------------------------------------------------------------------
đïž Note:
--------------------------------------------------------------------------------
NOTE : si vous souhaitez changer l'attribution des touches, il faut entrer le numéro dans la table ASCII du caractÚre se situant sur la touche de clavier désirée (par exemple 122 pour "z", 113 pour q,...).
--------------------------------------------------------------------------------
Comme le veut la tradition, on va commencer par écrire un programme « hello world » et voir comment le compiler et l'exécuter.
On va donc commencer par créer un fichier "hello.c" avec le contenu suivant :
#include <stdio.h> void main(void) { printf("Hello world!\n"); }
Ici, aucune surprise, on aurait pu Ă©crire la mĂȘme chose pour un programme destinĂ© Ă s'exĂ©cuter sur un PC. Voici donc l'Ă©tat de mon dossier de projet aprĂšs avoir ajoutĂ© mon programme :
01_hello_world/ | +-- gbdk/ <- dépÎt git de GBDK dans lequel j'ai compilé GBDK tout à l'heure | +-- hello.c <- Mon programme à compiler
Pour compiler ce programme, rien de bien compliqué : on commence par exporter quelques variables d'environnement pour nous faciliter la vie :
export GBDKDIR="./gbdk/build/ppc-unknown-linux2.2/gbdk/" PATH="./gbdk/build/ppc-unknown-linux2.2/gbdk/bin/:$PATH"
Ces variables permettent d'indiquer au compilateur oĂč se trouvent ses fichiers et d'ajouter son binaire au PATH pour Ă©viter d'avoir des lignes de commande trop longues Ă taper. Cette Ă©tape n'est probablement pas nĂ©cessaire si vous avez installĂ© GBDK sur le systĂšme (make install).
Une fois les variables d'environnement définies, on peut compiler le programme à l'aide de la commande lcc :
lcc hello.c -o hello.gb
Si la compilation s'est bien déroulée, on se retrouve avec notre ROM, nommée hello.gb, dans le dossier courant. Il ne reste plus qu'à l'exécuter avec l'émulateur de notre choix (Mednafen dans mon cas) :
mednafen hello.gb
Et voilà notre magnifique programme en action :
Afin de faciliter la compilation du « projet » ci-dessus, j'ai rédigé un Makefile prenant en charge l'obtention du compilateur et la compilation de la ROM. Vous trouverez ce projet d'exemple sur Github à l'adresse suivante :
https://github.com/flozz/gameboy-examples/tree/master/01-hello-world
Voici les commandes disponibles:
Bien qu'un peu long, cet article fournit toutes les informations nécessaires pour commencer à programmer pour la GameBoy. J'espÚre qu'il vous a été utile et je vous donne rendez-vous dans un prochain article dans lequel j'aborderai d'autres aspects du développement pour la console de Nintendo.
--------------------------------------------------------------------------------