π
<-
Chat plein-écran
[^]

[FR] Langage C sur ez80 - Mémo, rappels & tutoriels

Langages Assembleur, Axe, BBC Basic...
En ligne

[FR] Langage C sur ez80 - Mémo, rappels & tutoriels

Message non lude Wistaro » 25 Juin 2016, 18:33

Guide du langage C pour calculatrices à processeur ez80
Ti-83 Premium CE & TI84+CE
Version
: 4.1 (29 janvier 2017)


Contributeurs
: Wistaro, TheMachine02, Adriweb, MateoConLechuga

Merci à eux!


* * *



Bienvenue!

Quand on te parle de
programmes pour calculatrices
, tu t'imagines déjà le truc
lent
, en
noir et blanc
et pas très beau.

Mais ça, c'était
hier
.
Maintenant avec les nouveaux modèles de calculatrices qui sont arrivés depuis la rentrée 2015, tu peux oublier tes
a prioris
.
Les technologies ont évolué, les calculatrices disposent quasiment des
même capacités
qu'un
ordinateur
peut (ou pouvait) avoir.

Voici un
aperçu
de ce que
tu peux
faire, aujourd'hui en 2016, sur
calculatrice
:

Image Image
ImageImage


Envie de
créer
ton propre
jeu
ou ton propre
programme
?
C'est parti!



* * *

Pour une meilleur navigation, je te conseille de faire
CTRL + F
pour recherche une information sur la page. Par exemple, pour rechercher ds informations sur l'affichage de sprites, tu peux faire CTRL + F, puis taper "sprites" et tu auras directement l'information!



Prérequis:

  • Une bonne connaissance du langage C
    (des rappels essentiels sont rappelés plus bas)
  • Un bonne connaissance des calculatrices (e)z80 (touches, menus..)
  • Une calculatrice TI83 PCE ou TI84+CE(T) , ou un émulateur


* * *




Sommaire




I / Préparation


1.1 - Programmer sur calculatrices?


