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 - Vie communautaire


Index du Forum » Vie communautaire » MPM : Mod add-ins Math+
Lephenixnoir Hors ligne Administrateur Points: 24877 Défis: 174 Message

MPM : Mod add-ins Math+

Posté le 02/12/2024 12:36


Version actuelle : bêta

Instruction d'utilisation

  1. Brancher la calculatrice en mode mise à jour de l'OS. Si vous utilisez une VM, attachez la calto à la VM.
  2. Lancer mpm-installer-1.0bw.exe depuis cmd. Un échange se fait.
  3. Quand l'installeur affiche "Communicating more..." la calto se reconnecte. (Si vous utilisez une VM, attachez la calto à la VM. J'utilise une fonction naïve pour la reconnexion donc vous avez genre 10 secondes.) Attendez une seconde et appuyez sur EXE pour continuer.
  4. Ensuite suivez les instructions sur la calto, en gros TOOLS puis SETTINGS et RESTART.
  5. Transférez mpm.bin dans la mémoire de stockage.
  6. Dans le menu principal, appuyez sur TOOLS pour accéder au menu des add-ins (inactif en mode examen).

État actuel du support (2025-02-19)

  • Les add-ins compilés avec la branche dev de gint doivent marcher normalement.
  • Les add-ins gint non recompilés marcheront mais le clavier sera en désordre et tout retour au menu / accès système de fichiers / autre syscall plantera.
  • Les add-ins PrizmSDK ne marcheront pas parce qu'ils utilisent des syscalls partout (pas encore émulés)
  • Tous les add-ins modifiés pour remplacer les syscalls par des adresses explicites si les syscalls ont le même code marcheront (... tant que y'a pas en plus des fonctionnalités spécifiques aux modèles dans l'appli).

Liste de préoccupations

  • Compatibilité binaire : Pas encore clair
    Si on peut l'avoir, c'est super. Sinon, y'a un casse-tête à attendre pour traquer quels add-ins sont compatibles. L'absence de table de syscalls est le principal souci ici, ce qui peut peut-être se contourner avec un coup d'UBC pour intercepter les appels.

  • Compatibilité de la disposition clavier : Pire cas, en recompilant
    • Syscalls + GetKey() : les codes sont adaptés, certaines touches disparaissent, d'autres sont nouvelles.
    • gint sans recompiler : j'ai un trick en tête mais il vaut mieux imaginer que ça va donner des mauvais résultats.
    • gint en recompilant : la compatibilité sera assurée.

  • Reste du matériel : Quasiment garanti identique
    Il faudrait qu'un truc très gros m'ait échappé.

  • RAM étendue : Probablement OK
    Il y a de la mémoire après les 2 premiers Mo, pas sûr cependant de si l'utiliser interférera avec l'opération normale de l'OS.

  • Récupérer 16 Mo de mémoire de stockage : Pas clair
    Il faut que ça marche en pratique et c'est dur d'écarter tous risques de brick. Et je sais pas comment faire techniquement parlant.

Post original
Cliquez pour enrouler
Comme annoncé pour le Puzzle de l'Avent, un mod Math+ non-officiel est en cours de développement pour permettre d'écrire des add-ins sur la Math+.

Le mod n'est pas encore public du fait qu'il n'y a pas encore les sécurités nécessaires pour bien empêcher qu'on en abuse. Mais les questions techniques sont partiellement résolues et on commence à avoir une vue raisonnable de ce qu'on va pouvoir, ou pas, faire sur la Math+.

La préoccupation principale est si les .g3a existants vont marcher tels quels, ou compatibilité binaire. Ce serait le pied, mais c'est pas encore clair si on peut parce que la table des syscalls n'existe plus.

Par ce topic je souhaiterais savoir ce que la communauté voudrait voir dans un tel mod et discuter de la faisabilité technique. Y a-t-il des choses qui posaient problèmes sur la 90 que vous voudriez améliorer ? Des soucis attendus avec la Math+ que vous voulez voir adressés ? J'ai déjà quelques idées en tête, mais je vous laisse vous exprimer.


