Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » fxSDK, un SDK alternatif pour écrire des add-ins
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

fxSDK, un SDK alternatif pour écrire des add-ins

Posté le 29/08/2014 22:00

Le fxSDK est une alternative au SDK habituel de Casio. Il permet de développer des add-ins pour la famille de la Graph 35+E et la Graph 90+E, et offre de meilleures performances et plus de possibilités !

Les outils du fxSDK

Le fxSDK marche sous Linux et a été compilé pour Mac OS ; il ne marche pas encore pour Windows mais on peut en discuter.

Il se fonde sur l'indispensable compilateur gcc et sa suite d'outils : as, ld, objdump, objcopy (entre autres). Contrairement au vieux compilateur du SDK, gcc est un compilateur moderne avec beaucoup de possibilités. Il n'est pas fourni avec le fxSDK et fait l'objet d'un tutoriel d'installation à part.

Côté calculatrice, c'est le noyau gint qui fait le travail. Il remplace fxlib 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 !

Le fxSDK fournit également des outils spécifiques pour compiler et étudier les programmes de la calculatrice.

fxsdk est un petit gestionnaire de projet qui vous permet de créer et compiler facilement des projets sans vous prendre la tête avec le Makefile. Parfait si vous ne voulez pas connaître toutes les détails compliqués.

fxg1a sert à créer les fichiers g1a finaux à partir du programme compilé. C'est le successeur de mon vieux g1a-wrapper qui était beaucoup moins puissant.

fxconv convertit des données pour vos add-ins, commes vos images ou polices, dans des formats spécifiques de gint. C'est un peu comme le Sprite Coder mais ça vous évite de copier des gros tableaux dans votre programme et surtout le dessin est beaucoup plus performant !

fxos est un désassembleur et manipulateur d'OS capable de retrouver et disséquer des syscalls en un tour de poignet. C'est un outil de reverse-engineering dont l'usage principal est de produire des listings assembleur annotés pour comprendre très rapidement le code.

Il y a pas mal de différences avec le SDK de Casio donc passer au fxSDK nécessite un peu d'adaptation.

Installer le fxSDK sur votre ordinateur

Ça se passe en trois étapes :

1. Compiler un compilateur gcc à destination de la calculatrice
2. Installer le fxSDK
3. Installer le noyau, gint

Je suppose ici que vous connaissez les bases de la ligne de commande, mais si ce n'est pas le cas, n'hésitez pas à laisser un commentaire pour demander.

La première chose est de vous préparer un cross-compilateur gcc. Vous pouvez sauter l'installation du g1a-wrapper et venir ici dès que la libgcc est installée. Assurez-vous que le compilateur est dans le PATH est vous serez prêt ! C'est le plus gros morceau donc une fois que vous aurez ça, vous aurez déjà pratiquement fini.

Clônez le dépôt git du fxSDK depuis la forge de Planète Casio (vous pouvez aussi utiliser SSH).

% git clone 'https://gitea.planet-casio.com/Lephenixnoir/fxsdk.git'

Configurez le fxSDK ; vous pouvez taper "./configure --help" voir les options disponibles. Par défaut, le fxSDK sera installé dans votre dossier personnel (dans ".local").

% cd fxsdk
% ./configure

Ensuite compilez et installez ! Si vous avez choisi un dossier d'installation différent avec --prefix ou si vous compilez sous Mac, vous pourriez avoir besoin de sudo à l'installation.

% make
% make install

Assurez-vous que votre dossier de destination est dans votre PATH, puis vous pouvez installer gint.

Vous êtes alors prêt à partir !

Développer des programmes avec le fxSDK

TODO: Ajouter l'utilisation de fxsdk.

Toute la partie programmation revient à développer des programmes avec gint. Les tutoriels d'utilisation de gint couvrent tous ce dont vous aurez besoin, y compris l'utilisation de fxconv.


Fichier joint


Pages : Précédente1 ... , 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ... 21Suivante
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 22/04/2016 17:55 | #


