2 puntos por GN⁺ 2024-08-22 | 1 comentarios | Compartir por WhatsApp
  • shadPS4 es un emulador de PlayStation 4 en etapa temprana escrito en C++ y compatible con Windows, Linux y macOS
  • El repositorio solo incluye el núcleo del emulador y no tiene GUI, por lo que los usuarios finales deben descargar por separado QtLauncher
  • Actualmente puede ejecutar algunos juegos como Bloodborne, Dark Souls Remastered y Red Dead Redemption, pero aclara que, al estar en una fase inicial de desarrollo, es difícil esperar una experiencia completa
  • La compilación se explica mediante documentación para Docker, Windows, Linux y macOS; en macOS se requiere macOS 26.0 o superior y no se admite Intel Mac
  • Para que los juegos funcionen correctamente, es necesario colocar algunos módulos de firmware de PS4 en la carpeta sys_modules, y esos módulos deben extraerse de una consola PlayStation 4 de propiedad legal

Naturaleza de shadPS4 y público objetivo

  • shadPS4 es un emulador de PlayStation 4 en etapa temprana que funciona en Windows, Linux y macOS, y está escrito en C++
  • Este repositorio proporciona el núcleo del emulador y no incluye GUI
  • Los usuarios finales que necesiten GUI deben usar QtLauncher
  • Para resolver problemas o revisar el uso, se puede consultar la documentación de Quickstart
  • Para verificar el estado de funcionamiento de los juegos, está disponible shadPS4 Game Compatibility

Estado actual y dirección del desarrollo

  • shadPS4 indica explícitamente que está en una fase inicial de desarrollo, por lo que es difícil esperar una experiencia de ejecución perfecta
  • Algunos ejemplos de juegos que actualmente pueden ejecutarse son los siguientes
  • El proyecto comenzó por diversión, y debido al tiempo libre limitado, puede tomar tiempo llegar a ejecutar juegos más complejos
  • El equipo de desarrollo afirma que seguirá publicando actualizaciones pequeñas y regulares

Compilación y requisitos de plataforma

  • La compilación con contenedores basados en Docker y VSCode sigue las Docker Build Instructions
  • Se ofrece documentación de compilación por plataforma
  • Para ejecutar shadPS4 en macOS se requiere macOS 26.0 o superior
  • Intel Mac no es compatible

Forma de ejecución e entrada

  • La lista de comandos y la explicación detallada de cada uno pueden consultarse en la salida de --help
  • Los patrones de ejecución más comunes son los siguientes
    • shadPS4 CUSA00001: busca la carpeta CUSA00001 en la lista de carpetas de instalación del juego y la inicia
    • shadPS4 --fullscreen true --config-clean CUSA00001: por defecto, el argumento del juego se coloca al final
    • shadPS4 -g CUSA00001 --fullscreen true --config-clean: con -g se puede indicar directamente el argumento del juego
    • shadPS4 /path/to/game.elf: inicia directamente un archivo ELF de PS4
    • shadPS4 CUSA00001 -- -flag1 -flag2: pasa flags al argv del ejecutable del juego
  • Para pruebas, depuración y reporte de problemas, se puede consultar la Debugging documentation
  • Los atajos de teclado permiten usar contador de FPS, información de depuración de video, pantalla completa, captura con RenderDoc y captura de pantalla
  • Los controles de Xbox y DualShock funcionan sin configuración adicional
  • La entrada de teclado y mouse puede personalizarse desde el botón Controller del menú de configuración
    • Las asignaciones personalizadas se guardan por juego
    • Se admite mapear hasta 3 teclas por asignación, botones de mouse y movimientos de mouse mapeados a entradas de joystick, entre otros

