Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » gint : un noyau pour développer des add-ins
Lephenixnoir Hors ligne Administrateur Points: 20316 Défis: 143 Message

gint : un noyau pour développer des add-ins

Posté le 20/02/2015 17:30

Les SDKs classiques pour écrire des add-ins sont le fx-9860G SDK de Casio avec fxlib (pour Graph monochrome) et le PrizmSDK avec libfxcg (pour Prizm et Graph 90+E). Voici mon alternative : le fxSDK avec gint, pour toutes les plateformes.

Contrairement à fxlib et libfxcg, qui appellent les fonctions de l'OS pour faire leur travail, gint est un noyau indépendant de l'OS qui exploite seul le matériel et le met à disposition de votre add-in. Il vous offre plus de finesse sur le contrôle du matériel, notamment le clavier, l'écran et les horloges, de meilleurs performances sur le dessin, les drivers et la gestion de interruptions, et des choses entièrement nouvelles comme le moteur de gris.

Toutes les sources de gint sont publiques et accessibles sur la forge de Planète Casio :

» Dépôt Gitea Lephenixnoir/gint «

Voici plus précisément ce que gint vous offre de nouveau :

• Un contrôle détaillé du clavier pour les jeux, parfait pour les combos !
• Des timers avec une précision de 60 ns, d'autres à 30 µs
• Toutes vos images converties automatiquement sans code à copier (plus de Sprite Coder)
• Des polices personnalisées
• Des fonctions de dessin, d'images et de texte fulgurantes et optimisées la main
• Mesurer les performance de votre code à la microseconde près (avec libprof)
• Le contrôle du matériel et des interruptions
• Plein de petites choses pratiques comme dprint(1, 1, "x=%d", x)

• (Graph monochrome) Un moteur de gris pour faire des jeux en 4 couleurs !
• (Graph monochrome) La compatibilité SH3 et SH4, avec le même fichier g1a.

• (Graph 90+E) Une nouvelle police de texte, plus lisible et économe en espace
• (Graph 90+E) Le dessin en plein écran, sans les bordures blanches et la barre de statut !
• (Graph 90+E) Un driver écran capable de triple-buffering

Le coût de tout ceci, c'est que vous avez une copie du code de gint dans votre add-in. Cela prend environ 20 ko de place (selon la quantité de fonctions que vous utilisez), soit à peu près comme le sprintf() de fxlib qui fait 18 ko !

Et voici quelques photos et captures d'écran !





Tester gint sur votre machine

La fin du portage vers la Graph 90+E signera la sortie de gint v2. L'add-in de test de l'application est désormais gintctl :

» Dépôt Gitea Lephenixnoir/gintctl «

En plus de tester les fonctionnalités de gint, cet add-in contient quelques outils permettant d'inspecter la machine, la mémoire, et les registres. Je le développe au fur et à mesure, et je posterai un protocole de test complet avec la sortie de la v2 !

Utiliser gint pour développer des add-ins

Normalement, vous avez besoin du fxSDK pour développer avec gint. Le fxSDK est compatible avec Linux et Mac OS, et on peut réfléchir à un portage sous Windows s'il y a vraiment des intéressés. Il faut l'installer en premier (et avoir un cross-compilateur GCC).

La procédure de compilation et d'installation de gint est décrite sur le README du dépôt, c'est du configure - make tout à fait banal.

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 que vous pouvez consulter en ligne, sur votre copie locale du dépôt, ou dans les dossiers d'installation du compilateur.

Obtenir la dernière version de gint après une mise à jour

Je pousse régulièrement des mises à jour de gint sur le dépôt du projet. Pour les télécharger, tapez git pull, puis recompilez et réinstallez gint avec make et make install.

Changelog et infos de migration

Ci-dessous se trouve la liste des posts indiquant les nouvelles versions de gint, et les instructions pour modifier vos add-ins quand c'est nécessaire.

gint 2.4.0 (27 Avril 2021) — Api GINT_CALL() pour les callbacks
gint 2.3.1 (2 Février 2021)
gint 2.3.0 (29 Janvier 2021)
gint 2.2.1 (12 Janvier 2021)
gint 2.2.0 (11 Janvier 2021)
gint 2.1.1 (16 Septembre 2020)
gint 2.1.0 (21 Août 2020) — Polices UnicodeNouvelle API du moteur de gris
gint 2.0.3-beta (10 Juillet 2020) — Modifications de l'API timer
gint 2.0.2-beta (17 Juin 2020)


Anecdotes et bugs pétés

Ô amateurs de bas niveau, j'espère que vous ne ferez pas les mêmes erreurs que moi.

Toujours spécifier les flags dans .section en assembleur
Ne pas oublier des registres lors de la sauvegarde du contexte durant une interruption
Aligner correctement les adresses des sections dans le linker script
Toujours spécifier l'alignement des structures packed (message du 01/03/2017)

Fichier joint


Précédente 1, 2, 3 ··· 10 ··· 20 ··· 30 ··· 40, 41, 42, 43, 44, 45, 46 ··· 50 ··· 58, 59, 60 Suivante
Kbd2 Hors ligne Membre Points: 264 Défis: 0 Message

Citer : Posté le 15/07/2020 10:09 | # | Fichier joint


The command-line looks normal - "fxconv --bopti-image assets-fx/img/Untitled.png -o build-fx/assets/img/Untitled.png.o --fx --toolchain=sh-elf name:img_Untitled" (Untitled.png is the test image)

Ajouté le 15/07/2020 à 10:42 :
Looks like it only happens when you have too many transparent pixels?

Ajouté le 15/07/2020 à 11:25 :
I've been experimenting with it and it's really inconsistent. A fully transparent image will be drawn fine, but put a few black pixels in and the whole thing turns black. Some other sprites have no problems with transparency. This is on the latest commit of the dev branch. dtext and dprint also appears to be broken, when I build the default addin it hangs the calc
Lephenixnoir Hors ligne Administrateur Points: 20316 Défis: 143 Message

Citer : Posté le 15/07/2020 12:25 | #


Okay, I'll check that ASAP. The prototypes of dtext() and dprint() have been updated but I only pushed the new default program a few days later so I believe it's unrelated. My first thoughts is the quantification process used in fxconv, I'll keep you up-to-date.
Kbd2 Hors ligne Membre Points: 264 Défis: 0 Message

Citer : Posté le 15/07/2020 14:07 | #


Big problem. I switched back to the master branch and I'm still getting the bugs - text still won't show, even though it worked fine before on the master branch and I definitely rebuilt gint. Same with the transparency.

At this point I think it might be a problem on my end, but I don't see what it could be. I rebuilt gint and fxSDK, and the fx9860g.ld and libgint-fx.a files were copied over, as well as all the includes.

I can rebuild the whole toolchain again tomorrow if I have to, it'd just be a bit tedious.
Lephenixnoir Hors ligne Administrateur Points: 20316 Défis: 143 Message

Citer : Posté le 15/07/2020 19:14 | #


I don't think the toolchain is at fault here, don't bother rebuilding it for now. When switching to the master branch, you need to be careful to install a corresponding version of the fxSDK, especially because fxconv changed a few times since then. I try to keep the repos tidy but to be entirely honest it's pretty hard to bisect things currently. ^^"

If you can, let's try to debug things out of the latest branches to eliminate a potential source of bugs.

A fully transparent image will be drawn fine, but put a few black pixels in and the whole thing turns black.

I can't reproduce it right now. I've tried several images including the sprite from your previous post (or at least something close to it since I had to guess the transparent parts), but they seem to work.

Have you rebuilt the whole project each time you changed the library or fxSDK version (make -B)? If so, could you provide a buggy image and try it in a new fxSDK/gint project on the latest commit?
Kbd2 Hors ligne Membre Points: 264 Défis: 0 Message

Citer : Posté le 16/07/2020 00:44 | # | Fichier joint


I got text working again (not sure how, switching back to dev seemed to do something), but still have the buggy sprites. I'll attach a zip file with a test project including the buggy sprite, g1a, and example screenshot. All of this is on the latest branches.

I guess I'll just have to use opaque sprites for now and hope nothing has to overlap

Ajouté le 16/07/2020 à 13:06 :
Maybe if you built the test addin, verified the transparency works fine with you, then compared the two player.png.o files we could see if it's fxconv or my image editor that's faulty since they should be the same
Lephenixnoir Hors ligne Administrateur Points: 20316 Défis: 143 Message

Citer : Posté le 16/07/2020 15:37 | #


I can reproduce. It works fine if the image is not indexed. I think this is due to the way I extract the alpha channel to first make every pixel either opaque or transparent. In indexed images, there might not be an alpha channel.

