Posté le 12/09/2017 22:50
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 259 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
Citer : Posté le 12/09/2017 23:48 | #
Bonjour,
c'est possible, mais c'est très, très long. Il faut pour cela réaliser de longues opérations de rétro-ingénierie. Mais puisque ça t'intéresse, je vais te donner un peu plus de contexte concernant l'état de l'ouverture du code et de la connaissance de la communauté sur l'OS.
Les développeurs de CASIO Japon ont produit un code qu'un compilateur (en l'occurrence, celui d'Hitachi, racheté par Renesas entre-temps) a transformé en code machine pour processeur SuperH (les calculatrices CASIO modernes tournent sur du SH-3 et du SH-4A). Le code n'est ni libre, ni open source, et qui plus est, nous n'avons pas la documentation exacte des microcontrôleurs utilisés ; toutes les informations que nous avons proviennent de microcontrôleurs équivalents, ainsi que de la rétro-ingénierie de Simon Lothar sur les émulateurs (cf. ci-après).
La série fx-9860G, dont font partie la Graph 35+E et la Graph 75+E, et son SDK sont sortis en 2006. Cette série inclue aujourd'hui :
- la fx-7400GII (Graph 25+Pro SH3);
- la fx-7400GII-2 (Graph 25+Pro SH4);
- la Graph 25+E (pas d'équivalent international);
- la fx-9750GII (Graph 35+USB SH3);
- la fx-9750GII-2 (Graph 35+USB SH4);
- la Graph 35+E (pas d'équivalent international);
- la fx-9860G (Graph 85);
- la fx-9860G AU (spéciale australie, pas d'équivalent international);
- la fx-9860G Slim (internationale uniquement);
- la fx-9860G SD (Graph 85 SD);
- la fx-9860GII (Graph 75 SH3);
- la fx-9860GII-2 (Graph 75 SH4);
- la fx-9860GII SD (Graph 95 SH3);
- la fx-9860GII-2 SD (Graph 95 SH4);
- la Graph 75+E (pas d'équivalent international).
J'ignore l'outil de désassemblage que Simon Lothar a utilisé sous Windows. Dans les distributions GNU/Linux d'aujourd'hui cependant, le fxSDK de Lephenixnoir comporte néanmoins un désassembleur plutôt efficace. Cependant, même désassemblé, cela ne rend que plus lisible le code à un programmeur qui connaît le set d'instrutions du SH-3 ; tu ne pourras donc pas échapper à la lecture du manuel de Renesas (tu peux trouver une introduction un peu plus douce par Ziqumu sur ce site). Cependant, afin de ne pas te jeter en pâture au désassemblage, je peux t'introduire à certains éléments que nous connaissons déjà (et à l'histoire de la rétro-ingénierie sur fx-9860G en général).
De 2008 à 2010 environ, un membre de la communauté CASIO, Simon Lothar (actuellement sur Casiopeia, mais peu actif) a réalisé, avec l'aide d'un ami à lui, le projet de documentation fxReverse, qui reprend leurs analyses pour les présenter au reste de la communauté. Celui-ci a d'ailleurs connu une seconde itération en 2010. Tandis que cet ami a produit quelques outils et un SDK alternatif pour Linux (ne faisant pas le poids face à gint aujourd'hui), Simon Lothar a continué jusqu'en 2014 à remplir un document sans nom, omettant cependant volontairement certaines informations, dont celles concernant la flash, qu'il a utilisées dans fxRemote (on en sait cependant un peu plus aujourd'hui).
Nous connaissons donc plus ou moins la structure du firmware (souvent, concernant les calculatrices, firmwares et OS sont synonymes). Celle-ci est fortement liée au fait que la mémoire flash utilisée sur la série fx-9860G a des secteurs de 64 KiB. Les mémoires flash peuvent faire 2 MiB (sur Graph 25+E par exemple, ce qui explique qu'on ne peut pas flasher d'OS de Graph 75+E dessus), mais la plupart font 4 MiB, et ont donc la structure suivante :
- 0x000000 — 0x00FFFF : bootcode (gérant le Protocole 7.00 et les commandes de base) ;
- 0x010000 — 0x24FFFF : OS, applications intégrées ;
- 0x250000 — 0x3FFFFF : mémoire de stockage (parfois inutilisée).
Le bloc de l'OS commence par un bloc nommé le bloc CASIOWIN de 0x80 octets, dont les éléments connus sont plus ou moins les suivants :
- 0x00 — 0x07 : "CASIOWIN" (sans doute utilisé pour vérifier si la flash est corrompue) ;
- 0x08 — 0x17 : code pour aller dans l'OS ;
- 0x70 — 0x7F : code pour appeler un syscall.
Il finit aussi par un checksum (là encore, pour vérifier si la flash est corrompue, et pour que le bootcode provoque directement l'OS Error si c'est le cas), et comporte souvent un ou deux secteurs de backup du système de fichiers principal, de 64 KiB (la taille correspond à celle d'un secteur ; les systèmes de fichiers principaux qui font moins de 64 KiB sont limités artificiellement).
Bien que CASIOWIN (nom donné à l'OS par rapport à la chaîne de caractères vue précédemment) puisse lancer des applications, ce firmware diffère grandement de kernels comme Linux ou Win32, puisque contrairement à eux, celui-ci lance les applications en mode « privilégié ». Je te laisse fouiller le manuel pour les détails techniques, mais en gros, alors que Linux nous met dans un environnement virtuel où toute interaction avec le matériel ou les autres processus se fait via Linux, on peut se passer de CASIOWIN et communiquer directement avec le matériel (l'écran, le clavier, les ports), et aucune limitation n'est mise en place pour contrer cela. En bref, toute application pour CASIOWIN que tu exécutes peut bricker ta calculatrice en moins de deux. Mais d'un autre côté, c'est grâce à cela que nous avons pu explorer autant l'OS, le matériel, et ses possibilités.
Nous savons que les calculatrices que nous nommons « SH-3 » pour le public tournent en fait sur un microcontrôleur SH7355/SH7337 (deux microcontrôleurs en fait quasiment équivalents) et que les calculatrices que nous nommons « SH-4A » ou plus simplement « SH-4 » tournent sur un microcontrôleur SH7305. Le code machine entre les deux processeurs ne changeant pas tant que ça (et étant même compatibles pour un grand nombre d'instructions), c'est surtout les modules intégrés au micro-contrôleur qui changent, et donc la façon de communiquer avec eux. Par exemple, la façon de lire le clavier change (sans compter le rétro-éclairage de la Graph 75+E qui se trouve dans le passage).
La communication avec les modules se fait par le bus d'adressage, cette abstraction qui, en gros, résume les interactions avec l'ensemble du matériel à « lis des données à telle adresse » et « écris des données à telle adresse ». Pour écrire sur l'écran par exemple, il faut écrire à une certaine adresse pour dire « je veux écrire sur l'écran à ces coordonnées-là », puis écrire à une autre adresse pour donner les données que tu veux écrire sur l'écran (donc les pixels à allumer et les pixels à éteindre). Cependant, du matériel ne se manipule pas directement via le bus d'adressage, mais via des modules qui les manipuleront derrière : par exemple, pour interagir avec le clavier, il faut interagir avec le module des ports à une certaine adresse, qui interagira avec le clavier derrière. Les adresses des registres du microcontrôleur SH7305 par exemple sont listés ici — l'usage se déduit plus ou moins des manuels d'autres microcontrôleurs présents ici.
Voilà une base de laquelle tu peux partir pour explorer. Il y a pas mal de documentation sur notre « bible », certes peu ordonnée mais toujours utile quand on se lance dans ce genre de choses. Aussi, n'hésites pas à te présenter pour accéder à notre espace de discussion instantanée, où nous pouvons te renseigner plus directement.
Au plaisir !
Mon blog ⋅ Mes autres projets
Citer : Posté le 13/09/2017 00:17 | #
Merci beaucoup pour cette réponse très complète, je ne m'attendais pas à recevoir autant d'infos en si peu de temps .
Je vais donc de suite explorer les liens, qui me seront sans aucun doute extrêmement utiles dans mes recherches.
Encore merci
Citer : Posté le 13/09/2017 09:47 | #
C'est une question qui nous revient souvent, alors merci Cake d'avoir apporté une réponse aussi complète !
Je voudrais ajouter juste quelques remarques générales de programmation. Une excellente compréhension de l'assembleur ne peut pas s'appuyer uniquement sur de la lecture et doit être l'aboutissement de l'écriture de programmes. Il y a des subtilités auxquelles je ne pense personnellement pas toujours, pourtant j'en ai lu et écrit beaucoup.
On oublie aussi facilement que tout cela s'appuie sur des connaissances de la représentation binaire des objets, nombres, chaînes de caractères, car tous les objets n'ont pas la même taille et cela influence le comportement du code. La notion de pointeur est absolument incontournable à toute tâche de désassemblage.
La plupart de nous apprenons ça de près ou de loin en pratiquant le C. La maîtrise du C n'est pas requise pour faire de l'assembleur (même si elle aide) : en revanche la maîtrise des concepts que j'ai évoqués est incontournable.
Voilà, j'appuie Cake, n'hésite pas à lire ou demander de la doc, et à poser des questions, c'est des sujets sur lesquels on aime discuter !
Citer : Posté le 13/09/2017 10:24 | #
Tu pourrais t'entraîner en enlevant l'indicateur de batterie https://www.planet-casio.com/Fr/forums/topic14955-1-Enlever-l-indicateur-de-baterie-sur-une-casio-graph-2.05.html
Sinon, y a-t-il une raison particulière pour laquelle tu veux modifier l'OS ?
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 13/09/2017 19:45 | #
Merci beaucoup pour votre aide
Je pensais justement apprendre le C, donc je vais pouvoir m'y mettre sérieusement.
De plus, j'ai enfin une bonne raison de passer sous linux, ça faisait longtemps que je voulais le faire aussi.
Je cherche surtout à en savoir plus sur l'OS par curiosité, mais comme je suis en terminale S dès que j'en ai parlé avec des amis ils m'ont demandé ce que je pouvais faire pour le mode examen, donc je voudrai regarder ça (bien que je ne souhaite pas tricher personnellement)
En tout cas vous formez une super communauté sur ce site, merci encore une fois pour votre aide
Citer : Posté le 13/09/2017 19:51 | #
Il y a effectivement des moyens de jouer avec le mode examen, mais encore aucun « accéder à toutes ses données alors que la LED clignote » de répandu, premièrement parce que c'est compliqué à faire sans y laisser des calculatrices (et le seul émulateur qu'on aie, celui du SDK, est, hélas, assez embêtant pour jouer avec ça), et deuxièmement parce que nous souhaitons rester en bons termes avec CASIO, et privilégions donc ce qui est bénéfique à la fois pour la communauté et pour CASIO.
Et par ailleurs, n'oublies pas de te présenter sur le topic associé. C'est loin d'être obligatoire ou quoi, mais ça te donnera les points restants pour accéder à l'espace de discussion instantanée du site, sans quoi ça peut être long de les avoir
Mon blog ⋅ Mes autres projets
Citer : Posté le 13/09/2017 20:14 | #
Personne ne t'empêchera de bidouiller ce que tu veux sur ta machine, mais soyons clairs : Planète Casio ne fournira pas d'informations sur le fonctionnement interne du mode examen ou sur des méthodes de le contourner.
Maintenant si tu veux changer ta bannière, ton icône de batterie, ou même les caractères du système, on se fera un plaisir de t'aider o/
Citer : Posté le 13/09/2017 21:36 | #
Je comprends tout à fait, c'est normal de ne pas encourager à la triche
Je chercherai par moi-même, même si ce n'est pas à mes yeux un réel objectif que de le modifier.
J'ai par ailleurs une autre question : une de mes connaissances a récupéré une casio graph 35+E transformée en 75+E qui indique l'heure sur le côté gauche de la bannière du menu.
Il ne s'est pas occupé de ces modifications lui-même, et je ne sais donc pas comment faire la même chose.
J'ai déjà suivi le tutoriel pour changer la bannière avec Bmp_injector_Pro mais cela ne me permet pas d'ajouter l'heure à la bannière.
Pourriez-vous m'expliquer le processus utilisé ?
Merci d'avance
Citer : Posté le 13/09/2017 21:38 | #
Tu ne peux pas ajouter l'heure à la bannière tout seul, c'est le système qui le fait. (s'il le fait !)
Citer : Posté le 13/09/2017 21:40 | #
Je ne comprends donc pas comment il peut avoir l'heure dans la bannière.
Y'a-t-il un OS compatible avec les graphs 35+E qui propose cette option ?
Citer : Posté le 13/09/2017 21:41 | #
Mais si on veut une horloge sur sa Graph 75+E on fait comment?
Il faut que la fonctionnalité soit ajouté par l'OS directement?
Citer : Posté le 13/09/2017 21:41 | #
Tu es sûr que c'est la vraie heure ? Parce que qu'aucun OS ne propose ça et j'ai jamais entendu parler de ça x)
Citer : Posté le 13/09/2017 21:42 | #
Il doit y avoir un OS qui a cette option, oui. (s'il a l'heure)
Pour ajouter une horloge dans un add-in par exemple, il suffit de la demander au matériel. Ça, on sait faire.
Citer : Posté le 13/09/2017 21:43 | #
En vérité je ne l'ai pas vu, des amis m'en ont parlé et je les ai naïvement cru.
Je vérifierai demain.
Citer : Posté le 14/09/2017 14:16 | #
Y'a p'têt moyen d'avoir un add-in qui tourne en background et dessine l'heure, mais j'en ai pas connaissance. Sur la communauté anglophone y'avait (et y'a peut-être toujours) un add-in horloge, mais ça c'est pas compliqué.
Après tes potes ont peut-être bluffé, j'ai bien fait croire à des gens que j'avais la 3G avec ma bannière.
Citer : Posté le 14/09/2017 14:21 | #
À titre d'information, des add-ins horloge, on en a dans la communauté Planète Casio, aussi, hein.
Citer : Posté le 14/09/2017 14:34 | #
Pour l'addin qui tourne en arrière plan, c'est possible, mais dès que tu lance une autre appli ça ferme l'addin, donc c'est très temporaire comme solution. On avait parlé du coup d'ajouter une horloge de ce type y'a quelques années, en se basant sur du désassemblage de l'OS pour trouver la méthode d'affichage du menu et la customiser un chouille.
Citer : Posté le 14/09/2017 14:37 | #
Après vérification, je vous confirme qu'il a juste changé la bannière et que sa calculatrice n'affiche finalement pas l'heure.
Désolé
Citer : Posté le 14/09/2017 16:26 | #
Y'a p'têt moyen d'avoir un add-in qui tourne en background et dessine l'heure, mais j'en ai pas connaissance.
C'est que t'es malin toi. Je peux te programmer ça en dix minutes ou presque.
Par contre ça va rester sur tous les écrans même dans les applications, pas seulement dans le menu...
Pour l'addin qui tourne en arrière plan, c'est possible, mais dès que tu lance une autre appli ça ferme l'addin, donc c'est très temporaire comme solution.
Eh non Darks, tu oublies les timers chargés avec des handlers dans des zones intouchées de la RAM
Citer : Posté le 14/09/2017 16:27 | #
Si c'est un timer CASIOWIN, c'est mort d'avance. Après, avec gint, je dis pas