Archivos de firmware y requisitos legales

  • shadPS4 puede cargar algunos archivos de firmware de PlayStation 4
  • Los módulos de firmware compatibles deben colocarse en la carpeta sys_modules de shadPS4
  • Entre los módulos compatibles se incluyen libSceAudiodec.sprx, libSceFont.sprx, libSceJpegDec.sprx, libSceJson.sprx, libSceLibcInternal.sprx, libScePngEnc.sprx, libSceRtc.sprx, libSceXml.sprx, entre otros
  • Estos módulos son necesarios para ejecutar correctamente los juegos
  • Los módulos de firmware deben extraerse de una consola PlayStation 4 de propiedad legal

Contribuciones y proyectos de referencia

  • Para contribuir, basta con leer CONTRIBUTING.md y abrir un PR
  • El proyecto expresa agradecimiento a los siguientes equipos y proyectos
    • Panda3DS: ayudó a entender y resolver problemas surgidos al ejecutar de forma nativa código x64 de binarios de PS4
    • fpPS4: ayudó a comprender las partes complejas del sistema operativo y las bibliotecas de PS4
    • yuzu: el compilador de shaders de shadPS4 toma como referencia el compilador Hades de yuzu
    • felix86: emulador de espacio de usuario Linux x86-64 → RISC-V
    • emudev.org: red de personas interesadas en la documentación, emulación, simulación y reimplementación de hardware cercano a la desaparición
  • La licencia es GPL-2.0 license

