Un compresseur d'addins pour Graph Math+ [Work In Progress - Mais problème que je ne comprends pas]
Posté le 03/11/2025 20:15
Hello,
une fois n'est pas coutume, c'est un addin de type utilitaire que je suis en train de programmer.
Mais qu'arrive-t-il donc à Papy Sly se demande la foule estomaquée !!! Rien, juste une immense frustration d'avoir l'impression de tout le temps devoir retirer des addins pour en mettre d'autres sur la Graph Math+, avec ses "seulement" 4,5Mo de flash réservé à l'utilisateur (mémoire de stockage).
Bref, je me suis dit que je ne devais certainement pas être le seul dans ce cas et j'ai donc lancé le projet "
Squish It !!" dont les sources sont sur
le dépôt de la forge ici.
Le programme permet de compresser les fichiers G3A sous un format propriétaire basé sur la compression
zlib que j'avais à l'époque mis en place sur Casio pour le portage de la SDL/SDL_image. La compression génère donc un fichier G3Z de taille réduite. On est en moyenne à un ratio de compression de l'ordre de 60%, ce qui est loin d'être négligeable, ceci revenant à avoir virtuellement une mémoire de stockage de ~10Mo (il faut un peu de marge pour pemettre les opérations de compression/décompression) au lieu des 4,5Mo de la machine.
Lorsque l'on a besoin de l'addin, il suffit en théorie de le décompresser, et on peut ensuite le lancer une fois qu'il a retrouvé sa forme de G3A reconnu par
MPM.
Bon, il y a juste un petit (enfin gros) problème à ce stade : l'OS / MPM ne voit pas les fichiers G3A générés après la décompression, bien que ceux-ci soient bien présents sur la mémoire flash. Donc c'est un peu ballot et ça casse un peu le rêve.
Voici la manip:
- Si on part d'un addin par exemple OutRun.G3A (faisant 848Kb), on peut le voir dans MPM.bin via Tools (...) sur Graph Math+.
- Je lance mon addin SquishIt, je sélectionne le fichier OutRun.G3A, je fais la compression qui me génère le fichier OutRun.G3Z (312Kb).
- De retour dans MPM.bin via Tools (...), l'addin OutRun a bien disparu (normal, le G3A n'existe plus, il est remplacé par l'archive G3Z).
- On relance SquishIt cette fois pour décompresser le G3Z et revenir au G3A, ce qui se fait sans problème. SquishIt actualise les fichiers après la décompression, ne voit plus le G3Z (normal) et voit à nouveau bien le G3A (avec la bonne taille, il y a une vérification pendant la décompression).
- on quitte SquishIt pour retourner dans MPM.bin via Tools (...), mais là OutRun n'apparait pas dans la liste des addins présent sur la machine.
- si on va dans l'application "mémoire" de l'OS, on voit bien le fichier sur la flash dans la mémoire de stockage (normal).
- Pour pouvoir voir et lancer l'addin depuis MPM.bin, je n'ai trouvé qu'une seule méthode : copier l'addin décompressé en G3A sur mon PC puis le remettre sur la calculatrice, et là il apparaît bien dans le menu de MPM.bin via Tools (...).
Bref, c'est à s'arracher les cheveux, j'ai la preuve que le G3A est fonctionnel puisque le passage avec le PC se fait sur la base d'addins compressés puis décompressés.
J'ai essayé de faire une connexion USB sans déplacer les fichiers, mais sans succès, dans ce cas MPM ne voit pas les G3A décompressés.
Bref, je comprends pas ce qui peut se passer de différent entre la copie depuis un PC et l'écriture sur la flash depuis la calculatrice.
Si quelqu'un a des idées, je suis preneur.
Attention si vous testé l'addin SquishIt, j'ai vérifié pas mal de chose, mais c'est du WIP (notamment sur Graph 90+E il plante à la phase d'effacement du fichier source G3A ou G3Z selon si compression ou décompression).
Fichier joint
Citer : Posté le 03/11/2025 20:53 | #
Khicas fait à peu près ça avec un petit addin lanceur qui est au format g3a (et donc visible par MPM) et se charge de la décompression en RAM, et deux fichiers d'extension mzs qui contiennent le code de khicas compressé (la compression est faite sur le PC). Il y a 2 fichiers parce que je charge le fichier compressé en RAM et qu'il n'y aurait pas assez de place pour tout faire d'un coup en RAM.
Le lanceur fait en plus une vérification de la signature RSA du code de khicas qui n'aurait pas lieu d'être ici.
On pourrait imaginer un addin lanceur commun qui affiche la liste des g3z et gère la décompression en RAM et le lancement.
Exécutables: https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/khicasio.html#sec4
Source: https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/mp.tgz
Citer : Posté le 03/11/2025 20:57 | #
On devrait même en faire une feature de mpm.bin, comme ça c'est invisible !
[Il faut toujours (désolé encore pour le délai) que je comprenne pourquoi le setup mémoire de KhiCAS plante avec d'autres add-ins pour éviter que tu aies à distribuer un mpm.bin différent.]
mpm.bin fait vraiment Bfile_find* donc y'a des étrangetés à debugger. Le fait que tu le voies après l'écriture est bon signe au moins.
Citer : Posté le 05/11/2025 21:53 | #
J'ai refais qq essais et j'ai tout le temps le même comportement. J'ai essayé de copier un fichier g3a (RogueLife) depuis mon PC à côté de d'addins décompressés et MPM.bin ne voit que RogueLife, pas les addins en g3a provenant d'une décompression.
Pourtant les addins sont bien tous visibles sur la flash et SquishIt les voient bien lui aussi avec un opendir.
Y'a un truc que l'on loupe qq part dans cette histoire, c'est zarb'
Citer : Posté le 05/11/2025 21:55 | #
Faut aussi que je teste sur la G90+E pour voir si on a le même problème, mais l'addin plante, faut que je comprenne ce qui se passe, le code devrait être "cg-agnostique" pourtant...
Citer : Posté le 05/11/2025 22:32 | #
Ah mais attends ils seraient pas invalides tes g3a décompressés ?
Citer : Posté le 06/11/2025 08:37 | #
Tu entends quoi par "invalides" ?
Concrètement, si je prends ces mêmes fichiers depuis la calculatrice (donc que je ne vois pas dans MPM.bin) et que je les déplace sur mon PC.
Ensuite je déconnecte la machine de l'USB puis la reconnecte en USB, histoire de bien refaire tout proprement.
Je reprends ensuite les fichiers depuis le PC (sans aucune modification je précise bien) puis les redéplace sur la calculatrice. Ensuite je déconnecte la machine de l'USB à nouveau ... Et là miracle, ils apparaissent bien dans MPM.bin, sont parfaitement exécutables ET fonctionnels (avec l'icône, les détails et tout et tout parfaitement nickel). Donc pour moi ça ne provient pas d'un mauvais fichier G3A, ils sont démontrés comme étant "valides" (au sens où la décompression ne les a pas altérés).
Donc j'ai l'impression qu'il y a une opération quelconque qui est faite lors du transfert depuis un PC que donc je ne reproduis pas avec Squishit et qui rend les Addins visibles (ou pas) par MPM.bin. Une sorte de "marquage" pour dire "Attention, y'a eu une update sur le FS, donc faut mettre à jour ta liste".
Ce qui me chagrine quand même, c'est que pendant que les fichiers sont invisibles par MPM.bin, ils sont malgré tout visibles dans le gestionnaire de mémoire (je vois les fichiers listés correctement à tout moment), alors que l'on peut penser que ce sont les mêmes syscalls (BFile*) qui sont utilisés. Donc y'a une subtilité qu'on ne maîtrise pas dans l'ensemble du processus.
Citer : Posté le 06/11/2025 08:49 | #
Hmm oui ça a l'air bon. Mais le truc c'est ça :
C'est pas une question de cache s'ils n'apparaissent pas en même temps.
Tu indiques que Bfile_Find* dans ton décompresseur après avoir décompressé le g3z, si je me souviens bien ? Peux-tu te rapprocher le plus possible du code de MPM pour exécuter exactement la même recherche (de mémoire \\fls0\*.g3a) puis mettre ton code dans la partie post-exécution de mpm.bin ?
Citer : Posté le 06/11/2025 09:06 | #
En fait dans le décompresseur je n'utilise pas directement les fonctions BFile, mais je demande une actualisation des widgets JFileSelect qui passent par opendir(), donc à un moment il doit y avoir un call aux fonctions BFile.
Je peux en effet forcer une réactualisation, histoire de voir ce que ça changerait.
En passant, point à ajouter pour être complètement exhaustif, si je décompresse un g3z en g3a, que je quitte SuishIt, puis fait un reset complet de la calculatrice, pour être bien sûr que MPM.bin va repartir d'une liste mise à jour, et bien là encore, les addins décompressés ne sont pas visibles ... malgré le passage par BFile_Find* en début de boucle.
Citer : Posté le 06/11/2025 22:22 | #
Bon j'ai tenté de faire une boucle BFind après le retour dans MPM,bin, ça ne change absolument rien au problème.
Mes addins décompressés ne sont toujours pas visibles dans MPM.bin, bien que parfaitement vus dans SquishIt et dans l'application "Mémoire".
Ca me dépasse cette histoire. C'est vraiment con car désormais mon addin fonctionne au top ...
Les autres bugs résiduels disparaissent les uns après les autres.
(Grosse frustration sur ce coup là j'avoue