Article [Coverage]


Thumb

<< Chapitre précédent 

Maintenant que tout fonctionne, la partie fastidieuse est presque terminée. Il nous reste à expliquer le fonctionnement des programmes que nous allons utiliser. Non, ne partez pas ! Cette partie sera bien plus intéressante que les précédentes et la suite le sera encore davantage...

Il est impossible de se lancer dans la programmation sans expliquer précisément le rôle du compilateur et comment fonctionne-t-il (la fameuse et mystérieuse commande huc main.c). Enfin, il est nécessaire d'expliciter point par point le code de main.c.

source - http://img1.livegen.fr/00/00/25/32/0000253236.jpg source - http://img1.livegen.fr/00/00/25/32/0000253235.jpg

Extention CD-Rom² seule et avec l'Interface Unit et l'Arcade Card permettant à la PC Engine d'afficher des graphismes plus poussés

 

Le compilateur

 

Qu'est-ce qu'un compilateur ?

 

Un compilateur est un programme chargé de traduire un programme écrit en langage "humain" vers un programme compréhensible par la machine, avec des instructions correspondant à un ensemble spécifique à chaque processeur. Plus le langage est loin du langage machine, plus celui-ci est dit "haut niveau". Ainsi, celui que nous étudierons dans cette première partie est relativement proche de la machine, mais néanmoins relativement compréhensible pour un humain standard. Il est donc difficile de caractériser facilement un tel langage, tout étant affaire de relativité.

Cependant dans la seconde partie de ce tutoriel, nous aborderons le langage d'assemblage de la PC-Engine qui lui est très "bas niveau", cela signifiant qu'il est très proche de la machine. En effet, dans ce langage, les instructions sont directement traduites en binaire puis exécutées par la machine.

Le rôle du compilateur est donc de transformer un langage de "haut niveau" en langage compréhensible par notre chère PC-Engine. Cette opération pourrait très bien être effectuée à la main, cependant le compilateur nous évite cette tâche fastidieuse.

Il est intéressant dans un second temps de se pencher sur le langage d'assemblage ce qui nous permettra d'une part, de développer rapidement et simplement en langage C puis dans un second temps, d'optimiser le code assembleur produit par le compilateur.

Ce travail d'optimisation est d'autant plus important que la PC-Engine est une machine peu puissante du fait de son ancienneté. Ainsi, tout le plaisir de l'optimisation s'offrira à vous !

Retenez donc que le travail d'un compilateur est de produire du code machine à partir d'un langage de programmation donné.

 

Comment utiliser le compilateur PC-Engine ?

 

Le compilateur PC-Engine, HuC pour les intimes, est directement utilisable depuis une invite de commande aussi appelée "shell". Pour ce faire, il suffit de taper la commande :

 > huc main.c

L'exécution de cette commande engendre la création d'un fichier main.pce. Il est toutefois possible de préciser quelques options qui pourraient bien vous intéresser :

La commande huc -cd main.c nous permettra non pas de générer un fichier .pce mais un .iso. En effet, cela produit du code "PC-Engine CD-ROM²" pour le CD-ROM² ce qui permet d'utiliser plus facilement vos programmes sur votre PC-Engine. De même il existe l'option -scd qui produit un code "Super CD-ROM²". 

La commande huc -s main.c nous permettra d'arrêter la compilation à la traduction en langage d'assemblage. Ainsi, il nous sera possible d'intervenir sur ce code pour l'optimiser puis utiliser l'assembleur. Nous étudierons cette étape plus tard.

La commande huc -O[valeur] main.c permet de désigner le niveau d'optimisation souhaité. Il se situe entre 0 pour non optimisé à 9 pour optimisation maximale.

Il existe d'autres options (visibles en tapant simplement huc dans un shell) que nous n'expliciterons partiellement plus tard.

Ainsi, pour utiliser simplement votre compilateur et générer un .pce lisible par votre émulateur favori, un simple huc main.c suffit.

 source - http://img1.livegen.fr/00/00/25/21/0000252135.jpg

Résultat de la compilation puis de l'exécution du programme ci-dessous.

 

Comment afficher un message à l'écran ?

 

  Souvenez-vous, dans le chapitre précédent, nous avons utilisé un fichier main.c contenant des lignes un peu barbares afin de tester le fonctionnement du compilateur.

 /* Instructions préprocesseur */
#include "
huc.h"

/* Fonction principale */
main
()
{
/* Instructions */
    set_color(1,0x777);
    set_font_pal(0);
    set_font_color(1,0);
    load_default_font();
    put_string("Bonjour Livegen !",0,0); 
}

 

 

Commentaires préliminaires

 

Vous constatez la présence de lignes en français placées entre les marqueurs "/*" et "*/". Ces marqueurs permettent de placer des commentaires qui ne seront pas traduits par le compilateur. Cependant, ils sont indispensables pour la clarté du code et vous permettrons de travailler à plusieurs sur un projet ou de pouvoir vous relire et vous comprendre même après plusieurs mois... N'oubliez donc pas de commenter vos codes.

