Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Patch binaire MonochromeLib pour Graph 35+E II
Lephenixnoir En ligne Administrateur Points: 20989 Défis: 143 Message

Patch binaire MonochromeLib pour Graph 35+E II

Posté le 22/10/2021 17:20

Dépôt Gitea : Lephenixnoir/g35pe2-ml-patch.

Il est bien connu que l'écran de la Graph 35+E II a un protocole différent de ses prédécesseurs, ce qui pose des problèmes de compatibilité sur les add-ins. Il y a déjà un outil d'Inikiwi (dépôt) qui attaque ce problème, mais malheureusement plusieurs cas particuliers lui échappent.

Quand on a les sources : version Graph 35+E II de MonochromeLib (pas compatible autres SH4)

Cet outil se veut 100% correct, 100% automatique pour tous les patchs de MonochromeLib pour Graph 35+E II. J'espère pouvoir le déployer sur le serveur v5 avec une interface dans le style du SH4 Compatibility Tool.

Instructions d'utilisation

% ./g35pe2_ml_patch.py Addin.g1a AddinE2.g1a

Fonctionnalités :
  • Détecte les instructions accédant à l'écran via 0xb4000000 et 0xb4010000.
  • Détecte précisément les fonctions avec une heuristique (position des rts).
  • Indépendant de l'allocation de registres avec un système de pattern matching.
  • Indépendant de l'ordre des instructions dans chaque fonction (un peu trop même).
  • Détecte et patche ML_display_vram, ML_set_contrast et ML_get_contrast.

Exemple de sortie sur Evasion Survival. D'abord l'outil cherche la constante 0xb4000000 et les instructions qui la chargent :

% ./g35pe2_ml_patch.py ~/Downloads/Evasions{,E2}.g1a
T6K11 reference address b4000000 found at 0x000017d8
  0x0000172c: Load into r5
  0x00001768: Load into r2
  0x00001774: Load into r2

