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

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » gint : un environnement de développement d'add-ins
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

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

Posté le 20/02/2015 17:30

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


Pages : Précédente1 ... , 15, 16, 17, 18, 19, 20, 21, 22Suivante
MilangHors ligneMembrePoints: 240 Défis: 0 Message

Citer : Posté le 22/07/2019 22:10 | #


Comment est-ce que les images sont encodées ?
Je vois qu'il y a un tableau data, mais si je veux acceder manuellement à la couleur d'un pixel, comment dois je faire ?
L'intérêt c'est de pouvoir encoder les textures dans des .png et de pouvoir les déformer
Une alternative intéressante à toutes les boucles que vous avez vu jusque là :
For 1→X To 2:X-1→X:Next :E

Projet de jeu multijoueur : 1V1 3D
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 22/07/2019 22:36 | # | Fichier joint


Euh... je ne pense pas que le format de bopti soit le bon format pour ça. J'ai écrit de la doc là-dessus, je te la mets en pièce jointe pour que tu puisses voir. Tout sauf la structure à la fin est complètement à jour.

Pour résumer : l'image est découpée en calques qui sont dessinés les uns à la suite des autres. Chaque opération dessine les pixels par groupes de 32 donc gint ne manipule jamais un seul pixel à fois. Les couleurs sont réparties sur plusieurs calques donc gint ne manipule jamais une couleur à la fois. Et donc encore moins la couleur d'un seul pixel.

Si tu veux pouvoir faire du traitement d'images, il faut que tu te trouves un format approprié. Celui de bopti n'est clairement pas bien... il est fait pour que le dessin soit fulgurant et c'est tout.

Si jamais l'envie te prend de faire ça proprement, je l'intégrerai avec plaisir dans fxconv.

