Posté le 10/02/2025 08:56
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
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.
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_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.
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.
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 ! 👍
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,
...
Citer : Posté le 10/02/2025 20:46 | #
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.
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 ?
Je diffère.
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, ...
Citer : Posté le 10/02/2025 22:44 | #
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