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.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » Programmer en C/C++/ASM sur Graph100(+)
Phcorp Hors ligne Membre Points: 716 Défis: 0 Message

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
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

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)
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
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

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
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 !

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 135 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