Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Bibliothèque standard pour GCC
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1242 Défis: 54 Message

Bibliothèque standard pour GCC

Posté le 01/06/2014 19:50

Comme vous l'avez peut-être remarqué, LePhenixNoir nous a gratifié d'un tuto accessible afin de mettre en place GCC et donc une nouvelle manière de compiler des add-ins pour nos Casios.

Afin d'ouvrir le développement au libre, une bibliothèque C standard à vu le jour et avance petit à petit.
Un dépôt git est disponible ici.
L'objectif est, au final, d'avoir une bibliothèque dont on connaisse le contenu, qui soit maintenable et qui remplisse le rôle d'une librairie C standard à l'échelle de nos calculatrices, compatible SH4 et SH3, enfin un truc bien quoi !

Le code étant écrit par des membres de PC, depuis rien, le choix de la licence est ouvert, de mon côté, comme pour LePhenixNoir, placer celui-ci dans le domaine publique paraît intéressant, reste à voir avec les autres (notamment Dark Storm pour le moment ).
Message initial
Cliquer pour enrouler
Seulement, si le support de l'architecture SuperH est relativment "natif" pour GCC, le support des librairies et des parties spécifique aux calculatrices Casio l'est beaucoup moins. Ainsi, si il est possible de récupérer les fonctions correspondants à "fxlib.h" dans un format utilisable par GCC, la librairie C standard fournie par casio dans le SDK ne semble pas aussi simple à récupérer (voire irrécupérable ? ).

