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: 24846 Défis: 174 Message

MPM : Mod add-ins Math+

Posté le 02/12/2024 12:36

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.



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.



Précédente 1, 2, 3, 4, 5, 6, 7 Suivante
Parisse Hors ligne Membre Points: 589 Défis: 0 Message

Citer : Posté le 06/02/2025 12:45 | #


Voici un programme permettant de détecter les syscalls, et qui génère une table de syscalls similaire à celle utilisée par la 90 en 0x80020070. Il faut avoir une rom de 90 (rom90.bin) et une autre rom dont on cherche les adresses des syscalls (rommp.bin)

#include <iostream>
#include <stdio.h>
#include <string.h>

// bigendian int at
unsigned intat(const unsigned char * s){
  unsigned res=s[0];
  ++s; res *= 0x100; res += *s;
  ++s; res *= 0x100; res += *s;
  ++s; res *= 0x100; res += *s;
  return res;
}

unsigned short revert(unsigned short u){
  return ((u&0xff)<<8) | (u>>8);
}

unsigned findsyscall(const unsigned short * buf90,const unsigned short * bufmp,int s,unsigned offset,int calln,int nwords){
  offset += 4*calln;
  offset &= 0xffffff;
  printf("offset %x\n",offset);
  offset=intat(((const unsigned char *) buf90)+offset);
  printf("syscall 90 address= %x\n",offset);
  if (offset<=0x80000000 || offset>=0x80800000)
    return 0;
  offset &= 0xffffff;
  const unsigned short * ptr90=buf90+offset/2;
  printf("bigendian values %4x %4x %4x %4x %4x %4x %4x %4x\n",revert(ptr90[0]),revert(ptr90[1]),revert(ptr90[2]),revert(ptr90[3]),revert(ptr90[4]),revert(ptr90[5]),revert(ptr90[6]),revert(ptr90[7]));
  unsigned short p0=*ptr90,p1=ptr90[1];
  int found=0;
  for (unsigned u=0;u<s/2;++u){
    if (bufmp[u]!=p0 || bufmp[u+1]!=p1)
      continue;
    if (memcmp(ptr90,bufmp+u,2*nwords)==0){
      offset=0x80000000+2*u;
      printf("same start on math+ at %x %x\n",offset,2*u);
      printf("bigendian values %4x %4x %4x %4x %4x %4x %4x %4x\n",revert(bufmp[u+0]),revert(bufmp[u+1]),revert(bufmp[u+2]),revert(bufmp[u+3]),revert(bufmp[u+4]),revert(bufmp[u+5]),revert(bufmp[u+6]),revert(bufmp[u+7]));
      ++found;
    }
  }
  if (found){
    printf("Found %i same start\n",found);
    return found==1?offset:0;
  }
  // similar means that at 4-aligned address, if starts with rom/ram value
  // 0x80, 0x8c or 0xfd, then skip address
  // also skip relative PC offsets
  p0 &= 0xff;
  p1 &= 0xff;
  for (unsigned u=0;u<s/2;++u){
    if ((bufmp[u]&0xff)!=p0 || (bufmp[u+1]&0xff)!=p1)
      continue;
    int i=2;
    for (;i<nwords;++i){
      unsigned short p=ptr90[i];
      p=p&0xff;
      if ((bufmp[u+i]&0xff)==p){
        if (i%2==0){ // skip whole address in rom/ram
          if (p==0x80 || p==0xa0 || p==0x8c || p==0xfd){
            ++i;  
          }
        }
        continue;        
      }
      break;
    }
    if (i>=nwords){
      ++found;
      offset=0x80000000+2*u;
      printf("similar start on math+ at %x %x\n",offset,2*u);
      printf("bigendian values %4x %4x %4x %4x %4x %4x %4x %4x\n",revert(bufmp[u+0]),revert(bufmp[u+1]),revert(bufmp[u+2]),revert(bufmp[u+3]),revert(bufmp[u+4]),revert(bufmp[u+5]),revert(bufmp[u+6]),revert(bufmp[u+7]));
    }
  }
  if (!found)
    printf("Nothing found\n");
  else
    printf("Found %i similar start\n",found);
  return found==1?offset:0;
}

int main(int argc,const char ** argv){
  int nwords=16;
  if (argc>1)
    nwords=atoi(argv[1]);
  printf("Starting mksyscall with nwords=%i\n",nwords);
  FILE * f90=fopen("rom90.bin","rb");
  if (!f90){
    printf("File rom90.bin (Graph90/FXCG50) not found\n");
    return 2;
  }
  int s=8*1024*1024;
  unsigned short * buf90=(unsigned short*) malloc(s);
  fread(buf90,1,s,f90);
  fclose(f90);
  FILE * fmp=fopen("rommp.bin","rb");
  if (!f90){
    printf("File rommp.bin (Math+/FXCG100) not found\n");
    return 2;
  }
  unsigned short * bufmp=(unsigned short *) malloc(s);
  fread(bufmp,1,s,fmp);
  fclose(fmp);
  unsigned offset=0x2007c;
  offset=intat(((const unsigned char *) buf90)+offset);
  printf("syscall 90 table at %x\n",offset);  // 0x66f2d8
  unsigned nsyscalls=0x1ff0;
  FILE * f=fopen("syscalls","wb");
  fprintf(f,"{\n ");
  for (int calln=0;calln<nsyscalls;++calln){
    unsigned addr=findsyscall(buf90,bufmp,s,offset,calln,nwords);
    printf("syscall %x addr %x\n",calln,addr);
    fprintf(f,"0x%x,",addr);
    if (calln%8==7)
      fprintf(f,"// %x\n ",calln);
  }
  fprintf(f,"};\n");
    fclose(f);
}
Lephenixnoir Hors ligne Administrateur Points: 24846 Défis: 174 Message

