https://wiki.tiplanet.org/api.php?action=feedcontributions&user=Kindermoumoute&feedformat=atom TI-Planet Wiki - Contributions [fr] 2024-03-29T08:53:18Z Contributions MediaWiki 1.40.0 https://wiki.tiplanet.org/index.php?title=Axe_Parser&diff=4021 Axe Parser 2021-09-08T19:45:48Z <p>Kindermoumoute : fix: lien vers le tuto axe parser</p> <hr /> <div>{{Infobox Logiciel<br /> | nom = Axe Parser<br /> | logo = [[File:Axe_Logo.gif|75px]]<br /> | screenshot = [[File:ScreenAxe.gif|200px]]<br /> | legende = Axe Parser, le compilateur du langage Axe<br /> | développeur = Kevin Horowitz ''(Quibigo)'', ''Runer112''<br /> | sortie = {{Start date and age|01|02|2010}}<br /> | latest preview version = <br /> | latest preview date = <br /> | latest release version = Omega 1.2.2a<br /> | latest release date = {{Start date and age|25|10|2013}}<br /> | langage = [[Asm]]<br /> | os = OS 1.12 à 1.19, 2.41, 2.43, et 2.55 en mode CLASSIC uniquement<br /> | language count = 1 (en)<br /> | statut = En développement<br /> | genre = Compilateur<br /> | licence = (c) Kevin Horowitz, puis libre<br /> | site = [http://www.omnimaga.org/index.php?board=71.0 Forum Axe (en)]<br /> [http://axe.eeems.ca/Documentation.pdf Documentation (en)]<br /> [http://sdz.tdct.org/sdz/l-axe-parser.html Tutoriel (fr)]<br /> }}<br /> <br /> <br /> <br /> == La naissance d'un langage ==<br /> <br /> Pour programmer pour calculatrice à processeur z80, il existe 2 langages officiels :<br /> * Le [[TI-Basic]] : programmable sur la calculatrice (ou utilitaires PC). Ce langage de &quot;haut niveau&quot; est très simple à apprendre, mais la vitesse d'exécution des programmes [[TI-Basic]] reste lente (surtout pour les jeux).<br /> <br /> <br /> * L'Assembleur ([[ASM]]) z80 : programmable sur calculatrice (avec l'application [[Mimas]], ou directement en hexadécimal) mais surtout à partir de logiciels pour ordinateur. Ce langage est cependant beaucoup plus complexe que le TI-Basic mais aussi beaucoup plus puissant, car de très bas niveau (proche du processeur), et est donc considéré comme difficile à apprendre et à maîtriser pour des novices.<br /> <br /> <br /> La nécessité d'alternatives langage s'imposait alors. Plusieurs tentatives plus ou moins abouties existent (voir tableau plus bas), mais celle qui ressort le plus du lot est l''''Axe Parser'''.<br /> <br /> ''Note:Le mot ''axe'' signifie hache (l'arme), et le mot ''parser'' est un terme pour désigner le compilateur, lorsque l'on parle de l''''Axe Parser''', on parle de l'application (du compilateur), mais lorsque l'on parle du langage, on parle de l''''Axe''' )''<br /> <br /> <br /> * À 19 ans, Kevin Horowitz (alias ''Quigibo''), étudiant en génie électrique et informatique, a eu l'idée de créer un langage permettant de bénéficier en partie des avantages de l'assembleur tout en essayant de rester dans le même domaine de simplicité que le [[TI-Basic]].<br /> * Le 1er février 2010 sort une première version de l'Axe Parser. C'est un succès sur le forum '''Omnimaga''' qui va en faire un de ses intérêts principaux.<br /> * La puissance du langage Axe attirera les programmeurs, et en 2010, l'Axe Parser se verra récompensé par le titre de '''''Program of the Year'' 2010''' décerné par TI-Calc.org !<br /> * Dès lors, les versions du compilateur se succèdent et se perfectionnent (encore en développement aujourd'hui). Les possibilités de ce langage sont bien supérieures à celles du [[TI-Basic]] et son exécution bien plus rapide, certaines actions souvent utilisées pour des jeux ayant été automatisées par des routines programmées en assembleur.<br /> == Syntaxe ==<br /> Le langage Axe utilise l'éditeur de programmes intégré de la calculatrice, soit le même que n'importe quel programme TI-Basic, et donc aussi une partie des tokens. Ainsi, un &quot;hello world&quot; en Axe peut s'écrire de la même manière qu'en TI-Basic :<br /> Disp &quot;Hello world !&quot;<br /> Le langage en lui-même (l'Axe), celui défini dans l'app faisant compilateur (l'Axe Parser), propose à ce jour (avec la version 1.2.1a du compilateur) plus de 150 fonctions par défaut, allant de la simple addition à l'affichage de sprites 8*8 en passant par le réglage du contraste et l'émission de sons par le port jack.<br /> <br /> === Les surcharges de fonctions et les modificateurs ===<br /> Étant donné le nombre limité de tokens, le langage devait trouver un moyen de proposer un maximum de fonctions utiles en utilisant un minimum de tokens, pour des soucis de praticité d'utilisation et surtout pour se ménager des tokens pour des fonctions futures. Première idée, les '''surcharges de fonctions''' permettent de faire varier l'effet de certaines fonctions simplement en passant un nombre différents de paramètres. Par exemple, alors que :<br /> GetCalc(&quot;prgmABC&quot;)<br /> ... va chercher dans la mémoire de la calculatrice le programme nommé ''ABC'' et retourner 0 s'il n'est pas trouvé,<br /> GetCalc(&quot;prgmABC&quot;,20)<br /> ... ne s'embête pas à le chercher et va tout simplement créer ou écraser un éventuel précédent programme ABC avec un homonyme de 20 octets.<br /> <br /> Plus tard, les '''modificateurs''' vinrent optimiser encore un peu les surcharges de fonctions : c'est en général un token, parfois deux, toujours d'un seul caractère, qu'on rajoute à la fin ou au début d'une fonction pour la &quot;nuancer&quot;, changer subtilement son effet. On peut par exemple afficher un sprite sur le back-buffer (appelé par le token L&lt;sub&gt;3&lt;/sub&gt;) de la sorte :<br /> Pt-On(X,Y,SPRITE,L&lt;sub&gt;3&lt;/sub&gt;)<br /> Les modificateurs viennent cependant réduire légèrement la source comme l'exécutable :<br /> Pt-On(X,Y,SPRITE)&lt;sup&gt;r&lt;/sup&gt;<br /> De la même manière, la commande DispGraph change d'effet selon que l'on utilise aucun, un ou deux modificateurs :<br /> DispGraph // copie le main buffer à l'écran<br /> DispGraph&lt;sup&gt;r&lt;/sup&gt; // copie le main buffer et le back buffer à l'écran afin de donner 3 niveaux de gris (0%,50%,100%)<br /> DispGraph&lt;sup&gt;rr&lt;/sup&gt; // comme précédemment, mais donne 4 niveaux de gris (0%,33%,66%,100%)<br /> Dernier exemple, depuis la version 1.2.1a a été rajouté les modificateurs venant avant le nom des fonctions graphiques pour les dessiner soit en blanc, soit en logique XOR ou autre.<br /> Line(0,0,10,20) // dessine en noir<br /> ILine(0,0,10,20) // inverse tous les pixels de l'écran sur lesquels passe la ligne. C'est le token Line( précédé du modificateur I.<br /> <br /> ''Une liste de toutes les commandes de la version actuelle de l'Axe Parser (1.2.2a) [http://axe.eeems.ca/Commands.html est disponible ici] et sera mise à jour quand sortiront les différentes versions de l'Axe.''<br /> <br /> == Historique des Versions ==<br /> {| class=&quot;wikitable sortable&quot;<br /> ! Version<br /> ! Date de Parution<br /> ! Ajouts<br /> ! Suppressions<br /> ! Bugfixes<br /> ! Notes<br /> |-<br /> | 0.0.1<br /> | 01/02/2010<br /> |<br /> * Affichage et effaçage de l'écran<br /> * Variables<br /> * Lancer de l'[[Asm]]<br /> * Addition, soustraction, et comparaisons (non signées)<br /> * If, While, Repeat<br /> * Affichage de nombres<br /> * And, Or, Xor<br /> * labels et subroutines<br /> |<br /> |<br /> |<br /> |-<br /> | 0.0.2<br /> | 02/02/2010<br /> |<br /> * Stockage de chaines<br /> * Affichage de chaines<br /> * Random<br /> * Ne pas afficher &quot;Done&quot;<br /> * Pause en millisecondes<br /> |<br /> |<br /> |<br /> |-<br /> | 0.0.3<br /> | 05/02/2010<br /> |<br /> * Multiplication, Division et modulo<br /> * Parenthèses pour les maths<br /> * Signe négatif<br /> * Output<br /> |<br /> |<br /> |<br /> |-<br /> | 0.0.4<br /> | 15/02/2010<br /> |<br /> * Plus de caractères<br /> * routines des pixels<br /> * For<br /> * Saisie de données en Hexadécimal<br /> |<br /> |<br /> * Optimisation des additions/soustractions<br /> * Remplacement de la routine DispGraph du TI-OS par celle de [[Ion]] qui est plus rapide.<br /> |<br /> * Apparition de la barre de progression lors de la compilation<br /> |-<br /> | 0.0.5<br /> | 21/02/2010<br /> |<br /> * Support de sprites<br /> * Support du scrolling de l'écran<br /> * Inversion des pixels de l'écran<br /> * Direct key input<br /> * Pointeurs statiques<br /> * Ajout de &gt;Dec pour afficher des entiers<br /> * ClrHome<br /> |<br /> |<br /> * Plus d'optimisations<br /> |<br /> |-<br /> | 0.0.6<br /> | 28/02/2010<br /> |<br /> * Pointeurs<br /> * Deuxième Buffer<br /> * Tri alphabétique<br /> * Affichage de caractères spéciaux<br /> * Else<br /> * If-False<br /> * Éditeur de Sprites<br /> |<br /> |<br /> * DispGraph utilise maintenant SafeCopy au lieu de FastCopy<br /> |<br /> |-<br /> | 0.1.0<br /> | 07/03/2010<br /> |<br /> * Commandes 15 MHz<br /> * Bug du &gt;Frac résolu<br /> |<br /> |<br /> * Compilation plus rapide<br /> |<br /> |-<br /> | 0.1.1<br /> | 10/03/2010<br /> |<br /> * Compilation de programmes archivés<br /> <br /> |<br /> |<br /> * Compilation encore plus rapide<br /> * Bugs résolus (qui donnaient des erreurs aléatoires lors de la compilation)<br /> |<br /> |-<br /> | 0.1.2<br /> | 15/03/2010<br /> |<br /> * Copie automatique de données<br /> * Valeur absolue des nombres négatifs<br /> * Constantes hexadécimales et ASCII<br /> * Multiplication avec les nombres négatifs<br /> * Commentaires<br /> |<br /> |<br /> |<br /> |-<br /> | 0.1.3<br /> | 21/03/2010<br /> |<br /> * Axe header pour donner un nom aux programmes<br /> * Support du son<br /> * Détection directe des touches<br /> * carrés et racines carrées<br /> * Affichage de texte partout<br /> * Mode texte de petite taille<br /> * Mode texte inversé<br /> * Mode text-to-buffer<br /> * Lecture et écriture de mots de 16 bits<br /> * Utiliser int() implique que l'argument est un pointeur<br /> |<br /> |<br /> * L'Axe devient sérieux. Le programme par défaut s'appelle &quot;AXEPROG&quot; au lieu de &quot;LOL&quot;.<br /> |<br /> |-<br /> | 0.1.4<br /> | 05/04/2010<br /> |<br /> * Support des Appvars<br /> |<br /> |<br /> * Un bug résolu (qui faisait freeze les programmes)<br /> |<br /> |-<br /> | 0.1.5<br /> | 11/04/2010<br /> |<br /> * Sinus et Cosinus<br /> * Comparaisons avec des nombres négatifs<br /> * Affichage de niveaux de gris<br /> * Support des programmes de la même manière que les AppVars<br /> |<br /> |<br /> * Optimisation des commandes de gestion de fichiers<br /> * Optimisation générale<br /> * Bugs mineurs résolus<br /> |<br /> |-<br /> | 0.2.0<br /> | 18/04/2010<br /> |<br /> * Rédaction de la Doc<br /> * Compilation pour les shells ([[MirageOS]], [[Ion]], etc)<br /> * Ajustement du contraste<br /> * Absorber les Pics dans les programmes<br /> |<br /> |<br /> * Seules les vraies sources Axe apparaissent dans le menu de compilation.<br /> * Bugs mineurs résolus<br /> |<br /> * Nouvelle interface graphique<br /> |-<br /> | 0.2.1<br /> | 26/04/2010<br /> |<br /> * Commande Line<br /> * Division avec des nombres négatifs<br /> * Ajout de la variable θ<br /> |<br /> |<br /> |<br /> * Autorise l'activation des lettres minuscules depuis le compilateur<br /> |-<br /> | 0.2.2<br /> | 04/05/2010<br /> |<br /> * Min et Max<br /> * Affichage de nombres et de caractères ASCII partout<br /> * Support des nombres en binaire<br /> * Import de Pics comme Tilemaps<br /> |<br /> |<br /> * BEAUCOUP de bugs résolus<br /> |<br /> |-<br /> | 0.2.3<br /> | 10/05/2010<br /> |<br /> * Effacer ou inverser le back-buffer<br /> * Copier des données en partant de la fin<br /> * Opérateurs logiques boléens (=, &gt;, &lt;)<br /> |<br /> * Les niveaux de gris repassent en mode 6MHz seulement.<br /> |<br /> * Les erreurs affichent a présent le pourcentage de compilation exact précis.<br /> |<br /> |-<br /> | 0.2.4<br /> | 16/05/2010<br /> |<br /> * Dessiner des pixels ou des sprites sur le back-buffer<br /> * Pixel-test sur le back-buffer<br /> * 4 Niveaux de gris <br /> * Affichage direct sur l'écran de n'importe quel buffer sur demande<br /> |<br /> |<br /> * Bugs de cos, sin et racine carrée quand ils étaient en 2e argument<br /> * Bugs de &gt;Frac et &gt;Dec quand ils suivaient un pointeur<br /> |<br /> |-<br /> | 0.2.5<br /> | 21/05/2010<br /> |<br /> * Presser [prgm] pour scroller à la zone d'erreur après une erreur<br /> * Lire et écrire dans Ans<br /> * Autoscroll du texte quand il arrive en bout d'écran<br /> |<br /> |<br /> |<br /> |-<br /> | 0.2.6<br /> | 01/06/2010<br /> |<br /> * Presser [prgm] amène instantanément à la zone d'erreur.<br /> * sub() et Asm() peuvent s'utiliser dans des opérations mathématiques<br /> * commande de tri ajoutée<br /> * hooks de base<br /> |<br /> |<br /> * Lire et écrire à une adresse retourne la valeur et non plus l'adresse.<br /> * Bugs résolus<br /> |<br /> |-<br /> | 0.3.0<br /> | 16/06/2010<br /> |<br /> * Subroutines à arguments<br /> * Tokens Axe expérimentaux, à essayer avec [Alpha]+[Vars]<br /> * Logarithmes et exponentielles en base 2<br /> * Dessiner des bitmaps sur l'écran ou un buffer<br /> * <br /> |<br /> * SetupEditor retirée (puisque inutile)<br /> |<br /> * Erreurs de lecture dans l'archive résolues<br /> * Bugs mineurs résolus<br /> |<br /> |-<br /> | 0.3.1<br /> | 19/06/2010<br /> |<br /> * Scrolling après une erreur comme en TI-Basic<br /> * Les tokens Axe sont désormais automatiques<br /> |<br /> |<br /> |<br /> |-<br /> | 0.3.2<br /> | 01/07/2010<br /> |<br /> * Compilation en [[Apps]]<br /> * Support d'Axiomes<br /> * Support de hooks personnalisés<br /> * Possibilité de trouver la longueur d'un bloc de données (terminé par 0)<br /> * Affichage de texte sans définir de coorodonées<br /> * <br /> |<br /> |<br /> * Amélioration de la qualité du son<br /> * Bugs résolus avec les nombres négatifs<br /> |<br /> * Ajout de la documentation pour développeurs<br /> |-<br /> | 0.3.3<br /> | 10/07/2010<br /> |<br /> * Dessin de rectangles et de cercles<br /> * Deux nouvelles techniques de multiplication avancée: ''Fixed Point'' et ''High Order''.<br /> * Import de Pics depuis l'archive<br /> * Affichage plein écran des images<br /> * Freq() peut jouer des notes plus basses<br /> * Possibilité de dessiner des pixels en dehors de l'écran<br /> |<br /> |<br /> * Hooks compatibles avec les applications<br /> * Encore des bugs résolus avec les nombres négatifs<br /> * Bugs de Data() résolus<br /> |<br /> |-<br /> | 0.4.0<br /> | 25/07/2010<br /> |<br /> * Support de toutes les variables de l'OS<br /> * Contrôle du port I/O<br /> * Amélioration des messages d'erreur<br /> * Affichage de la taille du programme à la compilation d'une application<br /> * <br /> |<br /> |<br /> * Bug de fin de programme résolu<br /> * Modification de la syntaxe de Text()<br /> |<br /> * Réduction légère de la taille des programmes<br /> |-<br /> | 0.4.1<br /> | 28/07/2010<br /> |<br /> * Routine pour des sprites masqués en 3 niveaux de gris<br /> * Possibilité de dessiner des sprites sur n'importe quel buffer<br /> * <br /> |<br /> |<br /> * Bug des pointeurs sur les fichiers résolu<br /> * Petit bug résolu (defragmenting avec la compilation en [[Apps]])<br /> |<br /> |-<br /> | 0.4.2<br /> | 08/08/2010<br /> |<br /> * Rotation et inversion des sprites<br /> * Communication TI-TI automatique par le port I/O<br /> * Les labels peuvent avoir un nom de 3 caractères<br /> * <br /> |<br /> * L'optimisation de Return a du être défaite.<br /> |<br /> * Routine de division plus rapide<br /> * Bug sur de longs nombres hexa résolu<br /> * Bug de la barre de progression qui recommence pour un long programme archivé résolu<br /> * <br /> |<br /> * Ajout des touches [2nd] et [mode] agissant comme [enter] et [clear].<br /> * Sauvegarde automatique des sources Axe en archive<br /> * Application compatible avec [[TI-Connect]] pour Mac<br /> |-<br /> | 0.4.3<br /> | 10/08/2010<br /> |<br /> * Scroll du back-buffer dans toutes les directions<br /> * Label manquant affiché lors d'une erreur Label manquant<br /> |<br /> |<br /> * Bug de crash du compilo résolu<br /> * Bug de fin de sous-programmes résolu<br /> |<br /> |-<br /> | 0.4.4<br /> | 20/08/2010<br /> |<br /> * Supporte les nombres flottants<br /> * Input de chaines comme en Basic<br /> * ElseIf et Else!If<br /> * Routine de recherche de données similaire à inString()<br /> |<br /> |<br /> |<br /> |-<br /> | 0.4.5<br /> | 27/09/2010<br /> |<br /> * Amélioration des subroutines<br /> * Amélioration de getkey<br /> * DispGraphrr peut être utilisé dans une subroutine interrupteur.<br /> |<br /> * Les axiomes ne sont plus supportés (temporairement)<br /> |<br /> * Bug de l'[[APD]] résolu<br /> * Optimisation de Copy(), Fill() et Exch()<br /> |<br /> * ''Version où Persalteas a abandonné l'Axe. RIP.''<br /> |-<br /> | 0.4.6<br /> | 28/11/2010<br /> |<br /> * Support de [on] par le getkey<br /> * Défragmentation automatique après compilation d'une App<br /> * Modifications au niveau de la signature des [[Apps|applications]]<br /> * La touche de backup manuel est maintenant [alpha]<br /> |<br /> |<br /> * Bug qui contait les commentaires comme des erreurs de syntaxe résolu<br /> * Bug de ElseIf résolu<br /> * Bug du menu des programmes après un backup manuel résolu<br /> |<br /> * Les backups automatiques ne se font désormais QUE si la compilation a eu lieu sans erreur.<br /> |-<br /> | 0.4.7<br /> | 26/12/2010<br /> |<br /> * Affichage de nombres en hexadécimal<br /> * Dessin de lignes sur le back-buffer<br /> * Routine &quot;Display &amp; Clear&quot; pour faire les deux à la fois<br /> * Ré-allocation de variables n'importe ou dans le programme<br /> * Icone personnalisée pour [[MirageOS]]<br /> * getkey supporte une variable en argument<br /> * Modification du buffer L1, qui est suivi des variables par défaut.<br /> |<br /> |<br /> * Bugs de Input résolus<br /> * Nouvelle routine d'affichage de lignes<br /> * Optimisation générale<br /> |<br /> |-<br /> | 0.4.8<br /> | 09/01/2011<br /> |<br /> * Commentaires sur plusieurs lignes<br /> * SDK des Axiomes terminé<br /> * Dessiner une ligne hors-écran ne la dessine pas.<br /> |<br /> |<br /> * Routine 3 niveaux de gris fixée<br /> * Amélioration de la lecture de programmes protégés en archive<br /> * Bugs mineurs résolus<br /> |<br /> |-<br /> | 0.5.0<br /> | 12/02/2011<br /> |<br /> * Axiomes complètement fonctionnels<br /> * While 1 et Repeat 0 automatiquement optimisées en boucles Do<br /> * &quot;EndIf&quot; et &quot;End!If&quot;<br /> * Ajout du menu d'aide<br /> |<br /> |<br /> * Amélioration de la commande de rotation de sprite<br /> |<br /> |-<br /> | 0.5.1<br /> | 27/03/2011<br /> |<br /> * Nouveau getkey<br /> * Amélioration de DispGraph<br /> * Comparaison de chaines<br /> * not() peut être utilisé dans des expressions<br /> |<br /> |<br /> * Optimisations par Runer112<br /> * Bug du Ptr-&gt;DispGraph résolu<br /> |<br /> |-<br /> | 0.5.2<br /> | 15/05/2011<br /> |<br /> * Amélioration de DispGraph, de Fix<br /> * API documentation<br /> * <br /> |<br /> |<br /> |<br /> |-<br /> | 0.5.3<br /> | 28/05/2011<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | 1.0.0<br /> | 13/06/2011<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | 1.0.1<br /> | 14/06/2011<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | 1.0.2<br /> | 25/06/2011<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | 1.0.3<br /> | 20/08/2011<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | 1.0.4<br /> | 24/09/2011<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | 1.0.5<br /> | 26/09/2011<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | 1.1.0<br /> | 11/12/2011<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | 1.1.1<br /> | 18/12/2011<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | 1.1.2<br /> | 03/02/2012<br /> |<br /> |<br /> |<br /> |<br /> * Dernière version développée par Quibigo. Runer112 prendra la suite.<br /> |-<br /> | 1.2.0<br /> | 23/11/2012<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | 1.2.1<br /> | 17/12/2012<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | 1.2.2<br /> | 25/10/2013<br /> |<br /> |<br /> |<br /> |<br /> |}<br /> <br /> == Avantages et désavantages ==<br /> {{Langz80}}<br /> <br /> == Voir Aussi ==<br /> * [[Celtic III]]<br /> * [[BatLib]]<br /> * [[Grammer]]<br /> <br /> <br /> &lt;references/&gt;<br /> <br /> {{Logiciels}}</div> Kindermoumoute