Si vous le savez pas, il existe plusieurs langages de programmations officiels sur les calculatrices à processeurs ez80 (TI-83 Premium CE et TI84+CE).
  • TI-Basic: langage directement interprété par la calculatrice. Puissant, mais relativement lent. Possibilité de faire des graphismes, des calculs poussés, de travailler avec des matrices, des listes...
  • Assembleur (ASM): Langage qui doit être
    compilé
    (plutôt "assemblé" pour être précis, d'où son nom) pour pouvoir être exécuté. Code plutôt complexe dans sa manière de s'écrire, mais le résultat est très (même trop) puissant. Idéal pour des jeux. Un tutoriel en français est disponible ici !
  • Le langage C: Voilà ce que nous intéresse ici, le C. Le C est un langage qui doit lui-aussi être compilé pour être exécuté. Contrairement à l'assembleur, la syntaxe du langage est plus "simple".

1.2 - Compiler mon programme


C'est très simple, il existe 2 méthodes:
  • Utiliser le Project Builder de Tiplanet. En gros, c'est une suite d'outil directement intégrée au site. Vous codez, et ça vous génère le fichier .8xp (pour la calculatrice) automatiquement. Vous pouvez même tester votre programme en temps réel grâce à l'émulateur intégré. Vous pouvez également travailler à plusieurs sur le même projet! :bj:
  • Utiliser la toolchain
    (suite d'outils)
    en local. Cela signifie que vous téléchargez chez vous le compilateur, et que vous compilez vous-même vos programmes.


1.3 - Les bibliothèques, c'est cool


Ce sont des fonctions additionnelles déjà codées qui permettent de réaliser plus de choses. En local, vous pouvez les trouver ici.
Sur le Project Builder, elles sont déjà intégrées.

Mais :warning: ! Dans votre programme, si vous utilisez les fonction d'une bibliothèque
(library en anglais)
, vous devez l'inclure dans votre header (entête), comme ceci: #include <lib/ce/fileioc.h>( ici, pour inclure la bibliothèque "fileio").
Il existe pour le moment 4 bibliothèques:
  • graphx : Rajoute des fonctions graphiques très utiles.
  • keypadc : Permet d’interagir avec le clavier, détecter une pression de touches
  • fileio : Permet d’interagir avec davantage de variables, comme les AppVar.
  • intce: Permet de gérer des interruptions dans votre programme (timers, etc...)

Pour que votre programme fonctionne, vous devez envoyer sur la calculatrice, en plus de votre programme, les fichiers .8xv des bibliothèques, ainsi que le fichier libload.8xv (pour charger les lib automatiquement).

:warning: La bibliothèque
tice.h
est
obligatoire
! :warning:



II / Langage C sur ez80 - Quelques rappels


2.1 - Les variables basiques




En C, comme dans d'autres langages, chaque variable a un type différent. Une variable de type char n'est pas pareille qu'une variable de type long.
Voici quelques type de variables:
  • char: 8bits, de -128 à 127
  • unsigned char: 8bits de 0 à 255 (unsigned = positif)
  • short int: 16bits de -32 768 à 32 767
  • int: 32 bits (16 bits sur processeurs 16 bits), de -2,1 milliards à +2,1 milliards environ
  • float: 64 bits (1 bit de signe, 8 bits d'exposant et 53 bits de mantisse)

Notez bien que dans le cas du C appliqué sur le processeur ez80, la taille des type peut varier (par exemple, le int ne fait pas 32 mais 24 bits)


Dans le langage C pour ez80, le format le plus courant rencontré est le
uint8_t
.
C'est un format 8 bits, entier. Il est sensiblement plus rapide.
Il peut prendre des valeurs allant de 0 à 255.

Vous pouvez l'utiliser pour quasiment tout: coordonnées, variables, etc...

Vous avez également le
char
pour un seul caractère: char var = 'a';

Il existe également un type particulier, le
gfx_image_t
. Il est utilisé pour stocker un sprite
(voir plus bas)
.

Vous allez sûrement être amené à utiliser un array, ou
tableau
.
Un
array
est un tableau de valeurs
de même type
, tout simplement.
Il se déclare ainsi:
uint8_t tab[] = {1,2,3,4,5,6};

:important:
Type et accessibilité de la variable
:important:

Une variable peut également être caractérisée par sa portée (
static
pour être la même partout, par exemple).
Je vous réfère au tutoriel pour davantage de précisions.

2.2 - Les chaînes de caractères


En C, il n'y a pas de
string
. Pour rentrer une chaîne de caractères, il faut passer par un
tableau de caractères
. Chaque case du tableau va contenir une lettre.
Ex:
Code: Tout sélectionner
const char HelloWorld[] = "Hello World!";
const char Welcome[] = "Welcome to C!";
char Apples[] = "Apples!";
char Oranges[] = "Oranges";

const
signifie ici constant, c'est à dire que la valeur de cette chaîne de caractère ne peut pas changer (cf paragraphe plus bas)

:idea: Le dernier caractère d'une chaîne de caractères est
\0
pour indiquer la fin. :idea:

Tout le traitement des string possible en Basic est également possible grâce à la bibliothèque
string.h

Plus d'information ici

2.3 - Constantes et mots-clefs


Il existe également, en parallèle aux variables, les
constantes
.
Généralement déclarées en début de programme, elles permettent, comme leur nom l'indique, de stocker une valeur qui ne pourra plus être changée par la suite, dans le programme.
C'est utile pour stocker des constantes, des paramètres statiques...

On les déclare comme ceci: const type NOM valeur.
Par exemple: const uint8_t NB_PIXELS = 256;

Si dans le programme, le programmeur tape cette ligne NB_PIXELS = 56;, le compilateur va générer une erreur.


:important: Par convention (et pour les différencier des variables) le nom des constantes doit être en majuscule, et ne comporter aucun caractère spécial, sauf le "_". :important:

Il existe également des
mot-clefs
que l'on peut définir, en début de programme.
On les déclare comme ceci: #define MOT_CLEF valeur.
Par exemple, pour stocker la valeur du nombre pi: #define NB_PI 3.141592654
Le compilateur (plus précisément le préprocesseur) va alors remplacer dans votre code tout les "
MOT_CLEF
" par "
valeur
".

2.4 - Les pointeurs


Les pointeurs sont une notion complexe du langage C, mais également indispensable.

Vous savez manipulez des variables en C.
Mais ce que vous ne savez peut-être pas, c'est que ces variables sont en fait définies par leur adresse dans la mémoire. C'est pour indiquer à la machine que le contenu de votre variable se trouve à tel ou tel endroit.

Par exemple, quand vous faites uint8_t a = 32; la machine va alors faire ceci:
  • Rechercher un emplacement vide dans la mémoire
  • Allouer dans cet espace la taille d'un entier (24 bits dans notre cas)
  • Ajouter l'information dans cet espace: le chiffre 32.
Simplement, un pointeur est une
adresse
dans la mémoire.
De même que vous faites gfx_printUInt(a,0,0) pour afficher "32", vous pouvez faire gfx_printUInt(&a,0,0) pour afficher son adresse.

Mais au lieu de définir une variable par sa valeur, vous pouvez la définir par....Son adresse.
En clair, vous dites à la machine "réservez moi tel espace à telle adresse ).

Par exemple: uint8_t* pointeur= NULL déclare un pointeur dont l'adresse est....Rien du tout.
Voyons un autre exemple: uint8_t* toto = malloc(sizeof(int)) qui permet tout bêtement de créer un pointeur et d'y allouer la taille d'un entier (grâce à l'allocation dynamique).

Si vous souhaitez approfondir les notions de pointeurs, allez voir ce tutoriel.


III / Programmer sur une calculatrice: outils & informations


3.1 - L'écran de la calculatrice



Dans beaucoup de fonctions graphiques, il est nécessaire de se placer dans un
repère
.
En effet, l'écran de votre calculatrice
(ce qui nous intéresse ici)
, est simplement un
quadrillage
de
pixels
.
Chaque pixel est caractérisé par
  • Sa position sur l'
    axe X
    (horizontale)
  • Sa position sur l'
    axe Y
    (verticale)
  • Sa couleur, codé en
    8 ou 16 bits
    suivant le mode choisi


Voici comment est organisé l'écran:
Image

Le minimum pour
x
et
y
se situe
en haut à gauche
.
Le maximum se situe en bas à droite, à
319 pour x
et
239 pour y


:help: Le "clipping" décrit une routine/fonction qui ne dessine pas incorrectement hors de l'écran si la commande le demande. Si rien n'est mentionné dans la routine, elle l'utilise. Sinon , la mention "no_clip" apparaît dans le nom de la fonction. Exemple: gfx_Sprite_NoClip( nom_img, x, y );
Les routines sans clipping sont plus rapide.

Lorsque les couleurs sont codées sur 8bits, voici une palette pour vous aider:
Image

Les valeurs sont en
hexadécimal
, grâce au
0x....


3.2 - Générer des sprites & des images


En cours de rédaction

*-*-*


BESOIN D'UN RAFRAICHISSEMENT DANS LE LANGAGE C? Voici un excellent tutoriel que je recommande.


*-*-*


IV / Listes des fonctions


Voici maintenant la liste des fonctions que vous pouvez utiliser dans vos programmes!





Utiliser le timer interne

Code: Tout sélectionner
/* Définir les constantes de temps.
*   Comme nous sommes sur une horloge 32768 kHz, il faudra attendre 32768 fronts d'horloge pour avoir une seconde.
*   Ces valeurs sont enregistrées dans des constantes.
*/
#define ONE_SECOND      32768/1 //Nombre de fronts pour 1 seconde
#define HALF_SECOND      32768/2 //Nombre de fronts pour une demi seconde
#define QUARTER_SECOND      32768/4 //Nombre de front pour un quart de seconde

/* Désactiver le TIMER 1 */
timer_Control = TIMER1_DISABLE;

/*On recharge le compteur avec 1 seconde */
timer_1_ReloadValue = timer_1_Counter = ONE_SECOND;

/*On active le timer1 pour une fréquence de 32768 kHz, on active une interruption lorsque le flag est déclenché (retour à 0), et on lance le décompte.
* Notez que le compteur décrémente, de la valeur initiale à 0.
*/
timer_Control = TIMER1_ENABLE | TIMER1_32K | TIMER1_0INT | TIMER1_DOWN;

//programme

do{

     /* Quand on atteint 0, donc quand le timer1 est réinitialisé*/
     if(timer_IntStatus & TIMER1_RELOADED) {

          timer_IntStatus = TIMER1_RELOADED; //on recharge le timer1
     }


} while(!os_GetCSC());

Paramètres:
N/A

On peut également programmer l'arrêt à une valeur spécifique et non à 0:
Code: Tout sélectionner
/*Cette fonction va réinitialiser le compteur*/
void reset_counter(void) {

   timer_Control = TIMER1_DISABLE;   
   timer_1_Counter = 0;
   timer_Control = TIMER1_ENABLE | TIMER1_32K | TIMER1_NOINT | TIMER1_UP;
}

/* Initialisation du timer avec 1 seconde */
timer_1_MatchValue_1 = ONE_SECOND;

reset_counter();

do {
      /*Si le timer atteint la valeur désirée...*/
      if(timer_IntStatus & TIMER1_MATCH1) {
         
                        /*On réinitialise le compteur */
         reset_counter();
         
         /* On recharge le compteur */
         timer_IntStatus = TIMER1_MATCH1;
      }
   } while(!os_GetCSC());



Ralentir le programme/délai

Code: Tout sélectionner
void nopwait(uint16_t n)
{
    uint16_t j;
    for (j=0; j<n; j++) asm("nop"); // small delay
}

Paramètres:

  • n: Temps du délai. La boucle met environ
    2.8 microsecondes
    par itération, donc le temps sera de
    n*2.8 microsecondes
    microsecondes.

Nettoyer l'écran principal et préparer le programme

Code: Tout sélectionner
/*Vous DEVEZ appeler cette fonction en début et en fin  de programme! */
prgm_CleanUp();

Paramètres:
N/A

Toutes les variables du main doivent être initialisées avant l'appel à cette fonction


Remplir l'écran avec une couleur

Code: Tout sélectionner
void fillScreen(unsigned color) {
   
    memset_fast(lcd_vramArray, color, 320*240*2);
}

Paramètres:

  • color = valeur hexadécimale de la couleur (ici)


Voir aussi:
:
Code: Tout sélectionner
gfx_FillScreen(gfx_black)
graphx.h
-> Remplir l'écran avec une couleur (couleur: gfx_black, gfx_green, gfx_blue...)


Changer le niveau de contraste:

Code: Tout sélectionner
lcd_SetBacklightLevel(level); //impose un niveau de contraste
lcd_GetBacklightLevel() //récupère dans une variable (unint8_t) le niveau de contraste

Paramètres:

  • level=niveau de contraste, uint8_t [0- 255]


Récupérer le niveau de batterie

Code: Tout sélectionner
uint8_t batLevel;
batLevel = boot_GetBatteryStatus();

Paramètres:
N/A


Éteindre la calculatrice

:warning:
Non recommandé
:warning:
Code: Tout sélectionner
boot_TurnOff(); //mauvaise idée...

Paramètres:
N/A


Détecter un appui la touche ON

Code: Tout sélectionner
if(boot_CheckOnPressed) {
//quelqu'un a appuyé sur ON
}

Paramètres:
N/A


Désactiver/Activer le curseur

Code: Tout sélectionner
os_DisableCursor; //désactive le curseur
os_EnableCursor; //active le curseur

Paramètres:
N/A


Voir/Modifier la date et l'heure

Code: Tout sélectionner
boot_SetDate(uint8_t jour, uint8_t mois, uint24_t année); //met à jour la date
boot_GetDate(uint8_t *jour, uint8_t *mois, uint24_t *année); //récupère la date en cours, et la stocke dans 3 pointeurs.
boot_SetTime(uint8_t secondes, uint8_t minutes, uint8_t heures); //met à jour l'horloge
boot_GetTime(uint8_t *seconds, uint8_t *minutes, uint8_t *hours); //récupère la l'horloge en cours, et la stocke dans 3 pointeurs.

Paramètres:
N/A



Générer de l'aléatoire

Code: Tout sélectionner
srand(rtc_Time()); //mettre en début de programme. Initialise la génération des nombres aléatoires avec l'heure courante. Inutile de le recharger à chaque fois.
var1 = rand() //retourne une valeur aléatoire entre 0 et 1 non inclu (?)
var2 = randInt(a,b) // retourne une valeur aléatoire entre a et b inclus.

Paramètres:
N/A


Attendre la pression d'une touche au clavier

Code: Tout sélectionner
while( !os_GetCSC() );

Paramètres:
N/A


Tracer du texte (écran d'accueil)

Code: Tout sélectionner
void printText(int8_t xpos, int8_t ypos, const char *text) {
   os_SetCursorPos(ypos, xpos);
   os_PutStrFull(text);
}

Paramètres:

  • xpos = position sur les x du texte
    (voir section taille écran plus haut)
  • ypos = position sur les y du texte
    (voir section taille écran plus haut)
  • text = tableau de caractères (string/array)


Inverser une chaîne de caractère

Code: Tout sélectionner
void reverse(char* s)
{
    uint16_t i, j;
    char c;

    for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
        c = s[i];
        s[i] = s[j];
        s[j] = c;
    }
}

Paramètres:

  • s = chaîne de caractères/pointeur


Convertir un int en chaîne de caractère

Code: Tout sélectionner
void uitoa(uint24_t n, uint8_t zeropad_len, char* textbuffer)
{
    uint24_t i = 0;

    do {       /* generate digits in reverse order */
        textbuffer[i++] = n % 10 + '0';   /* get next digit */
    } while ((n /= 10) > 0);     /* delete it */

    for(; i<zeropad_len; i++)
        textbuffer[i] = '0';

    textbuffer[i] = '\0';

    reverse(textbuffer);
    return;
}

Paramètres:

  • n = nombre de digits à afficher
  • zeropad_len = nombre de 0 décimaux à afficher
[*] textbuffer = un pointeur vers le buffer où la chaine de caractère doit être écrite

Cette fonction a besoin de la fonction précédente reverse() pour fonctionner. De plus vous devez allouer un buffer suffisamment grand pour accueillir la chaine de caractères (9 octets devrait être suffisant)




Initialiser les graphiques 8bpp:
graphx.h
Code: Tout sélectionner
gfx_Begin( gfx_8bpp );



Dessiner sur le buffer (mémoire tampon):
graphx.h
Code: Tout sélectionner
gfx_SetDrawBuffer();


Copier le buffer sur l'écran pour le rendre visible:
graphx.h
Code: Tout sélectionner
gfx_SwapDraw();


Copier une partie de l'écran dans le buffer:
graphx.h
Code: Tout sélectionner
gfx_Blit(gfx_buffer); //copier tout l'écran
gfx_BlitLines( gfx_buffer, 0, 20 ); //copier uniquement les lignes 0 et 20 (?)
gfx_BlitArea( gfx_buffer, 0, 0, 160, 120 ); //copier une section rectangulaire (voir gfx_Rectangle() )





Afficher une chaîne de caractère (écran graphique):
graphx.h
Code: Tout sélectionner
gfx_PrintStringXY(txt,width,height);

Paramètres:

  • txt = tableau de caractère (const char)
  • width = position X du texte (largeur)
    (voir section taille écran plus haut)
  • height = poistion Y du texte (hauteur)
    (voir section taille écran plus haut)


Afficher une valeur (écran graphique):
graphx.h
Code: Tout sélectionner
void printIntXY(uint8_t var, uint8_t x, uint8_t y, uint8_t dec) {
          gfx_SetTextXY(x,y);
          gfx_PrintUInt(var,dec);
}

Paramètres:

  • x, y = position sur l'écran graphique du pixel haut gauche
    (voir section taille écran plus haut)
  • var = variable à afficher
  • dec: Nombre de flottants à afficher



Changer la couleur du texte:
graphx.h
Code: Tout sélectionner
gfx_SetTextFGColor(color);

Paramètres:

  • color = couleur du texte, [0 - 255]


Récupérer les dimensions de l'écran graphique:
graphx.h
Code: Tout sélectionner
var1 = gfx_lcdWidth; //donne la largeur de l'écran
var2 = gfx_lcdHeight; //donne la hauteur de l'écran


Récupérer les dimensions (pixels) d'un texte:
graphx.h
Code: Tout sélectionner
var1  = gfx_GetStringWidth(str); //donne la longueur en pixels du texte
var1  = gfx_FontHeight(); //donne la hauteur en pixels du texte. Cette valeur est constante.

Paramètres:

  • str = tableau de caractères (const char)


Centrer du texte:
graphx.h
Code: Tout sélectionner
void print_string_centered(const char *str) {
   gfx_PrintStringXY(str, (gfx_lcdWidth-gfx_GetStringWidth(str)) / 2, (gfx_lcdHeight-gfx_FontHeight()) / 2);
}

Paramètres:

  • char = tableau de caractères (const char)



Définir une couleur (forme) à appliquer à la forme suivante
graphx.h
Code: Tout sélectionner
gfx_SetColor(gfx_color);

Paramètres:

  • gfx_color = couleur déjà définie (gfx_black, gfx_yellow, gfx_green, gfx_blue, gfx_purple, gfx_white....)


Tracer un polygone à n côtés
graphx.h
Code: Tout sélectionner
gfx_Polygon(coord,pts);

Paramètres:

  • coord = tableau contenant les coordonnées des points, de la forme (ex): int coord[6] = {x1,y1,x2,y2,x3,y3}
    (voir section taille écran plus haut)
  • pts = nombre de points du polygone. Doit être égal à strlen(coord)/2



Tracer un cercle
graphx.h
Code: Tout sélectionner
gfx_Circle(x,y,r);

Paramètres:

  • x,y = position du centre du cercle. Les coordonnées maximales sont entre 0 et 319 pour x et 0 et 239 pour y.
  • r = rayon du cercle


Tracer un cercle plein
graphx.h
Code: Tout sélectionner
gfx_FillCircle(x,y,r);

Paramètres:

  • x,y = position du centre du cercle. Les coordonnées maximales sont entre 0 et 319 pour x et 0 et 239 pour y.
  • r = rayon du cercle


Tracer un rectangle
graphx.h
Code: Tout sélectionner
gfx_Rectangle(x,y,width,height);

Paramètres:

  • x,y = position en x et y du point en haut à gauche du rectangle
    (voir section taille écran plus haut)
  • width = largeur du rectangle
  • height = hauteur du rectangle


Tracer un rectangle plein
graphx.h
Code: Tout sélectionner
gfx_FillRectangle(x,y,width,height);

Paramètres:

  • x,y = position en x et y du point en haut à gauche du rectangle
    (voir section taille écran plus haut)
  • width = largeur du rectangle
  • height = hauteur du rectangle


Tracer un triangle plein
graphx.h
Code: Tout sélectionner
gfx_FillTriangle(x1,y1,x2,y2,x3,y3);

Paramètres:

  • x1,y1,x2,y2,x3,y3 = Coordonnées des 3 sommets du triangle



Décaler l'écran graphique
graphx.h
Code: Tout sélectionner
gfx_ShiftDown(x); //décalage vers le  bas
gfx_ShiftRight(x); //décalage à droite
gfx_ShiftLeft(x); //décalage à gauche
gfx_ShiftUp(x); //décalage vers le haut

Paramètres:

  • x = nombres de pixels à décaler



Tracer un triangle plein
graphx.h
Code: Tout sélectionner
gfx_FillTriangle(x1,y1,x2,y2,x3,y3);

Paramètres:

  • x1,y1,x2,y2,x3,y3 = Coordonnées des 3 sommets du triangle



Convertir une image png
graphx.h
Premièrement, vous devez convertir vos images PNG en fichier C grâce l'outil ConvPNG.

L'outil vous donnera (suivant les paramètres choisis) 3 fichiers:
  • Un fichier img.c qui contient tout les pixels de votre image, encodés selon la palette et le mode de compression choisi,
  • Un fichier img_gfx.c qui contient le sources de la palette utilisée
  • Un fichier img_gfx.h pour les inclusions dans le fichier principal

Pour utiliser votre image dans votre programme, vous devez inclure le fichier img_gfx.h :
#include "img_gfx.h"


Afficher une image PNG convertie
graphx.h
:warning: Nécessite une image PNG convertie (Cf point précédant) :warning:
Ici, mon image convertie s'appelle
nom_img.png
.
Code: Tout sélectionner
gfx_Begin( gfx_8bpp ); //initialise les graphiques
gfx_Sprite_NoClip( nom_img, x, y );

Paramètres:

  • x = Coordonnée X de la position de l'image
  • y = Coordonnée y de la position de l'image


Retourner une image sur 4 positions
graphx.h
:warning: Nécessite une image PNG convertie (Cf point précédant) :warning:
Ici, mon image convertie s'appelle
nom_img.png
.
Code: Tout sélectionner
gfx_Begin( gfx_8bpp ); //initialise les graphiques

/*On va créer un buffer temporaire pour y stocker notre image retournée avant de l'afficher*/
gfx_TempSprite( sprite_buffer, 32, 32 ); //buffer de dimension 32 par 32 pixel

/*On retourne notre image selon l'axe X*/
sprite1 = gfx_FlipSpriteX(nom_img, sprite_buffer); //Note:  Cette fonction retourne l'image convertie, ne l'affiche pas!

/*On retourne notre image selon l'axe Y*/
sprite2 = gfx_FlipSpriteX(nom_img, sprite_buffer); //Note:  Cette fonction retourne l'image convertie, ne l'affiche pas!

/*On pivote notre image d'un degré*/
sprite3 = gfx_RotateSpriteC(nom_img, sprite_buffer);  //Note:  Cette fonction retourne l'image convertie, ne l'affiche pas!

/*On pivote notre image d'un degré plus important*/
gfx_RotateSpriteCC(nom_img, sprite_buffer);  //Note:  Cette fonction retourne l'image convertie, ne l'affiche pas!

/*On pivote notre image de 90° dans le sens trigonométrique*/
sprite3 = gfx_RotateSpriteHalf(nom_img, sprite_buffer);  //Note:  Cette fonction retourne l'image convertie, ne l'affiche pas!


/*Pour afficher l'image*/

gfx_Sprite_NoClip( sprite1, x, y );
gfx_Sprite_NoClip( sprite2, x+10, y+10 );
gfx_Sprite_NoClip( sprite3, x+10+10, y+10+10 );


Paramètres:

  • x = Coordonnée X de la position de l'image
  • y = Coordonnée y de la position de l'image



Fermer les graphiques 8bpp:
graphx.h
Code: Tout sélectionner
gfx_End(); //ferme les graphiques
prgm_CleanUp(); //ferme le programme et retourne à l'écran d'accueil





Interaction avec le clavier
keypadc.h
La bibliothèque
keypadc
vous permet d'interagir avec le clavier de la calculatrice.
Chaque touche est stockée dans un
groupe
. Il y a au total
7 groupes
de touches:
Voici la répartition:
  • Groupe 1:
    :f15: , :f14: , :f13: , :f12: , :f11: , :f21: , :f22: , :f23:
  • Groupe 2:
    :f91: , :f81: , :f71: , :f61: , :f32: , :f41: , :f31:
  • Groupe 3:
    :f102: , :f92: , :f82: , :f72: , :f62: , :f52: , :f42: , :f44:
  • Groupe 4:
    :f103: , :f93: , :f83: , :f73: , :f63: , :f53: , :f43: , :f33:
  • Groupe 5:
    :f104: , :f94: , :f84: , :f74: , :f64: , :f54: , :f44:
  • Groupe 6:
    :f105: , :f95: , :f85: , :f75: , :f65: , :f55: , :f45:
  • Groupe 7:
    :f25: , :f34: , :f24: , :f26:


Maintenant, pour récupérer la valeur d'une touche pressée, il faut faire
key = kb_ScanGroup(kb_group_X)

X étant le groupe où se situe la touche recherchée.



Pour tester la pression d'une touche, il faut procéder comme ça:
Code: Tout sélectionner
uint8_t key; //cette variable contiendra la valeur de la touche

key = kb_ScanGroup(kb_group_7); //on stockes dans key la valeur des touches pressées du groupe

if(key & kb_up) { //si une touche du groupe 7 est préssée et SI c'est la touche up
       //programme
}


Autre exemple:

Code: Tout sélectionner
while(kb_ScanGroup(kb_group_1) != kb_2nd) {

   //tant que la touche 2nde n'est pas pressée, on fait ce qui se trouve ici, c'est à dire, rien
}





... autre fonctions ici ...

N'oubliez pas que je vous donne seulement les fonctions les plus utiles/pratique. Il en existe également d'autres.
Je vous renvoie donc à la documentation pour plus de détails (en anglais):



En espérant que ça vous aie donné envie de tester ça... :)

Loading translation...

In progress. Please wait.

You may see the french version (up to date).
Bonjour
Anonymous
! Une question, une demande, un problème ? Envoie-moi un MP, je réponds rapidement :)

Envie de
programmer en C
sur ta calculatrice
TI83PCE/84+CE
? Suis le guide en cliquant ici!

>> Groupe Facebook BAC 2017 & ECE
(entraide, partage & astuces)
: cliquez-ici <<




Image

Ma chaîne Youtube :)
Mon site :p
Avatar de l’utilisateur
WistaroModo.G
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 15.8%
 
Messages: 2168
Images: 25
Inscription: 25 Fév 2013, 17:21
Localisation: Toulouse
Genre: Homme
Calculatrice(s):
Classe: Etudiant en électronique (Ex TS - SI)
youtube: Wistaro
twitter: @Wistaro

Re: Langage C sur ez80 - Mémo, rappels & tutoriels

Message non lude Adriweb » 25 Juin 2016, 18:38

Excellent boulot :)

