IMA4 2016/2017 P28

De Wiki de Projets IMA


Cahier des charges

Présentation générale du projet

Contexte

La calculatrice TI-83 premium CE possède déjà un émulateur sous licence: TI Smart View CE (émulateur officiel gérant les calculatrices TI-83 Premium CE, TI-82 Advanced et TI-83 Plus.fr). Par ailleurs, il existe un utilitaire lui aussi officiel et gérant les mêmes modèles de calculatrices: TI connect CE. Ce dernier propose des fonctionnalités de sauvegarde de programmes, d'édition de programmes et de gestion de captures d'écran.

L'inconvénient de ces logiciels est qu'ils sont payants et très dirigistes dans leurs fonctionnalités. Il existe cependant un émulateur open-source réalisé par la communauté: CEmu. Permettant d'émuler une large gamme de TI-84, cet émulateur est également adapté à la TI-83 premium CE qui possède le même processeur que les TI-84. Il présente néanmoins quelques limitations, notamment au niveau de l’exécution d'applications.

Objectif du projet

L'objectif est d'adapter l'émulateur CEmu pour calculatrices Texas Instruments afin d'émuler totalement la calculatrice TI 83 premium CE.

Description du projet

Le projet reposera sur l'étude d'une calculatrice TI-83 premium CE, calculatrice milieu de gamme destinée aux lycéens. L’émulateur open-source CEmu propose des fonctionnalités intéressantes mais présente aussi un manque de fonctionnalités fondamentales pour le rendre intéressant pour l'apprentissage auprès de lycéens.

Améliorer CEmu passera par plusieurs points:

  • une modification du skin dans l'émulateur afin de coller à l'interface de la TI-83 ;
  • une adaptation du système de sauvegarde de la mémoire afin de ne pas devoir passer par des utilitaires libres tels que TiLP (permettant une connexion calculatrice/ordinateur pour une large gamme de TI) ;
  • implémenter la gestion de port USB afin de pouvoir communiquer le plus directement possible avec la calculatrice ;
  • en complément des fonctions de communication évoquées ci-dessus, il pourrait être intéressant de permettre un contrôle de CEmu directement via la calculatrice, comme le fait l'application Smart Pad CE avec le logiciel TI Smart View CE ;
  • permettre de lancer directement des applications dans l'émulateur comme peuvent le faire les émulateurs officiels, le problème venant du fait que les programmes de la RAM sont exécutables mais pas ceux de la mémoire flash. M. Dhaussy serait également intéressé par l'ajout d'un éditeur de programme.

Enfin, dans un intérêt purement intellectuel, il serait intéressant de voir si le mode examen est contournable. Cela pourra se faire de manière logicielle ou de manière matérielle.

Ultimement, si le temps le permet, il pourrait être intéressant de faire communiquer la calculatrice avec un Arduino.

Choix techniques : matériel et logiciel

La majorité du travail à réaliser consistera à s'approprier le code réalisé par la communauté et à l'adapter afin de le faire répondre à nos besoins. Le cœur de l'émulateur est programmé en C tandis que l'interface graphique est programmée en C++.

Afin de tenter de passer au travers du mode examen, une approche logicielle risque cependant d'être compliquée. À ce moment là, il sera probablement envisagé d'ajouter une LED à l'intérieur du boîtier de la calculatrice afin de donner l'impression que le mode examen est activé alors qu'il ne l'est pas. Le déclenchement de la LED pourra être effectuée avec un interrupteur magnétique ou en détournant l'information normalement destinée à la LED d'origine de la calculatrice.

Calendrier prévisionnel

Liste des tâches à effectuer

  • adapter l'interface graphique (ajout des boutons manquants, modification du skin, ...) ;
  • ajouter la gestion du port USB ;
  • permettre la sauvegarde structurée de la mémoire sans utilisation d'utilitaire ;
  • permettre aux programmes en mémoire flash de s’exécuter directement dans l'émulateur ;
  • permettre un contrôle du logiciel CEmu depuis l'interface de la calculatrice ;
  • donner la possibilité d'éditer des programmes ;
  • contourner le mode examen par ajout d'une LED afin de fournir une information contradictoire sur son activation.

Feuille d'heures

