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 » Convertir des addins Graph 90+E/Prizm vers Graph Math+
Slyvtt Hors ligne Maître du Puzzle Points: 2456 Défis: 17 Message

Convertir des addins Graph 90+E/Prizm vers Graph Math+

Posté le 10/02/2025 08:56

Hello,

bon, s'ouvre désormais devant nous un vaste chantier de conversion des addins Prizm/Graph 90+E (les fx-CG10/20/50) vers la nouvelle plateforme Graph Math+ (fx-CG100).

Comme vous avez pu voir par ailleurs, tout ne fonctionne pas direct out-of-the-box, et dans un certain nombre de cas, il va falloir mettre les mains dans le cambouis pour convertir les addins pour qu'ils tournent vers cette nouvelle machine.

Je crée donc ce fil pour collecter et partager l'expérience de conversion, avec les succès mais aussi les galères afin de rapidement acquérir de l'expérience et partager dans la communauté. Idéalement le but est que ça communique.


Slyvtt Hors ligne Maître du Puzzle Points: 2456 Défis: 17 Message

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


Bon je commence avec une première galère : le clavier. Ça va visiblement être un des point achoppement de la bestiole.

Je ne sais pas si actuellement le mappage du driver de clavier de gint est Ok pour la Math+, mais un keydown( KEY_FORMAT ) ne réagit pas à l'appui de la touche "FORMAT" de la machine.

Je serai d'avis de garder les touches KEY_xxx de <gint/keycodes.h> pour des soucis de compatibilité ascendante et de rajouter des appellations de touches spécifiques à la Math+ :

KEY_MTP_FORMAT qui ne branche pas sur KEY_FD comme KEY_FORMAT mais qui ait son scancode lié à sa vraie position
KEY_MTP_HOME qui ne branche pas sur KEY_MENU comme KEY_HOME mais qui ait son scancode lié à sa vraie position

En fait avoir 50 touches KEY_MTP_yyy dédiée qu'on pourrait.
Si on check gint[HWCALC] et qu'on a comme retour un truc different de FXCG100 alors on prend les anciens KEY_xxx, sinon on prends les nouvelles KEY_MTP_yyy.

En l'état ça donne des trucs vraiment chelous.

Je sais pas si je suis clair.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 24846 Défis: 174 Message

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


Atta atta c'est déjà codé tout ça, doucement. Les codes de touches suivants sont ajoutés pour la Math+ :

/* Key codes for the CG-100 */
KEY_ON          = 0xa6,
KEY_HOME        = KEY_MENU,
KEY_PREVTAB     = 0xa7,
KEY_NEXTTAB     = 0xa8,
KEY_PAGEUP      = 0xa9,
KEY_PAGEDOWN    = 0xaa,
KEY_SETTINGS    = 0xab,
KEY_BACK        = KEY_EXIT,
KEY_OK          = 0xac,
KEY_CATALOG     = 0xad,
KEY_TOOLS       = KEY_OPTN,
KEY_FORMAT      = KEY_FD,
KEY_SQRT        = 0xae,
KEY_EXPFUN      = 0xaf,

Comme tu peux le voir toutes les touches qui ont un équivalent raisonnable sont affectées. Pour KEY_FORMAT il y a peut-être juste un bug dans le driver mais normalement elle doit se générer correctement.

Pour la compatibilité des vieux programmes recompilés sans adapter les sources, les touches F1...F6 peuvent être obtenues sur la Math+ en tapant CATALOG + une touche de la ligne dessous (XOT...e^). Ce choix vient du fait que (1) il faut nécessaire à mon avis de respecter la géométrie, (2) il est peu probable que cette combinaison soit en conflit avec les applications futures, (3) CATALOG n'était pas une touche sur la Graph 90+E donc cette combinaison ne peut pas être en conflit avec les applications passées.

Si j'ai bien visé le driver clavier Math+ permet de saisir toutes les touches de contrôle (lignes du haut) du clavier 90+E.
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: 2456 Défis: 17 Message

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


Hello. Ok, faut que je regarde de plus près car y a un truc que visiblement j'ai manqué.
J'ai un comportement weird lors de la conversion de la cSDL.
Je te tiens au courant.
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 10/02/2025 14:28 | #