Dark storm a écrit :
Bon bah avis à qui entendra, le GitLab n'attend que vous pour proposer une implémentation de la lib standard du C sans se baser sur la fxlib.

Tu comprends mal ce que je dis... ^^'
En plus je te rappelle que ça fera des collisions avec fxlib !
Dark stormHors ligneMembre d'honneurPoints: 10783 Défis: 174 Message

Citer : Posté le 22/04/2016 18:05 | #


Suffit de se passer de la fxlib
Gint est fait pour ça non ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 22/04/2016 18:10 | #


C'est exact !
Mais donc gint est une condition pour la libc... c'est pour ça que je ne la publie pas encore...
Dark stormHors ligneMembre d'honneurPoints: 10783 Défis: 174 Message

Citer : Posté le 22/04/2016 18:15 | #


En soit, rien n'empêche de faire une libc, au moins se sera fait. Et puis la fxlib a tendance à bugguer avec les flottants chez moi…
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 22/04/2016 18:42 | #


Ah mais le calcul flottant est assuré par la libgcc Si tu parles des fonctions, c'est soit parce qu'elles sont incompatibles (IsKeyDown()), soit parce que mon « portage » de fxlib est trop dégueulasse pour être valable. Cherche du côté d'un outil appelé convrenesaslib
HackcellEn ligneMembrePoints: 1101 Défis: 6 Message

Citer : Posté le 23/05/2016 20:45 | #


Heu, pourquoi tu t'embêterai à faire un IDE complet, pour l'éditeur de texte, tu sais bien que sous linux tout le monde va faire comme il veut et utiliser son éditeur de texte préfère. Donc après, le sdk est utile car il permet d'éviter les commandes a rallonge
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 27/05/2016 21:14 | #


C'est exactement la réflexion que je me suis faite il y a quelques mois de ça !

Le programme existe toujours mais l'interface graphique n'a pas de réel intérêt. Le fxSDK que j'ai en local (enfin, une partie, que j'ai finie de développer) est basé sur des outils en ligne de commande et des formats usuels pour éviter aux programmeurs d'utiliser des outils spécifiques, justement. Par exemple, gint est capable d'afficher du texte à partir de polices personnalisées. Mais plutôt que de réutiliser mon éditeur graphique, je me suis basé sur des images bitmap, que chacun pourra éditer avec son logiciel habituel.

Ajouté le 11/07/2017 à 14:20 :
J'ai mis à jour le topic avec les instructions d'installation pour Linux. Normalement ça devrait bien marcher, mais j'ai sans doute laissé échapper quelque chose. Dites-moi si vous avez un problème en essayant
NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1235 Défis: 54 Message

Citer : Posté le 17/07/2017 12:23 | #


Alors, soit j'ai raté quelque chose, soit ton Makefile n'en a rien à faire du chemin qu'on lui donne lors de la configuration pour l'installation des binaires, et essaie de toute manière d'installer dans /usr/bin.
N'attendez pas qu'il n'y ait plus de miel : スススススススススススススススススススススススススス養蜂家スススススススススススススススススススススススススススススススススススス蜂家
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 17/07/2017 12:59 | #


C'est exact, un oubli de ma part : j'ai généré le fichier de configuration et correctement rendu l'installation dynamique, mais j'ai oublié d'inclure la config dans le Makefile principal, ce qui le ramenait toujours aux valeurs par défaut.

J'ai commit la correction après vérification, merci du signalement.
NinestarsHors ligneMembrePoints: 2235 Défis: 22 Message

Citer : Posté le 17/07/2017 14:25 | #


Super sujet, ça commence vraiment à se concrétiser
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 17/07/2017 14:30 | #


Merci !

Ces tutoriels me prennent pas mal de temps à écrire, mais en même temps je pense ça intéressant de ne pas simplement s'embêter avec une liste de fonctions. Quant aux topics, celui de gint est plus sympa à lire j'imagine, mais l'important c'est que les outils soient là et utilisables.
TheprogHors ligneMembrePoints: 1447 Défis: 20 Message

