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: 13150
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



Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Dernier message de la page précédente :Posté le 12/07/2015 15:55 |
Bon, je vais pas laisser tomber cette idée.

Ayant constaté que ça ne fonctionnait pas du tout sur SH4, j'ai repris de zéro.
Pour l'instant je ne touche pas la vbr ni rien, je tente juste de mettre du code en face de ma nouvelle vbr et de voir si je peux l'exécuter.

Parce que voilà le problème : si je mets le code dans la ram classique à 0x08100000, il plante quand je l'exécute. En revanche, si je le mets dans la ram réelle, qui ne nécessite pas l'utilisation du mmu, à 0x88008000, là ça fonctionne.

Là où ça se corse c'est que Kristaba utilisait cette adresse, ce qui fonctionne bien sur SH3, mais sur SH4 quand l'add-in s'arrête il n'y a plus d'add-ins dans le menu...

Ajouté le 12/07/2015 à 16:48 :
Hmph, bingo.
Il y a les handles du filesystem en plein milieu de cette zone mémoire.
Par contre, ils sont trop loin de l'origine pour que je les écrase normalement.
----------------------------------
Rise.



Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, ... 14 | Suivante

Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 12/07/2015 16:51 | #
Rassure-moi, tu fais les tests sur l'émulateur ?
C'est un coup à bousiller sa calto ça

Si t'arrive à sortir un truc potable, je testerai bien avec Arcuz
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 12/07/2015 16:53 | #
Oh non, je ne risque rien. C'est de la RAM.

Dark storm a écrit :
Si t'arrive à sortir un truc potable, je testerai bien avec Arcuz

Tu veux vraiment qu'il soit numéro 1 celui-là, hein

Bon, alors pour donner une idée de la memory map :
→ 0x88008000 : début de la ram réelle et adresse de début de la section .data
→ 0x88008700 : fin de la section .data
→ 0x88008bec : premier handle du système

Donc a priori, c'est pas vraiment ça...

Ajouté le 12/07/2015 à 16:54 :
Et puis aucune chance que ça se passe pareil sur émulateur. Trop bas niveau pour ça, je pense.

Ajouté le 12/07/2015 à 16:55 :
Ah oui, j'ai trouvé l'adresse la liste d'add-ins que je croyais avoir écrasée : elle est à 0x88006d9c, soit avant la zone mémoire que j'utilise...

Ajouté le 12/07/2015 à 17:04 :
Bon, le problème semble reporté. Au lieu d'utiliser le 32 kio disponibles, je me contente des 12 kio de la fin et ça a l'air de passer.
Bon, de toute façon faut pas déconner, 12 kio ça fait 0x3000 octets. Sachant que l'alignement de la vbr en utilise d'office 0x700, il m'en reste grosso modo 0x2300 (plus de 8000 octets) pour des procédures additionnelles, ce qui est largement suffisant.

Ajouté le 12/07/2015 à 17:28 :
Alors, j'ai réussi à mettre en place un interrupt handler qui fait du boulot.

J'ai aussi réussi à rediriger vers l'ancienne vbr en restaurant le registre sans nettoyer la source de l'interruption (ce qui rappelle automatiquement le handler du système). Thoériquement à partir de ça je peux me démerder pour rappeler un handler du système sans trop de problèmes et de manière générale.

En toute sincérité, je trouve la SH4 bien moins énervante à manipuler que la SH3.

Mon interrupt handler ne fait rien pour l'instant, juste afficher à l'écran le contenu des registres intevt et intevt2 qui sont censés m'indiquer quelle est la source de l'interruption. Pour l'instant, ils valent encore zéro tout le temps, mais j'y travaille.

J'ai aussi un compteur qui s'incrémente à chaque interruption et je peux dire que ça va vite !

Comme je détourne la vbr et que je ne traite aucun event, pour l'instant, je ne peux pas terminer le programme (donc je reset manuellement la machine à chaque essai), du coup je ne sais pas si ça se termine proprement.
----------------------------------
Rise.
Silaxe
Hors ligne
Membre
Points: 809
Défis: 12
Message
Citer : Posté le 12/07/2015 19:26 | #
C'est cool que tu es repris le projet !
Bon courage.

Ajouté le 12/07/2015 à 19:30 :
Si tu arrives à faire un moteur de gris pour SH4 propre, je me mets au C de suite.
----------------------------------
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 12/07/2015 20:12 | #
Silaxe a écrit :
C'est cool que tu es repris le projet !
Bon courage.

Merci !

Silaxe a écrit :
Si tu arrives à faire un moteur de gris pour SH4 propre, je me mets au C de suite.

Je vais être franc... c'est bien parti. Très bien parti.
----------------------------------
Rise.
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 12/07/2015 20:22 | #
Tu veux que du monde utilise le fxSDK ? Tu le rend exclusif
Blague à part, ça serai vraiment génial
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 12/07/2015 20:27 | #
Dark storm a écrit :
Tu veux que du monde utilise le fxSDK ? Tu le rend exclusif

Ha ha mais spoile pas tout voyons

J'ai encore quelques problèmes (la machine ne détecte plus l'add-in ?), je vous tiens au courant de toute façon.

Ajouté le 12/07/2015 à 20:32 :
Lephenixnoir a écrit :
Mon interrupt handler ne fait rien pour l'instant, juste afficher à l'écran le contenu des registres intevt et intevt2 qui sont censés m'indiquer quelle est la source de l'interruption. Pour l'instant, ils valent encore zéro tout le temps, mais j'y travaille.

Ben voyons, utiliser les adresses du 7705 en bossant sur un 7724

Bon, c'est pas encore fini mais j'ai une valeur. En gros maintenant je fais un gros switch sur cette valeur et je vais commencer à avoir de quoi coder des fonctions de standard custom pour les touches ou les timers par exemple... fini fxlib de ce côté-là si ça fonctionne !

Après, j'empile le moteur de gris par-dessus, ça c'est loin, très loin d'être compliqué en comparaison...
----------------------------------
Rise.
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 12/07/2015 20:39 | #
Quand je te dis que tu ne regarde pas au bon endroit ><

Par contre, t'es obligé de traiter les cas selon le proco ? Du coup tu ferai quoi, deux versions (SH3 et SH4) ou une seule un peu plus lente (quoi que, en static ça doit aller) qui traite les deux ? Je parie sur la seconde, mais sait-on jamais
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 12/07/2015 20:43 | #
Non mais le problème c'est que c'est pas possible d'en avoir une seule. Les adresses des registres changent, les codes d'interruption aussi.

Pour l'instant ce que je fais n'est compatible qu'avec la SH4.

Btw il n'y a pas de table de codes d'interruptions directement dans la doc du SH4 donc il va falloir éplucher ça en détail... :-'
----------------------------------
Rise.
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 12/07/2015 20:44 | #
Y'a pas moyen de faire une variable qui trie les codes d'interruption en fonction de la plateforme ?
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 12/07/2015 20:59 | #
Dark storm a écrit :
Y'a pas moyen de faire une variable qui trie les codes d'interruption en fonction de la plateforme ?

Ça peut se faire mais c'est un peu tendu. Somme toute, je pense que c'est possible, mais il faut un moyen d'identifier la plateforme et comme c'est censé être une lib donc déjà précompilée... je verrai ça, mais je peux aussi avoir deux version différentes. C'est chiant mais c'est faisable.

Par contre le SH4 est magnifique ! FPU, KEYSC (keyboard scanner) intégrés, ça va être une partie de plaisir à gérer !

Ajouté le 13/07/2015 à 11:01 :
Bon, je suis en train de m'occuper de la gestion du clavier. Lorsque l'interruption vient du keyboard scanner (KEYSC), le registre intevt prend la valeur 0x0be0, donc c'est facile à détecter.

J'arrivais à arrêter les interruptions (c'est-à-dire remettre l'interrupt flag à 0) mais j'en avais plus après.

Et puis je me suis rendu compte que les 4 registres du KEYSC font tous 2 octets mais qu'ils sont séparés de 4. J'avais une structure de 4 shorts, donc ça pouvait pas fonctionner...

Maintenant, elles sont de retour, et j'arrive même plus à les arrêter
----------------------------------
Rise.
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 13/07/2015 12:21 | #
Pour avoir une idée, t'obtiens environ combien d'interruptions par seconde ? (Avec ton compteur)

Sinon, tu préviendras quand il faudra essayer sur SH3, j'aimerai tester si ça derange pas
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 13/07/2015 12:26 | #
Ben, en fait pour l'instant la même se répète à l'infini : donc je peux pas te dire, d'autant plus que je les ai toutes bloquées sauf celles de clavier... et pour cause : toute interruption doit être nettoyée par le programme : donc, si une interruption non gérée survient, elle se répètera à l'infini. Et ça, c'est pas accpetable...

Pour l'instant sur SH3, rien. Je suis d'autant plus embêté que la gestion du clavier est tout à fait différente mais je pense que je saurai écrire un moteur équivalent.

Bon, d'ailleurs j'ai encore des problèmes pour localiser les registres avec ma structure. Ils sont pas au bon endroit... cela dit c'est plutôt une bonne nouvelle parce que ça signifie que je sais où est le problème.
----------------------------------
Rise.
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 13/07/2015 12:29 | #
Pour peu que le problème vienne de là
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 13/07/2015 12:32 | #
Dark storm a écrit :
Pour peu que le problème vienne de là

Hmph, maintenant je les ai réalignés mais même problème qu'avant : une fois qu'une interruption est arrivée le reste est ignoré.

Ajouté le 13/07/2015 à 22:44 :
Bon, j'arrive définitivement pas à contrôler le KEYSC (gestionnaire de clavier)... j'ai beau appliquer à la lettre les instructions de la doc, ça ne fonctionne pas.