(Et merci encore pour ta contribution sur le DMA, je m'excuse de mettre longtemps à m'en occuper. Je suis sur ma dernière semaine de stage et c'est très intense ! )
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 28/07/2019 01:59 | # | Fichier joint


Après beaucoup d'efforts d'implémentation, le moteur de gris est maintenant complètement opérationnel et poussé sur le dépôt !

Les fonctions de contrôle principales sont gray_start(), gray_stop() et gupdate().

Les nouvelles fonctions de dessin sont gclear(), grect(), gpixel(), gline(). Auxquelles s'ajoutent gtext(), gimage() et gsubimage(). Les images en gris supportent également la transparence comme les autres (repérée sur la photo par le damier) !


Compilez la dernière version de la bibliothèque pour bénéficier de ces changements. Prochaine étape, les images sur la Graph 90+E. J'ai déjà des idées assez précises et j'attaquerai le code rapidement.

Le post principal de ce topic mérite une bonne mise à jour car la deuxième version de gint arrive à grands pas !
YatisHors ligneMembrePoints: 425 Défis: 0 Message

Citer : Posté le 28/07/2019 18:27 | #


Bravo à toi !! Donc gint est fini pour les monochromes ?
Vas-tu réécrire un driver pour la SMEM (et la carte SD) ? () Parce que, de ce que j'ai compris, les Bfile_* sous g90 sont cassés (?)
(ps: sur l'image le gris rend trop bien ! <3 )
Shadow15510Hors ligneAdministrateurPoints: 3649 Défis: 15 Message

Citer : Posté le 28/07/2019 18:38 | #


La classe !

Juste une question, est-ce que les fonctions comme gsubimage() supporte si l'on affiche du monochrome avec ?
(\_/) -Bonne vacances. Pyon~ -
( '.' )/")
(")_(")

Fermé pour cause de vacances annuelles du vendredi 2 août au lundi 26 août !


Signature
Signature
"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
   98%
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 28/07/2019 18:56 | #


Merci à tous les deux !

Bravo à toi !! Donc gint est fini pour les monochromes ?

Quasiment yep. Il me reste des détails à ajouter, comme un IsKeyDown() ou équivalent, le retour au menu dans getkey(), des messages d'erreurs pour les exceptions et le TLB, ce genre de choses. Rien de violent

Bon après y'a plein d'extensions possibles dans la TODO list !

Vas-tu réécrire un driver pour la SMEM (et la carte SD) ? () Parce que, de ce que j'ai compris, les Bfile_* sous g90 sont cassés (?)

Cassés sur Graph 35+E II plutôt.

Je le ferai bien en lecture seule pour la SMEM, peut-être. Une autre possibilité serait d'implémenter les opérations sur les fichiers dans la RAM et ensuite d'écrire au dernier moment avec Bfile pour me débarasser des limitations de Bfile. Cette possibilité me tente pas mal. Mais pouvoir lire la SMEM moi-même aiderait. La carte SD je m'en fous un peu parce qu'aucun modèle courant n'en a.

(ps: sur l'image le gris rend trop bien ! <3 )

Attention en vrai ça clignote et même beaucoup ! Faut que je trouve de meilleures valeurs, le gris clair est trop pâle là aussi.

Shadow15510 a écrit :
Juste une question, est-ce que les fonctions comme gsubimage() supporte si l'on affiche du monochrome avec ?

Bien sûr que oui !


Ajouté le 29/07/2019 à 18:18 :
J'ai modifié les paramètres du moteur de gris avec des valeurs que j'ai trouvées et qui sont bieeen meilleures que les précédentes.

Iconvénient : le gris clair est très clair, comme sur la photo.
Avantage : ça clignote quasiment plus, en particulier le clignotement dans les zones de gris foncé est quasiment imperceptible.

Je pense que le rendu est supérieur à l'ancien moteur. Même des aplats comme sur la photo plus haut sur cette page sont complètement décents !
Shadow15510Hors ligneAdministrateurPoints: 3649 Défis: 15 Message

Citer : Posté le 30/07/2019 15:51 | #


J'ai trouvé des super valeur de gris pour Gint : 920 pour le clair et 1740 pour le foncé ! C'est vraiment stable !
(\_/) -Bonne vacances. Pyon~ -
( '.' )/")
(")_(")

Fermé pour cause de vacances annuelles du vendredi 2 août au lundi 26 août !


Signature
Signature
"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
   98%
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 30/07/2019 15:56 | #


Ah, la tâche vient de se compliquer violemment d'un coup. Ces valeurs ne sont pas bonnes du tout sur la Graph 35+E II ! Il faudra donc détecter le modèle et sélectionner des bonnes valeurs en fonction...

Voici une vidéo de ce que ça donne chez moi, et la comparaison avec les paramètres que j'ai annoncés hier :

https://linx.breizh.me/selif/ghcumqof.mp4
CaptainluigiHors ligneMembrePoints: 407 Défis: 0 Message

Citer : Posté le 30/07/2019 18:12 | #


Désolé de poster ce message : comment on fait pour l'utiliser sur Windows ?
Jouez à Mario sans arrêt sur votre Casio !

Vous voyez Chuck Norris ? Pareil , en brun
Testez tous mes programmes :
Cliquez pour découvrir
Cliquez pour recouvrir
City Heroes
Piano Casio
Micro GIMP
Merci d'avoir lu.
De rien !
Super !

M'en fout
C'est pas très bien ...
Breizh_craftHors ligneModérateurPoints: 954 Défis: 7 Message

Citer : Posté le 30/07/2019 18:57 | #


On installe Linux.

Sinon y'a ça : https://www.planet-casio.com/Fr/forums/topic13665-1-%5BTutoriel%5DCompiler-sous-Windows-avec-GCC.html
Mais peu de monde s'en sert…
Informagicien professionnel, prestidigitateur système. Tout est possible.
Shadow15510Hors ligneAdministrateurPoints: 3649 Défis: 15 Message

Citer : Posté le 30/07/2019 20:11 | #


Je me demandais si c'est possible d'afficher des images monochromes (avec dsubimage) avec le blanc en transparent ? Merci d'avance !
(\_/) -Bonne vacances. Pyon~ -
( '.' )/")
(")_(")

Fermé pour cause de vacances annuelles du vendredi 2 août au lundi 26 août !


Signature
Signature
"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
   98%
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 30/07/2019 20:11 | #


Captainluigi a écrit :
Désolé de poster ce message : comment on fait pour l'utiliser sur Windows ?

Tu peux utiliser Cygwin pour avoir un environnement Linux disponible. Sinon et si tu es genre bien chaud, on peut réfléchir ensemble à porter le fxSDK pour Windows.

Ajouté le 30/07/2019 à 20:13 :
Shadow15510 a écrit :
Je me demandais si c'est possible d'afficher des images monochromes (avec dsubimage) avec le blanc en transparent ? Merci d'avance !

Malheureusement non, la couleur est fixée.

J'ai un plan qui consiste à implémenter une nouvelle fonction (probablement dmask()) qui prendrait une image en noir et blanc uniquement, et une couleur. Cela dessinerait la couleur indiquée sur les pixels noirs et rien sur les blancs. Si j'ai bien suivi c'est ce dont tu as besoin...
Breizh_craftHors ligneModérateurPoints: 954 Défis: 7 Message

Citer : Posté le 30/07/2019 20:13 | #


Lephenixnoir a écrit :

Tu peux utiliser Cygwin.


Ou si tu as Windows 10, utiliser le Windows Subsystem for Linux. C'est plus pratique.
Informagicien professionnel, prestidigitateur système. Tout est possible.
Shadow15510Hors ligneAdministrateurPoints: 3649 Défis: 15 Message

Citer : Posté le 30/07/2019 20:14 | #


Je pense que c'est ça : j'aimerai que les pixels blanc soient transparents Te presses pas je pense avoir trouvé une parade
(\_/) -Bonne vacances. Pyon~ -
( '.' )/")
(")_(")

Fermé pour cause de vacances annuelles du vendredi 2 août au lundi 26 août !


Signature
Signature
"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
   98%
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 30/07/2019 20:15 | #


Il faut faire une version de l'image où le blanc est effectivement transparent... ou modifier un peu ton UI après.
Shadow15510Hors ligneAdministrateurPoints: 3649 Défis: 15 Message

Citer : Posté le 30/07/2019 20:17 | #


En fait j'affiche le fond de l'écran et en surimpression dessus d'autre dessins
(\_/) -Bonne vacances. Pyon~ -
( '.' )/")
(")_(")

Fermé pour cause de vacances annuelles du vendredi 2 août au lundi 26 août !


Signature
Signature
"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
   98%
LephenixnoirEn ligneAdministrateurPoints: 15231 Défis: 136 Message

Citer : Posté le 30/07/2019 20:18 | #


Si tu n'utilises jamais le blanc comme blanc, ce dont tu as besoin c'est de rendre le blanc transparent à l'intérieur de ton éditeur d'images (GIMP typiquement).
Shadow15510Hors ligneAdministrateurPoints: 3649 Défis: 15 Message

Citer : Posté le 30/07/2019 20:21 | #


Ok, je verrais ça alors ! Pour l'instant ça marche pas du tout mais j'incrimine mon code qui a lâchement profiter de mon inattention pour devenir subitement dégueulasse
(\_/) -Bonne vacances. Pyon~ -
( '.' )/")
(")_(")

Fermé pour cause de vacances annuelles du vendredi 2 août au lundi 26 août !


Signature
Signature
"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
   98%
Shadow15510Hors ligneAdministrateurPoints: 3649 Défis: 15 Message

Citer : Posté le 01/08/2019 13:54 | #


@Lephe : j'ai bien mis le blanc en couleurs transparente sur Gimp en mettant le blanc dans le canal Alpha, du coup le projet ne compile plus : il ne reconnait plus l'image avec le blanc transparent…
(\_/) -Bonne vacances. Pyon~ -
( '.' )/")
(")_(")

Fermé pour cause de vacances annuelles du vendredi 2 août au lundi 26 août !


Signature
Signature
"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
   98%
MilangHors ligneMembrePoints: 240 Défis: 0 Message

Citer : Posté le 01/08/2019 14:01 | #


Attends, tu avais juste a faire une selection par couleur non ?
Une alternative intéressante à toutes les boucles que vous avez vu jusque là :
For 1→X To 2:X-1→X:Next :E

Projet de jeu multijoueur : 1V1 3D
Shadow15510Hors ligneAdministrateurPoints: 3649 Défis: 15 Message

Citer : Posté le 01/08/2019 14:04 | #


Ben j'ai ouvert l'image en question et j'ai fait Couleur vers Alpha, et j'ai pris Blanc… Du coup le blanc est devenu transparent… C'est pas comme ça qu'il faut faire ?
(\_/) -Bonne vacances. Pyon~ -
( '.' )/")
(")_(")

Fermé pour cause de vacances annuelles du vendredi 2 août au lundi 26 août !


Signature
Signature
"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
   98%
Pages : Précédente1 ... , 15, 16, 17, 18, 19, 20, 21, 22Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 32 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