Citer : Posté le 31/07/2017 00:30 | #


Salut !
J'ai une erreur au moment de la compilation de fxSDK:
L'erreur
Cliquer pour enrouler
    gcc fxos/asmtable.c
fxos/asmtable.c:4:18: fatal error: pcre.h: Aucun fichier ou dossier de ce type
compilation terminated.
Makefile:107 : la recette pour la cible « build/fxos_asmtable.c.o » a échouée
make: *** [build/fxos_asmtable.c.o] Erreur 1
user@PC-VIEUX:~/Documents/fxsdk$ ./configure
Configuration saved in Makefile.cfg.
user@PC-VIEUX:~/Documents/fxsdk$ make
    gcc fxos/asmtable.c
fxos/asmtable.c:4:18: fatal error: pcre.h: Aucun fichier ou dossier de ce type
compilation terminated.
Makefile:107 : la recette pour la cible « build/fxos_asmtable.c.o » a échouée
make: *** [build/fxos_asmtable.c.o] Erreur 1
user@PC-VIEUX:~/Documents/fxsdk$ make
    gcc fxos/asmtable.c
fxos/asmtable.c:4:18: fatal error: pcre.h: Aucun fichier ou dossier de ce type
compilation terminated.
Makefile:107 : la recette pour la cible « build/fxos_asmtable.c.o » a échouée
make: *** [build/fxos_asmtable.c.o] Erreur 1

LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 31/07/2017 00:31 | #


Installe le paquet libpcre-dev (un nom du type, il peut traîner un numéro de version en plus selon ton système).
TheprogHors ligneMembrePoints: 1447 Défis: 20 Message

Citer : Posté le 31/07/2017 00:41 | #


Merci, si jamais ca interesse y'a les noms du paquet en fonction des distributions
CritorEn ligneAdministrateurPoints: 1263 Défis: 0 Message

Citer : Posté le 17/02/2018 08:54 | #


Bonjour.

J'ai compilé binutils 2.30, gcc 7.3.0, libgcc... en apparence tout avait marché.

Là, j'arrive donc à la compilation de fxsdk et ça ne marche pas :
Xavier@Xavier-X550C ~/opt/sh3eb-elf/add-in-wrapper
$ ls ../bin
g1a-wrapper.exe          sh3eb-elf-c++filt.exe  sh3eb-elf-gcc-7.3.0.exe
sh3eb-elf-gcov-dump.exe  sh3eb-elf-nm.exe       sh3eb-elf-size.exe
sh3eb-elf-addr2line.exe  sh3eb-elf-cpp.exe      sh3eb-elf-gcc-ar.exe
sh3eb-elf-gcov-tool.exe  sh3eb-elf-objcopy.exe  sh3eb-elf-strings.exe
sh3eb-elf-ar.exe         sh3eb-elf-elfedit.exe  sh3eb-elf-gcc-nm.exe
sh3eb-elf-gprof.exe      sh3eb-elf-objdump.exe  sh3eb-elf-strip.exe
sh3eb-elf-as.exe         sh3eb-elf-g++.exe      sh3eb-elf-gcc-ranlib.exe
sh3eb-elf-ld.bfd.exe     sh3eb-elf-ranlib.exe   sh3eb-elf-c++.exe
sh3eb-elf-gcc.exe       sh3eb-elf-gcov.exe      sh3eb-elf-ld.exe
sh3eb-elf-readelf.exe