Je n'ai que quelques informations :
→ La première interruption n'est reçue que si j'appelle GetKey()
→ Appeler plusieurs fois GetKey() ne permet pas de récupérer plusieurs interruptions, sauf si les appels sont dans la routine de traitement de la première interruption
→ J'arrive pas du tout à modifier le registre KYCR2 (registre de contrôle 2 du module) qui est pourtant crucial

Ajouté le 16/07/2015 à 09:41 :
Bon, je laisse tomber la gestion du clavier pour l'instant.
La raison, c'est que je suis convaincu que GetKey() fait ce qu'il veut avec les registres et que je n'ai pas réussi à récupérer une interruption avec une fonction équivalente.

Je vais commencer par gérer les timers (qui devraient être plus simples), histoire de pouvoir afficher à l'écran des informations sur le clavier sans avoir à utiliser GetKey().

Ajouté le 16/07/2015 à 11:08 :
Bon, je crois que j'ai définitivement la preuve que GetKey() se fout complètement de ma figure. Deux paramètres pour refuser les interruptions du clavier et il tourne toujours...

Pour être plus formel, je pense que GetKey() configure lui-même le module de gestion du clavier pour s'assurer, par exemple, qu'une fois le soc mis en pause appuyer sur une touche le réveillera bien, ou que les valeurs renvoyées lui conviendront bien. Du coup, comme pour une raison que je ne connais pas je ne peux pas récupérer d'interruptions du clavier sans avoir appelé GetKey(), je ne contrôle rien du tout.

Notez du coup que ça veut dire que GetKey() configure correctement le clavier, lui. Sauf que je n'ai pas sa source (son symbole dans fxlib n'est qu'un bête appel de syscall), et que même si je crois savoir possible de désassembler des syscalls ce sera le foutoir.

Ajouté le 16/07/2015 à 11:43 :
Bon, alors le problème est pire que ça : impossible d'écrire une valeur dans un registre.

Je commence à me demander si j'ai les bonnes addresses. Mais c'est celles de la doc. Bon, alors au moins est-ce que c'est bien un 7724 ?

Ziqumu a écrit :
Can you confirm me that :
- SH7305 is Fx9860GII SH4
- SH7337 is Fx9860G SH3
- SH7355 is Fx9860GII SH3

Simon Lothar a écrit :
Yes.

Et merde.
----------------------------------
Rise.
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 16/07/2015 12:14 | #
Mea culpa
J'avais quand même bien dit que je n'étais pas sur
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 16/07/2015 12:16 | #
Dark storm a écrit :
Mea culpa
J'avais quand même bien dit que je n'étais pas sur

Non mais c'est pas de ta faute

Bon, vu que Sentaro21 a du bûcher dur pour sortir FTune2, qu'il précise bien être destiné au SH7305, je vais lui envoyer un mail histoire de voir s'il a la doc.
----------------------------------
Rise.
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 16/07/2015 12:18 | #
T'as ses coordonnés ? Je dois pouvoir les trouver sinon.
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 16/07/2015 12:19 | #
Il a laissé son mail dans la description de Ftune2.
----------------------------------
Rise.
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 16/07/2015 12:22 | #
Parfait alors.

Faudra d'ailleurs que je pense à uploader les infos sur le CP sur le site
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 26/07/2015 09:16 | #
Bon, j'ai du nouveau.

Le SH4 n'est sans doute pas un SH7724 mais un SH7305, or ce dernier n'existe tout simplement pas, où que je cherche. Si vraiment ça me branche je taperai au hasard dans les docs de tous les mpus recensés par TeamFX pour trouver le bon mais je lui demanderai quand même, on ne sait jamais.

D'ici là, je suis repassé sur SH3.

La zone mémoire utilisée pour la SH4 fonctionne aussi. Donc l'appel du handler est commun. J'arrive à détecter les pressions de touches mais je ne me suis pas encore penché sur la reconnaissance de la touche.

J'arrive aussi à utiliser un timer de manière tout à fait arbitraite et comme il me plaît. Ça commence à être intéressant.

Ajouté le 26/07/2015 à 16:03 :
J'ai bossé avec l'écran ensuite. ML ne fonctionnait pas. En revanche, la fonction assembleur de kucalc dans revolution-fx, elle, fonctionnait. (Et dire qu'il disait à une époque, « it's already optimized since it's in pure assembleur », il auraît pu optimiser un peu l'assembleur quand même, un compilateur aurait fait presque aussi bien.) Du coup je l'ai réécrite à ma façon (c'est-à-dire plus linéaire et donc compréhensible) et j'arrive à manipuler l'écran.

J'ai mis mes timers, les valeurs de Kristaba sont pas géniales. Du coup je vais publier un add-in de test bientôt. Là, tout de suite, j'ai un dragon en 4 couleurs sous les yeux, c'est l'extase. (voyez le chat s'il n'est pas encore trop tard, Kirafi peut témoigner que je ne mens pas)
----------------------------------
Rise.

Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, ... 14 | Suivante

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 25 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