Quelques remarques:
- Si ça te tente un jour de traduire tout ceci en Anglais, le site de documentation CE a une partie "C" qui est en gros vide pour le moment :P
- Un petit sommaire pour chaque "partie" ?
- La taille des types n'est pas la même, sur cette plateforme (enfin, avec ZDS). Par exemple, les int font 24 bits, pas 32. Etc. pour le reste, cf. la doc de ZDS eZ80.
- Organiser les "parties" en "catégories" (clavier, graphiques, utilitaires, etc.)
- Pour le moment, "pause X secondes" ne fonctionne en fait pas, du moins pas sur vraie calculatrice, je crois.
Avatar de l’utilisateur
AdriwebAdmin.
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 34.5%
 
Messages: 10758
Images: 825
Inscription: 01 Juin 2007, 01:00
Localisation: France
Genre: Homme
Calculatrice(s):
Classe: (ingénieur)
twitter: adriweb

En ligne

Re: Langage C sur ez80 - Mémo, rappels & tutoriels

Message non lude Wistaro » 25 Juin 2016, 18:42

Adriweb a écrit:Excellent boulot :)

Quelques remarques:
- Si ça te tente un jour de traduire tout ceci en Anglais, le site de documentation CE a une partie "C" qui est en gros vide pour le moment :P
- Un petit sommaire pour chaque "partie" ?
- La taille des types n'est pas la même, sur cette plateforme (enfin, avec ZDS). Par exemple, les int font 24 bits, pas 32. Etc. pour le reste, cf. la doc de ZDS eZ80.
- Organiser les "parties" en "catégories" (clavier, graphiques, utilitaires, etc.)
- Pour le moment, "pause X secondes" ne fonctionne en fait pas, du moins pas sur vraie calculatrice, je crois.