Ensuite il cherche les fonctions à proximité, et une fois les fonctions délimitées il détermine dans quel registre 0xb4000000 et 0xb4010000 sont chargés (s'ils le sont).

Looking for function around 0x0000172c...
  Starting at 0x0000171a after rts
  Stopping at 0x00001766 after rts
  0xb4000000 loaded in r5
  0xb4010000 loaded in r4
Looking for function around 0x00001768...
  Starting at 0x00001766 after rts
  Stopping at 0x00001772 after rts
  0xb4000000 loaded in r2
  0xb4010000 loaded in r1
Looking for function around 0x00001774...
  Starting at 0x00001772 after rts
  Stopping at 0x0000177e after rts
  0xb4000000 loaded in r2
  0xb4010000 loaded in r1

Puis, chaque fonction est testée pour identifier les fonctions connues de MonochromeLib. Ça se fait avec des motifs ; chaque fonction de MonochromeLib a un certain ensemble d'instructions connues. Les motifs recherchent ces constantes tout en laissant de la latitude à l'allocation de registres.

Ici, la première fonction est identifiée comme ML_display_vram ; vous pouvez voir chaque "Matched" qui correspond à une instruction trouvée. les "<A>" sont des variables du matching, ici on a trouvé A=0xb par exemple.

Les instructions trouvées sont ensuite patchées avec un équivalent compatible Graph 35+E II.

Function analysis for 0x0000171a ... 0x00001766:
  Identified ML_display_vram with [D0=5 D1=4 A=b B=1 C=7 D=0 E=3]:
    Matched e<A>07   at 0x00001734: eb 07
    Matched e<B>00   at 0x00001736: e1 00
    Matched e<C>04   at 0x00001738: e7 04
    Matched 6<D><B>3 at 0x0000173a: 60 13
    Matched e<E>c0   at 0x0000173e: e3 c0
  Patching at 0x00001734: eb 07 -> eb 0a
  Patching at 0x00001736: e1 00 -> e1 04
  Patching at 0x00001738: e7 04 -> e7 08
  Patching at 0x0000173a: 60 13 -> e0 00
  Patching at 0x0000173e: e3 c0 -> e3 80

Ici les deux autres fonctions sont identifiées comme étant ML_set_contrast et ML_get_contrast respectivement.

Function analysis for 0x00001766 ... 0x00001772:
  Identified ML_set_contrast with [D0=2 D1=1 A=3 B=4]:
    Matched e<A>06    at 0x00001766: e3 06
    Matched 2<D0><A>0 at 0x0000176a: 22 30
    Matched 2<D1><B>0 at 0x00001770: 21 40
  Patching at 0x00001766: e3 06 -> e3 06
  Patching at 0x0000176a: 22 30 -> 00 09
  Patching at 0x00001770: 21 40 -> 00 09

Function analysis for 0x00001772 ... 0x0000177e:
  Identified ML_get_contrast with [D0=2 D1=1 A=3]:
    Matched e<A>06    at 0x00001772: e3 06
    Matched 2<D0><A>0 at 0x00001776: 22 30
    Matched 60<D1>0   at 0x0000177c: 60 10
  Patching at 0x00001772: e3 06 -> e3 06
  Patching at 0x00001776: 22 30 -> 00 09
  Patching at 0x0000177c: 60 10 -> e0 00

Enfin, des statistiques sont affichées. Le script considère le patch un succès si ML_display_vram a été trouvée et patchée.

References found to b4000000: 1
References found to b4010000: 1
Functions: 3 hints, 3 analyzed, 3 patched
ML_display_vram found: True
Success!

S'il y a des add-ins qui ne passent pas ou des bugs, faites-moi signe. Je maintiendrai le script pour garantir que la conversion soit consistante et instantanée.

Add-ins portés de façon automatique par ce patch




Lephenixnoir En ligne Administrateur Points: 20989 Défis: 143 Message

Citer : Posté le 11/11/2021 19:11 | #


Pour info pour l'instant ça marche sans souci, je viens d'y passer FX4K (dans lequel ML_display_vram a été trouvé deux fois, je sais pas pourquoi xD) et ça a marché instantanément. Dès que ce sera assez mature je regarderai pour en faire un outil en ligne.


Aoctus Invité

Citer : Posté le 20/11/2021 14:53 | #


Re-bonjour,
J'ai donc téléchargé quelques jeux sur ma Graph 35+E II mais qui n'ont pas fonctionné comme :
- Fruit Ninja
- Angry Birds
- 2048
- Pac Man
- Morpion
- Flappy Bird
- Geometry Dash
(sinon Jetpack Joyride par exemple fonctionne très bien)
J'ai lu plusieurs messages expliquant qu'avec les changements de processeur, beaucoup d'addins étaient incompatibles et c'est donc mon cas... Même en essayant ce site (qui était proposé dans le message d'un administrateur) cela ne fonctionne toujours pas...
Et y'aurait-il un moyen pour que des jeux comme Zelda ou Dragon Ball Z soient compatibles ? Enfin c'est surtout que la calculatrice ne détecte que les extensions .g1a et pas les .g1r.
Merci d'avance pour votre aide et bon après-midi.
Shadow15510 Hors ligne Administrateur Points: 5011 Défis: 16 Message

Citer : Posté le 20/11/2021 14:59 | #


Bonjour,
Le problème est d'une part le changement de processeur, mais ce changement est maintenant assez ancien. La page dont tu donnes le lien permet effectivement de régler plusieurs problèmes liés au changement de processeur.

Maintenant il faut ajouter à cela un autre problème beaucoup plus récent qui est celui du changement d'écran. Ça peut paraître un peu bête, mais le changement d'écran à rendu obsolète tous les add-ins, et l'outil linké ne patche pas ce problème. Il faut donc utiliser l'outil de Lephé (but de ce topic) ou alors recompiler les sources (souvent impossible, car on ne les a pas).

Pour les extensions en *.g1r, c'est pas trop l'endroit, mais je crois que tu peux simplement changer l'extension à la main en mettant *.g1m à la place…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir En ligne Administrateur Points: 20989 Défis: 143 Message

Citer : Posté le 20/11/2021 15:01 | #


Merci Aoctus. Je m'occupe de patcher ces jeux. Avec un peu de chance ce sera tout automatique. Repasse ce soir !

Ajouté le 20/11/2021 à 18:10 :
Voilà j'ai tout fait sauf Morpion et Pacman pour lesquels je ne vois pas de quel add-in tu parles.

Note que les .g1m et .g1r sont vraiment identiques. Tu dois vraiment pouvoir envoyer les .g1m dans la mémoire principale ; à défaut, tu peux les envoyer dans la mémoire de stockage et faire COPY (F2) ; ou bien tu peux les renommer .g1r vu que c'est le même format.

Plus de détails sur toutes ces histoires dans ce topic.


Aoctus Invité

Citer : Posté le 20/11/2021 20:52 | #


C'est bon tous les jeux marchent merci beaucoup !
Et pour le Morpion c'est bon aussi ! Je le mettais juste pas dans la bonne mémoire
Et Pacman je peux lancer le jeu mais juste après j'ai un message d'erreur qui me dit "erreur de dimension" et donc je ne peux pas y jouer mais cela ne fait rien.
Encore merci pour votre aide !
Bonne soirée

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 v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 76 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