Page 1 of 1

Langage de programmation TI-Z80 alternatif: KwyxTI...

Unread postPosted: 17 Oct 2015, 17:25
by Lionel Debroux
Au détour d'un topic sur Silicium, j'ai vu passer la mention d'un nouveau langage "KwyxTI". Or, je n'ai vu passer ça sur aucun des sites de la communauté active... il y a donc quelque chose à creuser :)

Une petite recherche me renvoie deux références (!): le site officiel http://kwyxti.free.fr/ et la Gazette des pocketicaires n°6... bref, ce projet, et sa description dans la gazette, ont bien été faits en isolation complète de la communauté TI active, ce qui est plus que dommage.

Le site officiel est en français, et ne décrit malheureusement pas les buts et capacités du projet. Il faut les déduire du screenshot de l'IDE en bas de la page, et de l'article de la gazette n°6, qui est globalement bien fait.

un langage de programmation pour calculatrice de la famille TI-83+, avec les caractéristiques suivantes :
- écriture du texte du programme sur un « gros » ordinateur genre PC ;
- compilateur qui génère directement un code exécutable Z80 au format compréhensible par la TI ;
- structures de programmes habituelles ;
- bibliothèque de fonctions graphiques orientées « jeu » : sprites, dessin, copie de blocs... ;
- gestion du texte sur écrans texte et graphique ;
- capture des touches clavier ;
- types supportés int et short, avec addition, soustraction et décalage de bits.
Le tout est librement téléchargeable à l'adresse suivante : http://kwyxti.free.fr.
Sont inclus :
- Un éditeur avec coloration syntaxique et liste des fonctions système disponibles avec aide intégrée ;
- La documentation ;
- 9 exemples de programmes fonctionnels démontrant les diverses capacités du langage.

Screenshot du logicielCode d'exempleScreenshot
Image
Code: Select all
string @str1 = "Hello";
string @str2 = "World";
int val;

$start()
{
   $clearGraphBuffer();
   $drawStringGraphBufferMode();
   $enableTextInverse();
   $drawString(@str1, 46, 25);
   $disableTextInverse();
   $drawString(@str2, 65, 25);
   $drawRectangleBorder(26, 24, 44, 32);

   val = 0;
   while (val <= 150)
   {
      // on centre au milieu du rectangle
      if (val >= 100)
         $drawNumber(val, 30, 25);
      else if (val >= 10)
         $drawNumber(val, 32, 25);
      else
         $drawNumber(val, 34, 25);

      val++;
      $drawGraphBufferOnLCD();
   }
   
   $waitKey();
   $home();
}
Image

Parmi les choix faits lors de la création de son langage, Seb a privilégié la simplicité de la relation entre le code source et l'assembleur produit, et l'orientation vers les jeux et le graphisme. Ceci explique que les seules opérations mathématiques supportées sont addition et soustraction, sur short ou int (1 ou 2 octets) ! En réalité ceci, qui semble rédhibitoire, ne bride aucunement pour une utilisation non scientifique.


La syntaxe s'inspire de langages comme C et Perl (@ pour les tableaux me fait penser à Perl, en particulier). Les noms des fonctions sont préfixés par "$". Il y a quelques types de donnés étendus, comme "sprite".

Il est clair que ce genre de projets est enrichissant et formateur pour celui qui le réalise; l'intérêt pour les développeurs de la communauté me paraît moins évident face à Axe Parser, bien implanté, avec le même genre de buts et de design, qui peut être programmé sur la calculatrice aussi bien que sur l'ordinateur (où les IDEs gèrent l'indentation et les commentaires).
Mais l'effort mérite quand même d'être signalé :)

Site du projet: http://kwyxti.free.fr/
Source: Silicium.org.