Fichier joint


Précédente 1, 2, 3 ··· 5, 6, 7, 8
Parisse Hors ligne Membre Points: 597 Défis: 0 Message

Citer : Posté le 13/02/2025 11:12 | #


Mais le début actuel en 0x8c400000 n'est pas compatible avec KhiCAS full (meme après avoir supprimé la doc complète), sauf si on peut écraser le code du MPM en 0x8c700000, mais cela suppose de revenir directement au menu principal. Comment peut-on faire vu que return redonne la main au MPM?
Une autre idée serait d'avoir 2 extensions reconnues par le MPM, la g3a resterait comme actuellement, et une autre, par exemple g2a ou bien mpm, qui serait virtualisée en 0x8c200000, voire meme pas virtualisée ?
Et d'ailleurs, si on a une extension différente, on pourrait peut-etre y utiliser le nouveau format graphique que Casio utilise pour les icones, qui a l'air nettement plus compact, as-tu une idée de comment il fonctionne?
Casio a maintenant 4 icones par entrée du menu principal, probablement pour afficher hors et en mode examen, sélectionné ou non. Sauf erreur de ma part, avec l'ancien format qui prend 0x2e00 octets par icone, ca ferait 0x2e00*4*20=942080 octets, du coup ils ont du trouver que ca prendrait trop de place. Sur un petit addin, le poids des icones est relativement important, cela occupe 0x6000 octets = 24K, pouvoir utiliser le meme format pourrait etre intéressant, non?
Lephenixnoir Hors ligne Administrateur Points: 24877 Défis: 174 Message

Citer : Posté le 13/02/2025 11:39 | #


Mais le début actuel en 0x8c400000 n'est pas compatible avec KhiCAS full (meme après avoir supprimé la doc complète), sauf si on peut écraser le code du MPM en 0x8c700000, mais cela suppose de revenir directement au menu principal. Comment peut-on faire vu que return redonne la main au MPM?

Le code actuel de chargement n'est pas figé, on peut continuer à itérer sur différentes méthodes de chargement. En particulier on peut faire interagir MPM avec les add-ins, pourvu que ce ne soit nécessaire que pour les add-ins qu'on recompile.

Personnellement, je viserais de :
  • Charger les add-ins juste avant 0x8c700000 ; plus ils sont petits plus ou les met loin.
  • Transmettre de MPM aux add-ins (via un paramètre optionnel de start()) des informations sur quels bouts de RAM restent utilisables après le chargement.

De cette façon, les vieux g3a, qui sont tous petits, pourront être chargés le plus loin possible et on limitera au maximum les interférences entre le code qui accède brutalement à 0x8c200000 et le système de chargement.

Pour les gros add-ins comme KhiCAS, toutes les tailles deviennent possibles jusqu'à 5 Mo peu ou prou (... modulo la place nécessaire pour décompresser, évidemment), et le restant de RAM est communiqué explicitement pour pouvoir être utilisé si le besoin se présente.

Et enfin, le jour où CASIO se met à utiliser cette zone de RAM, les add-ins qu'on aura déjà recompilés une fois s'adapteront automatiquement aux informations qu'une version à jour de MPM enverra qui contourne les zones utilisées par CASIO.

Une autre idée serait d'avoir 2 extensions reconnues par le MPM, la g3a resterait comme actuellement, et une autre, par exemple g2a ou bien mpm, qui serait virtualisée en 0x8c200000, voire meme pas virtualisée ?

