L’émulation, c’est avant tout « la conservation des jeux vidéo » : interview de MacDu, développeur d’un émulateur PS Vita

 
Les émulateurs ont toujours plus le vent en poupe au fil des ans, mais sont aussi la cible de bien des attaques. Pour comprendre comment et pourquoi un émulateur est créé, nous avons pu interviewer MacDu de l’équipe Vita3K.

Les émulateurs, on connaît. Ces logiciels qui nous permettent de jouer à des titres de plein de vieilles consoles, et parfois même des récentes, sur n’importe quelle plateforme ont toujours été populaires dans l’univers PC. Mais sait-on vraiment comment ils fonctionnent, et pourquoi ils sont créés ?

Alors que Nintendo a réussi à faire tomber Yuzu, l’émulateur Switch, nous avons eu le plaisir de rencontrer MacDu, l’un des développeurs français en charge de Vita3K, l’émulateur PS Vita. Le jeune étudiant en master informatique a pu nous éclairer sur les raisons de la création d’un tel projet, mais aussi le défi technique colossal que cela représente.

Comment as-tu appris à coder ?

« J’ai commencé à coder au collège avec Le Site du Zéro. Juste moi-même, en ligne. J’ai commencé avec le C++, dont j’ai suivi le tutoriel entier et que je connais le mieux aujourd’hui, et ai écrit 2/3 programmes. J’avais une brique de LEGO programmable qui était assez intéressante aussi ! Ensuite, je me suis tourné vers le Java et un peu d’autres langages. »

Le Site du Zéro, devenu OpenClassrooms aujourd’hui

Quel est ton parcours dans le monde de l’émulation ?

« J’ai d’abord créé un émulateur NES en Dart, juste pour m’amuser. Il marchait, mais il était très lent. C’était plutôt pour l’intérêt du projet en lui-même. Je me suis aussi penché sur la PS1, mais mon émulateur n’était qu’à moitié fonctionnel, avant d’arriver dans l’équipe de Vita3K. »

Qu’est-ce qui t’a motivé à te lancer dans le développement d’émulateurs ?

« Ce que j’aime beaucoup dans l’émulation, c’est qu’on doit vraiment coder l’intégralité de la machine. Il y a énormément d’aspects dans ça : comment fonctionnent les registres, comment l’image est créée, coder le CPU, le GPU, l’interface pour les manettes… C’est super intéressant. Et c’est aussi très gratifiant puisque dès qu’on fixe un bug ou qu’on implémente une nouvelle fonctionnalité, le feedback est immédiat puisqu’un jeu fonctionne enfin, ou les images sont mieux rendues. Le retour est visuel et immédiat : quelque chose ne fonctionnait pas avant, et se met à marcher d’un coup. »

Le Github de MacDu, où l’on peut retrouver son émulateur NES en Dart

Comment programme-t-on un émulateur ?

« Il faut voir qu’il y a différents niveaux d’émulation, en fonction de ce que l’on fait. Pour les machines plus vieilles, il s’agit par exemple de coder le CPU et faire en sorte que chaque instruction de la console soit transformée en une séquence compréhensible par les ordinateurs récents. Il y a des fonctionnalités bas niveau aussi, comme implémenter les registres ; certaines adresses en mémoire servent par exemple à lire l’état de la manette, donc il faut pouvoir récupérer ces informations pour déterminer si un bouton a été pressé. Et il y a ensuite le GPU, où le jeu va envoyer des instructions à la console, et l’émulateur doit récupérer ces instructions et les traduire en une séquence lisible par la plateforme voulue… C’est ce qu’on appelle du reverse engineering : on part du résultat pour trouver le code source. »

Quelles sont les plus grandes difficultés que l’on rencontre au développement ?

« La plupart du temps, surtout pour des machines relativement vieilles comme la PS Vita, la vitesse d’exécution n’est pas trop un problème. Le premier problème va souvent être le CPU, puisque de nombreuses consoles n’ont pas un processeur qui est le même que celui d’un ordinateur traditionnel. La Vita a par exemple un processeur ARM, alors que les ordinateurs sont en x86-64. Donc on doit recompiler les instructions vers quelque chose de compréhensible par les ordinateurs, mais ce sont deux architectures totalement différentes. Maintenant, on utilise des programmes JiT, pour “Just In Time recompilation”, qui permettent de recompiler en temps réel des instructions ARM en instructions x86-64. C’est très efficace.

Les principales difficultés, au moins pour la PS Vita, sont au niveau du GPU. Les consoles peuvent avoir des cartes graphiques un peu particulières qui profitent de certaines fonctionnalités qui ne sont pas forcément disponibles sur d’autres plateformes, comme les cartes graphiques traditionnelles récentes. Et si ces fonctionnalités ne sont pas présentes, c’est vraiment extrêmement compliqué de les émuler correctement. Ça peut coûter très cher sur les performances. »

Vita3K est disponible sur de nombreuses plateformes

Comment gère-t-on un développement multi-plateforme ?

« Pour prendre l’exemple de Vita3K, l’émulateur a été principalement codé pour Windows et Linux. Les deux systèmes ont des différences, mais qui impactent assez peu le développement au niveau du GPU. À l’arrivée de la version macOS, ça a déjà ajouté une difficulté supplémentaire puisque l’OS ne supporte ni OpenGL ni Vulkan, les deux librairies de fonctions qui permettent de faciliter l’accès aux GPU pour les développeurs. Ils ont leur propre interface qui s’appelle Metal. Il existe une couche de traduction qui permet d’utiliser Vulkan sur Metal, mais avec toujours quelques aspects à modifier en plus pour garantir la compatibilité.

