>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
C-sharp

PlayStation 5 en C#: Cómo los entusiastas están escribiendo el emulador SharpEmu

Escribir un emulador para una consola moderna es una tarea que muchos asocian con interminables muros de C++ puro y magia de bajo nivel. Sin embargo, los desarrolladores del proyecto SharpEmu decidieron tomar un camino diferente y eligieron .NET. Suena ambicioso, dado que estamos hablando de la PlayStation 5 — un sistema extremadamente complejo con arquitectura x86-64 y una API gráfica específica.

¿Por qué un programador necesita otro emulador

Si sigues la escena, probablemente hayas oído hablar de ShadPS4. Este proyecto ya está logrando grandes avances en ejecutar Bloodborne y otros títulos destacados de PS4. Los autores de SharpEmu inmediatamente pusieron un descargo de responsabilidad: no están tratando de competir ni duplicar el trabajo de nadie. Su objetivo es exclusivamente la PS5.

SharpEmu es un proyecto experimental. Está construido desde cero con fines educativos e investigación. A los desarrolladores simplemente les gusta profundizar en la arquitectura del sistema y hacer ingeniería inversa. Para nosotros, esta es una oportunidad rara de ver cómo funciona una consola moderna "bajo el capó" usando una pila tecnológica .NET familiar.

Qué puede hacer el proyecto hoy

El proyecto está en una etapa temprana. No esperes descargar un binario y ejecutar God of War Ragnarök en 4K. El enfoque del equipo está en la infraestructura y la precisión de la emulación, no en ejecutar juegos específicos.

Sin embargo, ya hay resultados:

  • Cargar archivos eboot.bin y .elf. El emulador analiza correctamente la estructura de los ejecutables de la consola.
  • Ejecutar instrucciones nativas de CPU.
  • Leer metadatos: nombres de juegos, versiones y otra información de servicio.
  • Trabajar con módulos del sistema (PRX) y soporte parcial de funciones del kernel.
  • Soporte inicial del escenario PlayGo y salida de video.

Curiosamente, algunos juegos ya alcanzan la etapa de inicialización del AGC (motor de shaders gráficos) y llaman a sceVideoOut. Por ejemplo, en Demon's Souls Remake, el emulador ya ha preparado shaders que los desarrolladores planean convertir a SPIR-V para renderizar mediante Vulkan.

Pila tecnológica y fuentes de inspiración

Elegir C# para un proyecto así es una decisión interesante. .NET moderno (versión 8 y superior) proporciona un excelente rendimiento, y trabajar con memoria y estructuras de datos en él suele ser más agradable que en C++.

Los autores de SharpEmu no ocultan que están construyendo sobre la experiencia de colegas. Varios proyectos conocidos han influido en su código y arquitectura:

  1. Ryujinx: de aquí tomaron patrones para implementar operaciones de bajo nivel en C# y manejo del sistema de archivos.
  2. Kyty: uno de los primeros emuladores de PS5, que sirvió como libro de texto sobre ejecución de código nativo.
  3. ShadPS4: ayudó a comprender los principios generales de la arquitectura de las consolas Sony para las generaciones actual y anterior.

Actualmente, la plataforma objetivo principal es Windows. Esto simplifica la depuración en las primeras etapas. El soporte para Linux y macOS está planeado para más adelante, una vez que la base del código sea más estable.

Cómo probarlo

Si quieres echar un vistazo dentro o incluso ayudar al proyecto con código, compilarlo no será difícil. Necesitarás el último .NET SDK.

Clona el repositorio:

git clone https://github.com/par274/sharpemu.git

Compila el proyecto:

dotnet build

Para ejecutar una imagen de juego mediante línea de comandos, usa PowerShell:

.\SharpEmu "путь_к_eboot.bin" 2>&1 | Tee-Object -FilePath "log.txt"

Para quién es este proyecto

SharpEmu difícilmente se convertirá en tu cliente principal de juegos en los próximos un par de años. Pero es ideal para quienes quieren aprender:

  • Programación de sistemas en C#.
  • Cómo funcionan los compiladores JIT y la traducción de instrucciones.
  • Ingeniería inversa de plataformas cerradas.

El proyecto se ve "limpio" y académico. No tiene archivos o claves propietarias; todas las pruebas se realizan con volcados de las consolas personales de los autores.

*Dreaming Sarah ya logra renderizar texturas.*

SharpEmu es un gran ejemplo de cómo se resuelven tareas complejas como la emulación de hardware usando lenguajes modernos de alto nivel. Por ahora, el proyecto es más una "sandbox" para ingenieros. Si te interesa cómo se envían los comandos de GPU en la PS5 o cómo funciona el programador de tareas en su kernel, échale un vistazo al código fuente. Leer código C# es claramente más fácil que descifrar los intrincados detalles de las plantillas de C++.

Puedes seguir las actualizaciones en su comunidad de Discord, un enlace a la cual está en el repositorio. Allí, los desarrolladores frecuentemente comparten registros y éxitos al pasar la siguiente etapa de carga de juegos pesados.

Proyectos relacionados