Merci :)

C'est justement parce-que la partie "c" était vide que j'ai décidé de faire ce mémo des fonctions.

Pourquoi pas traduire, oui :)

> Merci pour les tailles, je vais signaler ça.

> J'ai déjà organisé par "parties", avec des anchor.
Bonjour
Anonymous
! Une question, une demande, un problème ? Envoie-moi un MP, je réponds rapidement :)

Envie de
programmer en C
sur ta calculatrice
TI83PCE/84+CE
? Suis le guide en cliquant ici!

>> Groupe Facebook BAC 2017 & ECE
(entraide, partage & astuces)
: cliquez-ici <<




Image

Ma chaîne Youtube :)
Mon site :p
Avatar de l’utilisateur
WistaroModo.G
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 15.8%
 
Messages: 2168
Images: 25
Inscription: 25 Fév 2013, 17:21
Localisation: Toulouse
Genre: Homme
Calculatrice(s):
Classe: Etudiant en électronique (Ex TS - SI)
youtube: Wistaro
twitter: @Wistaro

Re: Langage C sur ez80 - Mémo, rappels & tutoriels

Message non lude Anonyme0 » 25 Juin 2016, 18:48

Bravo ! :bj:
C'est assez complet, et ça change de l'anglais :p

Est-il prévu de parler de la gestion des sprites et tilemap de gfx ?
Image
(17:46:41) Hayleia: ah, ce bon vieux Firefox, qu'est-ce qu'on est bien avec lui :D
Avatar de l’utilisateur
Anonyme0
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 13.8%
 