Citer : Posté le 09/02/2025 11:50 | # | Fichier joint


Voici l'installeur pour Math+ version 2.00. Les instructions ne sont pas très compliquées :

  1. Brancher la calculatrice en mode OS update. 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.

L'installation est rapide. Si vous avez des erreurs de communication avant l'étape 3 (rare mais ça arrive) relancez tout. Si vous avez un message d'erreur ou une System ERROR sur la calto faites-moi signe. Dans tous les cas gardez sous la main l'updater officiel pour réinstaller l'OS en cas de problème énorme (mais ça m'étonnerait).

Je joins mpm.bin avec le détail de ce qui est supporté dans le post suivant.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24846 Défis: 174 Message

Citer : Posté le 09/02/2025 12:05 | # | Fichier joint


Voici un mpm.bin à jour. Pour l'instant :
  • 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).

Pour une release propre, on attend que l'installeur soit testé sans bug chez plus de gens (pas mal de tests en interne mais ça fait pas tout) et que les syscalls soient au moins un peu émulés.

Un peu chiant les zip en PJ ^^"
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Critor En ligne Administrateur Points: 2728 Défis: 18 Message

Citer : Posté le 09/02/2025 12:09 | #


Merci et toutes mes félicitations, c'est un jour historique dans l'histoire de la communauté Casio Graph ! 👍
Parisse Hors ligne Membre Points: 589 Défis: 0 Message

Citer : Posté le 09/02/2025 12:12 | #


Je joins mes félicitations à celle de critor, je vais commencer à tester tout ça dès cet après-midi!
Calcloverhk En ligne Membre Points: 360 Défis: 10 Message

Citer : Posté le 09/02/2025 12:31 | #


Kudos to all MPM contributors!

I will test it once I receive my Graph Math+ from Amazon.de by 21 this month
C.Basic Wiki Project progress as of 2024/2/12
   30%


Tuper4 Hors ligne Membre Points: 1008 Défis: 23 Message

Citer : Posté le 09/02/2025 12:48 | #


Gros GG de ma part aussi!
#LepheLeBosseur
It's easy for someone to joke about scars if they've never been cut - William Shakespeare
Lephenixnoir Hors ligne Administrateur Points: 24846 Défis: 174 Message

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


