ProjectPSX es un emulador codificado en C# de la Sony Playstation original (Playstation 1/PS1/PSX)
Este es un proyecto personal con el objetivo de aprender sobre hardware y el desarrollo de emuladores.
ProjectPSX no utiliza ninguna dependencia externa y utiliza código C# bastante simplista.
Actualmente se encuentra implementado lo siguiente:
Lo que no se implementa (pero debería implementarse...):
Nota: Se necesita una BIOS de PlayStation válida para ejecutar el emulador. SCPH1001.BIN es la BIOS predeterminada en el desarrollo, pero se ha informado que otras como SCPH5501 o SCPH7001 funcionan.
No hay lista de compatibilidad. Muchos juegos arrancan y entran en el juego, aunque algunos pueden tener problemas aleatorios. Algunos de los juegos que probé y que despertaron fueron: Ridge Racer, Castlevania Symphony of the Night, Final Fantasy 7, Crash Bandicoot 1, 2 y 3, Spyro the dragon, Tekken 1, 2 y 3, Toshinden, Time Crisis, Tobal 1 y 2, Vagrant Story, Street Fighter Zero 3, Rockman/Megaman 8/X4, Parasite Eve, Metal Gear Solid, Crash Team Racing... Algunos otros como Final Fantasy IX, Gran Turismo, Resident Evil 3 o Marvel vs Capcom arrancan pero tienen problemas aleatorios que solucionar.
Nota: Los archivos de la tarjeta de memoria están codificados en "memcard.mcr" en el directorio raíz. Si no hay nadie, se generará uno nuevo al guardar.
El núcleo de ProjectPSX en sí es una biblioteca sin cabeza y sin dependencias. La solución viene con 2 proyectos adicionales ProjectPSX.Winforms y ProjectPSX.OpenTK. El proyecto Winforms utiliza NAudio para generar sonido.
Al utilizar el proyecto Winform, aparecerá un cuadro de diálogo de archivo durante la ejecución. Seleccione un archivo Bin (use la pista 1) o un archivo Cue para generar pistas de CD para alimentar el CDROM.
Cuando utilice el proyecto OpenTK, simplemente arrastre y suelte un archivo bin/cue en la ventana.
Los archivos de expansión y BIOS están codificados en la clase BUS.
Una vez encendido, la entrada se asigna como:
Sí puedes, pero no deberías. Existen muchos otros emuladores más capaces. Este es un proyecto personal en progreso con el objetivo de aprender sobre emuladores e implementación de hardware. Puede fallar y lo hará durante la emulación, ya que hay muchas características de hardware no implementadas.
Es el visor VRAM. Incluye todas las texturas, tablas de bloqueo de colores y buffers de visualización utilizados por el software de Playstation. Se utiliza con fines de depuración. Puede alternarlo presionando TAB en su teclado.
Probablemente debido a hardware no implementado o implementado incorrectamente, principalmente tiempos de cdrom/dma/mdec.
Descomente las funciones bios.verbose() o TTY() en el bucle principal de la CPU. También puede desmontar() las instrucciones de la CPU MIPS e imprimirRegs() en el código de operación actual.
Hace algún tiempo que estoy interesado en emular hardware. Comencé a hacer un Java Chip8 y una CPU C# Intel 8080 (usada en el clásico arcade Space Invaders). Un poco más tarde hice Nintendo Gameboy. Quería seguir adelante para hacer algo de 3D, así que terminé con la PSX ya que tenía una buena biblioteca de juegos...
Utilicé principalmente la documentación de Martin Korth PSX-SPX sobre el hardware de Playstation en https://problemkaputt.de/psx-spx.htm También la gente del canal #playstation en emudev discord en https://discord.gg/dkmJAes fue muy útil.
Winforms fue la forma más fácil de obtener resultados para mí, ya que se creó un prototipo rápidamente. Por el momento, la interfaz de usuario está separada del núcleo, por lo que se puede agregar cualquier sistema de ventanas siempre que se implemente la interfaz IHostWindow. También hay un proyecto OpenTK sobre la solución que se ejecuta en Linux.
Al comienzo de este proyecto, yo era un tipo con un trabajo aburrido no relacionado con la codificación. No quería hacerlo por el resto de mi vida así que comencé a estudiar para intentar cambiar de carrera. Finalmente aprendí (un poco) y comencé a codificar lo que me hiciera feliz. Finalmente conseguí un trabajo como desarrollador de Android...