Messages: 263
Images: 17
Inscription: 06 Sep 2015, 18:33
Localisation: Pas sur TI-Planet
Genre: Non spécifié
Calculatrice(s):

En ligne

Re: Langage C sur ez80 - Mémo, rappels & tutoriels

Message non lude Wistaro » 25 Juin 2016, 19:01

Anonyme0 a écrit:Bravo ! :bj:
C'est assez complet, et ça change de l'anglais :p

Est-il prévu de parler de la gestion des sprites et tilemap de gfx ?


J'ai pas encore regardé cette partie, mais si tu t'y connais dans cette partie, je suis preneur :D
Bonjour
Anonymous
! Une question, une demande, un problème ? Envoie-moi un MP, je réponds rapidement :)

Envie de
programmer en C
sur ta calculatrice
TI83PCE/84+CE
? Suis le guide en cliquant ici!

>> Groupe Facebook BAC 2017 & ECE
(entraide, partage & astuces)
: cliquez-ici <<




Image

Ma chaîne Youtube :)
Mon site :p
Avatar de l’utilisateur
WistaroModo.G
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 15.8%
 
Messages: 2168
Images: 25
Inscription: 25 Fév 2013, 17:21
Localisation: Toulouse
Genre: Homme
Calculatrice(s):
Classe: Etudiant en électronique (Ex TS - SI)
youtube: Wistaro
twitter: @Wistaro

Re: Langage C sur ez80 - Mémo, rappels & tutoriels

Message non lude Epharius » 25 Juin 2016, 19:10

Tu me sauves ! :p
J'hésitais entre créer mon jeu en assembleur ou en C, en raison de la pauvre documentation et du fait qu'il faille tout aller chercher dans les sources. Mais maintenant, je crois que je vais le faire en C avec le PB du coup.
Comme quoi, la documentation n'est pas à négliger
Le projet Geometry Dash est en cours ! N'hésitez pas à aller jeter un coup d’œil au topic du projet !

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 75.9%
 
Messages: 921
Images: 4
Inscription: 08 Déc 2014, 18:38
Genre: Homme
Calculatrice(s):
Classe: Je prends toujours la première
youtube: yes I tube

Re: Langage C sur ez80 - Mémo, rappels & tutoriels

Message non lude Adriweb » 25 Juin 2016, 19:15

Conseil de mise en forme :

Remplacer
:
Copier une partie de l'écran dans le buffer:

:warning: Bibliothèque graphx.h nécessaire :warning:
Code: Tout sélectionner
gfx_Blit(gfx_buffer); //copier tout l'écran
gfx_BlitLines( gfx_buffer, 0, 20 ); //copier uniquement les lignes 0 et 20 (?)
gfx_BlitArea( gfx_buffer, 0, 0, 160, 120 ); //copier une section rectangulaire (voir gfx_Rectangle() )

Paramètres:
N/A


Par
:
Copier une partie de l'écran dans le buffer:
graphx.h


Code: Tout sélectionner
gfx_Blit(gfx_buffer); //copier tout l'écran
gfx_BlitLines( gfx_buffer, 0, 20 ); //copier uniquement les lignes 0 et 20 (?)
gfx_BlitArea( gfx_buffer, 0, 0, 160, 120 ); //copier une section rectangulaire (voir gfx_Rectangle() )
Paramètres:
N/A


Et pour les paramètres, il vaudrait mieux faire des (vraies) listes.
Avatar de l’utilisateur
AdriwebAdmin.
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 34.5%
 
Messages: 10758
Images: 825
Inscription: 01 Juin 2007, 01:00
Localisation: France
Genre: Homme
Calculatrice(s):
Classe: (ingénieur)
twitter: adriweb

Re: Langage C sur ez80 - Mémo, rappels & tutoriels

Message non lude Adriweb » 25 Juin 2016, 19:30

BTW, la "doc" des fonction des libs et no-libs est incluse dans leur header respectifs au dessus de chaque fonction - tu pourras probablement t'en servir :
- https://github.com/CE-Programming/toolc ... e/c/tice.h
- https://github.com/CE-Programming/libra ... /keypadc.h
- https://github.com/CE-Programming/libra ... 2/graphx.h
- https://github.com/CE-Programming/libra ... /fileioc.h

