Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.
Tous | Tutoriels du Mercredi | Basic Casio | C/C++/ASM | LuaFX | Graphisme | Transferts | Logiciels | Diverses astuces

Calculatrice
Toutes
Graph 35 à 100
Graph 25+Pro/25+E/25+E II
Graph 35+USB/75(+E)/85/95 SD
Graph 100(+)
Classpad 300/330(+)
fx-CG 10/20 (Prizm)
Classpad 400(+E)
Graph 90+E
fx-92+ SC

Retour à la liste des tutoriels
Tutoriel Casio : Programmer en C/C++/ASM sur Graph100(+)
Tutoriel rédigé le : 2007-07-05 10:55  par Phcorp  Catégorie : C/C++/ASM  Calculatrice : Graph 100(+)

Discutez de ce tutoriel sur le forum >> Voir le sujet dédié (37 commentaires)

Programmer en C/C++/ASM sur Graph100(+)
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


Discutez de ce tutoriel sur le forum >> Voir le sujet dédié (37 commentaires)

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 104 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd