syscalls et compatibilité SH4
Posté le 03/01/2024 23:43
Bonjour à tous
J'ai écrit un Add-In avec le fx-9860G SDK dans lequel j'utilise des syscalls pour accéder à des variables de la mémoire alpha. Je l'ai testé sur ma Graph 35+, il fonctionne plutôt bien je crois et je l'ai partagé
ici. Maintenant, je souhaite le rendre compatible avec toutes les calculatrices CASIO mais j'ai un peu du mal à comprendre cette histoire de SH3 et SH4.
D'un côté, je crois comprendre en regardant le code fourni par
Shadow15510 que le problème de compatibilité SH4 concerne seulement les fonctions impliquant les touches de la calculatrices. De l'autre en lisant les pages de la
bible correspondant au travail de Simon Lothar, je vois que les calculatrices SH4 ont la version
2.02 de l'OS dans lequel les syscalls ne sont pas aux mêmes adresses que dans les précédentes versions de l'OS (<2.02). Or le SDK fx-9860G de CASIO contient forcément pleins de syscalls. Donc si les adresses ont changées entre les deux versions de l'OS, comment se fait-il que le SDK soit compatible avec la nouvelle version sans aucune autre modification que celles des touches ??
Maintenant je reviens à mon problème. Dans mon projet, j'ai implémenté les syscalls en suivant le
le tuto de Zezombye (je précise que je ne connais strictement rien à l'assembleur). Ma calculatrice étant à priori en SH3, j'ai pris les adresses des
legacy syscalls
J'ai donc un fichier .src qui contient des choses comme ça :
.export _Alpha_SetData
.export _Alpha_GetData
_Alpha_SetData:
mov.l syscall_table, r2
mov.l Alpha_SetData_code, r0
jmp @r2
nop
Alpha_SetData_code:
.data.l H'4E0
_Alpha_GetData:
mov.l syscall_table, r2
mov.l Alpha_GetData_code, r0
jmp @r2
nop
Alpha_GetData_code:
.data.l H'4DF
syscall_table:
.data.l H'80010070
.end
et un fichier header correspondant :
char *Alpha_SetData(char variablecode, char *datasrc);
char *Alpha_GetData(char variablecode, char *datadest);
Donc pour rendre compatible mon programme SH4 sachant qu'il n'utilise pas les touches du clavier, j'ai juste à changer les adresses des syscalls dans mon fichier .src en suivant
cette table c'est ça ? ou alors je ne change rien ?
Citer : Posté le 03/01/2024 23:50 | #
Le moyen le plus simple serait d'utiliser le fxsdk + gint dès le départ, c'est le sdk + kernel dévelloppé par la communauté (enfin principalement Lephenixnoir ), et qui à travers ses fonctions permet d'éviter ces problèmes de compatibilité. Sinon il y a un outil permettant de patcher le binaire fait pour SH3 de façon à marcher sur SH4 ici -> https://tools.planet-casio.com/SH4compatibilityTool/
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 04/01/2024 00:07 | #
J'ai choisi de coder avec le fx-9860G SDK parce qu'il avait l'air plus facile à prendre en main, d'autant plus que je suis sous Windows et que gint a l'air d'être fait plutôt pour les linuxiens. Mais surtout, le fx-9860G SDK permet justement de rajouter des syscalls qui ne sont pas présents dedans par défaut. Dans mon cas, interagir avec l'OS de la calculatrice me permet d'enregistrer des valeurs dans les variables de la mémoire alpha. Je peux ensuite récupérer ces variables dans des programmes en BASIC que je lance juste après mon Add-In. Est-ce qu'une telle fonctionnalité est possible avec gint + fxsdk ?
Citer : Posté le 04/01/2024 00:23 | #
Il faut utiliser un "world switch" pour éxecuter des fonctions touchant à l'OS de Casio, mais oui c'est parfaitement possible. D'ailleurs l'ajout de syscalls par la méthode de Zezombye rentre dans cette catégorie.
Et quand a l'utilisation sur Windows, une installation a travers WSL (qui est un environement léger pour Linux sous Windows) est parfaitement possible et probablement celle la plus utilisée.
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 04/01/2024 00:23 | #
Pour ta question sur les syscalls, tu ne changes rien - la différence legacy/fxCG20 dans la doc de SimLo c'est pas SH3/SH4 c'est les Graph mono vs. les Graph couleur. Ton code devrait marcher sur SH3 et SH4 comme ça.
Concernant gint, les interactions type accès à la mémoire Alpha sont sous-développées parce qu'on s'en sert pas beaucoup, mais oui tu peux le faire (en fait tu peux quitter gint via un appel de fonction et faire du syscall comme tu veux). Personnellement, je ne dirais pas que c'est indispensable d'utiliser gint, mais la qualité de vie est attractive à mon avis. Le SDK avec le vieux compilo en C89, la moitié de la libc qui manque, et pas de support SH4 natif, c'est drôle deux minutes. ^^"
Pour le support SH4 utilise bien le "SH4 compatibility tool" donné par Fcalva et tant que tu utilises pas de syscall incompatible (... j'en connais pas trop) tu peux y aller les yeux fermés.
Citer : Posté le 04/01/2024 12:42 | #
Ah je comprends mieux maintenant, merci. Mais il me reste encore une petite interrogation : si mon code est censé fonctionner sur SH4 "comme ça", il faut quand même que je le passe au "SH4 compatibility tool" ?
Je passerai certainement sur gint si je décide de me lancer un nouveau projet
Citer : Posté le 04/01/2024 12:46 | #
La partie qui va marcher sur SH4 tout seul c'est l'appel de syscall : les numéros et paramètres de syscall sont les mêmes sur SH3 et SH4. Par contre il y a toujours une partie qui ne va pas marcher toute seule et ça c'est les histoires de clavier dont tu as entendu parler. Le SH4 compatibility tool s'occupe du clavier.
Citer : Posté le 04/01/2024 12:48 | #
Donc mon Add-In est probablement déjà compatible SH4 puisqu'il n'utilise pas les touches du clavier ! merci
Citer : Posté le 04/01/2024 15:59 | #
Bravo Astrolab! Je vois que tu avance rapidement! Plus que moi en tout cas
Citer : Posté le 06/01/2024 00:33 | #
Ahah merci ! En fait ça un peu plus d'un an maintenant que je programme sur CASIO mais je me suis inscrit ici tout récemment.