Félicitations @Slyvtt pour avoir l'immense courage d'amorcer ce travail titanesque ; nous avons 14 ans d'add-ins à adapter ! 👍
Parisse Hors ligne Membre Points: 589 Défis: 0 Message

Citer : Posté le 10/02/2025 20:29 | #


Concernant la compatibilité binaire sans recompilation, qu'est-ce qui empêche de remettre les 10 octets de la 90 en 0x80020070
et mettre en 0x8002007c sur 4 octets l'adresse de notre propre liste d'adresse des syscalls ? Il faut 32K pour la table, mais il y a plein de place libre dans la partie OS de la flash, par exemple on pourrait stocker ce tableau en 0x80738000. Ca donnerait

00020070   D2 02 40 08  00 2E 40 2B  00 09 00 00  80 73 80 00

On peut mettre la table générée avec mon prog de recherche de syscalls, après un rapide review (par ex. mon prog ne détecte pas GetKey, mais il détecte la quasi-totalité de ceux que j'utilise dans KhiCAS).
https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/mpm/findsyscall.cc

Pour les touches, je suis assez convaincu que la solution que j'adopte pour KhiCAS, les touches de la ligne du dessous de l'écran, en remplaçant juste le curseur vers le haut par tools pour F4, sera la plus naturelle. Cela nécessiterait toutefois de détourner GetKey vers GetKeyWait_OS pour pouvoir utiliser une table. Celle que j'ai codée pour l'instant pour les touches normales et presque toutes les touches shiftées c'est:

#ifdef MPM
const unsigned short translated_keys[] =
{
  // non shifted
  KEY_CTRL_F1,KEY_CTRL_F2,KEY_CTRL_F3,KEY_CTRL_UP,KEY_CTRL_F5,KEY_CTRL_F6,
  KEY_CTRL_SETUP,KEY_CTRL_EXIT,KEY_CTRL_LEFT,KEY_CTRL_OK,KEY_CTRL_RIGHT,KEY_CTRL_PAGEUP,
  KEY_CTRL_SHIFT,KEY_CTRL_ALPHA,KEY_CTRL_VARS,KEY_CTRL_DOWN,KEY_CTRL_CATALOG,KEY_CTRL_F4,
  KEY_CTRL_XTT,KEY_CHAR_FRAC,KEY_CHAR_ROOT,KEY_CHAR_POW,KEY_CHAR_SQUARE,KEY_CHAR_EXP,
  KEY_CHAR_COMMA,KEY_CHAR_SIN,KEY_CHAR_COS,KEY_CHAR_TAN,KEY_CHAR_LPAR,KEY_CHAR_RPAR,
  '7','8','9',KEY_CTRL_DEL,KEY_CTRL_AC,KEY_CTRL_AC,
  '4','5','6',KEY_CHAR_MULT,KEY_CHAR_DIV,65535,
  '1','2','3',KEY_CHAR_PLUS,KEY_CHAR_MINUS,65535,
  '0','.',KEY_CHAR_EXP,KEY_CHAR_PMINUS,KEY_CTRL_EXE,65535,
  // shifted
  KEY_CTRL_F7,KEY_CTRL_F8,KEY_CTRL_F9,KEY_CTRL_F10,KEY_CTRL_F11,KEY_CTRL_F12,
  KEY_CTRL_SETUP,KEY_CTRL_EXIT,KEY_SHIFT_LEFT,KEY_CTRL_OK,KEY_SHIFT_RIGHT,KEY_CTRL_PAGEDOWN,
  KEY_CTRL_SHIFT,KEY_CTRL_ALPHA,KEY_CTRL_VARS,KEY_CTRL_PAGEDOWN,KEY_CTRL_CATALOG,KEY_CTRL_F4,
  KEY_CHAR_STORE,KEY_CTRL_MIXEDFRAC,KEY_CHAR_POWROOT,KEY_CHAR_LOG,KEY_CHAR_LOG,KEY_CHAR_LN,
  ':',KEY_CHAR_ASIN,KEY_CHAR_ACOS,KEY_CHAR_ATAN,'=',KEY_CTRL_CLIP,
  KEY_CHAR_PI,KEY_CHAR_ANGLE,KEY_CHAR_IMGNRY,KEY_CTRL_INS,KEY_PRGM_ACON,65535,
  '[',']',KEY_CHAR_LIST,'{','}',65535,
  KEY_CHAR_LIST,KEY_CHAR_MAT,KEY_CTRL_F3,KEY_CHAR_LBRCKT,KEY_CHAR_RBRCKT,65535,
  KEY_CHAR_IMGNRY,KEY_CHAR_EQUAL,KEY_CHAR_PI,KEY_CHAR_ANS,KEY_CHAR_CR,65535,
...
Lephenixnoir Hors ligne Administrateur Points: 24846 Défis: 174 Message

Citer : Posté le 10/02/2025 20:46 | #


Concernant la compatibilité binaire sans recompilation, qu'est-ce qui empêche de remettre les 10 octets de la 90 en 0x80020070

Argh... parce qu'il faudrait faire une mise à jour de l'OS à chaque fois qu'on trouve un syscall. C'est risqué, et ça sert à rien, l'UBC le fait aussi bien depuis mpm.bin.

On peut mettre la table générée avec mon prog de recherche de syscalls, après un rapide review (par ex. mon prog ne détecte pas GetKey, mais il détecte la quasi-totalité de ceux que j'utilise dans KhiCAS).
https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/mpm/findsyscall.cc

J'apprécie l'effort mais trouver une correspondance sur les 6 premières instructions de façon unique n'est pas "trouver un syscall". Tu trouves pas que ça manque de rigueur ? Quand je balance des adresses de syscall c'est pas au pif j'ai un programme qui vérifie que le code est le même entre les deux versions. Je sais que je suis chiant et lent mais on peut pas balancer des adresses au hasard, t'as jamais lu les énormes warnings de SimLo comme quoi faut pas appeler des fonctions non documentées ?

Pour les touches, je suis assez convaincu que la solution que j'adopte pour KhiCAS, les touches de la ligne du dessous de l'écran, en remplaçant juste le curseur vers le haut par tools pour F4, sera la plus naturelle.

Je diffère.
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 21:08 | #


Je ne teste pas 6 adresses, mais 16, la proba d'une égalité sur des octets pris au hasard est de 1/2^256, moins que 1e-77, celle d'une similarité est de 1/2^128 soit moins que 1e-38. Et je ne mets dans la table une adresse non nulle que si elle est la seule égalité ou similarité détectée sur toute la rom. En calcul formel, on utilise très souvent des algorithmes non déterministes (Monté-Carlo) avec des probas d'échec bien supérieurs, typiquement 1e-18 est déjà considéré comme très sur, pour tester la primalité, c'est plutôt 1/2^40 avec 20 tests de Miller-Rabin, soit du 1e-12. Obtenir une réponse déterministe, ça serait juste beaucoup trop long.
Bien évidemment, je ne peux pas garantir un risque d'erreur nul, mais je pense qu'il est infime, d'autant plus que les syscalls utilisés par un addin sont en nombre beaucoup plus restreints que la table complète des 8000.
Ca m'a permis de découvrir pas mal de syscalls pour lesquels tu n'avais pas de réponse et qui permettent à KhiCAS de fonctionner dès maintenant, par ex. Bdisp_EnableColor, GetSetupSettings, ...
Slyvtt Hors ligne Maître du Puzzle Points: 2456 Défis: 17 Message

Citer : Posté le 10/02/2025 22:44 | #


Slyvtt a écrit :
Hello. Ok, faut que je regarde de plus près car y a un truc que visiblement j'ai manqué.
J'ai un comportement weird lors de la conversion de la cSDL.
Je te tiens au courant.


C'est bon j'ai trouvé ma connerie, car il faut appeler un chat un chat
Ma branche 'dev' de la SDL était pas à jour, j'avais pas changé les répertoires d'installation des libs et des headers lors du changement d'architecture du fxsdk (passage à GCC 12 et support de la libstdc++), du coup ça compilait et installait le .a et les .h a jour pas à la bonne place et je continuais de linker avec la vieille lib
There are only 10 types of people in the world: Those who understand binary, and those who don't ...

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 75 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