ProjectPSX est un émulateur codé en C# de la Playstation originale de Sony (Playstation 1/PS1/PSX)
Il s'agit d'un projet personnel ayant pour but d'en apprendre davantage sur le matériel et le développement d'émulateurs.
ProjectPSX n'utilise aucune dépendance externe et utilise du code C# plutôt simpliste.
Actuellement, les éléments suivants sont mis en œuvre :
Ce qui n'est pas implémenté (mais devrait l'être...) :
Remarque : un BIOS PlayStation valide est nécessaire pour exécuter l'émulateur. SCPH1001.BIN est le bios par défaut du développement, mais d'autres, comme SCPH5501 ou SCPH7001, fonctionneraient.
Il n'y a pas de liste de compatibilité. De nombreux jeux démarrent et entrent en jeu, même si certains peuvent avoir des problèmes aléatoires. Certains des jeux que j'ai testés et qui ont réveillé étaient : Ridge Racer, Castlevania Symphony of the Night, Final Fantasy 7, Crash Bandicoot 1, 2 et 3, Spyro le dragon, Tekken 1, 2 et 3, Toshinden, Time Crisis, Tobal 1 et 2, Vagrant Story, Street Fighter Zero 3, Rockman/Megaman 8/X4, Parasite Eve, Metal Gear Solid, Crash Team Racing... D'autres comme Final Fantasy IX, Gran Turismo, Resident Evil 3 ou Marvel vs Capcom démarrent mais ont des problèmes aléatoires à résoudre.
Remarque : les fichiers de la carte mémoire sont codés en dur dans "memcard.mcr" dans le répertoire racine. S'il n'y a personne, un nouveau sera généré lors de la sauvegarde.
Le noyau de ProjectPSX lui-même est une bibliothèque sans tête et sans dépendances. La solution est livrée avec 2 projets supplémentaires ProjectPSX.Winforms et ProjectPSX.OpenTK. Le projet Winforms utilise NAudio pour produire du son.
Lors de l'utilisation du projet Winform, une boîte de dialogue de fichier s'affichera lors de l'exécution. Sélectionnez un fichier Bin (utilisez track1) ou un fichier Cue pour générer des pistes de CD pour alimenter le CDROM.
Lorsque vous utilisez le projet OpenTK, faites simplement glisser et déposez un fichier bin/cue dans la fenêtre.
Les fichiers bios et d'extension sont codés en dur sur la classe BUS.
Une fois sous tension, l'entrée est mappée comme :
Oui, vous pouvez, mais vous ne devriez pas. Il existe de nombreux autres émulateurs plus performants. Il s'agit d'un projet personnel en cours de réalisation dans le but d'en apprendre davantage sur les émulateurs et la mise en œuvre du matériel. Il peut et va se briser pendant l'émulation car il existe de nombreuses fonctionnalités matérielles non implémentées.
C'est le visualiseur VRAM. Il comprend toutes les textures, tables de verrouillage des couleurs et tampons d'affichage utilisés par le logiciel Playstation. Il est utilisé à des fins de débogage. Vous pouvez l'activer en appuyant sur TAB sur votre clavier.
Probablement en raison d'un matériel non implémenté ou d'un matériel implémenté incorrect, principalement des timings cdrom/dma/mdec.
Décommentez les fonctions bios.verbose() ou TTY() sur la boucle principale du CPU. Vous pouvez également dissassembler() les instructions du CPU MIPS et printRegs() sur l'opcode actuel.
Je m'intéresse à l'émulation matérielle depuis un certain temps. J'ai commencé à faire un Java Chip8 et un CPU C# Intel 8080 (utilisé sur le classique arcade Space Invaders). Plus tard, j'ai fait du Nintendo Gameboy. Je voulais continuer à faire de la 3D donc j'ai fini avec la PSX car elle avait une bonne bibliothèque de jeux...
J'ai principalement utilisé la documentation Martin Korth PSX-SPX sur le matériel Playstation sur https://problemkaputt.de/psx-spx.htm. Les personnes de la chaîne #playstation sur le discord emudev à https://discord.gg/dkmJAes étaient également très utile.
Winforms était pour moi le moyen le plus simple d’obtenir une sortie car il était rapidement prototypé. Pour le moment, l'interface utilisateur est détachée du noyau, de sorte que n'importe quel système de fenêtrage peut être ajouté tant que l'interface IHostWindow est implémentée. Il existe également un projet OpenTK sur la solution qui fonctionne sous Linux.
Au début de ce projet, j'étais un gars avec un travail ennuyeux sans rapport avec le codage. Je ne voulais pas faire ça pour le reste de ma vie, alors j'ai commencé à étudier pour essayer de changer de carrière. Finalement, j'ai appris (un peu) et j'ai commencé à coder tout ce qui me rendait heureux. J'ai finalement obtenu un emploi de développeur Android...