Reprogrammer l’OS d’une calculatrice CASIO : le challenge relevé par Yann, étudiant d’Epitech Lyon

Yann Magnin, étudiant en troisième année à Epitech Lyon, a récemment surpris l’équipe pédagogique par la qualité et la complexité d’un de ses projets : reprogrammer un système d’exploitation pour calculatrice CASIO. Dans le jargon, on appelle cela “un projet de barbu”.

Yann est un étudiant de 20 ans, promo 2023 d’Epitech Lyon. Il décide de faire un Bac STI2D option SIN. Dès le lycée il commence à “bidouiller” sa calculatrice CASIO. Son bac en poche, il rejoint Epitech Lyon, car passionné d’informatique. Ce Lyonnais pur souche continue à s’intéresser au fonctionnement de sa calculatrice pendant ses trois premières années à Epitech. Il va même jusqu’à réaliser son projet EIP (Epitech Innovative Project) sur le développement d’une console, permettant d’apprendre le code aux collégiens et lycéens en reprenant le travail qu’il a effectué sur sa calculatrice.

OS Casio Projet Yann Magnin 2

Les origines du projet

“Quand j’étais en 1ère année, je me demandais déjà comment fonctionnait une calculatrice Casio. Je me suis alors intéressé au cœur de la machine, son OS. Je n’arrivais alors qu’à réaliser des appels systèmes pour faire des actions simples. J’ai réalisé un gestionnaire d’interruption, un simple bout de code qui prend les commandes de la machine. Mon premier prototype m’a permis de lancer le 42sh, qui est un interpréteur de commandes (projet emblématique de fin de première année à Epitech) sur ma calculatrice.

En 2ème année, j’ai apporté plusieurs améliorations pour implémenter des mécaniques plus poussées, comme des appels systèmes, la gestion des systèmes de fichiers, ou encore la gestion de processus et de signaux.” 

Se libérer de l’OS de Casio en reprogrammant le sien

“Mon prototype fonctionnait, mais l’architecture de mon code me posait problème pour avancer. J’ai donc voulu me débarrasser de l’OS Casio, qui était bloquant pour ce que je voulais réaliser. J’ai donc appris les concepts sous-jacents de l’OS Casio en découvrant par moi-même le fonctionnement de la machine. Mais à force d’ajouter des couches, j’ai vu que certaines parties étaient interdépendantes, les interfaces n’étaient pas claires, ni maintenables.”

 « Aller toujours plus loin » : le mot d’ordre de Yann

“En 2e année, j’ai développé mon propre noyau, mais il comportait un problème majeur : je devais faire croire à Casio que mon noyau était une application pour pouvoir le lancer. Ce qui m’a forcé à intégrer le boot loader (qui est théoriquement le premier programme exécuté quand on démarre une machine. Son rôle est de charger l’OS en mémoire et de lui passer la main) et l’OS ensemble. Ce n’est pas très élégant, car je dois me plier au format imposé par Casio, ce qui implique de recompiler les sources pour porter mon noyau sûr d’autres calculatrice.”

« L’image qui suit est un petit schéma qui présente l’architecture de l’application. On voit bien que ces deux parties sont fondamentalement isolées l’une de l’autre et n’ont pas les mêmes besoins. Basiquement, le noyau est dépendant uniquement de la machine et le boot loader (qui a pour rôle de charger le noyau et ensuite se détacher de l’emprise de Casio en passant la main à mon propre noyau) est exclusivement dépendant de l’OS de Casio. »

“Si j’arrive à les séparer proprement, le noyau n’aura plus à être recompilé à chaque fois que je change d’OS et comme le boot loader se base sur les appels systèmes de Casio, lui non plus n’aura plus besoin d’être recompilé à chaque changement d’OS.”

Projet casio schéma 1

“En 3e année, j’ai voulu reprendre mon noyau en appliquant, comme expliqué plus haut, pour le porter sur deux nouvelles calculatrices : la graph90+E et la graph35+EII. Le souci que j’ai rencontré, est que ces deux machines utilisent un système de fichiers propriétaires et des écrans non documentés. Ce qui pose problème à mon noyau car il n’utilise pas l’OS de Casio une fois qu’il prend la main. J’ai donc écrit un débugueur/traceur pour visualiser le comportement de l’OS de Casio lorsque j’exécute des appels systèmes de gestion de fichiers (le fameux open(), rerad(), write(), …) en suivant leurs exécutions instructions par instructions. Pour parvenir à faire cela, j’ai dû cloisonner l’OS de Casio ainsi que mon noyau sur la machine en utilisant un mécanisme assez mystique, connue sous le nom d’hyperviseur. L’hyperviseur permet de faire tourner plusieurs OS sur une même machine en leur faisant croire qu’ils sont seul sur la machine.


Cette vidéo est le prototype de l’hyperviseur. Lorsqu’une image est chargée en mémoire (un noyau avec un programme utilisateur basique qui affiche un message à l’écran), elle est « tracée », c’est-à-dire qu’elle est exécutée instruction par instruction.

“J’ai essayé de personnaliser le traceur avec des commandes et beaucoup d’informations en plus, ce qui me permet d’avoir mes notes, les informations sur les drivers, un visuel sur les différentes mémoires, etc, ce qui le rend beaucoup plus expressif. Ça m’a vraiment permis d’y voir plus clair sur le fonctionnement de Casio. Si j’ai bien une leçon à retenir de tous ses projets, c’est que la visualisation des données est une des parties les plus importantes et cruciale d’un projet.

Objectif initial rempli, mais on ne s’arrête pas là !

“Comme le fonctionnement et les composants des calculatrices Casio ne sont pas documenté, j’ai dû récupérer l’OS et l’analyser à la main pour comprendre ses secrets. C’est un travail assez long et fastidieux, mais je commence à bien comprendre son architecture et son fonctionnement. Mon prototype d’OS ne fonctionnait que sur les machines monochromes, car pour les calculatrices couleurs, le système de gestion des fichiers de Casio a changé et le rendu à l’écran est bizarre, ce qui me montre, au passage, certaines limites de l’architecture de mon projet. J’ai donc commencé par revoir le driver pour l’écran et par la suite, j’ai commencé à analyser plus en profondeur le nouveau système de fichiers de Casio.


 
“Dans cette vidéo, on peut voir une grosse partie des informations que j’ai réussi à récupérer durant mes sessions de rétro-ingénierie. J’ai découvert beaucoup de choses très intéressantes. Certes, il me manque encore beaucoup d’informations pour être totalement indépendant vis-à-vis de Casio (lecture de données notamment). Cependant, ce système de fichiers m’a fait réaliser que la façon dont j’avais de m’installer en RAM avec mon noyau n’est plus viable sur les calculatrices récentes. En effet, il faut savoir que je n’ai pas encore touché à l’écriture dans la mémoire de stockage (une seule erreur d’un bit et la calculatrice devient inutilisable). Pour l’instant je m’installe dans une zone de la RAM qui, semble-t-il, n’est pas utilisé par Casio mais ce qui divise sa taille par deux au minimum. Cette limitation est vraiment contraignante pour développer un OS complet et l’arrivée de ce système de fichiers (qui se trouve en RAM) m’empêche de continuer avec ce fonctionnement. Je vais donc essayer de continuer de documenter l’OS pour trouver un moyen de m’installer définitivement en ROM et écraser l’OS de Casio au passage.

Et après ?

“Etant passionné par ce projet, ce support qu’est la calculatrice, j’ai voulu utiliser mon noyau et mon hyperviseur et les intégrer un mon EIP (Epitech Innovative Project). J’ai donc décidé de créer une console portable pour permettre aux collégiens et lycéens d’apprendre la programmation.

L’année prochaine, je souhaite partir en Corée, à l’université de Sejong, qui propose des cours d’électronique. Ça me permettrait d’acquérir les compétences matérielles qui me manquent actuellement pour mener à bien mon EIP et par passion personnelle également.”

Pour la suite, je ne suis sûr de rien, mais dans tous cas, la partie rétro-engineering m’a énormément plu ! »

Le ressenti d’Adrien Rémy, expert pédagogique Epitech Lyon en charge d’évaluer le projet

“Au-delà du projet, qui est d’un niveau très élevé pour un étudiant de 3e année, c’est la méthode de travail de Yann qui est remarquable. Il n’existe aucune documentation sur son sujet. Il a donc dû décomposer chaque action de calcul de la calculatrice pour la comprendre, l’assimiler et par la suite le reproduire en l’adaptant à ses besoins : c’est ce qu’on appelle du rétro-engineering.”

Vous souhaitez en savoir plus

Retour en haut de page