Xavier@Xavier-X550C ~/opt/sh3eb-elf/add-in-wrapper
$ cd ..

Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ ls
add-in-wrapper  binutils-2.30         build-binutils  gcc-7.3.0         include  libexec    share
bin             binutils-2.30.tar.gz  build-gcc       gcc-7.3.0.tar.gz  lib      sh3eb-elf

Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ git clone --recursive "http://git.planet-casio.com/lephe/fxsdk"
Clonage dans 'fxsdk'...
remote: Counting objects: 180, done.
remote: Compressing objects: 100% (127/127), done.
remote: Total 180 (delta 70), reused 123 (delta 46)
Réception d'objets: 100% (180/180), 10.31 MiB | 517.00 KiB/s, fait.
Résolution des deltas: 100% (70/70), fait.
Vérification de la connectivité... fait.
Submodule 'gint' (http://git.planet-casio.com/lephe/gint) registered for path 'gint'
Clonage dans 'gint'...
remote: Counting objects: 1465, done.
remote: Compressing objects: 100% (775/775), done.
remote: Total 1465 (delta 967), reused 1152 (delta 654)
Réception d'objets: 100% (1465/1465), 975.65 KiB | 851.00 KiB/s, fait.
Résolution des deltas: 100% (967/967), fait.
Vérification de la connectivité... fait.
Submodule path 'gint': checked out '131b432cc97a75bd288b936cd8f1c461ebb7e893'

Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ cd fxsdk/

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
$ ls
common        configure  fxconv  fxos  fxsdk  gint  icon.bmp  Makefile
Makefile.cfg  runtime

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
$ ./configure
Configuration saved in Makefile.cfg.

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
$ make
  mkdir build
  mkdir bin
    gcc common/bitmap.c
    gcc common/clargs.c
    gcc common/errors.c
     ar libfxsdk.a
    gcc fxsdk/main.c
     ld bin/fxsdk

» Successfully built fxsdk (142229 bytes)

    gcc fxconv/image.c
    gcc fxconv/fxconv.c
    gcc fxconv/font.c
fxconv/font.c: In function ‘readHeaderLine’:
fxconv/font.c:242:2: attention : array subscript has type ‘char’ [-Wchar-subscripts]
  if(isdigit(*header))
  ^
fxconv/font.c:246:3: attention : array subscript has type ‘char’ [-Wchar-subscripts]
   while(isdigit(*header) && header < token_end)
   ^
    gcc fxconv/system.c
fxconv/system.c: In function ‘mkobj’:
fxconv/system.c:147:3: attention : implicit declaration of function ‘waitid’ [-Wimplicit-function-declaration]
   waitid(P_PID, pid_sed, &info, WEXITED);
   ^
fxconv/system.c:147:10: erreur: ‘P_PID’ undeclared (first use in this function)
   waitid(P_PID, pid_sed, &info, WEXITED);
          ^
fxconv/system.c:147:10: note: each undeclared identifier is reported only once for each function it appears in
fxconv/system.c:147:33: erreur: ‘WEXITED’ undeclared (first use in this function)
   waitid(P_PID, pid_sed, &info, WEXITED);
                                 ^
Makefile:104 : la recette pour la cible « build/fxconv_system.c.o » a échouée
make: *** [build/fxconv_system.c.o] Erreur 1


Que me conseillez-vous ?
Merci.
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 17/02/2018 09:01 | #


Hmm, c'est un scénario que je n'ai pas étudié. Une partie de fxconv utilise l'API d'Unix (pour spawner des sous-processus) et n'est pas prévue pour tourner nativement sous Windows. Le fait que le compilateur n'ait pas craché plus tôt (inclusion des en-têtes) laisse entendre que ça doit être possible de s'adapter. Je peux savoir avec quoi tu as compilé (type version de Cygwin et/ou MinGW) pour chercher ce que je peux faire comme modifications ?
CritorEn ligneAdministrateurPoints: 1263 Défis: 0 Message

Citer : Posté le 17/02/2018 09:03 | #


J'utilise Cygwin.
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 17/02/2018 09:12 | #


J'ai envoyé un commit, 3ebe66a sur la branche master, où j'ai remplacé l'usage de waitid(), une fonction un peu exotique, par un appel plus classique à wait().

Mes programmes sont un peu en bazar pour un certain nombre de raisons, donc je n'ai pu tester que rapidement, mais le programme fonctionne toujours. Je pense que pour la compatibilité Cygwin, ce sera meilleur.
CritorEn ligneAdministrateurPoints: 1263 Défis: 0 Message

Citer : Posté le 17/02/2018 10:04 | #


Merci. Cela va un petit peu plus loin, mais une autre erreur surgit :
Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ rm -rf fxsdk

Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ git clone --recursive "http://git.planet-casio.com/lephe/fxsdk"
Clonage dans 'fxsdk'...
remote: Counting objects: 184, done.
remote: Compressing objects: 100% (131/131), done.
Réception d'objets:  83remote: Total 184 (delta 73), reused 123 (delta 46) (153/184
Réception d'objets: 100% (184/184), 10.31 MiB | 635.00 KiB/s, fait.
Résolution des deltas: 100% (73/73), fait.
Vérification de la connectivité... fait.
Submodule 'gint' (http://git.planet-casio.com/lephe/gint) registered for path 'gint'
Clonage dans 'gint'...
remote: Counting objects: 1465, done.
remote: Compressing objects: 100% (775/775), done.
remote: Total 1465 (delta 967), reused 1152 (delta 654)
Réception d'objets: 100% (1465/1465), 975.65 KiB | 596.00 KiB/s, fait.
Résolution des deltas: 100% (967/967), fait.
Vérification de la connectivité... fait.
Submodule path 'gint': checked out '131b432cc97a75bd288b936cd8f1c461ebb7e893'

Xavier@Xavier-X550C ~/opt/sh3eb-elf
$ cd fxsdk

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
$ ./configure
Configuration saved in Makefile.cfg.

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
$ make
  mkdir build
  mkdir bin
    gcc common/bitmap.c
    gcc common/clargs.c
    gcc common/errors.c
     ar libfxsdk.a
    gcc fxsdk/main.c
     ld bin/fxsdk

» Successfully built fxsdk (142229 bytes)

    gcc fxconv/image.c
    gcc fxconv/fxconv.c
    gcc fxconv/font.c
fxconv/font.c: In function ‘readHeaderLine’:
fxconv/font.c:242:2: attention : array subscript has type ‘char’ [-Wchar-subscripts]
  if(isdigit(*header))
  ^
fxconv/font.c:246:3: attention : array subscript has type ‘char’ [-Wchar-subscripts]
   while(isdigit(*header) && header < token_end)
   ^
    gcc fxconv/system.c
fxconv/system.c: In function ‘mkobj’:
fxconv/system.c:131:13: attention : unused variable ‘info’ [-Wunused-variable]
   siginfo_t info;
             ^
     ld bin/fxconv

» Successfully built fxconv (172203 bytes)

    gcc fxos/disasm.c
    gcc fxos/asmtable.c
fxos/asmtable.c:4:18: erreur fatale: pcre.h : No such file or directory
#include <pcre.h>
                  ^
compilation terminée.
Makefile:107 : la recette pour la cible « build/fxos_asmtable.c.o » a échouée
make: *** [build/fxos_asmtable.c.o] Erreur 1

Xavier@Xavier-X550C ~/opt/sh3eb-elf/fxsdk
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 17/02/2018 10:07 | #


Ah, c'est plus simple cette fois-ci (j'espère). fxos utilise des expressions régulières fournies par la libpcre. Je pourrai m'en débarrasser et je planifie de le faire.

D'ici là, tu peux tenter d'installer la lib (mais je ne sais pas du tout t'aider), ou simplement ne pas compiler fxos (qui n'est utilisé que pour inspecter des fichiers d'OS, désassembler des syscalls et faire du retro-engineering) et utiliser :

$ make fxsdk
$ make fxconv
$ sudo make install
ZezombyeHors ligneRédacteurPoints: 1614 Défis: 12 Message

Citer : Posté le 21/08/2018 01:55 | #


Le fxsdk est-il à jour ou il faudrait l'updater un peu ?

J'aimerais l'utiliser notamment pour le getkey (celui de casio ne renvoie pas de valeur du tout pour certaines combinaisons de touches) et pour convertir des images avec fxconv.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Pages : Précédente1 ... , 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ... 21Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 40 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd