StrmnNrmn nous en apprend plus sur la façon dont il a fait fonctionner Super Smash Bros : quel était donc ce bug ?
Lorsque StrmnNrmn nous annonçait avoir réussit à résoudre les graphismes qui ne s'affichaient pas comme il se devait, il nous a aussi laissé entendre qu'il allait nous donner plus de détails sur le cas de Super Smash Bros.
Au tout début de ses découvertes, StrmnNrmn a remarqué que Super Smash Bros (SSB) fonctionnait réellement bien sans dynarec, mais lorsque celui-ci était activé le jeu connaissait des ralentissements notables.
StrmnNrmn programme depuis près de six ans et selon lui, la programmation de dynarec est extrêmement difficile puisque le code est généré sur le champ. Vous ne pouvez pas résoudre vos soucis facilement puisque le fonctionnement du code généré par le dynarec n’est pas aisément identifiable. Pour en faire une analogie, c'est comme si vous étiez aveugle sur le coup.
Il a déjà du réparé un dynarec de 500 millions de lignes de codes sans savoir où était situé le problème, et sans même connaître les liens entre les lignes de programmation. Il nous partage quelqu’un de ses trucs pour aller identifiez la source des problèmes liés au dynarec.
Avec toutes ses années d'expérience, la première opération qu’il tente est de faire fonctionner le jeu sur PC, et ainsi travailler avec des solutions beaucoup plus rapides sur ordinateur, comme Visual Studio. Le système de debug est environ 10 fois plus rapide sur PC que sur PSP et il n'a jamais réussit à faire fonctionner celui ci sur PSP.
Mais ce n’est pas tous les jeux qui peuvent être résolu de cette façon puisque le processus de génération du code est différent sur PSP que sur PC. La console portable utilise le générateur MIPS et votre PC se sert de x86. S’il réussit à créer le même problème sur PC et PSP, il pourra vérifier les différences de codes des sections qui sont similaires entre les deux plateformes.
Heureusement, ce genre de problèmes est présent autant sur PSP et sur PC. La prochaine étape est de réaliser pourquoi le jeu agit différemment avec dynarec. En partant du principe que l’émulateur avec dynarec sans bugs donne exactement le même résultat que sans dynarec. Il a donc comparé les deux logs avec et sans dynarec pour déterminer ce qui clochait.
Malheureusement, tous n’est pas rose, cette technique a des limites parce que la synchronisation n’est pas parfaite avec ou sans dynarec. Le problème peut apparaître à un endroit plus loin que ce qui était prévu.
Il a su créer un programme pour séparer la simulation du dynarec en plusieurs morceaux pour ainsi crée une parfaite synchronisation toujours dans le but de réparer plus rapidement le processus erroné.
Daedalus a quatre modes :
1 : Dynarec et l'exécution en fragment
2 : Dynarec et la simulation en fragment, mais avec un arrêt imprécis dans le champ de code
3 : Dynarec et la simulation de fragment et avec un arrêt précis dans le champ de code
4 : Le noyau du dynarec, qui laisse sa place à l'interprétation
Ce programme permet de se convaincre que la simulation régit de la même façon que l’exécution du dynarec. De ce même fait, l’exécution a les mêmes propriétés que tout le noyau du dynarec. Il permet donc de faire le pont entre ses deux modes qui serait pratiquement impossible de comparer sans ce programme.
Rendez-vous demain sur PSPGen pour la suite : comment StrmnNrmn a t’il bien pu trouver le bug en utilisant cette technique ? Vous le verrez demain !
Retrouvez les précédents articles sur ce sujet :
- DAEDALUS : un point sur Super Smash Bros
- DAEDALUS : un petit point sur l'avancée de la R12.
- [WIP] Daedalus : le dynarec actif avec Goldeneye
Commentez cette news en cliquant ICI