Beta.txt:Evolution du projet. Et TODO:
-----------------------------
I- Descriptif rapide des fonctionnalitées de GFA-Basic.
-------------------------------------------------------
12/12/04:
*********
- Gestion des nombres (flottants, entiers).
- Gestion des variables numériques (flottants, entiers, booléens).
- Gestion du transtypage dynamique.
- Gestion de l'affectation.
- Gestion des opérateurs méthématiques:
Additon = +
Soustraction = -
Multiplication = *
Division = /
Division entière = \ ou Div
Puissance = ^
Modulo = Mod
- Gestion des opérateurs de comparaisons:
Egal = =
Supérieur = >
Inférieur = <
Supérieur ou égal = >= ou signe TI
Inférieur ou égal = <= ou signe TI
Différent = <> ou signe TI
- Gestion des opérateurs logiques:
NON logique = Not
ET logique = And
OU Inclusif = Or
OU Exclusif = Xor
Implication = Imp
Equivalence = Eqv
- Gestion de la négation numérique soit (-).
- Gestion des structures:
Goto Label
Do ... Loop
While ... Wend
Repeat ... Until
If ... [Then] ... ElseIf ... [Then] ... Else ... Endif
For ... [To][DownTo] ... Next
For ... To ... Step ... Next
- Gestion de Exit [If] pour quitter une structure précédente sauf structure If et Goto Label.
- Gestion des opérateurs arithmétiques optimisés:
Add, Sub, Mul, Div, Inc et Dec.
- Gestion des constantes:
TRUE
FALSE
PI
- Gestion du signe puissance de dix et Pi de la TI.
- Gestion des commentaires en début de ligne avec ' et en milieu de ligne avec !
- Gestion des nombres en binaire, hexadécimal ou en octal avec &X, &H et &O réciproquement.
- Possibilité de forcer un entier à être un flottant en ajoutant un point à la fin de ce nombre
comme par exemple 52. ou 52.0
- Gestion complète de Print et Print At avec la possibilité d'utiliser , ou ; ou ' pour séparer
des données. (les chaînes de caractères ne sont pas gérées).
- Autoindentation pour le détokeniseur.
- Possibilité d'utiliser - comme négation (-) ainsi A=A*-3 est possible!
- Possibilité de taper Else If à la place de Elseif.
- Apostrophes côte à côte autorisées Genre Print 25''52.
- Supporte les tableaux de flottants, d'entiers et de booléeans.
- Lecture d'une chaîne de caractères et affichage avec Print.
- Gestion des variables de type chaînes de caractères.
- Gestion des tableaux de chaînes de caractères.
- Concanétation de chaînes de caractères. Opérateur +, fonctionne avec les variables et les
tableaux.
- Opérateurs de comparaisons avec les chaînes de caractères. (<, >, <=, >=, <>,
.
- Supporte les signes mathématiques de la TI soit PI, exponentielle de 1 (e), fonction
exponentielle 'e^(' et la racine carrée.
- Supporte les constantes du type (CALCULATOR, HW_VERSION, LCD_xxx, AMSx_xx, RR_xxx,
KEY_xxx...).
24/02/04:
*********
- Supporte la lecture et le stockage de données stockées avec la commande DATA.
- Optimisation de l'espace mémoire de stockage DATA (32 Bits ou 16 Bits
suivant l'entier).
- Var après Next est facultatif ainsi une boucle For peut tout simplement se terminer
par Next.
- Meilleure gestion des commentaires ! en milieu de lignes (autorisation d'espaces).
- Autorisation d'utiliser l'apostrophe ' tout au début de la commande Print, par exemple
Print ''' est valide.
- Implantation de fonctions graphique (Sprite, Get, Put, Point...).
- Possibilité d'effacer des variables et des tableaux avec Clr/Erase.
- Meilleur gestion des chaînes de caractères.
- Implantation de l'instruction Input avec conversion automatique de base. Si vous tapez
&H52F par exemple, la conversion sera faite automatiquement.
- Possibilité de changer la fonte et de la renvoyer avec Setfont et Getfont.
- Ajout des constantes F_4X6, F_6X8, F_8X10.
27/07/05:
*********
- Gestion des Gotos incorrectes.
- Correction d'ung bug de syntaxe avec "".
- Intégration de la gestion des procédures.
- Gestion des variables locales.
- Correction d'un bug avec la négation -.
- L'abbréviation @ peu être utilisée à la place de Gosub.
- Possibilité d'écrire une variable, un label ou une procédure contenant des poins genre:
Procedure Graphic.Show(...) ou encore Game_IA.Show_Monster.
- Implantation des fonctions (Point, Run, Upper$, Lower$, Space$, Str$, String$, Val, Arrayfill
Swap, Varptr, Arrptr, Dfree, Text).
- Possibilité de quitter un programme avec la touche [ON].
- Meilleur gestion des chaînes de caractères.
- Corrections de bugs divers.
- Développement d'un programme d'interception des erreurs.
- Etalonnage des fréquences du clavier, REPEAT_KEYDELAY et BETWEEN_KEYDELAY.
- Correction d'un bug dans la fonction Cos. Mauvaise restauration de SP.
- Ajout de la librairie GFA_Font.
- La fonction Sprite supporte le mode AND.
- Correction d'un bug de masque avec la fonction Sprite.
- Optimisation du code en taille et en vitesse d'exécution.
- Possibilité de faire de l'itération avec des sous-programmes.
II- Liste des structures supportées.
------------------------------------
Label: = Définition d'une étiquette (Valable pour Goto
et Restore).
Goto Label = Saute à la position de Label.
Restore Label = Change le pointeur de données DATA pour READ.
If [(]condition[)] [Then]
Elseif ou Else If [(]condition[)] [Then] = Branchements conditions.
Else
Endif
While [(]condition[)] = Boucle 'Faire tant que condition validée'.
Wend
Repeat = Boucle 'Faire jusqu'à que condition validée'.
Until [(]condition[)]
Do = Boucle infinie.
Loop
For Var=Initialisation [TO][DowntO] [(]condition[)] [step pas] = Boucle For
Next [var]
Exit [If[(]condition[)]] = Quitte une structure Do...Loop ou While...Wend
ou Repeat...Until ou For...To...Next avec une
condition faculative.
Continue = Reboucle au début d'une structure Do...Loop
ou While...Wend
ou Repeat...Until ou For...To..Next.
Data donnée... = Stocke une constante.
Read var... = Lit une données stockée avec DATA.
Restore [Label] = Change le pointeur de données DATA.
Procedure name[(param1,param2[param3...])] = Procédure ou sous-programme.
Return = Fin d'une procédure.
Gosub name ou @name = Appelle la procédure 'name'.
Local var1,var2,[var3...] = Créer des variables locales.
Run = relance l'exécution du programme à partir de son début.
End/Stop/Edit/System = Met fin à l'execution du programme.
Rem ou ' = Commentaire de début de ligne.
! = Commentaire en milieu de ligne.
III- Liste des instructions.
----------------------------
Stockage d'un sprite ou d'une image.
Un sprite ne peut être affiché qu'avec l'instruction de commande Sprite. Un sprite est de
la forme 16xY.
Mki$ = Coordonnées origine X. (Fonction pour API curseur, non utilisée).
Mki$ = Coordonnées origine Y. (Fonction pour API curseur, non utilisée).
Mki$(&Hxxyy) =
xx = Masque, 0=non masqué, 1=masqué non entrelacé, 2=masqué entrelacé.
yy = Taille du sprite en hauteur, généralement 16 soit &H10.
Mki$... = Données du sprite.
Exemple, pour afficher un sprite non masqué de taille 16x16.
Sprite$=Mki$(0)+Mki$(0)+Mki$(&H0010)
For I%=1 To 16
Read Sprite_Data%
Sprite$=Sprite$+Mki$(Sprite_Data
Next I%
Data 65535,65535,65535,65535
Data 65535,65535,65535,65535
Data 65535,65535,65535,65535
Data 65535,65535,65535,65535
Il est possible d'utiliser des images, pour cela on peut enregistrer une zone de l'écran
avec la fonction Get et l'afficher avec Put.
Organisation des données avec Put.
Mki$ = Taille en largeur de l'image en pixels.
Mki$ = Taille en hauteur de l'image en pixels.
Mki$... = Données de l'image.
Exemple pour une image de 50x25 pixels.
Picture$=Mki$(50)+Mki$(25)
...
IV- Liste des instructions.
---------------------------
Une instruction de commandes est la première instruction d'une ligne.
Une instruction de fonctions est une instruction qui se trouve n'importe où sur une ligne et
qui retourne une valeur.
Syntaxe:
[] = Syntaxe faculltative.
... = Possibilité de répéter autant de fois que l'on veut la syntaxe précédente.
| = Détermine entre crochets les syntaxes que l'on peut utiliser mais que l'on ne peut pas
combiner. Sauf exception avec l'apostrophe soit par exemple Print 25''52.
Liste des instructions de commandes:
====================================
Print [At(x,y)][,|;|'][x] = Affichage d'une donnée.
Cls = Efface l'écran et positionne à 0,0 le curseur de texte pour Print.
Add var,x = Ajoute x à var soit var=var+x.
Sub var,x = Soustrait x à var soit var=var-x.
Mul var,x = Multiplie x à var soit var=var*x
Div var,x = Divise var par x soit var=var/x.
Inc x = Incrémente x de 1 soit x=x+1.
Dec x = Décremente x de 1 soit x=x-1.
Plot x,y = Affiche un point clippé aux coordonnées x et y.
Line x0,y0,x1,y1 = Dessine une ligne clippée de coordonnées x0,y0 et x1,y1.
Dim tab(x[,x...])[,tab(x[,x...])...] = Dimensionne et déclare un tableau.
Box x0,y0,x1,y1 = Dessine un rectangle vide clippé de coordonnées x0,y0 à x1,y1.
Data [string],[flottant],[entier] = Stocke constantes dans le programme.
Read var[,var...] = Stocke constante(s) créée(s) avec Data dans var(s).
Restore [label] = Change le pointeur de données (DATA) utilisé par Read.
Pause x = Interrompt l'execution du programme pendant un certain temps. (x/50 secondes).
Sprite data$,x,y[,mode][,mem] = Affiche un sprite clippé défini dans data$ à la position (x,y).
Get x0,y0,x1,y1,data$[,mem] = Affecte une zone rectangulaire de mem (mémoire vidéo) transformée en une suite de bits à la chaîne de caractères data$.
Clr/Erase var[,tab(x)][,tab()] = Efface la donnée d'une variable ou d'un index d'un tableau ou efface complétement un tableau (Utile pour libérer de la mémoire).
Setfont x = Selectionne la fonte x du TIOS.
Input [At(x,y))[,|;|'][data] = Demande de donnée(s).
Run = Lance l'exécution du programme. (Effectue un saut tout au début du programme).
Arrayfill tab(),n = Remplie un tableau avec la valeur n.
Poke(adr,x) = Ecrit x sur un octet à l'adresse adr.
Dpoke(adr,x) = Ecrit x sur deux octets à l'adresse adr. (Adresse impaire autorisée).
Lpoke(adr,x) = Ecrit x sur quatres octets à l'adresse adr. (Adresse impaire autorisée).
Swap var1[()],var2[()] = Echange les contenus de 'var1' et de 'var2'.
Text x,y,[l,]string = Affiche un texte, en mode graphique, à la position (x,y) de l'écran.
Liste des instructions de fonctions:
====================================
Abs(x) = Valeur absolue de x.
Cos(x) = Cosinus de x.
Sin(x) = Sinus de x.
Rnd[()] = Retourne un nombre aléatoire compris entre 0 et 1.
Random(x) = Retourne un nombre aléatoire compris entre 0 et x-1.
Timer[()] = Retourne le temps écoulé depuis l'exécution du programme. Ce temps est donné en 1/200 de secondes.
Getkey[()] = Retourne la combinaison de touche pressées.
Atn(x) = Retourne l'arctangente de x.
Even(x) = Détermine la parité de x (paire).
Odd(x) = Détermine la parité de x (impaire).
Sgn(x) = Détermine le signe de x (0, si x=0; +1, si x>0; -1, si x<0).
Tan(x) = Calcule la tangente de x.
Log(x) = Calcule le logarithme népérien de x.
Log10(x) = Calcule le logarithme décimal (base 10) de x. Log10(x)=Log(x)/Log(10).
Sqr(x) = Calcule la racine carrée de x. Sqr(x)=x^(1/2).
Exp(x) = Calcule l'exponentielle de x (e^x e=2.7182818285).
Fix/Int/Trunc(x) = Récupère la partie entière de x.
Frac(x) = Récupère la partie décimale de x. Frac(52.36)=0.36.
Round(x) = Arrondie le nombre x. (Risque d'erreur avec des nombres supérieurs à 2 milliars en valeur absolue).
Asc(x$) = Retourne le code ASCII du premier caractère de la chaîne x$.
Bin$(x) = Convertit la valeur x en une chaîne de caractères représentant l'écriture binaire de x.
Hex$(x) = Convertit la valeur x en une chaîne de caractères représentant l'écriture hexadécimal de x.
Oct$(x) = Convertit la valeur x en une chaîne de caractères représentant l'écriture octale de x.
Chr$(x) = Retourne le caractère dont le code ASCII est x.
Len(x$) = Calcule la longueur de la chaîne de caractères x$.
Mki$(x) = Convertit une valeur numérique (entier sur 16 Bits) en une chaîne de caractères.
Mkl$(x) = Convertit une valeur numérique (entier sur 32 Bits) en une chaîne de caractères.
Mkf$(x) = Convertit une valeur numérique (flottant) en une chaîne de caractères.
Cvi(x$) = Convertit une chaîne de caractères en une valeur numérique (entier 16 Bits).
Cvl(x$) = Convertit une chaîne de caractères en une valeur numérique (entier 32 Bits).
Cvf(x$) = Convertit une chaîne de caractères en une valeur numérique (flottant).
Ngetchx[()] = Attend l'appuie d'une touche en renvoie sa valeur.
Peek(adr) = Lit un octet à l'adresse adr.
Dpeek(adr) = Lit deux octets à l'adresse adr. (Adresse impaire autorisée).
Lpeek(adr) = Lit quatres octets à l'adresse adr. (Adresse impaire autorisée).
Left$(x$[,n]) = Récupère n caractères de x$ en partant de la gauche.
Right$(x$[,n]) = Récupère n caractères de x$ en partant de la droite.
Mid$(x$,pos[,size]) = Extrait size caractères de x$ à partir de pos.
Fre[()] = Force un Garbage Collect de la mémoire et retourne le nombre d'octets libre en RAM.
Dim?(tab()) = Retourne le nombre d'éléments d'un tableau.
Getfont[()] = Renvoie la fonte courante.
Point(x,y) = Retourne l'état du pixel se trouvant aux coordonnées x,y.
Upper$(x$) = Retourne la chaîne de caractères x$ en majuscules.
Lower$(x$) = Retourne la chaîne de caractères x$ en minuscules.
Space$(x) = Retourne une chaîne de caractères avec x caractères blancs (caractère espace (32)).
Str$(x) = Convertie la valeur numérique x en une chaîne de caractères.
String$(n,x|x$) = Retourne une chaîne de caractères constituée de n fois le caractère x ou n fois la chaîne de caractères x$.
Val(x$) = Convertie une chaîne de caractères en une valeur numérique.
Varptr(var) = Détermine l'adresse (de début) d'une variable.
Arrptr(var[()]) = Détermine l'adresse du descripteur d'une chaîne de caractères ou d'un tableau.
Dfree(n) = Indique la place mémoire disponible sur une unitée (0 = RAM, 1 = ROM).
V- liste des constantes:
------------------------
===================
Constantes système.
===================
TRUE = -1.
FALSE = 0.
PI = Valeur de PI.
e = Exponentielle de 1.
====================
Constantes statiques
====================
Constantes graphiques
*********************
LCD_MEM = &H4C00.
LCD_SIZE =3840.
Constantes exploitables avec l'instruction Ngetchx ou la fonction Getkey.
*************************************************************************
KEY_DOWN = 344.
KEY_UP = 338.
KEY_LEFT = 337.
KEY_RIGHT = 340.
KEY_F1 = 268.
KEY_F2 = 269.
KEY_F3 = 270.
KEY_F4 = 271.
KEY_F5 = 272.
KEY_F6 = 273.
KEY_F7 = 274.
KEY_F8 = 275.
KEY_ESC = 264.
KEY_APPS = 265.
KEY_ENTER = 13.
Constantes de fontes.
*********************
F_4X6 = 0.
F_6X8 = 1.
F_8X10 = 2.
==============================================================
Constantes dynamiques (Dépendent du modèle de calculatrice...)
==============================================================
CALCULATOR = 0 = TI89/TI89T, 1 = TI92+, 2 = V200.
HW_VERSION = Version Hardware.
LCD_HEIGHT = Coordonnées maximale en hauteur de l'écran. TI89/TI89T = 99, TI92+/V200 = 127.
LCD_WIDTH = Coordonnées maximale en largeur de l'écran. TI89/TI89T = 159, TI92+/V200 = 239.
LCD_LINE_BYTES = Nombre d'octets visibles sur une ligne de l'écran.
ROM_BASE = Adresse de base de la ROM.
TI89 = Retourne TRUE ou FALSE si la TI89 est détectée.
TI89_CLASSIC = Retourne TRUE ou FALSE si la TI89 Classique est détectée.
TI89_TITANIUM Retourne TRUE ou FALSE si la TI89 Titanium est détectée.
TI92PLUS = Retourne TRUE ou FALSE si la TI92+ est détectée.
V200 = Retourne TRUE ou FALSE si la Voyage 200 est détectée.
TIOS_ENTRIES = Nombre d'entrées dans la table de sauts du TIOS, Utilisé pour détermine la
version de l'AMS.
0x2AC = AMS 1.00 (TI-92 Plus only)
0x3CC = AMS 1.01 (or 1.00 for TI-89), AMS 1.05
0x508 = AMS 2.01
0x5B7 = AMS 2.02, AMS 2.03
0x5E2 = AMS 2.04
0x5EF = AMS 2.05
0x607 = AMS 2.06 (internal beta), 2.07, 2.08, 2.09
0x608 = AMS 3.00
Constantes renvoyant l'état d'une touche (FALSE = Non pressée et TRUE = pressée).
*********************************************************************************
RR_0
RR_1
RR_2
RR_3
RR_4
RR_5
RR_6
RR_7
RR_8
RR_9
RR_2ND
RR_A
RR_ALPHA
RR_APPS
RR_B
RR_BACKSPACE
RR_C
RR_CATALOG
RR_CLEAR
RR_COMMA
RR_COS
RR_D
RR_DIAMOND
RR_DIVIDE
RR_DOT
RR_DOWN
RR_E
RR_EE
RR_ENTER1
RR_ENTER2
RR_ENTER
RR_EQUALS
RR_ESC
RR_F1
RR_F2
RR_F3
RR_F4
RR_F5
RR_F6
RR_F7
RR_F8
RR_F
RR_G
R_H
RR_HAND
RR_HOME
RR_I
RR_J
RR_K
RR_L
RR_LEFT
RR_LN
RR_M
RR_MINUS
RR_MODE
RR_MULTIPLY
RR_N
RR_NEGATE
RR_O
RR_P
RR_PAREN_CLOSE
RR_PAREN_OPEN
RR_PLUS
RR_POWER
RR_Q
RR_R
RR_RIGHT
RR_S
RR_SHIFT
RR_SIN
RR_SPACE
RR_STORE
RR_T
RR_TAN
RR_THETA
RR_U
RR_UP
RR_V
RR_W
RR_WITH
RR_X
RR_Y
RR_Z
Constantes version AMS.
***********************
AMS_1XX = Retourne TRUE ou FALSE si AMS 1.xx est détectée.
AMS_2XX = Retourne TRUE ou FALSE si AMS 2.xx est détectée.
AMS_3XX = Retourne TRUE ou FALSE si AMS 3.xx est détectée.
VI- Sites WEB:
--------------
Site du projet: http:/www.tigen.org/gfabasic
n'hésitez pas à visiter la partir 'Programmation GFA-Basic' sur le forum de Ti-Gen:
Ti-Gen: http://www.tigen.org
Email: gfabasic@tigen.org
geoffrey.anneheim@free.fr
Copyright 2004-2005 by Geoffrey ANNEHEIM.