Ajouté le 16/07/2020 à 15:43 :
Added a preliminary conversion of indexed images to RGBA format to make the alpha channel appear in fxconv's quantize() function. This solved the problem on your example, so the image should work. See 66d88be.

I suppose the inconsistencies you found were related to how your image editing software and the Pillow library encoded/decoded the palette based on the available pixels.
Dark storm En ligne Labélisateur Points: 11501 Défis: 176 Message

Citer : Posté le 16/07/2020 16:27 | #


It does not surprise me, I found the bug working on a personnal project. It is not so common to use indexed colors, so I exported the images in RGB8 mode.

Glad to see you fixed the bug anyway
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Kbd2 Hors ligne Membre Points: 264 Défis: 0 Message

Citer : Posté le 16/07/2020 16:49 | #


I was using paint.net to edit the images, and I'm pretty sure it was saving them as 24-bit indexed automatically. I manually changed the bit depth to 32 and it solved the problem, though I'm glad indexed images can be processed now.

Back to my project I guess, really happy we could figure this out
Lephenixnoir Hors ligne Administrateur Points: 20316 Défis: 143 Message

Citer : Posté le 16/07/2020 17:01 | #


You're welcome! I'm happy that my tools are growing more stable and versatile by the day.
Lephenixnoir Hors ligne Administrateur Points: 20316 Défis: 143 Message

Citer : Posté le 17/07/2020 20:30 | # | Fichier joint


Comme il me manquait les tests pour la RTC dans gintctl pour valider l'histoire du spread spectrum, j'en ai profité pour faire l'horloge qui manquait depuis un bon moment. Ça viendra remplacer mon Horloge SH4 ultimement, parce que c'est quand même mieux foutu.

Elle marche aussi sur Graph 90 bien sûr, c'est juste très lent de manipuler la Graph 90 (temps de transfert élevé et temps de sauvegarde du screen élevé) donc j'ai pris la mono.



Ajouté le 17/07/2020 à 20:43 :
Pendant que j'y suis j'ai refait le test sur la vitesse de traitement des interruptions. Le setup est simple, on demande 1 million d'interruptions par seconde et on regarde combien on arrive à en caser.

Sur la Graph mono sans overclock, gint traite environ 110'000 interruptions par seconde. Ça a un peu baissé surtout depuis que j'ai renforcé la sécurité de la chose lorsqu'on fait des callbacks, mais ça reste pas mal.

Sur la Graph 90 sans overclock, comme le processeur est cadencé plus haut de base, ça donne un peu plus de 300'000 interruptions par seconde. Et en poussant l'overclock, on arrive à en obtenir 550'000. Ça veut dire qu'un timer trivial peut être exécuté toutes les 2 µs si ça nous chante ! xD

Ajouté le 20/07/2020 à 21:01 :
Bien donc ces derniers jours j'ai fait d'autres améliorations discrètes : j'ai ajouté la gestion du spread spectrum sur Graph 90 (une broutille qui permet de corriger les estimations de fréquence des timers entre autres) et j'ai ajouté une fonction gint_setrestart() qui remplace la fin de l'add-in par un appel à gint_osmenu() pour qu'on puisse retourner dans l'add-in après la fin de main(), avec cependant les quelques contraintes inhérentes à gint_osmenu().

Ce qui est important c'est que gint rentre maintenant en phase de release. Je vais très rapidement publier les commits qui suppriment les fonctionnalités qui doivent disparaître avec la v2.1 (par exemple image_t a été renommé en bopti_image_t mais l'alias a été laissé, je vais maintenant le supprimer).

Après ces modifications on sera sur le premier release candidate, une sorte de bêta de dernière instance pour les tous derniers bugs à corriger avant la release. Vous pouvez voir ça comme gint v2.1, celui que je hype depuis des mois. :3

Je vais passer quelques temps hors de l'ajout de fonctionnalité (mais je corrigerai toujours les bugs) pour réécrire les topics, continuer les tutoriels, faire de la documentation, et parler un peu du projet à quelques endroits où je ne l'ai pas encore fait.

Je vous en dirait plus au fur et à mesure dans les RDP ou sur ce topic. Merci à toutes les personnes qui utilisent gint, j'espère que la toute nouvelle version vous sera encore plus utile. o/
Kirafi Hors ligne Membre Points: 2172 Défis: 10 Message

