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: 24824 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
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

Citer : Posté le 01/02/2025 16:14 | #


Edité pour réussir à compiler, avec plein de fonctions fantomes.

Voilà mon fichier actuel, qui bien sur ne marchera qu'avec la version 2 de l'OS, j'espère qu'il n'y a pas d'erreurs, il y a 3 références qui me sont inconnues, MMPrintRef, UpdateBatteryState et INTERNAL_USBPopup
https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/mpm/syscalls.c
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

Citer : Posté le 01/02/2025 16:45 | #


En linkant, j'obtiens une première liste complète de réf. non définies recopiée ci-dessous, mais il y en a pas mal qui proviennent de la libc et pas de mon code, qui peuvent donc être ignorées, et d'autres que je peux réimplémenter. Donc la liste qui m'intéresserait en priorité, c'est _GetSetupSetting, _SetSetupSetting, _OS_InnerWait_ms, _RTC_GetTicks, _RTC_SetDateTime, _Timer_Deinstall, _Timer_Install, _Timer_Start
Et vous avez imaginé un moyen qui permettrait d'émuler _SetQuitHandler?


_Bdisp_EnableColor
_Bfile_FindFirst_NON_SMEM
_Bfile_FindNext_NON_SMEM
_Bfile_GetMediaFree_OS
_Bfile_Name_MatchMask
_Bkey_SetAllFlags
_Cursor_SetFlashOff
_DefineStatusAreaFlags
_DefineStatusMessage
_DisplayStatusArea
_EnableStatusArea
_FKey_Display
_GetFKeyPtr
_GetSetupSetting
_HourGlass
_Keyboard_PutKeycode
_LocalizeMessage1
_MB_ElementCount
_MCSDelVar2
_MCSGetDlen2
_MCSPutVar2
_MCS_CreateDirectory
_OS_InnerWait_ms
_PRGM_GetKey_OS
_PrintCXY
_PrintXY
_RTC_GetTicks
_RTC_SetDateTime
_SMEM_MapIconToExt
_Scrollbar
_Serial_IsOpen
_Serial_Open
_Serial_PollTX
_Serial_Read
_Serial_Write
_SetQuitHandler
_SetSetupSetting
_Timer_Deinstall
_Timer_Install
_Timer_Start
_Timer_Stop
_itoa
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

Citer : Posté le 01/02/2025 18:20 | #


J'ai édité le fichier de syscalls 2 messages plus haut, KhiCAS linke maintenant. Il ne reste plus qu'à tester avec l'installeur quand il sera disponible dans quelques jours. Evidemment il y a certains trucs qui ne pourront pas marcher, mais j'ai l'impression que ça ne devrait pas déjà pas trop mal marcher...
Lephenixnoir Hors ligne Administrateur Points: 24824 Défis: 174 Message

Citer : Posté le 01/02/2025 21:26 | #


_GetSetupSetting, _SetSetupSetting : Pas de réponse immédiate
_OS_InnerWait_ms : 0x80216f4c (v1), 0x8030a2dc (v2)
_RTC_GetTicks : 0x8004babc (v1), 0x8007cc0c (v2)
_RTC_SetDateTime : 0x80175418 (v1), 0x80230d94 (v2)
_Timer_Deinstall : 0x800b13d4 (v1), 0x8010def0 (v2)
_Timer_Install : 0x800b130c (v1), 0x8010de28 (v2)
_Timer_Start : 0x800b1456 (v1), 0x8010df72 (v2)
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

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


Super, j'ai mis à jour chez moi ainsi que ci-dessus. Timer_Stop est probablement proche de Timer_Start, sinon peut-être que la désinstallation le désactive?
Lephenixnoir Hors ligne Administrateur Points: 24824 Défis: 174 Message

Citer : Posté le 01/02/2025 22:12 | #


Timer_Stop: 0x800b14b2 (v1), 0x8010dfce (v2)

Je l'avais mais j'ai regardé que la liste principale pas la liste complète parce que j'ai été trop vite lol. Je regarde les autres un peu plus tard...
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

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


Merci, je l'ai inclus.
Il reste un syscall manquant qu'il serait difficile de refaire, c'est SetQuitHandler.
Lephenixnoir Hors ligne Administrateur Points: 24824 Défis: 174 Message

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


Pour l'instant il n'y aura pas de retour au menu parce que GetKey() pense qu'on est déjà dans le menu, donc appuyer sur MENU ne fait rien. Il est peu probable que ça s'améliore significativement. Auquel cas SetQuitHandler() revient juste à appeler la fonction à la fin de main().
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

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


Du coup, pour fermer un addin, il faut exécuter dans le code source un return "standard" et pas une boucle d'attente indéfinie qui teste le clavier, c'est ça?
Lephenixnoir Hors ligne Administrateur Points: 24824 Défis: 174 Message

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