Tâche Prélude Heures S1 Heures S2 Heures S3 Heures S4 Heures S5 Heures S6 Heures S7 Heures S8 Heures S9 Heures S10 Total
Définition cahier des charges 2h 2h 4h
Installation de l'espace de travail 2h 2h 2h 6h 12h
Adaptation de l'interface graphique 1h 3h 4h
Gestion du port USB 2h 2h 2h 6h
Sauvegarde de la mémoire 2h 2h 3h 3h 3h 4h 6h 6h 29h
Exécution de programmes situés dans la mémoire flash 2h 2h 2h 2h 3h 4h 8h 8h 6h 6h 43h
Éditeur de programmes 3h 2h 5h
Contournement du mode examen 1h 2h 3h
Documentation langages (C++, Javascript, etc) 3h 3h 3h 2h 2h 13h
119h

Avancement du Projet

Semaine 1

  • Correction et enrichissement du cahier des charges suite aux remarques de M. Dhaussy
  • Récupération d'un exemplaire de la calculatrice Ti-83 premium CE
  • Téléchargement et installation des ressources CEmu fournies par la communauté (source: https://github.com/CE-Programming/CEmu )

Liste de matériel fourni:

  • une calculatrice Ti-83 Premium CE
  • un câble USB mini-A/mini-B
  • deux câbles USB type-A/mini-B
  • un bloc d'alimentation USB
  • une notice d'utilisation et une d'information

Semaine 2

J'ai commencé par réaliser une analyse des éléments composant l'émulateur. Le core du programme est constitué de 23 fichiers C chacun liés à une fonction particulière telle que la gestion du clavier, la gestion de l'usb, la gestion de la mémoire flash, etc. Chacun de ces fichiers possède un fichier C++ correspondant destiné à être utilisé par l'interface graphique. La source comporte des fichiers de debugage à activer à la compilation. La compilation des fichiers est prévu via l'utilisation du logiciel QT.

Pour Windows il existe un binaire prêt à l’exécution. Celui-ci permet de rapidement tester les fonctionnalités de l'émulateur (il faut fournir une ROM de la calculatrice). Pour pouvoir implémenter mon code il me faudra cependant passer par QT afin de le compiler. L'environnement Windows étant bien incomplet pour cela, je tente de télécharger toutes les fonctionnalités nécessaires pour pouvoir compiler: si je n'y parviens pas je travaillerai exclusivement sous Linux. Le code écrit en C et C++ restera cependant portable et utilisable par les deux systèmes d'exploitation.


La communauté continue de travailler sur CEmu et progresse sur des fonctionnalités telle que la gestion de l'USB. Après recherche, voici comment j'évalue la faisabilité de mon cahier des charges:

  • adapter l'interface graphique: ne devrait pas poser de problème. Étant programmée en C++ j'attends d'avoir fait davantage de Java en classe afin de facilement et rapidement implémenter les changements nécessaires ;
  • ajouter la gestion du port USB: risque de s'avérer compliqué. Des pistes de travail sont déjà proposées par des membres de la communauté: je prévois de les reprendre et de les faire progresser le plus possible ;
  • permettre la sauvegarde structurée de la mémoire sans utilisation d'utilitaire: semble abordable. Des fonctions similaires semblent déjà exister (je dois encore creuser pour savoir si ce point n'est pas déjà résolu par la communauté) ;
  • permettre aux programmes en mémoire flash de s’exécuter directement dans l'émulateur: il semble que cette fonctionnalité soit déjà disponible. À confirmer ;
  • permettre un contrôle du logiciel CEmu depuis l'interface de la calculatrice: à mon avis infaisable sans une gestion fonctionnelle du port USB. Ce point ne sera pas traité ou le sera après tous les autres ;
  • donner la possibilité d'éditer des programmes: il est possible depuis l'émulateur d'accéder à la mémoire et de l'éditer. Il devrait être assez rapidement possible d'éditer des programmes entièrement depuis l'émulateur ;
  • contourner le mode examen par ajout d'une LED: après ouverture de la calculatrice il semble qu'il n'y aura pas suffisamment de place pour ajouter un petit circuit comportant une LED ;


Semaine 3

Décryptage du code présent dans le projet, notamment sur des fonctions concernant la gestion de la mémoire.

Renseignement sur les divers logiciels existant autour de TI:

  • téléchargement et installation de TiLP afin de permettre le transfert de fichier entre la calculatrice et le PC ;
  • téléchargement de TI-Connect permettant des fonctionnalités identiques mais étant la version officielle de la marque TI ;

Je n'ai pas réussi à faire fonctionner ces deux logiciels pour récupérer les images de ROM de la calculatrice. L'image de ROM étant protégée par une licence, il est impossible d'en trouver une légalement en ligne. J'espère pouvoir rapidement trouver une solution afin de pouvoir tester le logiciel au plus vite.

Etant donné la complexité de l'installation d'un environnement fonctionnel de travail sous Windows, j'installe une machine virtuelle Ubuntu grâce à Oracle VM.

Semaine 4

Le disque dur de mon PC a rendu l'âme. En attendant un remplacement je continu d'analyser le code pour comprendre où des modifications seront à apporter.


Semaine 5

Après réinstallation du système, TI-Connect fonctionne (il semble qu'il y avait un conflit avec TiLp). J'ai donc pu récupérer l'image ROM de la calculatrice et tester le logiciel.

Après recherche dans les documents programmés en C++ et régissant l'interface graphique j'ai pu trouver les fichiers relatifs au clavier. Il s'agit des fichiers situés dans le répertoire \gui\qt\keypad. Chaque ensemble de touche (flèches, numériques, symboles de calcul + - * /, fonctions, etc) est géré par un fichier permettant un affichage correct des boutons. Les fichiers "keymap" permettent de définir lister les fonctions relatives à chaque touche.

La retouche de l'interface graphique s'est alors révélée rapide: il a suffit d'éditer un fichier jpeg et de modifier quelques valeurs numériques pour obtenir les formes de touches voulues. Après tests, il semble que toutes les fonctionnalités de la TI-84 premium soit réparties identiquement sur la version TI-83 premium.

Interface graphique

Semaine 6

Contacte avec l'un des contributeurs du projet, Adrien Bertrand, qui m'a permis de mieux comprendre l'architecture du logiciel.

  • analyse des fichiers du core gérant les interactions avec la mémoire
  • test de Smartpad CE pour la gestion à distance de la calculatrice (pas d'accès au code source malheureusement)
  • travail sur les avancés du projet concernant l'émulation USB
  • continuation de l'analyse de la gestion de la mémoire à l'intérieur de CEmu

Semaine 7

Découverte de PHASM (https://github.com/MathisLav/PHASM) et Cesium (https://github.com/MattWaltz/cesium/tree/master/src), deux logiciels permettant l'exécution de programmes en mémoire flash.

Je choisis d'utiliser PHASM

  • test du logiciel (qui est un programme TI à implémenter sur la calculatrice)
  • analyse du code source
  • analyse de la fonctionnalité "autotesteur" de CEmu afin de scripter l'envoi de PHASM sur la calculatrice
  • documentation sur le javascript (fichiers .json) nécessaire à l'utilisation de l'auto-tester

Le codage d'un tel programme repose sur plusieurs centaines de lignes de code rédigée en code assembleur par les développeurs, je ne pense donc pas pouvoir programmer moi-même de quoi exécuter des programmes en mémoire flash sans passer par PHASM.

Semaine 8

Après discussion avec Adrien Bertrand, il s'avère qu'il reste trop de travail sur la gestion du port USB pour pouvoir le finir à temps. Sachant qu'une connexion direct avec la TI n'est alors plus envisageable, je suis contraint d'abandonner l'idée de contrôler la calculatrice directement depuis le logiciel CEmu ou à l'inverse, de contrôler directement CEmu depuis la calculatrice.

Il n'y a définitivement pas assez de place à l'intérieure de la TI pour installer un petit circuit permettant de détourner le mode examen. L'accès à la LED (l'endroit d'où la LED est visible une fois le boitier fermé) est difficile et l’absence de documentation sur le circuit imprimé de la TI-83 me fait abandonner cet objectif.

Continuation du travail entamé avec PHASM et sur le scriptage de son implémentation.

Semaine 9 et 10

Les travaux sur la sauvegarde de la mémoire n'aboutissent pas: je ne sais pas qu'elles fonctions utiliser, je ne parviens pas à bien utiliser la ROM de la calculatrice. Finalement, comme la gestion du port USB n'est pas présente, il s'agit de travailler sur la mémoire de l'émulateur, ce que CEmu sait déjà faire.

Le scriptage de l'implémentation de PHASM ne fonctionne pas non plus, et le programme ne permet de toute manière pas d’exécuter des programmes qui lui sont inaccessibles tels que les packs de langue présents dans la ROM.


Mes travaux n'ont donc pas aboutis. Même si j'ai mis beaucoup de temps à avoir un espace de travail fonctionnel et à réussir à récupérer l'image ROM de la calculatrice afin de pouvoir réaliser mes test, mon erreur a été de vouloir absolument réaliser ce travail seul et de ne pas faire appel aux encadrants pour me rediriger. J'ai finalement passé énormément de temps à me documenter et a rechercher des solutions techniques de programmation sans jamais aboutir à l'exécution. Je suis profondément déçu de ne pas avoir su m'organiser convenablement.

Fichiers Rendus