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 12/11/2025 20:41 | #
Une façon facile de trouver le bug est que BFile_Find* trouve le fichier, mpm.bin non, et dans mpm.bin il y a, mais ça alors, quelques tests qui invalident les résultats de BFile_Find* sous certaines conditions et quand tu vois ça tu fonces dessus comme un rapace sur sa proie
Citer : Posté le 12/11/2025 21:56 | #
Quelques indications sur le niveau de performance :
Compression moyenne de l'ordre de 40% de la taille initiale, ça varie d'un addin à l'autre mais globalement on peut gagner pas mal de place.
Je vais continuer d'améliorer le programme pour qu'il gagne en performance et soit plus sympa à utiliser.
Citer : Posté le 12/11/2025 22:05 | #
Je t'invite peut-être à noter la taille du g3a en en-tête du g3z (si tu ne l'as pas déjà dans les metadata de zlib) comme ça tu peux l'afficher dans la GUI et tester s'il y a assez de place restante en mémoire de stockage avant de décompresser
Citer : Posté le 12/11/2025 22:24 | #
Oui c'est déjà dans le header du g3z(et il y a une vérification post décompression que ça matche avec le fichier écrit). Juste actuellement je ne sais pas comment obtenir la place libre dans la flash. Mais c'est une des features que je voudrais ajouter.
Citer : Posté le 12/11/2025 22:28 | #
Ah oui c'est vrai qu'il manque ce syscall...
Citer : Posté le 13/11/2025 06:21 | #
Quelques indications sur le niveau de performance :
It's kind of weird that despite having a merely 5 kB difference originally, the compressed Ptune3 file is 12 kB smaller than that of Ptune4.
Still, the compression is impressive!!
Citer : Posté le 13/11/2025 06:58 | #
Yes, and it's even more impressive with Plague...
Citer : Posté le 13/11/2025 08:07 | #
Probably because Plague is mostly made of assets. For Ptune3 vs. Ptune4, being two completely different apps, I'm not personally surprised they compress differently.
It might be time to reopen the gint space optimization front, too. After all the best way to reduce add-in size is to put less code in I guess...