ProjectPSX ist ein C#-codierter Emulator der ursprünglichen Sony Playstation (Playstation 1/PS1/PSX).
Dies ist ein persönliches Projekt mit dem Ziel, etwas über Hardware und die Entwicklung von Emulatoren zu lernen.
ProjectPSX verwendet keine externen Abhängigkeiten und verwendet eher einfachen C#-Code.
Im Moment ist Folgendes implementiert:
Was nicht implementiert ist (aber sein sollte...):
Hinweis: Zum Ausführen des Emulators ist ein gültiges PlayStation-BIOS erforderlich. SCPH1001.BIN ist das Standard-BIOS der Entwicklung, es wurde jedoch berichtet, dass einige andere wie SCPH5501 oder SCPH7001 funktionieren.
Es gibt keine Kompatibilitätsliste. Viele Spiele starten und laufen im Spiel, bei einigen kann es jedoch zu zufälligen Problemen kommen. Einige der Spiele, die ich getestet habe und die aufgewacht sind, waren: Ridge Racer, Castlevania Symphony of the Night, Final Fantasy 7, Crash Bandicoot 1, 2 und 3, Spyro the Dragon, Tekken 1, 2 und 3, Toshinden, Time Crisis, Tobal 1 und 2, Vagrant Story, Street Fighter Zero 3, Rockman/Megaman 8/X4, Parasite Eve, Metal Gear Solid, Crash Team Racing... Einige andere mögen Final Fantasy IX, Gran Turismo, Resident Evil 3 oder Marvel vs. Capcom booten, es müssen jedoch zufällige Probleme behoben werden.
Hinweis: Speicherkartendateien sind fest in „memcard.mcr“ im Stammverzeichnis codiert. Wenn niemand vorhanden ist, wird beim Speichern ein neues generiert.
Der ProjectPSX-Kern selbst ist eine Headless-Bibliothek ohne Abhängigkeiten. Die Lösung enthält zwei zusätzliche Projekte: ProjectPSX.Winforms und ProjectPSX.OpenTK. Das Winforms-Projekt verwendet NAudio zur Tonausgabe.
Bei Verwendung des Winform-Projekts wird bei der Ausführung ein Dateidialog angezeigt. Wählen Sie eine Bin-Datei (verwenden Sie Track1) oder eine Cue-Datei, um CD-Tracks für die Zuführung in die CD-ROM zu generieren.
Wenn Sie das OpenTK-Projekt verwenden, ziehen Sie einfach eine Bin-/Cue-Datei per Drag & Drop in das Fenster.
Die BIOS- und Erweiterungsdateien sind in der BUS-Klasse fest codiert.
Nach dem Einschalten wird der Eingang wie folgt zugeordnet:
Ja, das kannst du, aber du solltest nicht. Es gibt viele andere, leistungsfähigere Emulatoren. Dies ist ein in Arbeit befindliches persönliches Projekt mit dem Ziel, mehr über Emulatoren und Hardware-Implementierung zu erfahren. Es kann und wird während der Emulation kaputt gehen, da es viele nicht implementierte Hardwarefunktionen gibt.
Es ist der VRAM-Viewer. Es enthält alle Texturen, Farbsperrtabellen und Anzeigepuffer, die von der Playstation-Software verwendet werden. Es wird für Debugging-Zwecke verwendet. Sie können es umschalten, indem Sie die Tabulatortaste auf Ihrer Tastatur drücken.
Wahrscheinlich aufgrund nicht oder falsch implementierter Hardware, hauptsächlich CDROM/DMA/MDEC-Timmings.
Kommentieren Sie die Funktionen bios.verbose() oder TTY() in der CPU-Hauptschleife aus. Sie können auch die MIPS-CPU-Anweisungen dissemble() und printRegs() für den aktuellen Opcode verwenden.
Ich interessiere mich schon seit einiger Zeit für die Emulation von Hardware. Ich habe angefangen, einen Java Chip8 und eine C# Intel 8080 CPU zu verwenden (verwendet bei den klassischen Arcade-Spielen „Space Invaders“). Etwas später habe ich den Nintendo Gameboy gemacht. Ich wollte weitermachen und etwas 3D machen, also habe ich mich für die PSX entschieden, da sie über eine gute Spielebibliothek verfügte ...
Ich habe hauptsächlich die PSX-SPX-Dokumentation von Martin Korth zur Playstation-Hardware unter https://problemkaputt.de/psx-spx.htm verwendet. Auch die Leute beim #playstation-Kanal auf dem Emudev-Discord unter https://discord.gg/dkmJAes waren sehr hilfreich.
Winforms war für mich der einfachste Weg, eine Ausgabe zu erhalten, da die Prototypen schnell erstellt wurden. Im Moment ist die Benutzeroberfläche vom Kern getrennt, sodass jedes Fenstersystem hinzugefügt werden kann, solange die IHostWindow-Schnittstelle implementiert ist. Es gibt auch ein OpenTK-Projekt zu der Lösung, die unter Linux läuft.
Zu Beginn dieses Projekts war ich ein Typ mit einem langweiligen Job, der nichts mit Programmieren zu tun hatte. Ich wollte es nicht für den Rest meines Lebens machen, also begann ich zu studieren, um zu versuchen, mich beruflich zu verändern. Irgendwann lernte ich (ein bisschen) und fing an, alles zu programmieren, was mich glücklich machte. Habe schließlich einen Job als Android-Entwickler bekommen...