Non classé

Orbital: Le voyage en mode sans échec.

Par Garry , le 3 juin 2019 - 8 minutes de lecture

Asseyez-vous bien, ça va être long.

Orbital: Emulateur Playstation 4

OK, faisons un voyage dans le temps, allons-nous? Imaginez-vous assis devant votre ordinateur le 28 octobre 2017. Si vous étiez un peu curieux, vous auriez peut-être cherché un émulateur PS4 ce jour-là. Et à un autre jour, vous ne trouverez que des mensonges et des escroqueries. Mais ce jour-là, quelqu'un a créé un tout petit dépôt sur Github, ne contenant rien de plus qu'une licence et un minuscule fichier Lisez-moi. Ce readme. Qu'est-ce que ça dit, je veux croire que tu as dit ça dans ta tête? "Orbital: émulateur Playstation 4." La plupart des gens penseraient simplement qu'il s'agit simplement d'une autre arnaque ou de ce genre. Mais ce développeur était la vraie chose. La raison? “Je ne suis que pour le défi technique hehe

Avant de commencer, oui. C'est une vraie citation que le développeur, AlexAltea, a dite dans une conversation avec moi. Maintenant, passons à la technique.

Qu'est ce que l'orbite? Orbital est un émulateur Playstation 4 de bas niveau basé sur la virtualisation. "Niveau faible? La virtualisation? Plongeur, es-tu saoul? Qu'est-ce que c'est?"

Voici une explication du développeur lui-même
https://github.com/AlexAltea/blog/blob/master/posts/2018-04-18-lle-vs-hle/_main.md

Cette image donne un exemple parfait de ce que font LLE vs HLE.

"Pourquoi le développeur a-t-il utilisé LLE au lieu de HLE?"
L'émulation de bas niveau (LLE), par opposition à l'émulation de haut niveau (HLE), nécessite de comprendre le matériel plutôt que de comprendre les bibliothèques de logiciels. Dans ce cas, le meilleur choix en termes de développement / inversion du temps n’est pas immédiatement évident. Alex s’est donc tourné vers LLE par goût personnel et aussi parce que:



  • Un émulateur LLE peut aider au débogage des pannes du noyau, ce qui pourrait être utile lors du développement d'exploits du noyau avec des utilisations légitimes (firmwares personnalisés, ps4-linux, etc.).

  • Contrairement aux générations de console précédentes, la PS4 fournit un processeur x86, ce qui rend la virtualisation possible avec HAXM. (Plus d'informations sur HAXM plus tard)

  • Acquérir des connaissances approfondies sur le matériel PS4 qui pourraient être utilisées par d’autres développeurs.

Et comme dans tout émulateur: conservation, améliorations, développement homebrew, etc. sont de bonnes raisons de travailler là-dessus.

Maintenant, la raison pour laquelle le titre est nommé de cette façon.

Comme le dit le récit au début, Orbital a été mis au point par AlexAltea, de son vrai nom Alexandro Sanchez Bach, le 28 octobre 2017. Orbital est la combinaison de trois projets distincts qui, ensemble, nous permettent de lancer PS4. graines. Ceux-ci étant:

orbital-bios, orbital-grub et la partie la plus importante: orbital-qemu. En résumé, orbital-bios est une plate-forme SeaBIOS qui ajoute une prise en charge aux défauts de la PS4 (pas de VGA, pas de bus ISA, etc.). Cela est nécessaire car la PS4 n’est pas vraiment un PC. orbital-grub demande simplement GRUB et ajoute un chargeur de démarrage freebsd modifié afin de prendre en charge les noyaux Orbis, car ils incluent des sections personnalisées écrites par Sony et orbital-qemu est un fork de QEMU qui ajoute une prise en charge du matériel PS4: Aeolia (USB, Ethernet, etc.) etc.) et Liverpool (GPU et audio). Mais la fin du jeu étant que l'émulateur soit complètement dépendant de ces dépendances, AlexAltea travaille sur un remplacement de QEMU appelé orbital-NG. (Plus sur cela plus tard.)

Maintenant que vous avez une idée approximative de l’émulateur, parlons de tout ce qui nous empêchait de nous rendre ici.