On peut toujours créer des variations, toutefois moins on en met mieux on se porte. Côté HollyHock ce problème se pose actuellement avec deux formats binaire et ELF et c'est chiant, alors qu'ils ont moins de programmes que nous. Surtout, si tu crées un autre format tu perds instantanément la compatibilité avec la 90+E. Je sais que toi tu as une version de KhiCAS par modèle mais le reste des programmes de Planète Casio bénéficie d'avoir un seul g3a pour tout le monde. Tu as sans doute vu le bordel que c'est sur mono avec les SH4 et la 35+E II ; faute de sources ou de versions génériques des libs y'a des g1a spécialisés partout, c'est un peu le bordel. Donc oui, on peut le faire, mais je ne crois pas qu'on en soit arrivés là encore. Note que c'est pareil pour la compression, mon espoir est de juste compresser un g3a ou la partie post-header d'un g3a et d'avoir quand même qu'une seule version du code pour tout le monde (le site pourrait offrir les deux téléchargements automatiquement en convertissant).

Et d'ailleurs, si on a une extension différente, on pourrait peut-etre y utiliser le nouveau format graphique que Casio utilise pour les icones, qui a l'air nettement plus compact, as-tu une idée de comment il fonctionne?

Je n'ai pas de certitudes sur le fait qu'il y a un format d'icône différent. L'OS est plus petit qu'avant dans tous les cas, ils ont de la place en rab'. Personnellement je ne suis pas très en faveur de décliner le format pour les raisons exprimées ci-dessus. Si on peut compresser les g3a entiers, sûrement ce sera déjà pas mal.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 597 Défis: 0 Message

Citer : Posté le 13/02/2025 12:32 | #


Oui, si le g3a est entièrement compressé, la place occupée par les 2 icones va drastiquement diminuer sans rien faire de plus. Mais le code de l'affichage du mpm va etre plus compliqué puisqu'il va devoir faire une décompression partielle pour afficher les icones.

Fixer le début de la virtualisation du code à la taille de l'addin est effectivement optimal, c'est facile à coder et c'est facile pour moi de déterminer la fin de la zone ram utilisable meme sans interagir avec le MPM.

Tu penses vraiment que Casio va utiliser la zone de ram au-delà de 0x8c200000 de manière incompatible ? Moi j'en doute. Ca ne veut pas dire qu'ils ne le feront pas dans une de leurs apps, par ex. Python pour fournir un gros tas, mais qui est à nouveau disponible une fois sorti de leur app. Je ne vois pas de raison d'avoir des variables indispensables à l'OS en-dehors des zones qu'ils utilisent déjà.

Bon, en fait, je doute que Casio nous sorte beaucoup de nouveau sur la math+ maintenant, il y aura probablement des adaptations suite aux retours de l'utilisation de la math+ (avec à la clef une version 2.1), mais je parie que la priorité de la R&D porte sur une version monochrome pour cette rentrée ou la suivante.
Lephenixnoir Hors ligne Administrateur Points: 24877 Défis: 174 Message

Citer : Posté le 13/02/2025 12:34 | #


Je ne vois pas de raison d'avoir des variables indispensables à l'OS en-dehors des zones qu'ils utilisent déjà.

On ne le voyait pas non plus avec la 35+E II et on l'a regretté
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 597 Défis: 0 Message

Citer : Posté le 13/02/2025 13:08 | #


C'était surement pour une bonne raison?
D'ailleurs sur les monochromes, il risque d'y avoir plus de changement que sur les couleurs, j'imagine mal qu'on reste avec une résolution inférieure à la graph light...
Enfin bref on verra bien.
Lephenixnoir Hors ligne Administrateur Points: 24877 Défis: 174 Message

Citer : Posté le 13/02/2025 13:13 | #


Oui je m'attends pas à des masses mais c'est tout le paradoxe : on essaie d'anticiper des changements qu'on ne peut pas prédire.

Sur la 35+E II ils ont déplacé le tas, la pile, et le segment de données dans la RAM supplémentaire ; autant le tas on le voit venir pour Python, autant le reste y'avait pas de raison évidente.

Sur la Math+ il suffit qu'il reste des données vivantes dans le tas Python pour potentiellement tout casser. D'ailleurs j'ai pas essayé mais exécuter un add-in via MPM pendant que l'appli Python est utilisée crée sans doutes des problèmes puisque MPM ne ferme pas les applis natives quand il lance les add-ins.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2465 Défis: 17 Message