1 comentarios

 
GN⁺ 2024-08-22
Comentarios de Hacker News
  • Me da mucha curiosidad si, internamente, se parece más a un emulador como PCSX2 o a una capa de compatibilidad como Wine.
    Si la PS4 es casi una computadora x86, parecería que la mayor parte de lo difícil sería implementar las API de sistema/gráficas de la PS4. ¿O también hay grandes diferencias de hardware entre una PC x86 y una PS4 que haya que resolver?

    • Las varias diferencias entre la PS4 y una PC se pueden ver en la charla de Marcan en el CCC de 2016: https://youtu.be/QMiubC6LdTA
    • En consolas, todos los shaders se distribuyen precompilados para esa plataforma, así que haría falta una arquitectura basada en un recompilador de shaders
      Tan solo por esa parte, ya hace bastante más que lo que hace Wine
    • La mayoría de los emuladores de PS4 funcionan de una manera parecida a Wine
  • Parece ser el primer emulador de PS4 que llega hasta la pantalla de personaje de Bloodborne

  • Me interesa cómo se diseña un emulador. ¿Hay buenos recursos para aprender?

    • Depende mucho del hardware que quieras emular. Por lo general hay dos tipos: emulación de sistema completo y emulación de API del sistema
      En el primer caso, escribes código que emula la CPU del sistema objetivo usando un intérprete de instrucciones, como en la NES. En el segundo, reimplementas la API del sistema objetivo, como hace Wine. Si el sistema objetivo usa una arquitectura de CPU distinta, quizá necesites un compilador JIT, como en la PS3
      La mayoría de los emuladores de consolas modernas se parecen más al segundo caso, porque las consolas modernas funcionan de forma parecida a una PC, con un kernel de sistema operativo y bibliotecas en modo usuario para las aplicaciones
      El segundo caso se vuelve a dividir en dos tipos. Uno es emular las bibliotecas de modo usuario, y el otro es reimplementar el kernel de la consola mientras se reutilizan las bibliotecas de sistema de la propia consola
    • https://rylev.github.io/DMG-01/public/book/ es un recurso agradable de leer
    • Si quieres aprender, probablemente convenga empezar por algo como un emulador viejo de Game Boy, que está bien documentado y es relativamente simple
    • javidx9 en YouTube, es decir OneLoneCoder, hizo una serie bastante buena escribiendo un emulador de NES desde cero: https://www.youtube.com/watch?v=nViZg02IMQo&list=PLrOv9FMX8x...
    • Hay muchos recursos en línea para escribir un emulador de Game Boy, y la arquitectura es lo bastante simple como para seguirla con facilidad
      Recomiendo empezar por ahí en el lenguaje que prefieras
  • ¿Hay algún documento de diseño o material que muestre los intentos anteriores o trabajo previo, y por qué este proyecto es diferente?

  • Parece un proyecto interesante para seguir. Dado que Sony actualmente tiene pocas opciones portátiles, me pregunto cómo correrá en Steam Deck

    • Yo diría que es totalmente imposible. El Steam Deck logra frames decentes en algunos juegos emulados de PS3[0], pero correr juegos que la gente realmente querría jugar de PS4 sería demasiado
      0: https://www.reddit.com/r/SteamDeck/comments/wodw8x/i_tested_...
    • Si va por la ruta de capa de compatibilidad, podría correr mejor que un emulador de Switch
  • ¿Esto significa que hicieron una especie de equivalente de DXVK para Gnm/Gnmx?[0]
    [0] https://en.wikipedia.org/wiki/PlayStation_4_system_software#...

  • Este es el progreso más reciente de Bloodborne. Probablemente esto sea lo que la mayoría está esperando:
    YouTube de este desarrollador: https://www.youtube.com/watch?v=wC6s0avpQRE
    No entiendo qué pasa con que Sony siga dejando casi de forma maliciosa en el abandono a este juego de importancia cultural de primer nivel. ¿Están esperando usarlo como título de lanzamiento de la PS6?

    • Siempre me han gustado los juegos de Sony, pero nunca voy a olvidar que Sony no puso retrocompatibilidad en la PS4, diciendo que a nadie le importaba, y luego terminó haciendo que jugaras títulos viejos mediante el servicio por suscripción PSNOW
      Algunos se pueden descargar, pero otros solo se pueden jugar por streaming, así que necesitas una buena conexión a internet para jugar títulos de PS2. Es absurdo
      Siempre va a haber demanda para jugar títulos viejos, y por eso existen emuladores como este
  • Me pregunto si hoy en día, ahora que las consolas modernas son en esencia sistemas de PC reducidos, el desarrollo de emulación se está volviendo más fácil

    • No sé mucho de generaciones anteriores, pero sí puedo explicar cómo es posible la emulación de PS4. El primer paso es entender cómo ejecuta juegos la consola
      Afortunadamente, la PS4 fue hackeada, y casi todos los archivos e información fueron desencriptados y volcados. El SDK oficial de PS4 también se filtró
      Ahora ya se sabe cómo ejecuta juegos la consola, y el siguiente paso es usar esa información para ejecutar juegos fuera de la consola. El sistema de PS4 es una versión modificada de FreeBSD, así que funciona de una manera muy parecida a una PC. Los ejecutables de PS4 no son más que archivos ELF personalizados
      Así que, para ejecutar juegos de PS4 fuera de la consola, solo hay que mapear directamente el ejecutable del juego y proporcionar de alguna manera los símbolos necesarios. Por ejemplo, implementándolos directamente o reutilizando bibliotecas de PS4
    • Gracias a internet, es más fácil llegar a personas que están haciendo lo mismo, y también ha mejorado la capacidad de cómputo para averiguar cómo funcionan estos sistemas
      Aun así, creo que el gran factor es la accesibilidad a la información
    • Un conjunto de arquitectura de instrucciones común definitivamente ayuda. Porque abre la posibilidad de ejecutar directamente la imagen del juego sin arrancar el sistema operativo de la consola, e inyectar debajo las dependencias necesarias. O sea, algo parecido a lo que hace WINE
      En general, la conversión binaria también ha avanzado mucho en la industria. Rosetta 2 es un ejemplo. Se ha vuelto otra herramienta que puede usarse para llevar binarios a otros entornos host
    • Sí. Si la arquitectura entre generaciones es más o menos parecida, va más rápido
  • Me acordé de que hace unos años también hubo interés por otro emulador de PS4 llamado Spine. Me pregunto qué habrá pasado con ese proyecto
    https://github.com/devofspine/spine
    No hay código fuente, solo binarios