Merci de la part de "l'équipe" (principalement les initiateurs du projet pour les parties subtiles d'installation et moi pour les parties utilisateur)
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 589 Défis: 0 Message

Citer : Posté le 09/02/2025 15:57 | #


Je suis en train d'avancer sur le portage de micropy (pour le moment le mpm.bin ne supporte pas des addins de grande taille comme khicas, et puis mieux vaut se faire la main avec un petit addin). Version alpha actuelle si vous voulez essayer:
https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/mpm/mpmpy.g3a
Je propose un tableau de correspondance pour simuler les touches F1 à F6 qui pourrait servir pour tous les addins à syscall dont l'interface ne sera pas réécrite (ou seulement rapidement):
F1=Settings (sauf si on peut utiliser ON)
F2=Home (j'ai mis "quit" dans le menu rapide pour pouvoir quitter facilement micropy)
F3=prevtab
F4=page down
F5=nexttab
F6=page up
Je n'arrive pas à accéder à la touche ON avec GetKey, est-ce possible? Sinon, l'autre touche qui n'est pas juste en-dessous du fmenu c'est F4, on ne peut évidemment pas rediriger la touche curseur vers le haut, du coup j'ai pris pagedown puisque pageup sert à simuler F6.

J'observe que la fonte de caractères de PrintMini a changé, elle est plus compacte pour les lettres, par contre pour les chiffres elle prend plus de place et même un peu trop à mon gout.
Lephenixnoir Hors ligne Administrateur Points: 24846 Défis: 174 Message

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


Est-ce que tu as pu installer sans souci ?

Il y a déjà un mapping pour F1...F6 dans gint qui est CATALOG + la ligne du-dessous (XOT... e^). À mon humble avis il n'y a pas de distribution convaincante et les nouvelles touches ont des sémantiques bien particulières (surtout prev/next tab et page up/down) qu'il ne vaut mieux pas toucher.

GetKey() ne permet pas de détecter la touche ON.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 589 Défis: 0 Message

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


Oui, pas de soucis d'install.

Pour F1-F6, je ne pense pas qu'il y ait de bonne solution. CATALOG+touche si tu as un addin qui affiche un menu à 6 entrées de type 90, il faut le savoir et ça nécessite 2 keystrokes. La solution que je propose utilise un seul keystroke, et est assez naturelle, tu tapes la touche juste en-dessous de l'affichage et ça marche pour 4 touches sur 6. Ca ne fait rien pour ON, du coup c'est assez naturel d'essayer la touche juste en-dessous je pense. Il n'y a que F4 pour lequel ce n'est pas naturel. Mais ça reste suffisamment logique pour qu'on s'en souvienne facilement: prevtab, pagedown, nexttab, pageup. Je remappe aussi TOOLS vers F6 (menu Fichier dans micropy ou khicas).
Dans micropy, j'ai rajouté dans l'affichage du menu de quoi s'en souvenir. Et je vais modifier les menus pour prendre en compte pageup/pagedown.
On verra à l'usage ce que les gens en pensent, ce n'est pas figé.
Lephenixnoir Hors ligne Administrateur Points: 24846 Défis: 174 Message

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


L'usage c'est de retravailler les interfaces graphiques, ultimement... de mon côté j'ai ce qu'il faut pour gintctl et les autres outils. Je passerai à un système qui marche bien sur les deux claviers.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 589 Défis: 0 Message

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


KhiCAS fonctionne aussi sur Nspire, TI83 et Numworks, je veux avoir une interface similaire avec des menus rapides avec légendes correspondantes rappelées en bas. Ceci pour pouvoir s'adapter à différentes marques de calculatrices dans une même classe/amphi (comme ça je fais une démo avec un émulateur et je dis pour ceux qui ont une ... remplacer F1 à F6 par ...).
Au départ je pensais utiliser shift-1 à shift-6 comme sur la Numworks ou la nspire, mais je ne pense pas que ce soit une bonne idée de masquer [ ], d'où mon choix.
Slyvtt En ligne Maître du Puzzle Points: 2456 Défis: 17 Message

Citer : Posté le 09/02/2025 17:04 | #


GG

Installation sans souci.
Plus qu'à tester un addin poour voir ;D
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: 2456 Défis: 17 Message

Citer : Posté le 09/02/2025 19:15 | # | Fichier joint


Bon en bossant un petit peu on peut faire des addins "double compatibles"

J'ai réécrit la cSDL pour supporter les deux claviers (fxCG50 et fxCG100 / Graph 90+E et Graph Math+).

Voici SDL_Tetris recompilé et modifié pour s'adapter aux deux claviers :

Gauche Droite Bas pour bouger
SHIFT pour tourner la pièce
EXIT/BACK pour sortir
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Critor En ligne Administrateur Points: 2728 Défis: 18 Message

Citer : Posté le 09/02/2025 21:43 | #


Et bien félicitations @Slyvtt, pour nous avoir ainsi signé dès ce soir la toute première application pleinement fonctionnelle sur les deux plateformes fx-CG50/100 ! 👍
Parisse Hors ligne Membre Points: 589 Défis: 0 Message

Citer : Posté le 09/02/2025 22:24 | #


Lephenixnoir a écrit :


GetKey() ne permet pas de détecter la touche ON.

J'espère que c'est possible avec GetKeyWait_OS ?
Ca me permettrait d'avoir 5 touches de fonction de manière naturelle, il suffirait de ne rien afficher pour F4, et de rediriger Tools vers F4 (qui me sert de menu des commandes).
Lephenixnoir Hors ligne Administrateur Points: 24846 Défis: 174 Message

Citer : Posté le 09/02/2025 23:43 | #


Aucune idée concrète mais à l'intuition je suis pas sûr. Les paramètres n'ont pas changé AFAIK.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 589 Défis: 0 Message

Citer : Posté le 10/02/2025 07:24 | #


Alors je vais tester avec khicas, qui utilise GetKeyWait_OS. Mais ça veut dire qu'il faut que je modifie mpm.bin à 2 endroits il me semble: la ram, je peux la mettre en 0x8c680000 au lieu de 0x8c580000? Il me semble aussi que je dois modifier le mapping pour 32 pages au lieu de 16 dans load_addin, autre chose que j'aurais oublié?
Herlock Hors ligne Membre Points: 4 Défis: 0 Message

Citer : Posté le 10/02/2025 11:45 | #


Bonjour,
J'ai installé mpm sans problème, et j'ai pu transféré micropy.
Mais impossible de le lancer: il n'apparaît pas en icône dans le menu, et le lancer manuellement (load dans 'Memory') me dit "invalid type".
Est-ce que j'ai raté quelque chose ?
D'avance merci, cordialement
Lephenixnoir Hors ligne Administrateur Points: 24846 Défis: 174 Message

Citer : Posté le 10/02/2025 11:48 | #


Si tu as installé un g3a tu le trouveras dans le menu des add-ins qui s'ouvre avec TOOLS dans le menu principal.
Je réalise que j'ai rien écrit à ce sujet, oups. >_>

Note que la compatibilité est très limitée pour le moment, le mod est plus prévu pour les développeurs.
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, 4, 5, 6, 7 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:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
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 69 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