Citer : Posté le 13/02/2025 13:25 | #


D'ailleurs pendant qu'on est sur la mémoire, MPM devrait peut être écrire des zéro dans la zone allouable car si on lance 2 fois un addin, on retrouve les valeurs stockées en RAM. Il me semble sur que la G90 ou la Prizm, lorsqu'on lance un addin, il y a eu une remise à 0 de la mémoire avant.
Quand je sors d'un addin avec "Extra RAM", je fais d'ailleurs très attention de rendre la main à l'OS en mettant des zéros dans la zone allouée.

Pour le fun, avec SDL_Tetris, si on le lance 2 coups de suite, on retrouve la position des anciennes pièces de la partie d'avant avant le reset des positions. Là c'est pas grave, mais ça pourrait être plus critique dans d'autres cas.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 24877 Défis: 174 Message

Citer : Posté le 13/02/2025 13:31 | #


On peut effectivement. Je note quand même au passage que si les programmes n'initialisent pas leurs données c'est un bug dans les programmes...

Au passage, la mémoire est initialisée par l'OS à 0x55 (pour les parties originellement dédiées aux add-ins).
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2465 Défis: 17 Message

Citer : Posté le 13/02/2025 13:36 | #


Yes, je suis 100% d'accord sur l'initialisation.
Oui le "zérotage" n'est pas à 0 mais à 0x55, qui nous vaut ce superbe bleu-vert lors d'un dupdate() sans rien de dessiné (0x5555)
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Parisse Hors ligne Membre Points: 597 Défis: 0 Message

Citer : Posté le 13/02/2025 14:04 | #


Lephenixnoir a écrit :

Sur la 35+E II ils ont déplacé le tas, la pile, et le segment de données dans la RAM supplémentaire ; autant le tas on le voit venir pour Python, autant le reste y'avait pas de raison évidente.

Ca s'est passé quand? Entre la version sans Python et la suivante?


Sur la Math+ il suffit qu'il reste des données vivantes dans le tas Python pour potentiellement tout casser. D'ailleurs j'ai pas essayé mais exécuter un add-in via MPM pendant que l'appli Python est utilisée crée sans doutes des problèmes puisque MPM ne ferme pas les applis natives quand il lance les add-ins.

Effectivement, il risque d'y avoir un problème si on relance Python juste après. Tu sais comment fermer l'app courante ? Sinon, il faudrait au moins le documenter, j'imagine que les autres apps ne posent pas ce problème, en tout cas celles présentes sur les fxcg10 et 20.
Lephenixnoir Hors ligne Administrateur Points: 24877 Défis: 174 Message

Citer : Posté le 13/02/2025 15:25 | #


Ca s'est passé quand? Entre la version sans Python et la suivante?

Dès la sortie de la 35+E II, donc au passage entre la 75+E et la 35+E II.

Effectivement, il risque d'y avoir un problème si on relance Python juste après. Tu sais comment fermer l'app courante ? Sinon, il faudrait au moins le documenter, j'imagine que les autres apps ne posent pas ce problème, en tout cas celles présentes sur les fxcg10 et 20.

Non je ne sais pas encore comment fermer l'app en cours. Mais je dois pouvoir le trouver.

Note aussi qu'il y a un problème si on utilise le menu de MPM quand l'appli MEMORY est ouverte sur l'onglet mémoire de stockage. Le tas est beaucoup plus plein dans ces conditions, donc malloc() peut fournir beaucoup moins de mémoire. Une version plus ancienne de mpm.bin stockait les headers g3a dans le tas et tombait à cours de mémoire dès 3-4 add-ins si utilisée lorsque MEMORY est ouverte (erreur -99). J'ai délayé le problème en utilisant de la RAM là où le code de mpm.bin est chargé pour avoir 8 add-ins de marge mais je pense que si tu en mets 12 et que tu ouvres le menu pendant que MEMORY tourne le problème revient.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 597 Défis: 0 Message

