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 » Projet FiXos (OS pour casio fx-9860/Prizm)
Kristaba Hors ligne Membre Points: 614 Défis: 22 Message

Projet FiXos (OS pour casio fx-9860/Prizm)

Posté le 07/11/2011 20:11

maj 14/11/2013 : un peu d'actualités
maj 03/03/2013 : mon (presque) dernier pavé
maj 06/03/2015 : Dépôts GitLab du projet.


Vu que le sujet d'OS unix-like pour nos chères G85 (fx-9860) et dérivées, ainsi que pour la Prizm (fx-cg20) fait réagir pas mal de gens, j'ouvre un topic pour en parler plus en détail
(début du sujet sur ce topic)

Déjà, quelques précisions, mes posts précédent étaient simplement des idées pour montrer l'utilité et ma vision d'un possible OS, je n'avais pas vraiment pour projet de le concrétiser dans l'immédiat. L'idéal serait de bosser là dessus conjointement avec des gars d'omnimaga, cemetech, et les autres communautés.
Ceci dit, j'ai déjà quelques idées dans la tête, donc autant les faire partager

(au passage, j'en profite pour répondre un peu aux posts de l'ancien topic)
DJ_Omnimaga : sur Casio on a jamais eu l'occasion de créer un OS tiers jusqu'à la fx-9860 (excepté la Graph100 mais c'était loin d'être le modèle le plus répandu), les processeurs étant non documentés. Depuis que tous les nouveaux modèles de Casio utilisent la même architecture plus ouverte, il est possible de créer un OS custom, mais si il n'y a toujours pas eu de projet d'OS c'est entre autre par ce que les addins permettaient déjà de faire des programmes sympa, et probablement aussi à cause du manque de "programmeurs systèmes" dans le monde Casio.

Vdragon.b: Oui, un OS est généralement codé en C (pas une obligation, mais Linux en est un bon exemple ouaip). Ceci dit, vaut mieux "bien coder", par ce que l'expérience permet de d'optimiser le code, d'utiliser des syntaxes très barbares -mais pratiques-, de comprendre la structure générale de l'OS. Après, si il s'agit de code hors-noyau (un petit utilitaire ou autre) bien entendu les performances sont moins critiques, donc si tu te sens tu pourras aider j'imagine.
Pour les grayscales et le multitâche c'est prévu dans mon idée perso effectivement.
(dans un premier temps, multitâche coopératif avant d'écrire un vrai ordonnanceur)

Pour le moment, les idées que j'ai pour le kernel :
- une fonction init pour initialiser le MMU, le cache, créer la pile kernel, initialiser les interruptions, charger le système de fichiers...
- un FS type FAT par exemple, serait potentiellement créé en tant que fichier du FS de Casio (pour permettre la cohabitation des deux systèmes, en évitant de se tapper le FS de Casio complètement en carton *siflotte*)
- système de virtual FS pour permettre une uniformité des API d'écriture de fichiers
- possibilité de lancer un programme binaire "pur" (binaire sans header G*A), un binaire G1A, ou un fichier ELF (ce dernier permettrait l'utilisation de techniques avancées)
- gestion des bibliothèques dynamiques (du .so si le format est pas trop lourd, custom sinon), dont Newlib (lib stdc) pour alléger les addins, profiter de fonctions spécifiques à chaque calculatrice...
- gestion du MMU en mode activé et pour environnement multiprocessus (basculement en monoprocessus si nécessaire pour assurer la retro-compatibilité G*A?)
- évidemment, les addins seraient lancés en mode 'user' pour assurer la sécurité du kernel
- syscalls utilisant l'instruction TRAPA de l'assembleur SH3 (interruption logicielle), pour basculer en mode protégé et accéder à l'espace noyau
- des drivers d'affichage dépendant du modèle de la calculatrice, permettant de gérer un mode "terminal" et un mode "graphique"

Si vous avez des questions, des choses à proposer, des contacts avec des gens intéressés ou quoi que ce soit n'hésitez pas.
Je ne sais toujours pas si je vais vraiment me lancer là dedans (c'est un gros projet encore une fois, peu de chances d'être fini un jour si y'a que moi dessus ), mais dans le pire des cas, les idées présentées serviront bien à quelqu'un, un de ces quatres



Précédente 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Suivante
Julese50 Hors ligne Gourou Points: 315 Défis: 16 Message

Citer : Posté le 21/09/2014 11:25 | #


Sinon, des nouvelles du projet? Le dernier message sur Omnimaga date de début Août, le dernier push du repo git de mi-Août… Ce projet est mort, en pause, ou l'auteur a décidé de ne plus travailler qu'en local? (ou alors je m'impatiente pour rien, ça fait qu'un mois après tout…)
Sinon, des nouvelles du support SH4 aussi?
Je suis prêt à aider pour les tests.
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 21/09/2014 18:36 | #


Il me semble que Kristaba a du boulot en ce moment , et j'ai pas vu Eiyo' depuis un petit moment. Mais sinon ça devrait avancer un peu
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 22/09/2014 19:13 | #


Bah j'ai pas réellement le courage d'avancer ces derniers temps, la L3 n'est pas évidente... J'attends Kris pour des indications mais on devrait s'attaquer au driver du port série si on veut que ça avance.

Ajouté le 02/10/2014 à 17:39 :
Ca y est, plus personne ne s'intéresse au porjet une fois le débat sur la manière de taper au clavier est terminé?

Bon, j'ai beaucoup avancé dans mon projet de shell. J'ai un prompt qui lit jusqu'à 128 caractères et 8 words (séparés par des espaces) qui peuvent être entourés de guillemets pour avoir des espaces dans les words. J'ai commencé un lien vers l'exécution de programmes mais n'ayant ni programme de test ni ne sachant réellement comment ça se passe ni comment bien passer les arguments, je ne sais si ça foncitonne réellement. En tout cas, les forks et ouverture de terminaux se passent bien. On a un processus par terminal qui ont chacun les bons fd pour écrire et lire dans leur propre terminal et pour l'exécution, la routine fork/wait/execve a l'air de bien se passer.

Va falloir que je me batte avec les histoire de PATH et les autres trucs de ce genre mais on a déjà quelque chose de bien avancé et de visuel. Il me faudrait de quoi montrer les entrailles du kernel à coup de programmes de tests, ça déchirerait et on aurait déjà un semblant de plateforme de dèv 3rd party.

J'appelle tous les codeurs expérimentés à joindre le développement. Je suis en train de mettre en place une certaine liste de choses qui permettront une meilleure communication/traçage des problèmes car j'aimerais que ce projet avance malgré l'absence plus ou moins temporaire de Kris. J'essaye de lire plus de doc système mais n'ayant aucune directive de Kris pour le moment, ça va être chaud de savoir quoi faire.

Pour le moment, il nous faudrait:
- Etudier comment il a géré les terminaux pour que je puisse implémenter quelques codes d'échappement VT100 comme le scrolling ou effacer l'écran.
- Finir le port série que Dark Storm a commencé.
- Mettre en place des utilitaires ressemblant vaguement aux utilitaire unix standard comme ls, cd et tout le tralala (va falloir par contre que j'explique quelques trucs au niveau du PWD et pourquoi c'est la merde ce truc)
- Voir pourquoi sur certaines distros Linux (visiblement les Arch) le driver Arduino ne marche pas pour la connection USB avec FiXOS (je n'arrive pas à connecter ma calto à un minicom qui me permettrait d'avoir les logs de debug sur l'ordi et pas une portion visible à l'écran de la calto).
- Trouver Kris et l'enfermer dans un cachot jusqu'à qu'il nous ponde le kernel fini -NAN J'DÉCONNE-

On a un chat IRC où j'espère pouvoir enregistrer les logs sans à les supprimer comme un c**, channel #FiXOS des serveurs Quakenet (je ne mets pas de lien pour éviter les bots).

Voilà voilà... Étant le seul actif actuel (Dark Storm n'a pas trop avancé pour le coup), j'aimerais un peu de soutien de la part des dèèèveuh d'ici afin que l'on puisse avancer. On a quelque chose qui a des entrailles, donnons-lui ce qu'il lui manque.

(PS) Dernière indication : j'ai deux branches sur mon repo : la main correspond aux modifications relatives au rajout des codes d'échappement VT100 et "shell" a un nom assez explicite je crois...

Ajouté le 02/10/2014 à 17:40 :
Eh merde, je me mets à faire des pavés comme Kris. Vais-je finir comme lui? Une part de moi aimerait bien (pouvoir aborder des projets comme un kernel, c'est génial!)
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 02/10/2014 18:33 | #


J'aimerais bien t'aider, mais je suis un très mauvais programmeur en équipe et je n'ai déjà que trop peu d'occasions de coder... je ne pourrais pas t'être d'une grande aide.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 02/10/2014 18:36 | #


T'es pas obligé de coder dans le kernel, tu peux aussi coder des programmes qui seront exécutés ou des outils externes au code lui-même.

J'ai oublié de rajouter qu'ils nous faudrait au moins de quoi communiquer un peu plus sérieusement si le projet orend de l'ebergure, genre une mailing list ou un forum, ou je ne sais quoi. Ce week-end je vais essayer de mettre en place un issue tracker vu que Gitorious n'en a pas. J'aurais aimé le programmer mais j'ai pas assez de temps pour l'instant.
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 02/10/2014 18:38 | #


Je vais t'envoyer un MP sous peu, j'ai deux-trois trucs qui pourraient éventuellement t'intéresser mais je préfère en parler en privé.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 02/10/2014 19:01 | #


Cool pour le shell

Sinon, pour le série, faut que je lise de la doc sur comment ça fonctionne et comment régler le tout, pour le coup je suis totalement inexperimenté sur ce point... Le code que j'ai push provient de RevolutionFX, donc c'est largement à optimiser/nettoyer.

Pour le FS, donc les ls, cd etc., je suis tombé sur un ancien message de Kris qui proposait d'allouer un fichier dans la smem, et ensuite d'y créer un fs personnalisé un peu comme une partition de disque. Par contre, encore une fois, je vois pas comment m'y prendre

Le premier problème que j'ai, c'est qu'à l'internat, c'est que ni IRC ni Git ne passent : le réseau agit sans doute sur les paquets, ces deux clients m'avertissent d'une attaque type MITM, donc faut que je règle ça pour pouvoir continuer...
Le second c'est que j'ai beaucoup moins de temps que l'an dernier (prépa oblige)
Le troisième, c'est que autant sur des trucs du genre GUI, appli utilisateur, en gros du C haut niveau je me démerde largement, autant dès qu'il s'agit d'agir sur le proco/materiel j'ai beaucoup moins d’expérience...

Enfin bref, je m'informe petit à petit, mais je sais pas trop quoi et où lire, même sur OSdev (le site est vaste )
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

Citer : Posté le 02/10/2014 19:04 | #


Eiyeron a écrit :

Bon, j'ai beaucoup avancé dans mon projet de shell. J'ai un prompt qui lit jusqu'à 128 caractères et 8 words (séparés par des espaces) qui peuvent être entourés de guillemets pour avoir des espaces dans les words. J'ai commencé un lien vers l'exécution de programmes mais n'ayant ni programme de test ni ne sachant réellement comment ça se passe ni comment bien passer les arguments, je ne sais si ça foncitonne réellement. En tout cas, les forks et ouverture de terminaux se passent bien. On a un processus par terminal qui ont chacun les bons fd pour écrire et lire dans leur propre terminal et pour l'exécution, la routine fork/wait/execve a l'air de bien se passer.


Pour les arguments, je sais pas si ça peut t'aider mais pour les récupérer en C, il s'agit des paramètres passés à main(int argc, char** argv) (argc est le nombre d'arguments et argv est un tableau à deux dimensions les contenants il me semble )
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 02/10/2014 19:20 | #


Drac0300 a écrit :
Eiyeron a écrit :

Bon, j'ai beaucoup avancé dans mon projet de shell. J'ai un prompt qui lit jusqu'à 128 caractères et 8 words (séparés par des espaces) qui peuvent être entourés de guillemets pour avoir des espaces dans les words. J'ai commencé un lien vers l'exécution de programmes mais n'ayant ni programme de test ni ne sachant réellement comment ça se passe ni comment bien passer les arguments, je ne sais si ça foncitonne réellement. En tout cas, les forks et ouverture de terminaux se passent bien. On a un processus par terminal qui ont chacun les bons fd pour écrire et lire dans leur propre terminal et pour l'exécution, la routine fork/wait/execve a l'air de bien se passer.


Pour les arguments, je sais pas si ça peut t'aider mais pour les récupérer en C, il s'agit des paramètres passés à main(int argc, char** argv) (argc est le nombre d'arguments et argv est un tableau à deux dimensions les contenants il me semble )


Draco... T'es mignon mais là, ça se passe de l'autre côté, du coté où j'envoie les arguments vers le programme à exécuter.
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 02/10/2014 20:07 | #


Eiyeron a écrit :
Draco... T'es mignon mais là, ça se passe de l'autre côté, du coté où j'envoie les arguments vers le programme à exécuter.

Et alors ? Ça t'empêche pas de les coller dans r4 et r5, non ?
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 02/10/2014 21:13 | #


Mais, quoi? Je ne touche pas à de l'assembleur, tout se passe en C sur le shell. C'est execve qui est censé passer les arguments que je lui ai donné au processus qui va prendre le relais. J'ai juste à m'occuper de bien appeler le bon programme au bon endroit, j'ai surtout peur que je ne puisse pas lancer quoi que ce soit pour le moment...
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 02/10/2014 21:20 | #


Mais attends... tu codes un OS sans écrire une ligne d'Assembleur ? Il y a un moment où ça va plus passer...
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 02/10/2014 21:21 | #


je vais essayer de faire un linux avec Java et Python
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 02/10/2014 21:24 | #


Sans dec'... ><" Je parle d'un shell. je réalise un shell depuis quelques jours et je n'ai que faire pour le moment de l'assembleur car on n'en a plus réellement besoin car le bootloader est déjà fait... Leffe, relis le topic, s'il te plaît.
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 02/10/2014 21:26 | #


Désolé si je me suis mal fait comprendre... j'ai déjà lu le topic.
Pour appeler du code qui, si j'ai bien compris, n'est pas encore chargé, et lui passer des arguments... sérieusement je vois pas comment faire.
Alors à la limite... je vois pas pourquoi tu te "restreins" au C. Il y a quelques fois où ça pourrait être utile de coller quelques lignes d'Asm, non ?
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Ray Hors ligne Membre Points: 1338 Défis: 18 Message

Citer : Posté le 02/10/2014 21:27 | #


J'aurais bien voulu aider mais je pense que je suis bien en dessous de vous dans la programmation >_<
Du coup si je peux être utile pour quoi que ce soit (de pas trop long ou difficile) je veux bien aider
Sinon je peux aussi me contenter de vous encourager dans le projet
Bonne continuation en tout cas o/
Projets que je soutiens
Masquer
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 02/10/2014 21:30 | #


Lephenixnoir a écrit :
Désolé si je me suis mal fait comprendre... j'ai déjà lu le topic.
Pour appeler du code qui, si j'ai bien compris, n'est pas encore chargé, et lui passer des arguments... sérieusement je vois pas comment faire.
Alors à la limite... je vois pas pourquoi tu te "restreins" au C. Il y a quelques fois où ça pourrait être utile de coller quelques lignes d'Asm, non ?

Toi et l'assembleur... Non, une fois pour toutes, j'ai pas envie de passer trente ans sur 80 lignes pour une fonctionnalité qui va me prendre le dixième en C. Le C c'est bien dans le sens où j'en fais depuis 7 ans et où je pense (algorithmiquement
parlant) quasiment qu'en ça et que GCC fait des merveilles en optimisation.
Et concernant execve, je ne sais même pas si il exécute quoi que ce soit.

(Désolé d'être un peu sur les nerfs, dure journée...)

Ajouté le 03/10/2014 à 09:31 :
Ray a écrit :
J'aurais bien voulu aider mais je pense que je suis bien en dessous de vous dans la programmation >_<
Du coup si je peux être utile pour quoi que ce soit (de pas trop long ou difficile) je veux bien aider
Sinon je peux aussi me contenter de vous encourager dans le projet
Bonne continuation en tout cas o/




J'essaye de trouver de quoi vous faire faire. Tiens, essaye de te renseigner sur les file descriptor en Unix et essaye donc de faire un programme équivalent à écho. Ça pourrait faire un bon exercice.

(Rechcerche "man open", " man read" et "man close")

Ajouté le 03/10/2014 à 09:34 :
Leffe, si tu veux t'y mettre, tu peux faire car, c'est un exercice similaire et pas trop dur, je pense. (En C bien entendu, faut que ça soit maintenable)
Ray Hors ligne Membre Points: 1338 Défis: 18 Message

Citer : Posté le 03/10/2014 14:59 | #


@Eiyeron: je suis en train de lire ce qu'est un descripteur de fichiers.
Je pense que j'ai dit n'importe quoi :
Cliquez pour découvrir
Cliquez pour recouvrir
j'ai été voir ce qu'était un file descriptor et au final je pense connaître un peu car sur un langage il fallait utiliser des filehandle pour les opérations sur les fichiers. C'est bien un nombre entier donné par la fonction open qui désigne le "numéro" associé au fichier ouvert qui permet par la suite d'être utilisé par les fonctions de lecture / écriture ?

Enfin bref je lis le manuel pour les fonctions open close et read. À la fin je dois faire quoi au juste ?
Projets que je soutiens
Masquer
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 03/10/2014 17:44 | #


Eiyeron a écrit :
Toi et l'assembleur... Non, une fois pour toutes, j'ai pas envie de passer trente ans sur 80 lignes pour une fonctionnalité qui va me prendre le dixième en C. Le C c'est bien dans le sens où j'en fais depuis 7 ans et où je pense (algorithmiquement
parlant) quasiment qu'en ça et que GCC fait des merveilles en optimisation.

Tu fais ce que tu veux... Disons que pour moi, l'Asm a l'avantage de permettre de travailler à bas niveau, y compris de modifier à ma guise les arguments de fonctions etc... des choses qui sont parfois un peu "fines" pour être faites en C, et la vitesse.
Mais c'est vrai que gcc optimise à merveille les programmes.

Eiyeron a écrit :
Et concernant execve, je ne sais même pas si il exécute quoi que ce soit.

Tu pourrais m'expliquer un peu plus en détail ce qu'est censé faire ce programme ? J'ai lu mais pas vraiment compris...

Eiyeron a écrit :
(Désolé d'être un peu sur les nerfs, dure journée...)

On est tous sur les nerfs de temps en temps...

Eiyeron a écrit :
Leffe, si tu veux t'y mettre, tu peux faire car, c'est un exercice similaire et pas trop dur, je pense. (En C bien entendu, faut que ça soit maintenable)

Je vois pas trop comment sans avoir un minimum de doc sur le fonctionnement de ton shell... toutes ces histoires d'entrée/sortie...
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Scientifix Hors ligne Membre Points: 762 Défis: 30 Message

Citer : Posté le 03/10/2014 19:01 | #


Salut
Est ce que quelqu'un peut m'expliquer en 2-3 lignes en quoi consiste le projet FiXos ? Parce que je ne suis pas sûr de tout saisir ...
Merci
JE SERAI ABSENT POUR 2 ANS A+

Je suis fan de Mathématiques et de Sciences en général (d'où mon nom ). Consultez mes programmes en rapport avec les Maths
--------------------------------------------------------

Calculatrice : Graph 75
Nessotrin Hors ligne Membre Points: 204 Défis: 0 Message

Citer : Posté le 03/10/2014 19:02 | #


C'est un OS, comme celui de casio, mais crée de 0, il pourra permettre d'utiliser la calculatrice sans se tapper tout les bugs/limitations de l'os de casio
Nessotrin, développeuse un peu trop occupée avec la vie pour être présente sur PlanetCasio.
Voici Spassus2, mon jeu de combat spatial procédural abandonné, le NESSCASDK, mon SDK 'barebones' fait maison (C'est pour les maso uniquement) et CasioUsb, mon utilitaire de transfert d'addin pour Linux.
Précédente 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 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 105 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