Premièrement, nous avons eu le problème de la traduction des instructions de la PS4 vers le PC. Puisque la PS4 et les PC modernes utilisent la même architecture, à savoir x86, nous n’avons pas besoin d’interprètes ni de recompilateurs. Ce dont nous avons besoin, c'est de la virtualisation. Nous avons donc besoin d'un hyperviseur à code source ouvert, multiplate-forme et facile à installer. Le choix était HAXM. Il est compatible avec Linux, Windows, MacOS, NetBSD. Il n’était compatible qu’avec les processeurs Intel, mais grâce aux contributions des membres du projet, il peut désormais être utilisé avec les processeurs AMD. Il existe d’autres contributions aussi importantes que celle-ci, telles que:

  • Nouvel émulateur d'instruction x86.
  • Support de débogage.
  • Création de suites de tests et configuration de CI.
  • Refactoring de code, nettoyage, améliorations, etc.

Tout cela est suffisant pour démarrer le noyau avec succès!

Maintenant, il y avait un autre problème. Le noyau fonctionnait mais il n'y avait pas encore de moteur de rendu. Heureusement, les instructions du GPU sont compatibles avec Vulkan.

Primaire axée sur GFX MMIO enregistre. Il décrit l'état du pipeline pouvant être modélisé avec Vulkan.

Emulation CP: Consomme les commandes PM4, qui peuvent déclencher des accès MMIO / mémoire, dessine, entre autres actions, qui sont mappées aux commandes Vulkan.

Emulation GCN: Le bytecode de shader GCN peut être traduit en SPIR-V consommé par les pilotes Vulkan.

Son développeur, Jhfs, a créé une fenêtre ImGui pour le rendu. Le 19 mars 2018, AlexAltea a achevé le pipeline graphique et l'émulateur a présenté des graphiques pour la première fois, bien que quelque peu buggés au début.

Mais après quelques réparations, cela a parfaitement fonctionné, pourrais-je dire.

Cette erreur que vous voyez était pour le disque dur, mais elle a été corrigée.

Maintenant que tous ces problèmes ont été résolus, nous avions une dernière chose à faire avant la fin de notre voyage. Les contrôleurs ne fonctionnaient pas, il y avait donc du travail à faire, principalement la mise en œuvre de xHCI. Heureusement, l'ancien développeur de RPCS3, Jarves, est venu à la rescousse et a beaucoup aidé dans cette entreprise.

État actuel: après la dernière mise à jour, nous avons implémenté le périphérique Aeolia XHCI (USB 3.0) pour contourner le message «Connecter DualShock» en connectant un véritable gamepad à la machine virtuelle PS4 via l'hôte relais. Nous avons rencontré de nombreux problèmes et nous les avons résolus avec l’aide précieuse de @jarves. Comme objectif futur, nous souhaitons également mettre en place un périphérique USB virtuel pour le DualShock 4 (par opposition à l’utilisation d’un périphérique physique réel).

Vous trouverez ci-dessous une explication plus détaillée de l’émulateur dans son ensemble.

Comme vous l'avez peut-être entendu dans la vidéo, nous souhaitons abandonner complètement QEMU et utiliser une version simplifiée de celui-ci contenant les éléments souhaités. Nous souhaitons également que le BIOS et le chargeur de démarrage soient débarrassés de la nécessité du bios orbital et du virus orbital.

ORBITAL-NG

orbitale est un émulateur similaire à QEMU, écrit en C ++ (pas en C) et supprimant la plupart des fonctionnalités dont nous n’avons pas besoin de QEMU (pas de traducteur binaire, pas de matériel d’architecture étrangère, pas de matériel de PC hérité, etc.). En d'autres termes, nous nous intéressons ici à l'essentiel: un back-end d'hyperviseur pour haxm, la gestion mémoire / io, la prise en charge des périphériques PCIe et la mise en œuvre du processeur graphique Aeolia / Liverpool. Une fois ce projet prêt (c’est-à-dire que nous atteignons le même menu en mode sans échec), orbital-qemu (qui est l’ancien émulateur basé sur QEMU) sera supprimé et remplacé par orbitale (que je publierai à ce moment-là!). Enfin, en installant le BIOS et le chargeur de démarrage, nous finirons par nous débarrasser de bios orbital et orbitale ainsi que. À ce moment, orbitale deviendra juste orbital et être fusionné dans le référentiel principal.

Il ne reste plus maintenant qu’à installer le micrologiciel sur le disque dur virtuel et à voir le menu principal!

Je suis en train d’encourager Alex, et merci si vous lisez cet article jusqu’à la fin!

Obtenez les derniers détails sur les émulateurs Orbital et autres PS4 sur notre page Émulateur PS4.

Garry