Citer : Posté le 13/02/2025 16:26 | #


Lephenixnoir a écrit :
Ca s'est passé quand? Entre la version sans Python et la suivante?

Dès la sortie de la 35+E II, donc au passage entre la 75+E et la 35+E II.

Ok, comme mon 1er portage en monochrome c'est sur la 35eii, c'est normal que je n'ai rien vu passer.
Ici je pense qu'on n'est pas dans la meme situation, le hardware est essentiellement identique depuis bientot 8 ans et je ne vois rien d'équivalent à l'arrivée de Python qui est sans doute pour beaucoup dans les changements de la 35eii. Difficile de deviner pourquoi Casio est passé de 2 à 8M d'ailleurs, peut-etre que c'était juste une précaution pour ne pas devoir changer de hardware au cas où ils en auraient eu besoin. Et puis ca ne devait pas etre beaucoup plus cher (quelques centimes?).

Pour en revenir à la mémoire, si tu arrives à trouver comment fermer l'app courante, ca devrait améliorer, non? Sinon il faut limiter le nombre d'addins en fonction de la place qu'il te reste dans entre 8c70 et 8c78.


Arka86 Invité

Citer : Posté le 16/02/2025 12:36 | # | Fichier joint


Hello , déjà , félicitation à tous , je viens d'essayer l'installateur , malheureusement , j'ai ca comme sortie :
Commmunicating...
Calculator detected (005:010): UMS calculator (fx-CG, fx-CP400+, fx-GIII)
[2025-02-16 11:26:09   cahute error] find_win32_usb_device: CM_Get_Device_ID_ListA (disk drive) returned error 0x00000025.
[2025-02-16 11:26:09   cahute error] open_usb_link: libusb_open returned -12: LIBUSB_ERROR_NOT_SUPPORTED
cahute_open_simple_usb_link: CAHUTE_ERROR_UNKNOWN


La calculatrice se met sur l'écran du MPM mais ne répond plus a aucune touche
Apres l'avoir redémarré elle fonctionne de nouveau mais c'est toujours la même chose quand je lance l'installateur ...
Lephenixnoir Hors ligne Administrateur Points: 24877 Défis: 174 Message

Citer : Posté le 16/02/2025 12:43 | #


Alors... ça ça veut dire que Windows n'a pas associé le bon driver à la calculatrice, probablement.

Déjà pas d'inquiétude pour ta calculatrice tant que tu ne confirmes pas dans l'installeur il ne peut rien se passer de gênant.

Peux-tu aller dans le gestionnaire de périphériques et identifier le driver que Windows a collé sur la calculatrice ?
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Arka86 Hors ligne Membre Points: 1 Défis: 0 Message

Citer : Posté le 16/02/2025 13:07 | #


Merci , ca devait être un problème de port USB ou de Windows , j'ai changé de pc , maintenant j'ai toujours une erreur mais l'installateur àl'air d'avoir fonctionné et Tetris fonctionne
Commmunicating...
Calculator detected (001:003): UMS calculator (fx-CG, fx-CP400+, fx-GIII)
Communicating more...
[2025-02-16 12:48:47   cahute error] receive_on_link_medium: USB device is no longer available.
Lephenixnoir Hors ligne Administrateur Points: 24877 Défis: 174 Message

Citer : Posté le 16/02/2025 13:09 | #


Cette erreur est inoffensive en effet. Amuse-toi bien !
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24877 Défis: 174 Message

Citer : Posté le 22/02/2025 07:36 | #


@Parisse J'ai essayé le système de chargement dynamique mais ça crashe dans pas mal de situations, typiquement si je lance deux add-ins à la suite. J'imagine que tu as dû le voir aussi. J'attends de trouver quelle partie de la méthode pose problème avant de fusionner, en attendant c'est sur une branche de test.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Précédente 1, 2, 3 ··· 5, 6, 7, 8

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:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

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