Le plus simple est je pense de "réecrire" une bibliothèque standard C.
A mon avis, il pourrait aussi être intéressant d'essayer de s'affranchir de la bibliothèque "fxlib" fournie par Casio, toujours en la réecrivant (c'est à dire simplement refaire les appels de Syscalls pour la plupart des fonctions, "fxlib" étant majoritairement basée sur les Syscalls), mais en travaillant sur certains points et avoir d'emblée une compatibilité SH4 par exemple. On "enlèverait" aussi la plupart du code propriétaire de Casio (bien qu'il reste les syscalls, mais bon... ).
Ce qui concerne "fxlib" n'est que mon point de vue étant donné qu'on peut très bien conserver le fichier de Casio, j'amorce juste une réflexion à ce niveau là ;).

Quoi qu'il en soit, ce topic est là pour permettre de réfléchir sur le projet ,c'est à dire la réimplémentation d'une bibliothèque C à peu près standard (en s'appuyant sur les syscalls déjà existants, va faloir sortir la doc ) pour fonctionner sur GCC de manière correcte, voire plus intéressante que sur le SDK de Casio (pourquoi pas implémenter des fopen(...) par exemple, là encore, simple suggestion à cogiter ).
C'est aussi pour voir si il y a des gens qui seraient intéressés pour travailler là dessus, et voir vos idées sur la manière de travailler dessus.

Je pense qu'à la longue, un dépot git (ou autre) sur gitorious ou quelque chose du même style pourrait servir, qu'en dites vous ? Enfin, le projet semble intéressant, d'autant plus qu'un GCC bien fonctionnel pour compiler des add-ins, ça serait cool ! :D.
Donc n'hésitez pas à mettre vos idées pour commencer et avancer !
[/spoiler]


Précédente 1, 2, 3, 4, 5, 6, 7, 8 Suivante
Lephenixnoir En ligne Administrateur Points: 24229 Défis: 170 Message

Citer : Posté le 14/06/2014 14:05 | #


Au fait, mon identifiant gitorious est "LePhenixNoir".

Sinon, je n'ai pas bien compris ce que tu cherches à faire...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 14/06/2014 14:07 | #


Le mien est "Darkyz"
Ce qui est cool avec Linux, c'est que le Git est bien plus facile à utiliser que sous Windows
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1242 Défis: 54 Message

Citer : Posté le 14/06/2014 14:08 | #


Par rapport à quoi ?
Si tu parles de l'évocation plus haut d'un simili d'émulateur, ça n'est pas très important, juste moi qui avait une idée en écrivant, je détaillerai autre part (sur le tchat par exemple) si tu veux car un peu (beaucoup) HS ^^.
Lephenixnoir En ligne Administrateur Points: 24229 Défis: 170 Message

Citer : Posté le 14/06/2014 14:12 | #


Ok, tant pis.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1242 Défis: 54 Message

Citer : Posté le 14/06/2014 16:35 | #


Je vous ai mis admin du dépôt, c'est bon :). N'hésitez pas à modifier ce qui a déjà été fait, c'est juste une base.

Ajouté le 15/06/2014 à 01:15 :
J'ai (un tout petit) peu avancé ce soir, je n'ai pas importé les fonctions de manipulations des chaînes de LePhenixNoir, je ne sais pas si tu veux les ajouter toi ou...
Ensuite, on parlait de conserver fxlib, mais notamment pour les I/O, vous pensez qu'il est préférable de conserver les syscalls (ou du moins leur usage) comme on l'avait dans fxlib, ou plutôt introduire quelque chose qui ressemblerait plus à du C standard, avec une sorte de gestion des flux, un peu à l'image de la LibFxCG qui, bien que basée sur les syscall propose une gestion des fichiers avec des fopen() / fwrite() et confrères, mais aussi une gestion assez satisfaisant du flux stdout par exemple ? Je pense que c'est réalisable et ça se rapprocherait un peu de "Memory" par exemple, dans le principe de proposer des fonctions plus simple à utiliser, et standards si possibles, mais je ne sais pas ce que vous en pensez.
Ce qui suit est purement facultatif et sans rapport trop direct (ainsi qu'un peu lourd dans l'écriture peut-être), je voulais faire un truc plus court, mais je n'ai pas trop vu les lignes passer :whistle:...

[Semi-HS]

Finalement, (parceque je n'ai que ça à faire à l'instant ou j'écris ), je vais détailler brièvement l'idée derrière ce "simili d'émulateur" évoqué plus haut. En fait, si on arrive à avoir quelque chose de bien standard au niveau de la LibC (notemment pour les I/O), et que par la même on propose une fxlib "maison" qui combinerait peut-être plusieurs libs du site (ML, LibText) (juste une idée pour ça, il faut voir avec les auteurs bien entendus ), il serait je pense envisageable d'obtenir un environnement d'éxécution, pour un code à destination d'une Casio, sur PC.
Je m'explique : au moment de compiler, au lieu d'appeler sh3eb-elf-gcc, on pourrait utiliser gcc en linkant une bibliothèque standard pour pc à la place de celle que l'on réalise actuellement (d'où l'interêt d'avoir quelque chose d'assez standard pour la bibliothèque qui fait l'objet de ce topic de mon point de vue), ainsi qu'une bibliothèque "émulant" en quelque sorte fxlib.h (ou celle que l'on ferait), c'est à dire capable "juste" d'afficher une VRAM (similaire à celle de la Casio) à l'écran (si toute les fonctions de dessin utilisent un "get_vram_adress" ça n'est pas très compliqué à mettre en place) ou de prendre en charge des fonctions comme IsKeyDown() en se basant sur diverses bibliothèques pour PC (SDL par exemple, enfin, je ne suis pas vraiment bon en tout ce qui concerne interface graphique / développement "haut-niveau" (je veux dire gestion du clavier ou autre), donc encore moins à même de savoir ce qui est le plus adapté à ce genre de problèmatique) par exemple.

Je ne sais pas si je suis très clair pour le principe global (probablement non, il est tard, et des phrases longues avec parenthèses imbriquées ne doivent pas très bien passer ), mais en gros on aurait "deux compilations" possibles : une à destination de la casio, en linkant les bibliothèques appropriées, et l'une afin de produire un binaire éxécutable sur PC avec des bibliothèques de substitutions, sans toucher au code initial vu que des bibliothèques différentes prendraient en charge les mêmes fonctions, mais l'une pour la calto, et l'autre pour PC.

