Programmer en C/C++/ASM sur Graph100(+)
Posté le 04/07/2007 22:02
Dans la vie d'un programmeur, il vient un moment où après avoir exploré toutes les fonctions du basic et les maîtriser toutes pour finalement les trouver trés limitées, on se demande pourquoi programmer, en voyant l'inutilité de ses efforts. Mais alors, pourquoi ne pas passer à l'étape supérieure ? Certes la tâche est ardue mais elle en vaut la peine ! Le C/C++ offre de nombreux avantages contrairement au basique, en particulier la rapidité. Cependant cela ne nous dit toujours pas comment programmer en C/C++ sur sa calculatrice... Alors voici un tutoriel pour la Graph100(+).
Ceci est un tutoriel permettant à qui le veut de programmer en C/C++/ASM sur sa G100.
Ce n'est pas LE tutoriel mais UN tutoriel parmi tant d'autres. Ce tutoriel ne contient que le strict nécessaire, c'est pourquoi il est bon de prendre le temps de le lire, chacun des points évoqués ici étant important.
LE COMPILATEUR
Un des meilleurs compilateurs connu pour la graph100+ est
Turbo C.
Vous pouvez télécharger la version 3.00 fr_FR
ici
Il s'agit du compilateur C/C++/ASM de borland.
Une fois l'archive décompressée, dirigez vous dans le répertoire du programme, vous voyez plusieurs dossiers :
le dossier
INCLUDE est le dossier dans lequel vous mettez les librairies que vous pourrez inclure dans vos projets.
le dossier
BIN est le dossier qui contient le programme principal ( TC.EXE ).
le dossier
EXE est le dossier où seront crées les exécutables de vos projets.
le dossier
FLASHS est le dossier aui contiendra tous les répertoires de vos projets.
Maintenant exécutez
TC.EXE, votre première réaction "c'est quoi cette daube ? -__-". Non ce n'est pas une daube, malgrès une interface vieillotte, vous découvrirez que TurboC est un outil pratique et puissant. Vous vous ferez trés vite à sa prise en main. Nous allons donc configurer TurboC.
Options -> Compiler -> Advanced code generation
Options -> Directories
TurboC étant configuré, nous pouvons ainsi créer un projet.Pour ce faire, créez un dossier qui contiendra votre projet dans le dossier FLASHS et créez votre code source principale ( appelez le MAIN.H ). Dans TC,
Project -> Open Project, dirigez vous dans votre dossier. Dans la barre
Open project file, remplacez l'étoile de
*.PRJ par le nom que vous voulez donner à votre projet et validez en cliquant sur
OK. Allez ensuite dans
Project -> Add Item et sélectionnez le fichier MAIN.H. Nous pouvons maintenant commencer à écrire notre code.
NB : pour écrire son code, on peut trés bien se servir d'un éditeur de texte comme notepad ou un plus complexe et n'utiliser TC que pour compiler.
LE CODE
TC est un compilateur C/C++/ASM, cependant, toutes les fonctions qu'il prend en charge ne fonctionnent pas forcément bien sur la G100. Ainsi la fonction
scanf() ne fonctionne pas bien sur G100. C'est pourquoi on a recourt à des librairies conçues spécialement pour la G100.
Dans toutes ces librairies, il faudra faire attention à bien avoir choisi les fonctions à compiler, certaines étant mises en commentaire dans le fichier.
La G100 possède un écran de
128 * 64 pixels. Dans les fonctions d'affichage évoquées ici, nous évoluons dans un repère orthonormé ayant pour origine le coin en en haut en gauche de l'écran, pour axe des x la première rangée horizontale de pixels, comme axe des y la première rangée verticale de pixels en partant de l'origine et comme unité 1 pixel.
LIBRAIRIES ET FONCTIONS
CASIO3.H :
-fonctions graphiques en mode noir et blanc
-fonctions utilitaires ( détection de l'appui sur une touche, contraste, extinction de la calculatrice... ).
-fonctions temporelles ( utilisation de l'horloge interne de la calculatrice ).
GXLIB10.H :
-fonctions graphiques en mode 5 niveaux de gris
MKEYS.H :
-fonctions utilitaires ( détection de l'appui sur une ou des touche(s) ).
MEMZONES.C :
-fonctions utilitaires ( manipulation des fichiers basic ).
LA LIBRAIRIE CASIO3.H
Les fonctions :
setPix (x,y,page,couleur);
Met un pixel de la couleur aux coordonnées x et y sur la page, couleur varie entre 0 et 1.
setbPix (x,y,page);
Met un pixel noir au coordonnées x et y sur la page.
setwPix(x,y,page);
Met un pixel blanc aux coordonnées x et y sur la page.
invpixel (x,y,page) ;
Inverse un pixel aux coordonnées x et y sur la page
couleur = tstpixel (x,y,page) ;
Retourne la valeur du pixel eux coordonnées x et y sur la page entre 0 et 1.
clearpage (page) ;
Efface la page.
page = getpage () ;
Retourne le numéro de page affiché a l'écran.
shootpage (page) ;
Met la page dans une prise d'écran HCOPY de la calculatrice.
Vous devrez préalablement créer une prise d'écran Hcopy1 (voir Nota).
setpage (page) ;
Affiche à l'écran la page.
hline2 (x1,x2,y,page) ;
Trace une ligne horizontale du point (x1,y) jusqu'au point (x2,y) sur la page.
vline2 (y1,y2,x,page) ;
Trace une ligne horizontale du point (x1,y) jusqu'au point (x2,y) sur la page.
rect (x1,y1,x2,y2,page,state) ;
Trace un rectangle non rempli ABCD avec A(x1,y1) B(x2,y1) C(x2,y2) D(x1,y2) sur la page de la couleur state. State varie entre 0 et 1.
fillRect (x1,y1,x2,y2,page,state) ;
Trace un rectangle rempli ABCD de la couleur state avec A(x1,y1) B(x2,y1) C(x2,y2) D(x1,y2) sur la page. State varie entre 0 et 1.
invpage (page) ;
Inverse les pixels de la page complète.
copypage (source,target) ;
Copie la page source a la page target.
disp_bmp (BMPTabType BmpTab,page) ;
Affiche a l'ecran le bmp convertit en C avec Bmp2C ou bmp100 sur la page.
LA LIBRAIRIE GXLIB10.H
La librairie GXLIB10.H disponible
ici permet d'afficher les sprites crées par
SpriteMaker disponible
ici. Attention, vous devez avoir préalablement configuré SrpiteMaker pour qu'il code les sprites pour cette librairie et ce en allant dans
Sprites -> Options, choisir gxLib 1.0 et cliquer sur
OK. Cette librairie est à mon sens la meilleure car elle permet d'afficher des sprites en 5 couleurs ( blanc, noir, gris clair, gris, gris foncé ).
Les fonctions:
gxSetMode() ;
Choisir la valeur “true” (ou 1) pour activer le mode et “false” (ou 0) pour le désactiver.
gxClearBuff() ;
Efface le contenu des buffers ( efface l'écran ).
gxDrawBmp() ;
Affiche une image 5 couleurs codée par SpriteMaker.
gxSpr_M_C(x,y,sprite) ;
Affiche un sprite aux coordonnées (x,y).
gxPixel(x,y,couleur), gxHLine(xmin,xmax,y,couleur), gxVLine(x,ymin,ymax,couleur) et
gxFill(x,y,couleur) ;
Les mêmes fonctions que pour CASIO3.H mais avec spécification de couleur : blanc(0), gris clair(1), gris(2), gris foncé(3), noir(4), inverser la couleur du pixel(5)
gxPixTest(x,y) ;
Teste la couleur du pixel aux coordonnées (x,y).
LA LIBRAIRIE MKEYS.H
La librairie MKEYS.H permet de savoir si une ( ou plusieurs touches ) est pressée. On utilise pour celà la fonction
thetouche(x,y) ou les coordonnées (x,y) sont celles des touches sur le clavier. On évolue ici dans un repère orthonormal ayant pour origine le coin en bas à gauche de la calculatrice, pour axe des x la première rangée horizontale de touches, pour axe des y la première rangée verticale de touches en partant de l'origine et pour unité une touche. ex: la touche [0] a pour coordonnées (1,1), la touche [EXE] a pour coordonnées (1,5) etc.
la fonction
thetouche(x,y) retourne 1 si la touche est pressée et 0 dans le cas contraire.
LA LIBRAIRIE MEMZONES.C
La librairie MEMZONE.C permet d'utiliser les fichiers basics.
Liste des fonctions :
long search_mem_zone (int zone_id, unsigned char *zone_name, struct memory_zone *bf);
search_mem_zone(id de la zone, "nom du fichier basic", &bf);
Permet de rechercher un fichier basic et d’initialiser la structure BF. Toutes les autres fonctions dépendent de la structure BF. Pour que vous compreniez mieux, la structure BF indiquera aux autres fonctions sur quel fichier Basic travailler.
long search_mem_zone renvoie "-1" si le fichier Basic que vous recherchez n’est pas trouvé par la fonction.
search_mem_zone(id de la zone, "nom du fichier basic", bf.b_size);
Renvoit la taille totale du fichier.
search_mem_zone(id de la zone, "nom du fichier basic",bf.b_real_size)
Renvoit la taille de l’espace valide(c’est à dire la taille totale moins les 24 octets qu’utilise le nom du fichier basic).
search_mem_zone(id de la zone, "nom du fichier basic",bf.b_name[10])
Renvoit le nom du fichier basic.
search_mem_zone(id de la zone, "nom du fichier basic",bf.b_password[10])
Renvoit le mot de passe.
int create_mem_zone(unsigned char zone_id, char *zonename, unsigned int size, int flag);
Cette fonction vous permet de créer un fichier basic. Zone_id sera toujours "1" . Zonename est le nom du futur fichier basic. Size est sa taille.
Enfin flag peut être soit CREATE_ZONE ( pour créer un fichier ) ou bien RESIZE_ZONE ( le créer s’il n’existe pas ou le redimensionner s’il existe) .
La fonction create_mem_zone renvoie :
0 si il n’y a aucun probleme
-1 s’il y a une erreur
-2 si il n’y a pas assez de mémoire pour créer le fichier basic.
unsigned int write_mem_zone (struct memory_zone *bf, const void *src, int offset, unsigned length);
Cette fonction vous permet d’écrire dans le fichier basic à l’endroit de votre choix. Le paramètre const void *src peut être ce que vous voulez : string , int , float … Offset est la position dans le fichier basic où vous voulez écrire. Et lenght est le nombre d’octets que prendra ce que vous écrirez. Pour connaître lenght utilisez
Sizeof() qui renvoie en octets la taille de l’élément entre parenthèses.
unsigned read_mem_zone (struct memory_zone *bf, void *dest, unsigned offset, unsigned length);
Cette fonction lit les données qui se trouvent dans votre fichiers basic. Dest est la zone où seront stockées les données lues. Comme avec la fonction
write() , cela peut être ce que vous voulez (char, int, struct …). Offset est l’endroit dans le fichier basic où démarrera la lecture. Lenght est la taille en octets que vont prendre les données lues.
void clear_mem_zone (const struct memory_zone *bf);
Cette fonction ne supprime pas un fichier basic de la mémoire mais efface son contenu tout en conservant la taille initiale du fichier.
clear_mem_zone(&bf);
Affiche le password du fichier basic en cour
Il faut bien sur que la structure BF soit initialisée avant. Sinon la fonction clear_basfile ne sait pas quoi effacer.
int change_password (struct memory_zone *bf, unsigned char *password);
Cette fonction permet de changer le password d’un fichier basic.
change_password(&bf,”NEWPASS”);
Change le password du fichier basic en cours
Il faut biensur que la structure BF soit initialisé avant. Sinon la fonction clear_basfile ne sait pas quoi effacer.
----------------------------------------------------------------------------------------------------------------------------------------------
Voilà vous avez tous les outils nécessaire pour débuter la programmation sur Graph100+
Tutoriaux :
Vous trouverez
ici un autre tutorial sur la programmation pour g100, réalisé par casioworld.
Si vous souhaitez approfondir, vous pouvez consulter le
wiki g100, le
site de casioworld.
Téléchargements :
Vous pouvez retrouver toutes les libs nécessaires à la prog sur g100 sur la
casiocalc sharing area mais aussi sur le
site de casioworld.
Support/Aide :
Pour tout support ou aide, n'hésitez pas à intervenir sur le
forum g100 ou sur le
forum casiocalc ( en anglais ).
Apprendre le C/C++ :
Si vous souhaitez apprendre le C/C++, il y a le
site du zero bien sûr, mais aussi
France IOI,
developpez, le tutoriel
Ainsi C que je vous recommande particulièrement mais ce ne sont pas les seuls sites existants sur la question.
Pour vos programmes, j'aimerais insister sur l'importance des pointeurs et des listes chaînées, de ne pas utiliser des goto, de diviser son programme en fonction et de faire les indentations...
J'espère que ce tutoriel vous aura été profitable et que de nombreux programmes pour g100 vont voir le jour
Ce tutoriel sera modifié et complété au cours du temps, d'autres librairies seront ajoutées et leur aide sera complétée...
phcorp
9456 Invité
Citer : Posté le 18/09/2013 16:56 | #
Je suppose que ça ne fonctionne pas pour une graphe 95
Citer : Posté le 18/09/2013 17:04 | #
pour une graph 95, tu as un SDK dedié qui te permet de programmer en C/C++, mais avec d'autres bibliotheques que celle decrites ici
(d'ailleurs les programmes fait avec ce SDK sont les add-ins et sont beaucoup plus rapide que les programmes basic)
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !