Forums Casio - Projets de programmation

Index du Forum > Projets de programmation > gint : un environnement de développement d'add-ins
Lephenixnoir
Hors ligne
Administrateur
Points: 13069
Défis: 136
Message
Posté le 20/02/2015 17:30

gint : un environnement de développement d'add-ins :

En général, quand on veut écrire un add-in, on dégaine le fx-9860G SDK de Casio et sa bibliothèque fxlib, ou bien le PrizmSDK si la calculatrice visée est en couleurs.

gint est une alternative à tout ça. C'est un environnement de développement qui fonctionne sous Linux (et avec un peu de travail sous Windows) et vous permet de créer des add-ins avec gcc et sa suite. Il marche bien sur Graph monochromes, et je suis en train de le porter sur Graph 90. Un joli programme !

Comparé aux SDKs habituels, gint est plus proche du matériel et contrôle donc le clavier, l'écran ou l'horloge avec plus de finesse. Concrètement, ça veut dire que vous pouvez appuyer sur plusieurs touches à la fois, faire exécuter une fonction toutes les 5 ms, ou ne rafraîchir que la moitié de l'écran.

gint sur Graph monochrome



gint existe sur Graph monochrome depuis un moment et le cœur de la bibliothèque arrivera bientôt à sa version finale.

Comparé à fxlib, vous pouvez faire ce genre de joyeusetés...
– Des graphismes en 4 couleurs avec le moteur de gris
– Un contrôle détaillé du clavier pour les jeux, parfait pour les combos !
– Des timers avec une précision de 30 µs, d'autres à 60 ns
– Des fonctions de dessin de texte et d'image fulgurantes
– La conversion automatique des images grâce à fxconv (du fxSDK)
– La compatibilité SH3 et SH4 sans avoir à modifier les sources.

L'inconvénient principal est que gint est un gros morceau qui se baladera dans votre g1a. Ça représenté environ 30 ko, que vous pouvez comparer au 18 ko de sprintf() quand vous utilisez le SDK !

gint sur Graph 90