Certes, les inconvénients par rapport à un "vrai émulateur" existeraient (et seraient nombreux peut être ?), c'est à dire, abscence de tout développement à plus bas niveau (pas de gestion d'un quelquonque hardware, ou d'ASM SuperH par exemple) que les fonctions proposées (si elles sont complètes pour développer un jeu par exemple, ça peut ne pas poser problème), ou un debug peut-être pas représentatif (vitesse d'éxécution, erreurs spécifiques à Casio...).
Mais je pense que les avantages par rapport à un "vrai émulateur" pourraient aussi laisser envisager sa conception : déjà, la masse de travail serait bien moindre par rapport à celle nécessitée par la mise en place de l'émulation complète du matériel d'une Casio, le debug serait peut-être plus simple, on pourrait profiter d'outils intéressants (profilage de code par exemple ), enfin voilà.

Peut être n'est-ce qu'une divagation d'un soir et une idée peu réalisable, mais ça peut constituer être une alternative à un vrai émulateur et une piste de réflexion vers l'aboutissement d'un SDK "libre". Si vous n'avez rien compris, enfin, pas trop compris le sens / intêret de ce que j'ai raconté, dites le moi, j'ai conscience d'être relativement rapidement flou dans mes explications :sry:, j'essaierai de reformuler et de m'améliorer sur ce point justement :).
[/Semi-HS]

Voilà quoi qu'il en soit, cela ne serait pas pour tout de suite de toute manière (en ce qui me concerne, si ça branche quelqu'un de réfléchir / bosser dessus à côté, qu'il ne se gène pas ), et je me concentre d'abord sur le bibliothèque pour GCC.
Lephenixnoir En ligne Administrateur Points: 24229 Défis: 170 Message

Citer : Posté le 15/06/2014 07:12 | #


Quelques choses à rajouter.
→ D'abord, il est souhaitable d'intégrer des libs telles que ML dans libc, mais attention à la mémoire utilisée. Peut-être faudrait-il la découper et laisser le programmeur n'intégrer au projet que les sections qui l'intéressent.
→ Il n'y a pas de problème avec mes libs, elles sont parafaitement libres d'utilisation, mais necéssitent que je les optimise.
→ Faire fonctionner l'émulateur à partir d'une compilation d'un autre gcc me paraît une excellente idée. De plus, des libs comme Qt ou Gtk ne seraient pas adaptées, mais la SDL est au contraire faite pour ça. Pour ma part, j'ai déjà réalisé quelques programmes de 3D avec la SDL 2.0, je pourrai donc vous aider sur ce coup-là (en plus il y a déjà une fonction line !).
→ Je mettrai mes modifications sur le git, mais puisqu'elles sont postées là tu peux le faire aussi. En revanche, je pense qu'on ne devrait avoir qu'une source par lib (ou peu, j'entends) car sinon on aura des dizaines de fichiers, et il y a plus de 10 libs à traiter.
→ Je verrais bien la gestion des flux avec memory -- ou Bfile, plus puissant car évite des call et rts, mais moins bon à haut niveau --, mais cela ne peut se faire qu'en C++, et il faudra donc combler le manque de la STL, ou au moins des String et Vector. J'avais ouvert un topic à ce sujet, je pense que c'est faisable.

→ Quant à notre manière de travailler, puisque nous sommes au moins 3-4, je propose la chose suivante : lorsqu'un de nous propose une fonction qu'il a eu à travailler, chaque autre à son tour voit s'il peut l'optimiser en vitesse d'exéution, et si non dépose un commentaire qui lui est propre, défini pour chacun d'entre nous. S'il le peut, il réécrit la fonction, vérifie bien sûr qu'elle fonctionne et qu'elle est plus rapide et, dans la cas échéant, envoie sa version et efface les commentaires existants. Ainsi lorsque les marques de tous les programmeurs seront apposées sur une fonction, elle sera optimisée au possible ; ce qui se doit d'être fait pour une telle libc.

Bref, je retourne continuer les fonctions de string, je pense qu'aucune ne me posera de problème réel (ce ne sont dans l'ensemble que des pointeurs simples) donc inutile de vous en occuper, je mettrai tout ça sur le git.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 15/06/2014 10:41 | #


Pour répondre et ajouter deux trois trucs aux points abordés

-> Concernant la mémoire, j'ai fait des tests de compilation, l'addin de base fait 1596o, en compilant avec TouchLib, il monte à 6040o, avec MonochromeLib en mode DEFINE_ALL à 26920o. Donc oui, sur le principe je suis pour intégrer des fonctions utilisées assez souvent, mais il faut faire attention à la taille de ces fonctions.
-> Pour mes libs, servez-vous, mais puisqu'elle ont vocation à être partagées, faut que je les optimise un peu plus.
-> Il me semble que Ziqumu avait réussi à faire un début d'émulauteur pour PC, fonctionnel, mais le problème restait la gestion des entrées claviers : il a affiché un écran, l'OS lui a demandé d'appuyer sur F1 pour initialiser, mais il n'a pas fait la gestion du clavier
-> Je confirme, il vaut mieux une source par lib, en .c, et si besoin avec des extern __ASM__ si y'a besoin d'assembleur. Surtout que GCC supporte assez bien le mélange C/ASM
-> Pour ce qui est de C++, je vous laisse faire, c'est pas mon domaine de prédilection
-> Il faudrait faire plusieurs branches sur le git (c'est fait pour ça d'ailleurs) :
-> Master, on y met les versions finales des fonctions
-> Optimisation, sur laquelle chacun peut optimiser encore un peu les fonctions
-> Debug, pour créer et debugguer les nouvelles fonctions.

Y'a-t-il un aspect de stdlib que je pourrais commencer sans vous marcher sur les pieds ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24229 Défis: 170 Message

Citer : Posté le 15/06/2014 10:47 | #


Tu peux je pense, facilement commencer par ctype.
Je vous laisse gérer les branches.
Sinon, je suis d'accord, sauf que l'asm c'est plus souvent asm(";code asm"); avec gcc.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 15/06/2014 10:48 | #


Lephenixnoir a écrit :
Sinon, je suis d'accord, sauf que l'asm c'est plus souvent asm(";code asm"); avec gcc.

OSEF, t'avais compris l'idée
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1242 Défis: 54 Message

Citer : Posté le 15/06/2014 11:30 | #


Je suis bien d'accord en fait pour la diminution des fichiers sources, c'est vrai que ça allait finir par faire beaucoup ^^. Bien que peut être aura t-on des (groupes de) fonctions assez grosses à moment donné (je pense notamment au sprintf / qsort ), et il sera peut-être bon de les séparer, mais ça limitera quand même le nombre de sources.
Pour ce qui est de l'idée de LePhenixNoir pour le travail à plusieurs (avec les commentaires par rapport à l'optimisation), je suis complètement pour, et, associé avec les branches, ça peut être efficace. D'ailleurs il va falloir que je me redocumente sur celles ci, je n'en ai jamais utilisé qu'avec un dépôt local, et de manière assez basique .
Pareil pour le build system, si vous le trouvez trop "bordélique" n'hésitez pas à changer, modifier ;).

Lephenixnoir En ligne Administrateur Points: 24229 Défis: 170 Message

Citer : Posté le 15/06/2014 11:36 | #


Je vais bientôt pouvoir poster une première version de string, fonctionnelle.
Est-ce utile de rajouter les fonctions non supportées qu'il est possible de coder ?

De plus, je pense utile de faire :
- soit une version réduite de chaque lib (pas la moitié des fonctions de string sont couramment utilisées) ;
- soit un système comme ML pour économiser la mémoire ;
- soit une compilation intelligente qui ne compile que ce qui est nécessaire.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1242 Défis: 54 Message

Citer : Posté le 15/06/2014 11:50 | #


En fait, (je n'en suis pas sûr mais il me semble que ça marche comme ça), le fait d'avoir plusieurs fichiers source, et donc presque 1 fichier objet par fonction permettait de faire en sorte que ne soient utilisées (au moment de linker le .a) et ajoutées au binaire, vraiment que les fonctions que l'on souhaite appeler. Mais je ne sais pas vraiment comment est traité le .a au moment d'une compilation faisant appel à lui :oops:.

Et ensuite, pourquoi pas rajouter des fonctions non supportées actuellement, si on arrive à maitriser le besoin de mémoire :).
Lephenixnoir En ligne Administrateur Points: 24229 Défis: 170 Message

Citer : Posté le 15/06/2014 11:53 | #


Dans string, la seule manquante est strtok(), qui sépare une chaîne en morceaux à partir d'une liste de séparateurs. Ça peut servir.

On a également évoqué avec Dark Storm une fonction simple printf() qui écrit avec PrintXY() à la position du curseur et le déplace. On ne peut pas utiliser Print() car il le fait tout seul mais, même sans gérer le scrolling, ce serait utile que l'on puisse débugger avec ça, car ça évite la déclaration d'une chaîne supplémentaire.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 17/06/2014 10:39 | #


Dark storm a écrit :
Pour répondre et ajouter deux trois trucs aux points abordés

-> Concernant la mémoire, j'ai fait des tests de compilation, l'addin de base fait 1596o, en compilant avec TouchLib, il monte à 6040o, avec MonochromeLib en mode DEFINE_ALL à 26920o. Donc oui, sur le principe je suis pour intégrer des fonctions utilisées assez souvent, mais il faut faire attention à la taille de ces fonctions.


Quand on linke une lib statique, est-elle intégralement mise dans le programme?
Lephenixnoir En ligne Administrateur Points: 24229 Défis: 170 Message

Citer : Posté le 17/06/2014 10:50 | #


Oui, bien sûr.
Ou alors, l'intelligence de gcc nous rendra beaucoup service...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kristaba Hors ligne Membre Points: 614 Défis: 22 Message

Citer : Posté le 17/06/2014 14:03 | #


Non! Oo
L'atomicité est au niveau des fichiers objets, la lib n'est qu'une archive contenant un grand nombre de .o, mais c'est toujours eux qui sont utilisés individuellement à la résolution des liens!

Conclusion : découpez votre lib en pas mal de modules (un par fonction, pour celles qui sont assez conséquentes), et découpez MonochromeLib de la même façon, vous ne pourrez plus vous passer de vraies bibliothèques
(un fichier objet est linké si au moins un de ses symboles exportés est utilisé dans le programme)
Il était vraiment temps que je change cette signature...
Lephenixnoir En ligne Administrateur Points: 24229 Défis: 170 Message

Citer : Posté le 17/06/2014 14:05 | #


Je ne pensais pas...
Ok, au temps pour moi alors... il va falloir repartir je pense, vers le système de Nemhardy.
Toutes mes excuses.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 17/06/2014 14:05 | #


Kristaba a écrit :
Non! Oo
L'atomicité est au niveau des fichiers objets, la lib n'est qu'une archive contenant un grand nombre de .o, mais c'est toujours eux qui sont utilisés individuellement à la résolution des liens!

Conclusion : découpez votre lib en pas mal de modules (un par fonction, pour celles qui sont assez conséquentes), et découpez MonochromeLib de la même façon, vous ne pourrez plus vous passer de vraies bibliothèques
(un fichier objet est linké si au moins un de ses symboles exportés est utilisé dans le programme)


Ben nickel ,c'est ce que je comptais faire, une série de libs déjà compilées pour faciliter le développement.
Ca évitera donc qu'on aie des conditions de partout dans ML? Chouette, de la maintenance en moins.

Ajouté le 17/06/2014 à 14:07 :
Z'avez pas un git qui rassemble tout le développement lié au SDK? Je veux bien y faire partie

Ajouté le 17/06/2014 à 14:10 :
Nemhardy a écrit :
Sinon, si vous voulez, donnez moi vos identifiants gitorious si ça vous intéresse de bosser avec git.

Après, LePhenixNoir, tu peux peut être essayer d'écrire une fonction qui ne fait qu'en appeler une autre avec les arguments qu'on lui a donné et voir si le "schéma" est le même, ça peut peut-être aider à y voir plus clair (ou pas, mais bon ).


Eiyeron
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 17/06/2014 14:11 | #


Ben Gitorious, mais c'est pour la stdlib : https://gitorious.org/fx-standardlib/fx-standardlib/
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 17/06/2014 14:11 | #


Au pire on peut créer des repos dans fx-standard lib qui serviront pour les libs communautaires
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 17/06/2014 14:13 | #


oui
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Précédente 1, 2, 3, 4, 5, 6, 7, 8 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 v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 83 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