De plus, vous pouvez remarquer des espaces avant chacune des lignes contenues après la première accolade. Ceux-ci permettent aussi de clarifier votre code source. Cette "méthode de mise en page" se nome l'indentation. Vous comprendrez tout leur intérêt lorsque nous parlerons des primitives conditionnelles (pas de panique !).

 

Première ligne

 

La première ligne permet d'inclure un fichier huc.h en en-tête. Celui-ci est une "bibliothèque" ou "library" dans la langue de Shakespeare. Ce fichier contient un ensemble de fonctions. Elles sont par exemple utilisées afin d'afficher un message à l'écran, de charger un sprite, de modifier la couleur du texte...

Nous verrons plus tard qu'il est possible de créer vos propres fichiers .h dans le but de créer vous-même vos fonctions.

 

Ligne main()

 

Tout programme en C débute par une fonction main. Une fonction peut être assimilée à une machine réalisant un service. Ainsi, la fonction main est le service principal de votre programme : c'est simplement votre programme.

Noter que la fonction main est entourée par { et }. Les accolades ouvrantes et fermantes contiennent donc l'ensemble des "instructions" réalisées par votre fonction. Il faut donc limiter les "bornes" de celle-ci par ces accolades. 

 

Corps de la fonction

 

Le corps de la fonction, délimité entre accolades, contient une série d'instructions toutes terminées par un point virgule suivi d'un retour chariot. J'insiste très lourdement sur ce point-virgule si facilement omis et cause de nombre d'erreurs lors de la compilation.

On observe donc ici les instructions suivantes :

set_color(1,0x777); Cette fonction permet de fixer la couleur de la "palette".

  • Le premier paramètre, ici 1, sélectionne la couleur de la palette à définir. Il existe 32 palettes de 16 couleurs. Nous expliquerons plus tard comment choisir ce paramètre. Pour l'instant, nous conserverons ce paramètre tel quel.
  • Le second paramètre permet de définir la couleur en codage RGB. Le codage RGB est utilisé en affichage pour définir la quantité de Rouge, de Vert et de Bleu (Red Green Blue en anglais) désignant les trois couleurs primaires en lumière. Ici, 0x777 désigne le blanc. Le 0x montre qu'il s'agit d'une notation «hexadécimale». Nous expliquerons plus tard cette notation.

set_font_pal(0); Cette fonction permet de sélectionner la palette qui sera utilisée pour fixer les couleurs de la police. Ici, nous avons choisi la palette 0. Les palettes sont numérotées de 0 à 31. Nous expliquerons en détail cette organisation. Pour l'heure, nous nous cantonnerons à l'utilisation d'une seule palette, la palette 0.

set_font_color(1,0); Cette fonction permet la sélection de la couleur de la police : elle comporte deux paramètres :

  • Le premier permet de sélectionner la couleur souhaitée dans la première palette seulement. Ici, on a choisi la première couleur de la première palette. C'est pourquoi la première couleur de la première palette a été définie juste avant.
  • Le second paramètre détermine la couleur d'arrière-plan de la police. Ici, nous avons choisi 0 pour noir. En effet, nous n'avons pas défini la couleur 0 de la palette 0. Une couleur non définie est noire.
    load_default_font(); est utilisé pour choisir la police par défaut. De plus l'appel de cette fonction est nécessaire pour mettre à jour la couleur sélectionnée auparavant.

put_string("Bonjour Livegen !",0,0); est similaire au printf() en un peu plus limité pour les initiés au C. Ainsi, cette fonction permet d'afficher une chaine de caractères en définissant 3 paramètres :

  • Le premier paramètre, ici "Bonjour Livegen !" est, comme vous pouvez le deviner, la chaine de caractères à afficher. Les chaînes de caractères sont des bestioles un peu compliquées à manier pour un débutant. Ainsi, nous parlerons plus tard des différentes spécificités de cet élément.
  • Le second paramètre ainsi que le troisième permettent de définir les coordonnées du point sur lequel sera affiché la chaine précédemment définie

Notez que l'ensemble de ces instructions se terminent bien par un point virgule. 

Nous arrivons au terme de cette introduction à la programmation de la PC-Engine avec la découverte des premières lignes de code ainsi que la compilation de notre premier programme. A partir de maintenant, nous passerons un cap en entrant réellement dans la partie intéressante du sujet : la programmation proprement dite. Les étapes précédentes, longues et fastidieuses étaient nécessaires afin de comprendre le fonctionnement global du compilateur afin que vous puissiez à présent compiler tous les codes que nous allons réaliser.

Topic du Forum


Avatar cat Abuse
cat
level. 36
Le vendredi 15 janvier 2010 - 00h25
Internet Explorer Windows Crésus
bon le code commence

chouette ;)
Le délai pour poster un commentaire pour cet article a été dépassé!

Société

NEC


Thumb
Co-fabriquant et éditeur avec Hudson Soft de la PC-Engine/TurboGrafx, dans les années 80/début 90.