Show/Hide spoilerAfficher/Masquer le spoiler
Un bémol sur l'article de la gazette: plusieurs extraits montrent une certaine méconnaissance de l'actualité "récente" de la communauté active (par qui, je l'ignore):
Parfois des années « après », on réalise quelque chose d'exceptionnel resté en gestation tout ce temps. C'est ce qui est arrivé à Seb, un ancien passionné de TI-83+ qui avait tâté de l'assembleur et toutes ces joyeusetés à l'époque où la programmation de ces calculatrices était en pleine effervescence.

(la communauté est certes moins active qu'il y a quelques années, mais elle l'était redevenue nettement, grâce à Axe Parser, justement. Et puis maintenant, la famille TI-eZ80 offre de nouvelles perspectives)

Il est bien sûr compatible avec les vrais émulateurs de la TI83+, notamment VirtualTI, ce qui fournit une solution globale de mise au point incolore de tous projets.

(ça fait bien longtemps que VTI n'est plus un émulateur de référence, il était loin d'être bon dans l'émulation de 83+, ou d'ailleurs des autres modèles; mais au moins, il y a une mention implicite du fait qu'il y a d'autres émulateurs)

KwyxTI comble le gouffre béant entre les langages faciles à utiliser et lisibles, comme le TI BASIC, mais qui sont trop lents ou n'offrent que peu d'accès au système, et l'assembleur pur et dur que seuls des spécialistes peuvent maîtriser.

(Axe n'est pas forcément très lisible, mais "gouffre béant" est juste faux à mon sens, grâce à Axe Parser)

Re: Langage de programmation TI-Z80 alternatif: KwyxTI...

Unread postPosted: 17 Oct 2015, 18:20
by Hayleia
Lionel Debroux wrote:(Axe n'est pas forcément très lisible, mais "gouffre béant" est juste faux à mon sens)

Un programme inoptimisé et bien écrit en Axe n'est pas plus illisible qu'un programme inoptimisé et bien écrit dans un autre langage...
Exemple :
Show/Hide spoilerAfficher/Masquer le spoiler
Excusez s'il manque de l'indentation, l'indenteur automatique ne semble pas reconnaître l'Axe...
Code: Select all
.AA

.definitions
..keys
15→°ClearKey
01→°DownKey
02→°LeftKey
03→°RightKey
04→°UpKey
..screen
64→°ScreenHeight
96→°ScreenWidth
..others
8→°SquareSize

0→X
0→Y

While not(getKey(°ClearKey))

.check for movement
If getKey(°UpKey)
  Y--
End
If getKey(°DownKey)
  Y++
End
If getKey(°LeftKey)
  X--
End
If getKey(°RightKey)
  X++
End

.limit movement to screen
max(Y,0)^^r→Y
max(X,0)^^r→X
min(X,°ScreenWidth-°SquareSize)→X
min(Y,°ScreenHeight-°SquareSize)→Y

.draw frame
ClrDraw
Rect(X,Y,°SquareSize,°SquareSize)
DispGraph

End

Honnêtement, pour ne pas comprendre ce code, le seul moyen c'est de ne pas le lire :P

Celui qui suit en revanche fait la même chose en moins lisible, c'est vrai. Mais on peut faire la même chose avec les autres langages, ne pas aérer, utiliser des noms de variables qui ne veulent rien dire, écrire des nombres tels quels au lieu d'utiliser des define pour leur donner des noms, utiliser des algorithmes plus rapides/petits au lieu de détailler pour rester maintenable, indenter vers la gauche au lieu de la droite...
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Select all
.AA
0→X→Y
While 1
Rect(min((X?-getKey(2))+getKey(3),88)→X,min((Y?-getKey(4))+getKey(1),56)→Y,8,)
DispGraphClrDraw
EndIf getKey(15)


Sinon, en rapport avec le sujet, c'est vrai que c'est dommage de faire quelque chose comme ça et de limite tout faire en sorte pour que personne ne le voie. Ça a quand même l'air d'un langage utilisable par tous ceux qui ont déjà fait des langages C-like, ce qui représente une bonne partie des programmeurs (pour ne pas dire "quasiment tous"). Je ne vois vraiment pas pourquoi l'auteur a fait un site aussi peu informatif et n'a diffusé son travail sur aucun des sites de programmation sur calculatrice...

Re: Langage de programmation TI-Z80 alternatif: KwyxTI...

Unread postPosted: 17 Oct 2015, 18:37
by Lionel Debroux
La modération de Silicium a fait une bêtise en ne choisissant pas le bon cheval en 2011+. Avec un choix différent, je ne peux pas savoir si Silicium ferait réellement partie de la communauté TI active aujourd'hui; mais le fait d'embêter des posteurs apportant de l'activité n'est jamais bon, voir la section TI-68k de yAronet en 2010, et Omnimaga en 2013-2014.

Re: Langage de programmation TI-Z80 alternatif: KwyxTI...

Unread postPosted: 17 Oct 2015, 19:13
by Adriweb
Relativement intéressant, tout de même, mais le fait que personne ici n'en avait entendu parler.... :|

(J'ai rajouté le tableau avec code et images)

Re: Langage de programmation TI-Z80 alternatif: KwyxTI...

Unread postPosted: 18 Oct 2015, 11:16
by Ti64CLi++
Génial, super bien fait. ;)
Bravo