Si on cherchait à faire une version ARM pour macOS et les Macbook, d’autres problèmes s’ajoutent en plus. Par exemple, la manière dont la mémoire est allouée est bien différente : par bloc de 4kb sur Windows et Linux, alors qu’elle est allouée par blocs de 16kb sur mac et ARM.

Il y a toujours des choses comme ça à regarder, en plus de fonctionnalités qui ne sont pas disponibles sur le GPU. De ce côté, les téléphones sont les plus difficiles. Et il y a aussi les performances, où les téléphones sont souvent beaucoup moins puissants et réclament d’utiliser des techniques différentes pour ne pas tuer les performances. Chaque plateforme requiert des feintes différentes, et les outils de débug sont beaucoup plus développés sous Windows et Linux que sous Android par exemple. »

Est-ce que ce n’est pas tentant « d’améliorer » la console qu’on cherche à émuler ?

« Le monde de l’émulation, ce n’est pas vraiment de faire mieux que la plateforme native. Parce que les jeux s’attendent à un certain comportement, et ça peut causer des incompatibilités. Pour l’anecdote, la SEGA Master System a corrigé un bug de processeur dans une nouvelle version de la console, et un jeu ne fonctionnait plus à cause de ça. Il faut vraiment être au plus proche du comportement de la machine, reproduire à l’exact au niveau du jeu.

Après, il est toujours possible d’ajouter des améliorations comme de l’upscaling ou le remplacement des textures avec un pack 4K développé par la communauté par exemple. Sur la PS Vita par exemple, il y a aussi beaucoup de jeux japonais qui n’ont pas été localisés, et des collectifs de fans les traduisent pour que nous puissions y jouer. Et ça, c’est vraiment intéressant. »

Xenogears, un jeu tristement oublié

Quel est ton but en développant un émulateur ?

« Il y a le défi de la programmation, déjà, mais aussi la conservation des jeux vidéo. Certains titres sont vraiment bien et pourraient ne plus être jouables dans les années à venir sans émulateur. Par exemple, un de mes jeux préférés est Xenogears, et celui-ci n’est pas vraiment jouable en dehors de l’émulation PS1. »

On a vu la position de Nintendo face à l’émulation… Est-ce que c’est risqué de développer un émulateur ?

« Ça dépend. Normalement non, puisque l’émulation est légale [ndlr : en France, elle est protégée par l’article L 112-6-1 du Code de Propriété intellectuelle relatif au reverse engineering] et il existe une jurisprudence [ndlr : SEGA v Accolade aux États-Unis]. C’est toujours un peu compliqué dans ce domaine-là. Je ne sais pas comment je réagirai face à une mise en demeure ou autre.

Il y a différents cas, on va dire. Pour la PS Vita, Sony l’a quasiment complètement abandonnée, donc ce serait étrange de réagir comme ça. Mais pour l’émulation de consoles toujours actives, je pense que c’est un cas un peu différent. »

The Legend of Zelda : Tears of the Kingdom sur Android // Source : Yuzu

Tu aurais un cas de conscience à développer l’émulateur d’une machine qui n’a pas encore été abandonnée ?

« Un peu, mais le cas de conscience serait surtout dans le cas où l’émulation diminuerait les profits de certains jeux. De mon point de vue, on peut regarder Zelda : Tears of the Kingdom sur Switch, où on peut argumenter que la présence d’un émulateur a eu un impact négatif sur les revenus du jeu et ce que les développeurs des jeux obtiennent. C’est quelque chose que je préfère éviter.

C’est pour ça que je parle de préservation des jeux. L’émulation doit arriver après que les titres aient fait leurs vies “normales” on va dire, c’est ici que c’est pour moi le plus important. »

Les communautés autour des émulateurs, surtout ceux qui réclament tout et n’importe quoi, peuvent être difficiles à gérer. Comment le vis-tu ?

« Je suis assez neutre et retiré par rapport à ça. J’ignore ceux qui ont des retours agressifs ou autre. Mais si je ne suis pas si affecté par ça, ça n’est pas étonnant que d’autres le soient bien plus. Pour moi, développer un émulateur est juste un hobby intéressant que je fais sur mon temps libre. On le fait gratuitement et en open source, donc d’avoir des retours comme ça avec énormément de gens qui se plaignent pour tout et n’importe quoi, surtout sur Android, c’est compliqué. »

Pourquoi avoir choisi Vita3K ?

« Je suis arrivé dessus simplement parce qu’il y avait un jeu qui m’intéressait, Tales of Hearts R, qui crashait dès qu’on le lançait ; j’ai repéré ce qui ne marchait pas et je l’ai corrigé, et j’ai renvoyé le code. J’ai juste continué par la suite, jusqu’à devenir l’un des développeurs principaux de l’émulateur. C’est aussi une console assez moderne, sortie en 2010, qui est quand même intéressante à coder et il y avait beaucoup à faire sur Vita3K à l’époque. L’avantage d’un projet open source, c’est qu’on peut vraiment s’occuper nous-même directement d’un problème. »

Quel est ton prochain grand défi dans le développement ?

« Ce qui m’embête un peu avec Vita3K, c’est que la majorité des problèmes restants sont de l’ordre graphique, et ça m’intéresse moins. Je regarde un peu d’autres choses, mais pour le moment, rien n’est fait. Surtout que, comme je le disais, je préfère éviter de développer pour des consoles encore actives. »


Envie de rejoindre une communauté de passionnés ? Notre Discord vous accueille, c’est un lieu d’entraide et de passion autour de la tech.

Les derniers articles