ProjectPSX は、C# でコード化された初代 Sony Playstation (Playstation 1/PS1/PSX) のエミュレータです。
これは、ハードウェアとエミュレータの開発について学ぶことを目的とした個人プロジェクトです。
ProjectPSX は外部依存関係を使用せず、かなり単純な C# コードを使用します。
現時点では以下が実装されています。
実装されていないもの (実装されるべきですが...):
注:エミュレータを実行するには、有効な PlayStation Bios が必要です。 SCPH1001.BIN は開発時のデフォルト BIOS ですが、SCPH5501 や SCPH7001 などの他の BIOS も動作することが報告されています。
互換性リストはありません。多くのゲームは起動してゲーム内で動作しますが、一部にはランダムな問題が発生する可能性があります。私がテストして覚醒したゲームの一部は、リッジ レーサー、悪魔城ドラキュラ シンフォニー オブ ザ ナイト、ファイナルファンタジー 7、クラッシュ バンディクー 1、2、3、スパイロ ザ ドラゴン、鉄拳 1、2、3、闘神伝、タイム クライシス、トバル 1、および2、ベイグラント ストーリー、ストリートファイター ゼロ 3、ロックマン/ロックマン 8/X4、パラサイト イブ、メタルギア ソリッド、クラッシュ チームレーシング...ファイナルファンタジーIX、グランツーリスモ、バイオハザード3、マーベルvsカプコンブートなどの他のゲームもありますが、修正すべきランダムな問題があります。
注:メモリ カード ファイルは、ルート ディレクトリの「memcard.mcr」にハードコードされています。誰もいない場合は、保存時に新しいものが生成されます。
ProjectPSX コア自体は依存関係のないヘッドレス ライブラリです。このソリューションには、ProjectPSX.Winforms と ProjectPSX.OpenTK の 2 つの追加プロジェクトが付属しています。 Winforms プロジェクトは、NAudio を使用してサウンドを出力します。
Winform プロジェクトを使用する場合、実行時にファイル ダイアログが表示されます。 Bin ファイル (track1 を使用) または Cue ファイルを選択して、CDROM にフィードする CD トラックを生成します。
OpenTK プロジェクトを使用する場合は、bin/cue ファイルをウィンドウにドラッグ アンド ドロップするだけです。
BIOS および拡張ファイルは BUS クラスにハードコードされています。
電源を入れると、入力は次のようにマッピングされます。
はい、できますが、そうすべきではありません。他にももっと高性能なエミュレータがたくさんあります。これは、エミュレータとハードウェアの実装について学ぶことを目的とした進行中の個人プロジェクトです。未実装のハードウェア機能が多数あるため、エミュレーション中に壊れる可能性があります。
VRAMビューアです。これには、プレイステーション ソフトウェアで使用されるすべてのテクスチャ、カラー ロックアップ テーブル、および表示バッファが含まれます。デバッグ目的で使用されます。キーボードの TAB キーを押すと切り替えることができます。
おそらくハードウェアが実装されていないか、実装が間違っているため、主に cdrom/dma/mdec タイミングが原因と考えられます。
CPU メイン ループ上の bios.verbose() 関数または TTY() 関数のコメントを解除します。 MIPS CPU 命令を dissassemble() し、現在のオペコードで printRegs() を実行することもできます。
私はしばらくの間、ハードウェアをエミュレートすることに興味がありました。私は Java Chip8 と C# Intel 8080 CPU (古典的なアーケードのスペース インベーダーで使用) を使い始めました。その後、任天堂のゲームボーイを作りました。 3D をやりたかったので、優れたゲーム ライブラリがあった PSX で終わりました...
私は主に、https://problemkaputt.de/psx-spx.htm にある Playstation ハードウェアに関する Martin Korth PSX-SPX ドキュメントを使用しました。また、https://discord.gg/dkmJAes にあるエミュ開発ディスコードの #playstation チャンネルの人々も使用しました。とても役に立ちます。
Winforms はプロトタイプを迅速に作成できるため、出力を取得する最も簡単な方法でした。現時点では、UI はコアから切り離されているため、IHostWindow インターフェイスが実装されている限り、任意のウィンドウ システムを追加できます。 Linux 上で動作するソリューションに関する OpenTK プロジェクトもあります。
このプロジェクトの開始時点では、私はコーディングとは無関係の退屈な仕事をしている男でした。一生やりたくないので、転職しようと勉強を始めました。最終的には(少しは)学び、自分を幸せにするものは何でもコーディングし始めました。最終的には Android 開発者として就職しました。