fxSDK, un SDK alternatif pour écrire des add-ins
Posté le 29/08/2014 22:00
Cette page sert d'index pour la série de topics du fxSDK.
Le fxSDK est une collection d'outils permettant de développer des add-ins pour les calculatrices Casio des séries Graph. C'est une alternative au
fx-9860G SDK et
PrizmSDK qui ne sont plus activement maintenus, et le compagnon classique de mon noyau
gint.
Index des topics
Ce projet existe depuis 2015, alors il y a pas mal de topics liés. En voici une liste complète !
Topics principaux
Installation du fxSDK
Tutoriels
Compatibilité sur calculatrice et PC
Côté PC, le fxSDK est compatible avec
Linux, Mac OS, et WSL pour Windows ; normalement tout le monde peut l'utiliser. Je teste constamment sous Linux, et WSL est un Linux donc c'est testé aussi. Je n'ai pas de Mac OS donc il peut y avoir quelques surprises, mais en général c'est l'affaire de corriger un bug ou deux.
En termes de calculatrices, le fxSDK supporte :
Calculatrices monochromes
- Graph 35+E II
- Graph 35+ USB / Graph 35+E (SH3/SH4)
- Graph 75/75+/75+E
- Graph 85/85 SD/95 (SD) (pas activement testé)
Calculatrices couleurs
- Graph 90+E / fx-CG 50
- Prizm fx-CG 10/20
Comment installer le fxSDK et coder des add-ins
Le fxSDK s'installe à partir de dépôts Git sur la
forge de Planète Casio (par exemple
Lephenixnoir/fxsdk). Il y en a un peu beaucoup, donc manuellement c'est assez long. Pour que ça aille plus vite et pour simplifier le travail des débutants, il y a un outil appelé
GiteaPC qui peut faire ça pour vous.
Si vous utilisez Windows, vous aurez besoin de WSL pour accéder à un système Linux dans Windows. Heureusement, Microsoft a fait ça bien et c'est facile à faire. Voyez le
tutoriel d'installation de WSL 2 (et l'explication rapide de
ce que WSL 2 est).
Si vous utilisez Mac OS, ouvrez l’œil en lisant les topics pour ne pas manquer les informations supplémentaires et éventuelles déviations par rapport à la procédure normale sous Linux.
Méthode automatique avec GiteaPC (plus rapide / recommandée pour les débutants)
- Suivez le tutoriel d'utilisation de GiteaPC, qui explique comment obtenir le fxSDK.
Méthode automatique avec plugin VS Code
- Yannis300307 a créé un plugin VS Code Casio Dev Tools qui fonctionne sous Windows (avec WSL) et Debian (probablement les dérivés aussi).
Méthode AUR pour les utilisateurs Arch/Manjaro/dérivés (ils se reconnaîtront)
- Dark Storm maintient MiddleArch, un dépôt de paquets précompilés qui a entre autres le fxSDK.
Méthode manuelle (plus fine / classique pour les habitués)
- Compilez et installez le cross-compilateur GCC pour SuperH.
- installez (dans cet ordre) les dépôts fxSDK, OpenLibm, fxlibc, gint ; en option, Slyvtt/µSTL_2.3.
Description sommaire du fxSDK
Pour une introduction à l'utilisation du fxSDK qui montre comment utiliser les outils pour développer un add-in, lisez plutôt les
tutoriels d'utilisation de gint. Cette section est juste une description sommaire.
Le cœur du fxSDK est un cross-compilateur GCC pour SuperH, habituellement nommé
sh-elf-gcc. Bien sûr on a avec toute la suite d'outils, dont
as,
ld,
objdump,
objcopy (entre autres). Contrairement au vieux compilateur du SDK, GCC est un compilateur moderne avec beaucoup d'options et capable de très solides optimisations.
Sur la calculatrice, c'est
le noyau gint qui fait la majorité du travail. Il remplace fxlib/libfxcg et une partie de l'OS pour vous offrir des fonctionnalités plus cool et plus rapides. Les add-ins développés avec le fxSDK utilisent gint toutes les trois lignes !
Il y a enfin plusieurs outils utiles sur le PC qui sont utilisés durant le développement ou l'utilisation des add-ins :
- fxsdk est un script shell qui permet de créer et compiler les projets sans se prendre trop la tête. Le système de compilation officiel pour les add-ins est CMake, mais un système plus ancien de Makefile est encore supporté.
- fxconv est un outil très polyvalent qui convertit à la compilation les assets (images, polices, maps....). Il permet de travailler avec des logiciels et formats de fichiers normaux sur le PC et d'avoir automatiquement un format optimisé sur la calculatrice. fxconv est extrêmement extensible et chaque projet peut ajouter des conversions personnalisées.
- fxgxa crée les fichiers g1a (format des add-ins pour Graph monochromes) et g3a (format des add-ins pour Graph couleurs) à partir des programmes compilés.
- fxlink est un outil de communication qui peut transférer des fichiers vers les Graph 35+E II et Graph 90+E en ligne de commande, mais aussi échanger interactivement avec les add-ins gint par le câble USB, et est couramment utilisé pour réaliser des captures d'écran ou captures vidéo des add-ins.
Changelog et informations techniques
Ci-dessous se trouve la liste des posts annonçant les nouvelles versions du fxSDK, ainsi que des liens vers les instructions/tutoriels supplémentaires publiés avec.
Citer : Posté le 09/07/2015 16:36 | #
Au fait Intelligide, tu la gères comment ta coloration syntaxique toi ?
Ben avec un fichier XML pour le style et les couleurs et une QList contenant les regex
Citer : Posté le 09/07/2015 16:38 | #
Ben avec un fichier XML pour le style et les couleurs et une QList contenant les regex
Explique-moi ce que ça a d'évident.
Parce que le XML tu le parses comment ? Il y a un module pour ça intégré à Qt il me semble...
Et ça veut dire qu'à chaque fois que tu trouves un match pour une regex tu es obligé de lire le fichier pour trouver le format correspondant !?
Citer : Posté le 09/07/2015 16:42 | #
En fait, j'utilise un QMap<QString, QString>
Parce que le XML tu le parses comment ? Il y a un module pour ça intégré à Qt il me semble...
Et ça veut dire qu'à chaque fois que tu trouves un match pour une regex tu es obligé de lire le fichier pour trouver le format correspondant !?
En fait, c'est un fichier comme ça:
<style-scheme>
<style foreground="#000000" background="#ffffff" name="Text"/>
<style foreground="#ffffff" background="#3399ff" name="Selection"/>
<style foreground="#a0a0a0" background="#f0f0f0" name="Line number"/>
<style name="Current Line"/>
<style foreground="#000000" name="Function"/>
<style foreground="#000080" name="Number"/>
<style foreground="#808000" name="Keyword"/>
<style foreground="#008000" name="String"/>
<style foreground="#000080" name="Preprocessor"/>
<style foreground="#008000" name="Comment"/>
<style foreground="#000000" name="Operator"/>
<style foreground="#008000" name="Multiline Comment"/>
</style-scheme>
Pour parser, j'utilise QtXML qui est très simple le principe est que je parse chaque <style> puis je cherche le regex dont l'index dans le QMap est name puis j'applique avec une classe hérité de QSyntaxHighlighter
Citer : Posté le 09/07/2015 16:47 | #
En fait, j'utilise un QMap<QString, QString>
Donc tu as bien les deux en RAM. Ok, ça me paraissait plus logique aussi.
Pour parser, j'utilise QtXML qui est très simple
Moi j'ai trois (deux) regex, c'est simple aussi
le principe est que je parse chaque <style> puis je cherche le regex dont l'index dans le QMap est name puis j'applique avec une classe hérité de QSyntaxHighlighter
Je suppose que tu as repris l'exemple de la doc de Qt ?
Et comment gères-tu le commentaire multi-ligne ? La méthode highlightBlock() de QSyntaxHighlighter ne colore qu'un bloc (qui est en réalité une ligne) donc une regex simple ne peut pas discerner une ligne entre /* et */ d'une autre ligne.
Citer : Posté le 09/07/2015 16:51 | #
pour le commentaire multiligne, je sais plus mais je pense que j'ai laissé l'exemple de Qt en attendant de trouver quelques pistes pour colorer un texte sans html (je pense avoir trouver avec cet exemple)
Citer : Posté le 09/07/2015 16:58 | #
Oh, je ne connaissais pas cet exemple, merci du lien.
Est-ce que tu pourrais faire un test pour moi ? Écrire une chaîne de caractères constante (entre double quotes) sur plusieurs lignes dans ton éditeur et me dire si elle colorée.
Au fait, je me rends compte que j'ai oublié quelque chose : un second niveau de coloration pour les règles qui ne s'appliquent qu'au sein de règles multi-lignes. Pour deux exemples flagrants, on peut prendre les caractères échappés dans les chaînes de caractères ou les formats de type javadoc dans les commentaires en /**.
Puisque mes règles multi-lignes ont des noms, je dois pouvoir implémenter ça « facilement ». Si j'y arrive ça va commencer à avoir de la gueule !
Citer : Posté le 09/07/2015 17:01 | #
Oh, je ne connaissais pas cet exemple, merci du lien.
Est-ce que tu pourrais faire un test pour moi ? Écrire une chaîne de caractères constante (entre double quotes) sur plusieurs lignes dans ton éditeur et me dire si elle colorée.
Dans le fxsdk ou le winsdk?
Citer : Posté le 09/07/2015 17:19 | #
Oh, dans le WinSDK. (« ton éditeur »)
Citer : Posté le 09/07/2015 17:31 | #
Au passage Lephe, y'avais un bug dans ton algo l'autre jour : dans "Hello World 123 du texte", il colorie en numéraire les chiffres.
Citer : Posté le 09/07/2015 17:33 | #
Ben, c'était juste une histoire d'ordre... comme il colorait les constantes numériques après le texte, tu avais ce résultat dérangeant...
Maintenant, c'est réglé.
Citer : Posté le 09/07/2015 17:33 | #
Ah, j'ai eu peur
Citer : Posté le 09/07/2015 19:19 | #
J'ai mis à jour le screen, vous pouvez y voir la coloration syntaxique « récursive » avec le @return dans le commentaire du main() !
Citer : Posté le 10/07/2015 13:35 | #
Après avoir tester, je suis un peu déçu
1) C'est juste une fenêtre graphique avec un bon design
2) Il n'y a pas d'options, donc on peut pas régler le compilo ni le wrapper
3) On peut pas créer de polices
En fait, pour l'instant, les seuls trucs sont la compilation et la coloration syntaxique
Ensuite, au niveau du code, je pense que je vais prendre ton parser de stylesheet ( avec le respect de la license, bien sur)
Enfin,
→ La police a-t-elle une taille correcte ? Je trouve qu'elle est petite et que du 12px c'est mieux
→ L'aspect de la fenêtre correspond-il aux captures du topic ? Yep
→ Double-cliquez sur 'main.c', à gauche. La coloration syntaxique est-elle correcte ? Yep
→ Compilez le projet (Ctrl + B). Si possible, incluez le log
sh3eb-elf-gcc -c /home/yoann/Téléchargements/fxSDK-b/tmp/main.c -o build/main.c.o -m3 -mb -O9 -Wall -Iinclude -Llib -L/home/yoann/Téléchargements/fxSDK-b/tmp
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c: In function 'main':
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:50:17: warning: implicit declaration of function 'cos' [-Wimplicit-function-declaration]
p[i].x = 24 * cos(angle) + 64;
^
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:50:17: warning: incompatible implicit declaration of built-in function 'cos'
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:50:17: note: include '<math.h>' or provide a declaration of 'cos'
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:51:17: warning: implicit declaration of function 'sin' [-Wimplicit-function-declaration]
p[i].y = 24 * sin(angle) + 32;
^
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:51:17: warning: incompatible implicit declaration of built-in function 'sin'
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:51:17: note: include '<math.h>' or provide a declaration of 'sin'
sh3eb-elf-as -c /home/yoann/Téléchargements/fxSDK-b/tmp/crt0.s -o build/crt0.s.o
sh3eb-elf-gcc build/main.c.o build/crt0.s.o -o "build/tmp.elf" -T addin.ld -nostdlib -Llib -L/home/yoann/Téléchargements/fxSDK-b/tmp -lfx
/usr/programs/sh3eb-elf-gcc/lib/gcc/sh3eb-elf/5.1.0/../../../
sh3eb-elf-objcopy -R .comment -R .bss -O binary "build/tmp.elf" "build/tmp.bin"
../sh3eb-elf/bin/ld: warning: section `.bss' type changed to PROGBITS
g1a-wrapper "build/tmp.bin" -o "tmp.g1a" -i icon.bmp
-- g1awrapper : 2008 Andreas Bertheussen, 2011 Leo Grange.
[>] Reading icon file 'icon.bmp'.
offset : 130
header size : 108
[W] Unreconized BMP file. Icon will be BLANK.
[I] File 'build/tmp.bin' selected as binary source.
[I] File 'tmp.g1a' selected for G1A file.
[I] Timestamp: 2015.0710.1129
[I] G1A size: 1032
[>] Writing header.. OK.
[>] Writing data.. OK.
Output size is 1032 bytes.
make: quittant le répertoire « /home/yoann/Téléchargements/fxSDK-b/tmp »
→ Ajoutez des fichiers au projet temporaire en choisissant Project > Add Files.
Ensuite, retirez-les un par un via le menu contexuel, en cliquant droit sur
leurs entrées dans le panneau de projet. (J'ai eu des crashs sur cette action.)
J'ai pas eu de crash
→ Cliquez sur le bouton 'Debug information'. Y a-t-il bien trois chemins valides dans la fenêtre du terminal ? Il ne se passe rien
→ Via le menu 'Settings', changez le nom du projet et sauvegardez-le dans un dossier vide. Si possible, incluez le fichier .pro créé dans le dossier. Fermez et relancez le fxSDK, choisissez Project > Open et sélectionnez le dossier précédemment utilisé. Le projet doit se charger sans problème. Aucun problème
Ajouté le 10/07/2015 à 13:36 :
et on peut pas fermer les fichiers
Citer : Posté le 10/07/2015 13:46 | #
Après avoir tester, je suis un peu déçu
1) C'est juste une fenêtre graphique avec un bon design
2) Il n'y a pas d'options, donc on peut pas régler le compilo ni le wrapper
3) On peut pas créer de polices
Comme je l'ai dit, ce n'est qu'une version de toute base, le « noyau dur » pour éditer et compiler du code. Les options de paramétrage du compilateur et du wrapper seront assez faciles à mettre en place, je m'en occuperai « assez » rapidement. Quant aux polices, l'éditeur existe déjà, je n'ai qu'à l'intégrer pour pouvoir éditer directement.
En fait, pour l'instant, les seuls trucs sont la compilation et la coloration syntaxique
C'est exact ! Les seuls éléments vraiment nécessaires pour écrire des programmes, tu remarqueras.
N'oublie pas que je ne cherche pas le fonctionnalité de l'IDE mais du programme final...
Ensuite, au niveau du code, je pense que je vais prendre ton parser de stylesheet ( avec le respect de la license, bien sur)
Erf, s'il y a bien un truc que j'aurais aimé éviter, c'est bien celui-là.
Pas que ça me dérange -bien au contraire- mais ce parser est moche : je pourrai utiliser des regex, et si tu testes rapidement, tu verras qu'on ne peut pas mettre deux thèmes dans le même fichier (ça ne fonctionne pas) : ensuite ça manque drastiquement de fonctions (du style @highlight = lighten(@text, 20)), mêmes basiques, et le concept du « langage » est pas fini de travailler.
Bon, tu peux l'utiliser hein (en terme de license contente-toi de dire que le code est de moi si tu le veux, ça ira), mais je ne te le conseille pas, du moins pas pour l'instant.
→ La police a-t-elle une taille correcte ? Je trouve qu'elle est petite et que du 12px c'est mieux
→ L'aspect de la fenêtre correspond-il aux captures du topic ? Yep
→ Double-cliquez sur 'main.c', à gauche. La coloration syntaxique est-elle correcte ? Yep
Excellent.
Le log est super, désolé pour le wrapper, comme je l'ai dit à Nemhardy c'est en fait le mien, que j'ai oublié de vous passer.
→ Ajoutez des fichiers au projet temporaire en choisissant Project > Add Files.
Ensuite, retirez-les un par un via le menu contexuel, en cliquant droit sur
leurs entrées dans le panneau de projet. (J'ai eu des crashs sur cette action.)
J'ai pas eu de crash
Win \o/
→ Cliquez sur le bouton 'Debug information'. Y a-t-il bien trois chemins valides dans la fenêtre du terminal ? Il ne se passe rien
Est-ce que tu as retiré toutes les ressources, y compris les trois de base ? Si tu as le temps, essaye avec un projet neuf, juste en ouvrant le SDK.
→ Via le menu 'Settings', changez le nom du projet et sauvegardez-le dans un dossier vide. Si possible, incluez le fichier .pro créé dans le dossier. Fermez et relancez le fxSDK, choisissez Project > Open et sélectionnez le dossier précédemment utilisé. Le projet doit se charger sans problème. Aucun problème
Super !
et on peut pas fermer les fichiers
Hmm, si. Comme dans tous les systèmes d'onglets, Ctrl + W.
Nan, sérieusement, t'as pas essayé ça ?
Citer : Posté le 10/07/2015 13:53 | #
Nan, sérieusement, t'as pas essayé ça ?
Nan je suis pas trop raccouris j'aime faire trainer les choses et une petite croix, c'est pas la fin du monde( juste la fin d'un prophète )
Citer : Posté le 10/07/2015 13:54 | #
Ok, je plaide coupable. J'ai oublié de mettre la croix. x)
Citer : Posté le 10/07/2015 13:56 | #
croix le ou pas, c'est mieux avec
Citer : Posté le 10/07/2015 14:00 | #
Un ordi, visuellement, c'est un clavier plus un écran. Le reste c'est superflu
Il a pas tord quand même, une petite croix c'est bien
Au passage, pour le wrapper, Kris en avait pas fait un perso lui aussi ?
Citer : Posté le 10/07/2015 14:02 | #
Un ordi, visuellement, c'est un clavier plus un écran. Le reste c'est superflu
Tu joues à des FPS avec seulement ton clavier ?
Citer : Posté le 10/07/2015 14:02 | #
Oui (le pire, c'est que c'est vrai).
Citer : Posté le 10/07/2015 14:03 | #
Ben, le wrapper qu'Intelligide a utilisé c'est celui de Kris. Mais il est assez incomplet, pour dire vrai...