PlayStation 5 in C#: Hoe Liefhebbers de SharpEmu Emulator Schrijven
Een emulator schrijven voor een moderne console is een taak die veel mensen associëren met eindeloze hoeveelheden pure C++ en low-level magie. De ontwikkelaars van het SharpEmu-project hebben echter besloten om een andere weg te bewandelen en kozen voor .NET. Het klinkt ambitieus, aangezien we het hebben over de PlayStation 5 — een uiterst complex systeem met x86-64-architectuur en een specifieke grafische API.
Waarom Zou een Programmeur Nog Een Emulator Nodig Hebben
Als je de scene volgt, heb je waarschijnlijk wel eens gehoord van ShadPS4. Dit project boekt al grote vooruitgang in het draaien van Bloodborne en andere PS4-hits. De SharpEmu-auteurs plaatsen meteen een disclaimer: ze proberen niet te concurreren of iemands werk te dupliceren. Hun doel is uitsluitend de PS5.
SharpEmu is een experimenteel project. Het is vanaf nul opgebouwd voor educatieve doeleinden en onderzoek. De ontwikkelaars genieten gewoon van het onderzoeken van systeemarchitectuur en reverse engineering. Voor ons is dit een zeldzame kans om te zien hoe een moderne console "onder de motorkap" werkt met een vertrouwde .NET-techstack.
Wat het Project Vandaag de Dag Kan Doen
Het project bevindt zich in een vroeg stadium. Verwacht niet dat je een binary kunt downloaden en God of War Ragnarök in 4K kunt draaien. De focus van het team ligt op infrastructuur en emulatienauwkeurigheid, niet op het draaien van specifieke games.
Desondanks zijn er al resultaten:
- Laden van
eboot.binen.elfbestanden. De emulator parset correct de structuur van console-executables. - Uitvoeren van native CPU-instructies.
- Metadata lezen: game-namen, versies en andere service-informatie.
- Werken met systeemmodules (PRX) en gedeeltelijke kernel-functieondersteuning.
- Initiële PlayGo-scenario- en video-uitvoerondersteuning.
Interessant is dat sommige games al de AGC-initialisatiefase (grafische shader-engine) bereiken en sceVideoOut aanroepen. In Demon's Souls Remake heeft de emulator bijvoorbeeld al shaders voorbereid die de ontwikkelaars van plan zijn om te converteren naar SPIR-V voor rendering via Vulkan.
Technologiestack en Inspiratiebronnen
C# kiezen voor zo'n project is een interessante beslissing. Modern .NET (versie 8 en hoger) biedt uitstekende prestaties, en werken met geheugen en datastructuren is vaak prettiger dan in C++.
De SharpEmu-auteurs verbergen niet dat ze voortbouwen op de ervaring van collega's. Verschillende bekende projecten hebben hun code en architectuur beïnvloed:
- Ryujinx: hier hebben ze patronen opgepikt voor het implementeren van low-level operaties in C# en bestandssysteemafhandeling.
- Kyty: een van de vroege PS5-emulators, die diende als een leerboek over native code-uitvoering.
- ShadPS4: hielp bij het begrijpen van de algemene principes van Sony-console-architectuur voor huidige en eerdere generaties.
Momenteel is het primaire doelplatform Windows. Dit vereenvoudigt debugging in de vroege fasen. Ondersteuning voor Linux en macOS is gepland voor later, zodra de codebase stabieler wordt.
Hoe Het Te Proberen
Als je een kijkje wilt nemen of zelfs wilt helpen met code, is het bouwen ervan niet moeilijk. Je hebt de nieuwste .NET SDK nodig.
Kloon de repository:
git clone https://github.com/par274/sharpemu.git
Bouw het project:
dotnet build
Om een game-image via de command line te draaien, gebruik je PowerShell:
.\SharpEmu "путь_к_eboot.bin" 2>&1 | Tee-Object -FilePath "log.txt"
Voor Wie Dit Project Is
SharpEmu zal de komende jaren waarschijnlijk niet je primaire gaming-client worden. Maar het is ideaal voor diegenen die willen leren:
- Systeemprogrammering in C#.
- Hoe JIT-compilers en instructievertaling werken.
- Reverse engineering van gesloten platforms.
Het project ziet er "schoon" en academisch uit. Het heeft geen proprietaire bestanden of keys; alle tests worden gedaan op dumps van de persoonlijke consoles van de auteurs.
SharpEmu is een cool voorbeeld van hoe complexe taken zoals hardware-emulatie worden opgelost met moderne high-level talen. Voor nu is het project meer een "sandbox" voor engineers. Als je geïnteresseerd bent in hoe GPU-commando's worden verzonden in de PS5 of hoe de task scheduler werkt in de kernel, neem dan een kijkje in de broncode. C#-code lezen is duidelijk gemakkelijker dan de intricacies van C++-templates uitzoeken.
Je kunt updates volgen in hun Discord-gemeenschap, een link naar is in de repository. Daar delen ontwikkelaars vaak logs en successen in het doorlopen van de volgende fase van het laden van zware games.
Gerelateerde projecten