gint était à l'origine conçu pour Graph 85. J'avance tranquillement sur le portage avec la Graph 90, qui demande de réorganiser pas mal de code. J'arrive désormais à faire pas mal de choses :
– Installer gint et remplacer le gestionnaire d'interruptions
– Communiquer avec l'écran (méthode lente et non finale)
– Utiliser les 9 timers disponibles
– Configurer la RTC (horloge) et l'utiliser comme un timer
– Mesurer la fréquence des horloges (préparatif pour l'overclock)
– Les fondamentaux sur la manipulation du clavier

Si vous avez déjà programmé une Prizm, vous savez qu'il y a une bande blanche dans laquelle on ne peut rien afficher. Ce genre de choses se contourne bien avec gint, comme le montre la photo

Tester gint sur une Graph monochrome

Note : la procédure ci-dessous est pour la dernière version publique de gint, que j'ai publiée avant d'attaquer le portage sur Graph 90. Ça date un peu ^^'

Si vous avez un moment, je suis toujours à la recherche de tests pour vérifier que tout marche bien. Vous en avez pour 15 minutes environ !

1. Transférez l'add-in de test de gint (téléchargeable ici), sur votre machine, et lancez-le en maintenant EXE appuyé. L'écran de contrôle (image 1) apparaît.
2. Notez ses contenus quelque part pour me les envoyer. S'il n'y a pas "Boot OK" en haut à droite, faites un RESET et arrêtez là, car gint ne fonctionne pas. Sinon, appuyez sur une touche.
3. Effectuez les différents tests de l'onglet TEST. N'hésitez pas à signaler ce qui peut vous sembler bizarre !


Images 1 et 2 : L'écran de contrôle de gint, et le menu principal

Keyboard & events : vous devez pouvoir appuyer sur 3 ou 4 touches simultanément et visualiser des nom et nombre de répétition corrects, même si vous suivez des séquences exotiques. Vous pouvez voir le shadowing en constant que Left + Down + SHIFT déclenche ALPHA.
Gray engine : vérifiez que le réglage initial (DEFT) est satisfaisant pour un contraste moyen. Vous pouvez jouer avec les délais et voir comment l'illusion varie.
Image rendering : les images doivent s'afficher correctement dans tous les positions, mêmes si elles dépassent de l'écran.
Text rendering : vous devez voir les 6 lignes de 32 caractères en entier pour chaque police.
Real-time clock : l'horloge doit avancer seconde après seconde. Mettez-la à l'heure ou modifiez légèrement l'heure indiquée : le réglage doit persister.
Clocks and timers : dans l'onglet TIME, le timer et l'horloge doivent avancer sensiblement à la même vitesse.

4. Placez-vous ailleurs que dans le menu principal, appuyez sur MENU et vérifiez que vous retournez bien au menu de la calculatrice. Retournez dans l'application de test, vous devez réapparaître à l'endroit où vous l'aviez laissée.
5. Envoyez-moi vos résultats par un message sur ce topic. Et soyez remerciés !

Installer et utiliser gint sur votre système, pour développer

L'utilisation normale de gint est en l'associant avec le fxSDK, qui fournit les options de compilation/édition des liens appropriées, le linker script particulier de gint ainsi que les outils de conversion compatibles avec la bibliothèque. Si vous voulez utiliser le fxSDK tout entier (recommandé), suivez ses instructions d'installation, gint est fourni avec.

Une fois que gint est installé sur votre système, voyez les tutoriels de développement pour avoir un aperçu de son fonctionnement. La plupart des choses sont expliquées dans les en-têtes (fichiers .h) de la bibliothèque. Ils sont tous dans le sous-dossier gint du dossier d'installation du fxSDK, que vous pouvez afficher en exécutant fxsdk --folder.

Si vous voulez utiliser directement gint sans le fxSDK (soyez sûrs que vous savez ce que vous faites), vous pouvez ou télécharger l'archive, ou le compiler à la main. Notez que la compilation requiert quand même le fxSDK... pas besoin de l'installer par contre, il vous suffit de placer fxsdk/bin dans le PATH après compilation.

$ git clone "http://git.planet-casio.com/lephe/gint" && cd gint
$ ./configure --startup-log # Ce que vous voulez
$ make all-lib

Ici aussi, vous ne voudrez probablement pas l'installer, juste linker la bibliothèque. Je rappelle que l'ordre de linkage compte, et que vous devez absolument compiler avec gcc <options> <objets...> -lgint -lc -lgcc, et dans cet ordre.


Comment ça marche

gint est essentiellement organisé autour d'un gestionnaire d'interruptions, une routine qui répond aux signaux émis par les composants pour signaler des événements intéressants (décompte du temps, timer arrivé à expiration, touches du clavier pressées, données reçues sur le port série... entre 20 et 40 sources différentes sur la calculatrice). Normalement c'est le système qui fournit le sien, mais gint le change parce qu'il a besoin de le contrôler pour implémenter ses fonctionnalités et se rendre indépendant de fxlib.

Une fois qu'on contrôle les interruptions, installer un moteur de gris avec un timer à deux délais est un jeu d'enfant. Le moteur de Kucalc (Revolution-FX) ne les contrôlait pas, et devait toutes les supprimer sauf celle du timer, désactivant du même coup les autres timers, l'horloge, la fonction GetKey()... tout un dérangement qui se soldait par un redémarrage à la fin de l'exécution.


Fichier joint



Shadow15510
En ligne
Administrateur
Points: 2168
Défis: 15
Message
Dernier message de la page précédente :Posté le 02/11/2018 20:11 |
Ouah !... Ça m'a l'air un peu complexe pour mon petit cerveau, enfin mon ex-petit-cerveau (mes quelques neurones on des se consumer pendant que je regardais ailleurs...), Ce serait possible d'en faire un IDE avec tout intégré du coup ? Le truc qui m'intéresse beaucoup pour Gint, c'est le niveaux de gris, c'est super intéressant surtout pour un jeu où les graphiques sont à l'honneur et le gestion de la Graph 90
----------------------------------
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%



Pages: Précédente | 1 ... , 9, 10, 11, 12, 13, 14

Lephenixnoir
Hors ligne
Administrateur
Points: 13069
Défis: 136
Message
Citer : Posté le 02/11/2018 20:14 | #
Ce serait possible d'en faire un IDE avec tout intégré du coup ?

Ce serait... long ! Très long ! Pas autant que d'écrire la dernière version de gint mais pas loin !

En vrai tu peux probablement tout faire avec Code::Blocks ou un IDE de ton choix, mais il faut maîtriser les deux côtés (ton IDE, et la façon de faire en ligne de commande).
----------------------------------
Rise.
Shadow15510
En ligne
Administrateur
Points: 2168
Défis: 15
Message
Citer : Posté le 02/11/2018 20:23 | #
Ah... bon ben non alors, moi au delà de la calculatrice je n'ai aucune compétence en programmation... C'est pas grave, juste, tu peux me ré-explquer comment on "compile" des sources jusqu'au *.g1a ? J'ai pas compris...
----------------------------------
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
Lephenixnoir
Hors ligne
Administrateur
Points: 13069
Défis: 136
Message
Citer : Posté le 02/11/2018 20:37 | #
Okay, allons-y doucement, tu verras c'est pas compliqué !

Fichiers dont on dispose à ce point :
* game.c
* objects.c
* menu.c
* mon-addin.png


1. Compilation

On dit "compilation" pour tout le processus, mais en fait ce n'est que la première étape. Le compilateur transforme les fichiers sources en code objet (assembleur), et les fichiers qui en sortent s'appellent .o. Cette transformation est individuelle : on regarde un seul .c à la fois, et on en fait un .o.

Fichiers dont on dispose à ce point :
* game.o
* objects.o
* menu.o
* mon-addin.png


2. Édition des liens

Cette nouvelle étape consiste tout simplement à rassembler les fichiers objets en un seul. Le fichier qui en sort est exactement du même genre, mais lui on l'appelle généralement .elf parce que son format de fichier est... ELF.

Fichiers dont on dispose à ce point :
* mon-addin.elf
* mon-addin.png


3. Obtention d'un fichier binaire

Dans un fichier ELF, il y a plein de choses qui expliquent comment le code marche, qui permettent de le debugger, et pas mal de choses utiles. Mais la calculatrice ne comprend pas tout ça. On retire donc toutes les informations "supplémentaires" pour ne garder vraiment que le code. Ça nous donne un fichier binaire, souvent noté .bin.

Fichiers dont on dispose à ce point :
* mon-addin.bin
* mon-addin.png


4. Génération du fichier final

Ensuite, tu appelles un programme fait par la communauté pour rajouter dans le fichier binaire des informations comme le nom de l'add-in, son icône, sa version... toutes les informations qui font un bon fichier g1a.

Fichiers dont on dispose à ce point :
* mon-addin.g1a


Des questions ?
----------------------------------
Rise.
Hackcell
Hors ligne
Membre
Points: 886
Défis: 6
Message
Citer : Posté le 02/11/2018 22:08 | #
Et puis au final, le prend pas mal, mais je ne pense pas que tu utilsais vraiment le SDK au maximum, donc pour les les feature de base, les remplaçants son simple à trouver :

-Pour écrire du code, j'espère pour toi que tu utilsais déjà autre chose que celui du SDK

-Pour compiler, une fois que l'on se sera mis d'accord sur l'agencement des sources (tout a la racine/ dossier src et include/ juste src/ un dossier à part pour les assets/etc) on pourra faire un makefile que tu auras juste besoin d'exécuter en tapant make dans ta console (en étant bien évidemment dans le bon dossier) (voir moins si tu défini un amias comme Lephenixnoir)

-Pour tester, pas d'emulateur, mais avec ta caltos déjà branché et p7, en une ligne de commande c'est plié ( on peut même l'ajouter aux actions effectuées par la commande du point précédent)

Après, tu utilisait peut-être autre chose, si oui, n'hésite pas à le dire

(Bon au final, ce message reprend juste ce qui à déjà été dit )
----------------------------------
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 ⭐
Shadow15510
En ligne
Administrateur
Points: 2168
Défis: 15
Message
Citer : Posté le 03/11/2018 10:52 | #
Pour écrire j'utilise Xcode
Je me demandais : Grâce à quels soft on pass d'une étape à la suivante ?
----------------------------------
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
Hackcell
Hors ligne
Membre
Points: 886
Défis: 6
Message
Citer : Posté le 03/11/2018 11:17 | #
https://www.planet-casio.com/Fr/forums/topic14914-1-Tutoriels_d_utilisation_de_gint.html#150031

Lephenixnoir à écrit un exemple qui reprend un peu tout, tu devrais lire le début où il explique pas à pas ce qu'il faut faire.
----------------------------------
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 ⭐
Shadow15510
En ligne
Administrateur
Points: 2168
Défis: 15
Message
Citer : Posté le 03/11/2018 11:58 | #
Ok merci
----------------------------------
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
Lephenixnoir
Hors ligne
Administrateur
Points: 13069
Défis: 136
Message
Citer : Posté le 03/11/2018 12:02 | #
Je réponds quand même directement à la question :

Étape 1 : sh3eb-elf-gcc
Étape 2 : sh3eb-elf-gcc aussi, il s'occupe d'appeler le linker
Étape 3 : sh3eb-elf-objcopy, encore un truc qui vient avec GCC
Étape 4 : Soit mon vieux g1a-wrapper, soit (privilège du développeur !) le plus moderne fxg1a que j'ai en local
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1523
Défis: 12
Message
Citer : Posté le 06/11/2018 19:11 | #
Si je ne me trompe pas, il n'y a pas besoin de "porter" gint sous mac (qui est juste ajouter bash, make et d'autres trucs linux) parce que mac est déjà un système unix, il y a déjà ces outils (mais il faut xcode).

Sous windows par contre on peut utiliser Cygwin (là on a l'avantage de pouvoir utiliser le SDK).
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir
Hors ligne
Administrateur
Points: 13069
Défis: 136
Message
Citer : Posté le 06/11/2018 19:16 | #
Tu as tout à fait raison, toutefois pour l'installer et l'utiliser en pratique il y a toujours des petits trucs qui merdent d'une distro à l'autre, donc certainement aussi de Linux à Mac OS. Je ne m'attends pas à des montagnes !
----------------------------------
Rise.
Ityt
Hors ligne
Membre
Points: 70
Défis: 0
Message
Citer : Posté le 30/11/2018 23:49 | #
Bon là je viens de tester sur ma Graph 35+ l'affichage des sprites est juste époustouflant Par contre en exécutant l'addin je n'ai pas eu tous les trucs bizarres affichés je suis directement arrivé sur l'image 2 mais j'ai pu faire sans problème les tests. C'est vraiment du bon boulot bon courage pour la suite.

Ajouté le 01/12/2018 à 00:14 :
Je reviens pour signaler un bug :
dans le "Keyboard and events"
Si je laisse mes doigts sur 1 et sur 2 et qu'ensuite j'appuie sur 5, le bouton 4 est considéré comme actif.
En fin de compte si j'appuie en plus de 5 sur 8, le bug a un comportement symétrique : le bouton 7 est considéré comme actif.
Un autre drôle de comportement :
En appuyant sur 2, 5 et 8 tous les boutons sur la verticale de 2, 5, 8 sont considérés comme actif et ça fait aussi pareil sur les autres colonnes. Je sais pas si il y a déjà quelqu'un qui a remarqué ça en commentaire mais quoiqu'il en soit bonne chance pour corriger.
(il y a d'autres bugs pour le clavier mais je vais pas tout lister)
----------------------------------
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Breizh_craft
Hors ligne
Modérateur
Points: 862
Défis: 7
Message
Citer : Posté le 01/12/2018 00:16 | #
C'est pas un bug, c'est lié à la gestion du clavier physiquement, on peut rien y faire. Quelqu'un détaillera sans doute plus que moi.
----------------------------------
Informagicien professionnel, prestidigitateur système. Tout est possible.
Hackcell
Hors ligne
Membre
Points: 886
Défis: 6
Message
Citer : Posté le 01/12/2018 00:18 | #
Yep, DS a la rescousse ♥

https://www.planet-casio.com/Fr/forums/topic15123-1-Le-ghosting,-kesako%E2%80%AF.html
----------------------------------
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 ⭐
Ityt
Hors ligne
Membre
Points: 70
Défis: 0
Message
Citer : Posté le 01/12/2018 00:26 | #
Alors pour ce bug c'est pas possible de limiter la casse ? Par exemple d'enregistrer que les 4 premiers inputs ?
----------------------------------
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Dark storm
Hors ligne
Membre d'honneur
Points: 10670
Défis: 174
Message
Citer : Posté le 01/12/2018 00:32 | #
Nope, c'est un problème physique. Comme expliqué dans la vidéo, pour enlever le problème on est obligé de changer la matrice du clavier. Pas le plus simple.

En gros du point de vue du contrôleur du clavier, tu as les colonnes A et B, plus les lignes 1 et 2 d'activées.
Avec uniquement ces infos, quelles touches sont actives ?
\|A|B
-+-+-
1|W|X
-+-+-
2|Y|Z
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13069
Défis: 136
Message
Citer : Posté le 01/12/2018 10:55 | #
Ityt a écrit :
Bon là je viens de tester sur ma Graph 35+ l'affichage des sprites est juste époustouflant Par contre en exécutant l'addin je n'ai pas eu tous les trucs bizarres affichés je suis directement arrivé sur l'image 2 mais j'ai pu faire sans problème les tests. C'est vraiment du bon boulot bon courage pour la suite.

Merci ! Ça fait plaisir les messages comme ça

Si tu veux avoir le premier écran, il faut rester appuyé sur la touche EXE quand tu lances l'add-in (ou n'importe quelle autre touche, en fait). C'est fait exprès pour que cet écran soit "discret" la plupart du temps !
----------------------------------
Rise.

Pages: Précédente | 1 ... , 9, 10, 11, 12, 13, 14

Index du Forum > Projets de programmation > gint : un environnement de développement d'add-ins

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

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd