Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Un compresseur d'addins pour Graph Math+ [Work In Progress - Mais problème que je ne comprends pas]
Slyvtt En ligne Maître du Puzzle Points: 2772 Défis: 17 Message

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


1, 2 Suivante
Parisse Hors ligne Membre Points: 612 Défis: 0 Message

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
Lephenixnoir En ligne Administrateur Points: 25525 Défis: 174 Message

Citer : Posté le 03/11/2025 20:57 | #


On pourrait imaginer un addin lanceur commun qui affiche la liste des g3z et gère la décompression en RAM et le lancement.

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.
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2772 Défis: 17 Message

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'
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Slyvtt En ligne Maître du Puzzle Points: 2772 Défis: 17 Message

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...
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 25525 Défis: 174 Message

Citer : Posté le 05/11/2025 22:32 | #


Ah mais attends ils seraient pas invalides tes g3a décompressés ?
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2772 Défis: 17 Message

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.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 25525 Défis: 174 Message

Citer : Posté le 06/11/2025 08:49 | #


Hmm oui ça a l'air bon. Mais le truc c'est ça :

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.

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 ?
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2772 Défis: 17 Message

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.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Slyvtt En ligne Maître du Puzzle Points: 2772 Défis: 17 Message

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 )
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 25525 Défis: 174 Message

Citer : Posté le 07/11/2025 08:31 | #


Pas d'inquiétude Sly, si ça marche dans les autres add-ins ça doit marcher pour mpm.bin Je teste ce week-end, désolé que ce soit long, nouveau post-doc et tout ^^"
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2772 Défis: 17 Message

Citer : Posté le 07/11/2025 11:14 | #


Non non ne t'inquiète pas, y'a pas de soucis.
Faut que je trouve le temps de checker si on a le même problème sur la G90+E (qui du coup aurait pas la "surcouche" MPM.bin, ça permettrait de voir si ça vient a priori de l'OS ou du mod).
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Slyvtt En ligne Maître du Puzzle Points: 2772 Défis: 17 Message

Citer : Posté le 08/11/2025 11:11 | #


Lephenixnoir a écrit :
Pas d'inquiétude Sly, si ça marche dans les autres add-ins ça doit marcher pour mpm.bin Je teste ce week-end, désolé que ce soit long, nouveau post-doc et tout ^^"


Eventuellement, si tu jettes un oeil sur SquishIt, saurais tu me dire si tu vois une raison pour laquelle la décompression crash sur Graph 90 alors que ça passe sur Math+ (j'ai essayé avec GDB, mais le crash n'est pas intercepté par le debuggeur), je pense que c'est parce que je suis en world switch lorsque ça arrive. Et j'ai des adresses (PC / Target) invalides.

La version est up-to-date sur le dépôt giteapc : https://git.planet-casio.com/Slyvtt/SquishIt
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 25525 Défis: 174 Message

Citer : Posté le 08/11/2025 11:42 | #


Écrire un g3a sur Graph 90+E crashe toujours. Vois le paragraphe final dans https://git.planet-casio.com/Lephenixnoir/hex-editor
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2772 Défis: 17 Message

Citer : Posté le 08/11/2025 11:46 | #


J'étais complètement passé à travers cette info. OK donc c'est a priori "normal" alors
Je vais donc mettre une sécurité pour palier au problème.
Merci pour l'info.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Mb88 En ligne Rédacteur Points: 1294 Défis: 3 Message

Citer : Posté le 08/11/2025 16:09 | #


Lephenixnoir a écrit :
Écrire un g3a sur Graph 90+E crashe toujours. Vois le paragraphe final dans https://git.planet-casio.com/Lephenixnoir/hex-editor


Est ce que ce serait possible de résoudre ce problème en chargeant du code position independant en ram et en l'exécutant à la place pour effectuer l'enregistrement et quitter l'addin de manière sûre ?

EDIT:

Et est ce que c'est possible d'appeler le code de l'OS qui met à jour le menu d'addins ?

Cet outil a l'air vraiment cool, ce serait super qu'il fonctionne aussi sur G90 !
Slyvtt En ligne Maître du Puzzle Points: 2772 Défis: 17 Message

Citer : Posté le 09/11/2025 19:57 | #


Une petite vidéo pour montrer la phase de compression et l'interface de Squish It !!



J'ai hâte que MPM puisse voir les addins décompressés.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Loieducode En ligne Membre Points: 219 Défis: 6 Message

Citer : Posté le 09/11/2025 20:16 | #


tout simplement

Idée pour la G90: avoir un moyen de décompresser un "add-in" (enfin ca serait plus un binaire "plat", comme avec Add-In Push, vu qu'on pourra pas charger dans 0x300000) dans la RAM additionelle pour avoir des programmes >2Mo sur cette platforme
Looking for a steel cable
Lephenixnoir En ligne Administrateur Points: 25525 Défis: 174 Message

Citer : Posté le 12/11/2025 20:29 | #


Après inspection, en fait ce qui se passe c'est que mpm.bin filtrait non seulement sur le nom *.g3a mais également sur le type interne BFile_Type_Archived = 0x41 pour éviter de charger un dossier nommé *.g3a, ce qui planterait lamentablement.

Ce type était donné automatiquement à tous les add-ins sur les modèles précédents, mais plus sur la Math+, où les fichiers écrits par un add-in ont juste le type BFile_Type_File = 0x01, tandis que ceux transférés depuis le PC ont bien le type 0x41.

J'ai modifié ça et maintenant le loader liste bien les add-ins décompressés, du moins d'après un test superficiel
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2772 Défis: 17 Message

Citer : Posté le 12/11/2025 20:35 | #


Nickel, ça marche au top !!!

Merci beaucoup !! T'es un chef !!!
Je risquais pas de trouver, je connaissais pas ces différences dans les types de fichiers internes.

Du coup cette fois c'est fonctionnel comme attendu.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 25525 Défis: 174 Message

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
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
captcha
Rafraîchissez la page si vous souhaitez obtenir un nouveau CAPTCHA.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2025 | Il y a 146 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