Citer : Posté le 21/07/2020 09:35 | #


A quand un séance de présentation de tout ce travail au DevFest ? Honnêtement je suis sûr que tu pourrais trouver ta place dans ce genre d'événement pour y présenter le développement sur Casio moderne avec gint .
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir Hors ligne Administrateur Points: 20316 Défis: 143 Message

Citer : Posté le 21/07/2020 09:42 | #


Ha ha merci ! Je doute que ça intéresse vraiment, pour être honnête. Mais c'est gentil de l'avoir imaginé
Kirafi Hors ligne Membre Points: 2172 Défis: 10 Message

Citer : Posté le 21/07/2020 10:31 | #


J'ai assisté à une conférence sur comment faire de la musique avec des lignes de codes, ce que je veux dire c'est qu'il y a pas mal de trucs de hypster informaticien, je pense que montrer qu'on peut faire des jeux en niveau de gris sur monochrome pourrait être intéressant, genre un truc rapide de 30 minutes où tu présenterais les démarche de reverse engineering et tout .
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Dark storm En ligne Labélisateur Points: 11501 Défis: 176 Message

Citer : Posté le 21/07/2020 10:33 | #


Je suis pas sûr qu'en 30 minutes t'arrive à présenter ne serait-ce que les démarches
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Kirafi Hors ligne Membre Points: 2172 Défis: 10 Message

Citer : Posté le 21/07/2020 10:35 | #


Non mais expliquer rapidement que t'as désassemblé le bazar, analysé chaque morceau avec une communauté de geeks, puis recréé une librairie plus puissante que ce qu'on espérait, puis là tu montre des exemple de ce qui est faisable .
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir Hors ligne Administrateur Points: 20316 Défis: 143 Message

Citer : Posté le 21/08/2020 17:43 | #


Puisque personne n'a fait remonter de bug sur le release candidate de la version 2.1 de gint (possiblement parce que presque personne ne code en ce moment), j'ai poussé les tags... et mis à jour la branche master, ce qui est constitue une release officielle d'une nouvelle version majeure de gint.

On ne dirait pas comme ça, mais ça fait maintenant plus de 5 ans que cette idée a commencé, et ça fait immensément plaisir de voir que non seulement le code tient toujours et marche après tout ce temps, mais qu'en plus c'est utilisé par des vrais projets. Merci beaucoup pour votre soutien ! <3

Avec la release de gint 2, quasiment tous les modèles qu'on croise régulièrement sont supportés !

• Les vieilles Graph 35+ (blanches) SH3 sont supportées ;
• Les Graph 35+ (blanches), 35+ USB, 35+E, 35+E II sont supportées ;
• Les Graph 75, 75+, 75+E sont supportées ;
• Les Prizm, fx-CG 20, Graph 90+E et fx-CG 50 sont supportées ;
• L'émulateur Graph 35+E II et l'émulateur fx-CG 50/Graph 90+E sont supportés.

Les modèles qui restent (Graph 85, 95 SD, fx-CG 10) n'ont jamais été testés, si vous en avez un je suis preneur. Il reste les ClassPad dont le format est très différent et qui ne sont pas du tout supportés.

Bien sûr, tout cela va avec les fonctionnalités importantes qui ont été ajoutées depuis le première release, et qui ont complètement transformé gint en un outil bien supérieur. Il y en a trop pour toutes les citer, mais on peut notamment penser au retour au menu et système de fichiers stables, à l'ajout du TLB dynamique (pour les add-ins de grande taille) et du DMA (pour l'écran de la Graph 90+E), et au modèle du clavier qui unifie getkey() et keydown() comme jamais avant.

Bien sûr il reste plein de choses qu'on peut ajouter, mais pour l'instant je voudrais me concentrer sur la documentation et les tutoriels de gint, et coder aussi des jeux pour moi parce que ça fait un moment que j'écris quasiment plus que du code noyau !

J'ai d'ailleurs publié aujourd'hui quelque chose d'un peu nouveau sur les tutoriels d'utilisation de gint. J'ai repris le tutoriel existant et l'ai étendu en modifiant le concept du jeu pour simplifier le développement et la rédaction, puis j'ai publié une deuxième partie. Ça fait un moment que je garde tout ça au chaud. Les nouveaux tutoriels prennent plus le temps d'expliquer le fonctionnement de gint et du fxSDK pour vous armer face aux problèmes communs. Jetez-y un oeil !