C'est ça. Tu peux aussi appeler exit() si c'est fourni par la libc du PrizmSDK. Mais fondamentalement quand tu t'en vas tu peux pas revenir. (Ou alors faut avoir un mécanisme de sauvegarde/restauration de session, que tu as peut-être d'ailleurs.)
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

Citer : Posté le 02/02/2025 11:41 | #


Oui, c'est précisément à ça que sert SetQuitHandler (sauvegarder la session courante), mais du coup si l'appui sur HOME ne fait rien, je n'ai plus besoin du SetQuitHandler, puisque l'utilisateur devra explicitement sélectionner un item Quitter dans un menu.
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

Citer : Posté le 03/02/2025 21:53 | #


Je viens de tester le lancement de micropy depuis l'emulateur de Heath après avoir modifié le source pour afficher les syscalls utilisés, afin de traquer des problèmes potentiels à l'exécution sur la math+ avec le remplacement des syscalls.
Ils sont quasiment tous dans la liste que j'avais donné, à l'exception de deux syscalls d'indice:
0x0029
0x01e6
Le syscall 0x0029 est appelé en premier de manière implicite, par crt0.S (GlibAddinAplExecutionCheck), a-t-il un équivalent sur la math+? Ou faut-il modifier crt0.S?
Le syscall 0x01e6 est appelé plus tard, pendant l'affichage de la console de micropy, ça m'aiderait de savoir à quoi il correspond si quelqu'un sait.
Merci!
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

Citer : Posté le 03/02/2025 22:00 | #


Bon, j'ai posté trop vite, 0x1e6 c'est GetVRAMAddress, et il est appelé par la libgcc dans le prizm-sdk.
Il reste donc la question de crt0.S
Lephenixnoir Hors ligne Administrateur Points: 24824 Défis: 174 Message

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


%29 sera collé sur un nop dans MPM et tu peux le sauter sur la Math+.
Ça n'a aucune importance mais note que c'est certainement pas libgcc qui appelle GetVRAMAddress().
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

Citer : Posté le 03/02/2025 22:18 | #


oui, oui, c'est juste parce que j'ai mis le fichier syscalls.c dans le même répertoire que crt0.S :-)
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

Citer : Posté le 03/02/2025 22:22 | #


Du coup, je dois mettre quoi dans crt0.S à la place de
! C runtime initialization for Prizm addins
! By Tari and calc84maniac, based on Kristaba's reverse-engineered crt0.

    .extern _main
    .global initialize
  
    .section ".pretext"
    .align 2
initialize:
! Preserve things on the stack
    mov.l r14, @-r15    ! Frame pointer
    sts.l pr, @-r15     ! Return address
    mov.l r4, @-r15     ! Parameter 1
  
! Copy .data section into RAM
    mov.l v_datald, r0      ! From
    mov.l v_sdata, r2       ! To
    mov.l v_edata, r3       ! Limit
dataLoop:
    cmp/hs r3, r2
    bt dataDone             ! Stop when r2 >= r3
    mov.l @r0+, r1
    mov.l r1, @r2
    bra dataLoop
    add #4, r2              ! Delay slot
dataDone:

! Zero out .bss
    mov.l v_ram_ebss, r2    ! To
    mov.l v_ram_bbss, r3    ! Limit
    mov #0, r1              ! Constant
bssLoop:
    cmp/hi r3, r2
    bf bssDone              ! Stop when r2 <= r3
    nop
    bra bssLoop
    mov.b r1, @-r2          ! Delay slot
bssDone:
  
! RAM is now initialized

    mov r5, r14             ! Save parameter 2
    mov #1, r6
    mov #0, r4
    bsr _GlibAddinAplExecutionCheck
    mov r6, r5
  
! main(r4, r5) with same state as input (returns to our caller)
  
    mov.l main, r7
    extu.w r14, r5
    mov.l @r15+, r5
    lds.l @r15+, pr
    jmp @r7
    mov.l @r15+, r14        ! Delay slot
  
_GlibAddinAplExecutionCheck:
    mov.l v_syscall, r2
    jmp @r2                 ! _GlibAddinAplExecutionCheck
    mov #0x29, r0           ! Delay slot
  
! Constants
    .align 4
main:
    .long _main
v_syscall:
    .long 0x80020070

v_datald:
    .long _datald
v_edata:
    .long _edata
v_sdata:
    .long _sdata
  
v_ram_bbss:
    .long _bbss
v_ram_ebss:
    .long _ebss

Merci!
Lephenixnoir Hors ligne Administrateur Points: 24824 Défis: 174 Message

Citer : Posté le 03/02/2025 22:26 | #


Le plus chirurgical est juste de commenter la ligne bsr _GlibAddinAplExecutionCheck.
Mon graphe (28 Janvier): (MPM ; serial gint ; (Rogue Life || HH2) ; PythonExtra ; ? ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 569 Défis: 0 Message

Citer : Posté le 04/02/2025 10:28 | #


Un syscall que j'ai oublié: Bdisp_EnableColor, on a la nouvelle adresse?
Merci!
Précédente 1, 2, 3, 4, 5

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