J'espère pouvoir intégrer une sorte "d'aide intéractive" au PB, aussi, allant directement chercher la doc qui va bien à la fonction qu'on est en train de taper, par exemple.
Avatar de l’utilisateur
AdriwebAdmin.
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 34.5%
 
Messages: 10758
Images: 825
Inscription: 01 Juin 2007, 01:00
Localisation: France
Genre: Homme
Calculatrice(s):
Classe: (ingénieur)
twitter: adriweb

En ligne

Re: Langage C sur ez80 - Mémo, rappels & tutoriels

Message non lude Wistaro » 25 Juin 2016, 21:23

Adriweb a écrit:BTW, la "doc" des fonction des libs et no-libs est incluse dans leur header respectifs au dessus de chaque fonction - tu pourras probablement t'en servir :
- https://github.com/CE-Programming/toolc ... e/c/tice.h
- https://github.com/CE-Programming/libra ... /keypadc.h
- https://github.com/CE-Programming/libra ... 2/graphx.h
- https://github.com/CE-Programming/libra ... /fileioc.h

J'espère pouvoir intégrer une sorte "d'aide intéractive" au PB, aussi, allant directement chercher la doc qui va bien à la fonction qu'on est en train de taper, par exemple.


Ce serait vraiment cool, oui :bj:
Je me suis aussi aidé de la doc pour rédiger ce topic.

Mais comme je le disais, mon but n'est pas de réécrire ici toute la documentation mot pour mot, mais de donner une listes des fonctions les plus utiles, traduites clairement en français.
Après si la personne souhaite en savoir davantage, elle peut toujours se référer aux docs...Et puis...Certaines personnes sont fâchées avec l'anglais :D
Bonjour
Anonymous
! Une question, une demande, un problème ? Envoie-moi un MP, je réponds rapidement :)

Envie de
programmer en C
sur ta calculatrice
TI83PCE/84+CE
? Suis le guide en cliquant ici!

>> Groupe Facebook BAC 2017 & ECE
(entraide, partage & astuces)
: cliquez-ici <<




Image

Ma chaîne Youtube :)
Mon site :p
Avatar de l’utilisateur
WistaroModo.G
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 15.8%
 
Messages: 2168
Images: 25
Inscription: 25 Fév 2013, 17:21
Localisation: Toulouse
Genre: Homme
Calculatrice(s):
Classe: Etudiant en électronique (Ex TS - SI)
youtube: Wistaro
twitter: @Wistaro

En ligne

Re: [FR] Langage C sur ez80 - Mémo, rappels & tutoriels

Message non lude Wistaro » 26 Juin 2016, 15:45

UPDATE:

Refonte de la mise en page, corrections d'erreurs, ajout de précisions.

Si vous avez d'autres fonctions à ajouter, je suis preneur :)
Bonjour
Anonymous
! Une question, une demande, un problème ? Envoie-moi un MP, je réponds rapidement :)

Envie de
programmer en C
sur ta calculatrice
TI83PCE/84+CE
? Suis le guide en cliquant ici!

>> Groupe Facebook BAC 2017 & ECE
(entraide, partage & astuces)
: cliquez-ici <<




Image

Ma chaîne Youtube :)
Mon site :p
Avatar de l’utilisateur
WistaroModo.G
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 15.8%
 
Messages: 2168
Images: 25
Inscription: 25 Fév 2013, 17:21
Localisation: Toulouse
Genre: Homme
Calculatrice(s):
Classe: Etudiant en électronique (Ex TS - SI)
youtube: Wistaro
twitter: @Wistaro

Suivante

Retourner vers Programmation alternative

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

-
Rechercher
-
Sujets à la une
Offre TI-Planet/Jarrety pour avoir la TI-83 Premium CE avec son chargeur pour 79,79€ port inclus !
Offre TI-Planet/Jarrety pour avoir la TI-Nspire CX CAS à seulement 130€ TTC port inclus!
Jailbreake ta TI-Nspire avec Ndless et profite des meilleurs jeux et applications !
Transforme ta TI-Nspire CX en console Game Boy Advance!
1234
-
Donations/Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
PayPal : paiement en ligne sécurisé - secure online payments
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety 
-
Stats.
186 utilisateurs:
>166 invités
>14 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)