Nouvelle version majeure : gint 2.1.0

Nouvelles fonctionnalités (depuis la dernière bêta) :
• Support des polices Unicode. [#177494]
• Ajouté des fonctions pour distinguer les touches F1..F6 et 0..9 dans <gint/keyboard.h>.
• Ajouté le contrôle du spread spectrum sur Graph 90+E (une technique de réduction de bruit électromagnétique mais qui change la fréquence des horloges)
• Ajouté une option pour revenir dans l'add-in après l'avoir quitté via gint_osmenu().
• Ajouté un filtre de répétitions à getkey_opt() pour contrôler finement les répétitions de toutes les touches.

Changements :
• Intégré l'API du moteur de gris dans le module de dessin. [#177478]
• Ajouté des valeurs par défaut raisonnable au moteur de gris sur tous les modèles.
• Modifié drastiquement le système de gestion d'interruptions sur SH3 et la méthode générale d'appel de callbacks pour supporter les interruptions successives et augmenter la stabilité sur tous les modèles.
• Étendu le timer RTC pour utiliser un format similaire au récent changement de timer_setup().
• Grosses améliorations de performances sur le dessin de petites images avec dsubimage() sur mono.
• Améliorations sur la vitesse de memcpy() et memset() à peu près partout.

Fonctionnalités supprimées :
• Supprimé l'alias image_t pour le type bopti_image_t.
• Supprimé les alias de fonctions g*() laissés après la modification de l'API du moteur de gris.
• Supprimé la branche compat du dépôt.
Dark storm En ligne Labélisateur Points: 11501 Défis: 176 Message

Citer : Posté le 22/08/2020 17:44 | #


Super tout ça ! Je mets à jour le paquet sur l'AUR dès que je rentre chez moi. Ça sera déployé chez tous les utilisateurs dans la foulée
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Massena Hors ligne Rédacteur Points: 1832 Défis: 11 Message

Citer : Posté le 23/08/2020 08:43 | #


Bravo Lephenixnoir pour ce superbe travail ! Gint a l'air d'être un outil vraiment incroyable, qui mériterait d'être légèrement mis plus en avant, et qui j'espère permettra la conception d'excellent jeux.
Je rêverais apprendre à l'utiliser (mais maintenant je n'ai plus d'excuses avec l'accès à AUR, les tutoriels et la dernière version stable...).
Il est prévu d'entamer une nouvelle version ou tu fais une pause pour le moment ?
Lephenixnoir Hors ligne Administrateur Points: 20316 Défis: 143 Message

Citer : Posté le 23/08/2020 09:28 | #


Merci beaucoup ! Je vais faire un tour dans la RDP d'aujourd'hui et je ferai sans doute un article en page d'accueil un peu plus tard (quand il y aura de la place dans les publications).

Je rêverais apprendre à l'utiliser (...)

Tu es au bon endroit !

Il est prévu d'entamer une nouvelle version ou tu fais une pause pour le moment ?

Je n'ai pas du tout prévu de nouvelle version majeure ; le but c'est de rester le plus longtemps possible sur celle-ci, ce qui inclut aussi la stabilité de l'API (c'est-à-dire que quand une nouvelle version sort, en principe vous devez pouvoir recompiler les programmes sans les modifier).

Il y a des extensions prévues (DSP, accès à d'autres zones de RAM, communication série/USB si on y arrive...), mais ce qui existe ne devrait plus trop changer.

Dans tous les cas, je vais ralentir un peu l'évolution de gint et plutôt écrire des tutoriels et de la documentation ou coder des petits jeux. Je pense que je vais revisiter quelques-uns de mes programmes existants
Dark storm En ligne Labélisateur Points: 11501 Défis: 176 Message

Citer : Posté le 23/08/2020 18:30 | #


Le paquet AUR est à jour sur le commit 4288dc27d9. o/
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Massena Hors ligne Rédacteur Points: 1832 Défis: 11 Message

Citer : Posté le 23/08/2020 18:51 | #


Yes, je me procure gint demain.
Précédente 1, 2, 3 ··· 10 ··· 20 ··· 30 ··· 40, 41, 42, 43, 44, 45, 46 ··· 50 ··· 58, 59, 60 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

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