PCSX2開発進捗レポート 2021年11月(2021Q3)

Emu for PC,PCSX2関連記事まとめ

今も活発的に開発されているPCSX2の進捗レポートが2021年11月13日に更新されたので見ていきましょう。

プラグインが廃止されたりパフォーマンスの向上やPS1ゲームの対応など今回は大幅な改善がありました。

PS2は完成に近づいているので未発掘地帯のPS1エミュレータ部分を今後開発していくのでしょうね(現状ではePSXeレベルにすら達していません)。

コアの改善

プラグインの廃止

プラグインとは本体開発チームと別の貢献者を切り離して研究できるため優れたやり方の一つでしたが、プラグイン開発者は2016年まで何年にもわたって減少していきました。(そして昔のような多くの進歩はありません)

jackun氏によるUSBqemu-wheelと、TheLastRar氏によるCLR-DEV9は作業の進捗がほとんどなくなっていました。本体開発チームは時間の経過とともにより良い代替品を作れるようになり、ついには最後のプラグイン作成者も事実上コア貢献者になり、ディスコードグループに定着しました。

これは2021年第2四半期が貧弱なアップデートになってしまった理由のひとつでもあり、多くのプラグイン貢献者の潜在的な作業をブロックしたり他のPRを無効にすることさえありました。

DEV9の改善

・内部DNSサーバーを追加します。
・winPcapバックエンドの自動ゲートウェイ修正。

コンピュータ上のhostsファイルがどこにあるかを知っているならば新しい内部DNSサーバーもできます。

わからない場合は名前(URL/Webサイト)や電話番号(IPアドレス/場所)の連絡先が記載されているアドレスと比較できます。これはiniフォルダーにあります。

カウンターの改善

・割り込み有効化に関係なくタイマーカウントをリセットします。
・1080iモードのHブランクを修正します。
・ダブルストライクモードのスキャンライン数を修正しました。
・カウントが無効になっている場合はカウンターを更新しないでください

Grand Theft Auto3のイントロに現れていた不気味な幻影を取り除きます。
これは以前の古いコードを有効にするようなものですが、古いコードは最後のサイクルも更新されます。

Red Devilus
Red Devilus

最近GTA 3を中古で購入してクローンキャラクターについて聞いたときに、通常のテストを行いましたがイントロFMVは普段スキップしているため画面に表示されませんでした。

特定のゲームから大きなバグを修正すると誰かが言った場合はもう一度調査することがあります。それは実際には回帰されるマイナーなバグでした。

MTVUの改善

・TビットがMTVUと連携できるようにします。
・MTVUのアドレスマスキングを修正しました。

VUの改善

・VUキックスタートとの同期を改善して以降はキックスタートなしで緩めます。
・VUJITの入力を最適化します。

複数のゲームパフォーマンスが大幅に向上した開発ビルドサイクル最大のメリットの1つです。

パフォーマンス改善

3つのゲームをテストした例を以下に示します。

PCSX2 PR 4694
Before ⇔ After
Perfomance uplift on PR 4694
Ratchet +12.36%
Tekken +19.8%
My Street +1.91%

・開始アドレスをマスクします。
・インターロックおよびScratchpadVUmem書き込み中の同期を改善します。
・VUキックスタートの同期タイミングを調整-クラッシュバンディクーを修正。
・VU構造体をXGKick関数に渡す必要がなくなります。

microVUの改善

・I-bitハックを一般的なハックに統合します。
・VU0のVU1命令をスキップします。
・mVU0cacheReserveとmVU1cacheReserveを組み合わせます。
・XGKickハックを同期されたXGKickオプションに置き換えます。
・nullブロックをロードするときは半分コンプリートした状態を避けるようにしました。
・#4668にいくつかの指示をの0として発行しないでください。

GIFの改善

・GIF FIFOを再実装して必要な場合のみ有効にします

Vifの改善

・Vuintが向上します。
・VIF1がまだアクティブな場合にのみ、リバースFIFOハックを有効にします。

SPU2の改善

・壊れている/使われていないAlsaバックエンドを削除します。
・マイナークリーンアップ。
・NEVER_SKIP_VOICESを削除します。
・未使用の変数を削除します。
・リバーブとエイリアス解除フィルターを無効にするためのユーザーオプションを削除します。
・WindowsからWaveoutバックエンドを削除します。
・IRQと小さなパケットのDMAタイミングを調整します。
・サウンドバッファが開いていない場合は、初期化しないでください。
・最後のKeyOnから2T以内のKeyOnを禁止します。
・CookiePLMonsterによるDirectSoundバックエンドを削除します。
・MegamanX7が依存する不正なBIOSループポイントを追加します。

USBの改善

USB:KeyboardmaniaのeNumモードをフリーズしました。

CDVDの改善

CHD:Windowsでの親検索を修正しました。
CDVD:CDDAを使用したPS1ゲームのCdlReadSを修正しました。
CDVD:SCMD0x27を実装します。
CDVD:一時停止といくつかのステータスの動作を修正しました。

SCMD 0x27を実装することでPS1ゲームをSCPH-50009およびDTL-H50009のBIOSで起動できるようにします。

注意:DTLコンソールはリージョンフリーのPS1 BIOSを使用することが知られていますが、SCPH-50009はアジア/日本のPS1 BIOSを使用しておりリージョンロックがここで適用されます。

IPUの改善

IPU:SETTHしきい値マスクを修正しました。
IPU:色変換のしきい値をu16、バンプ保存状態バージョンに保存します。

入手可能な情報源によると透明度は8:0、半透明度は24:16です。PCSX2は8bitsと24bitsをマスキングして常に0を返します。

本質的にIPUはFMV/カットシーンを処理し、このPRはそれらに関するいくつかの問題を改善します。

Hype: The Time Quest
Beforre After
Hype: The Time Quest (Before) Hype: The Time Quest (After)

デバッガーの改善

Debugger:VU0Fレジスタをfloatとして表示するオプションを追加します。
Debugger:vmulaiとvmaddaiの逆アセンブリを修正しました。
Debugger:32/64bitsレジスタビューオプションをパージします。
Debugger:CtrlRegisterListの警告を強引に修正しました。

表示するオプションを削除します。
32ビットは64ビットとしてレジスタし代わりにレジスタ値全体を表示します。

その他コアの改善

Emitter:x64で64ビット演算を使用します。
HostFS:ファイルの削除機能を追加します。
PGIF:コードのリファクタリング/クリーンアップ。
IOPBios:IRQラインが無効な場合のOOB読み取りを修正しました。
EE JIT:SDR/SDL、LDR/LDL命令を実装します。

PS1ゲームをプレイすることは一部のファンにとって情熱的ですが今はまだお勧めできません。いくつかの大きな改善を行いましたがDuckStationのようなPS1専用エミュレータを使用するほうがいいでしょう。

改善したPS1ゲーム

以下が改善したいくつかの比較画像です。

バイオハザード
バイオハザード (Before)
Before
バイオハザード (After)
After
ストリートファイターEX plus α
ストリートファイターEX plus α (Before)
Before
ストリートファイターEX plus α (After)
After
パフォーマンスが向上したSDR/SDL

これは非常に大きなパフォーマンスの向上をもたらしますが以下のグラフが示すような大幅なパフォーマンスをすべてのゲームで期待しないでください。

SDL/SDRパフォーマンス

上記グラフはHomebrew ELFからのリフレクションの結果です。
SDL/SDR | LDL/LDR | Homebrew ELF
そして以下はレジスターに課税した同じHomebrewでのRedDevilusの結果です。

SDL/SDR/PAL

Core:再起動時にゲームのCRC値をリセットします。

以前のゲームパッチがロードされるのを回避します。
あるゲーム用のパッチが誤って別のゲームに利用され、ゲームが壊れたという奇妙な現象が発見されました。Oops!

iR5900:MULT1 constpropに符号付き乗算を使用します。
R5900:LWLがインタプリタで拡張に署名しなかった問題を修正しました。
IOP Interpreter:ブランチが0になったら警告します。
Misc:ATLをWILに置き換えます。

WILの定義:Windows実装ライブラリ(WIL)は一般的なWindowsコーディングパターン用の読み取り可能なC++インターフェイスを通じて、開発者の作業を楽にするために作成されたものでヘッダーのみのC++ライブラリです。

Silent:失敗すると大音量で爆発するCoInitializeExを使用したためリグレッション=コード内の静かに無視されたエラーが表示されました。

ATL->WILリファクタリング自体はそれほど興味深いものではありません。常に存在していた問題でしたが明白な方法で解決できないため静かに無視されていたからです。

PCSX2では一致しているように見えますが、これがどのように機能して古いバグが表面に浮かんでいるか待機しているかを確認します。

PCSX2のコードベースはより健全になります。PS2だけでなくPCSX2がどのように実装したかをすべて記載すると多くの人に混乱がもたらされたことが想像できます。

GSの改善

機能強化:その他GSの改善

GS-hw:SWブレンディングが有効になっている場合にPabeビットを有効にします。
GS:WXではなくGSで描画長方形を管理します。
GS:ツールチップを更新してDirectXへの参照を削除します。
GS-GUI:ディザリングのツールチップを追加します。
GS:tex0フラッシュをテストします。
GS-d3d11:FXAAと外部シェーダーをクリーンアップします。
GS-d3d11:マイナーブレンドの変更。
GS-GUI:7x乗数を追加します。
GS-GUI:デフォルトでソフトウェアエッジ アンチエイリアシングを有効にします。

このオプションはソフトウェアレンダラーのいくつかのゲームに役立ちますが現時点では実装されていないため、ハードウェアレンダラーには役立ちません。

AAがバグ修正に役立ついくつかの例
ファイナルファンタジー10 (1)
ファイナルファンタジー10 (Before1)
Before
ファイナルファンタジー10 (After1)
After
ファイナルファンタジー10 (2)
ファイナルファンタジー10 (Before2)
Before
ファイナルファンタジー10 (After2)
After
どこでもいっしょ トロといっぱい
どこでもいっしょ トロといっぱい (Before)
Before
どこでもいっしょ トロといっぱい (After)
After

その他の改善

GUI(外見)の改善

GUI:構成設定を並べ替えます。
GUI:不足しているアイコンを設定し、タイトルを更新します。
GUI:BIOS/フォルダーセレクターのリホール。

BIOSタブとフォルダタブが[エミュレーション設定]から[一般設定]にまとめられました。

たくさんスクロールしなければなりませんが以前よりクリック数を減らして設定項目を簡単に見つけることができます。

エミュレーション設定から一般設定へ
PCSX2のBIOSフォルダーGUI画面

AppMain:elfsを読み込んでいるときのno$シンボルを修正しました。
その他:-elf cmdlineargを使用する場合のlastpathの更新を修正しました。
WX:位置検証をマルチモニター対応にします。
コンフィグ:保存する前にリミッター値を正規化します。
GUI:Mac上のStdioコンソール。
GUI:デフォルトでBIOSを選択します。

何も選択していないときはリスト最初のBIOSが自動的に選ばれて初回ウィザードと一般設定に影響します。

BIOSが自動選択される
PCSX2のBIOS自動選択の画面

GUI:新しいWXのアサーションのクラッシュを修正しました。
GUI:「同期MTGS」のUI設定をデバッグ/開発専用にします。

VuオーバーフローフラグチェックをGamefix + reorganizeパネルに移動します。

GitHub/CIの改善

CI:GSに統合するとき一致するようにPRラベラーを更新します。
CI:xTVaserによってビルドされたAVX2および非AVX2ウィンドウの分割。

レポートの冒頭は最後のGS統合でしたが1つの小さな煩わしさを生み出しました。3つのGSプラグインすべてを保持することはできないのでSSE2プラグインを削除してからSSE4とAVX2がありました。

PCSX2-AVX2とは何ですか?

PCSX2はSIMD命令を使用してグラフィックスを処理します。PCSX2がサポートするSIMD命令セットは次のとおりです。

AVX2 最新かつ最速。過去8-10年にリリースされたCPUに推奨されます。
SSE4 古い、まだ速い。AVX2をサポートしない古いCPUに推奨されます。
SSE2 最も古く、最も遅い。CPUがSSE4に対して古すぎる場合にのみ推奨されます。
どちらを選びますか?
-1.6.0 PCSX2は適切なプラグインを自動的に選択します。
-1.7.0 pcsx2-avx2.exeを試してください。プログラムの起動に失敗した場合はpcsx2.exeを使用してください。

本質的にはPentiumを除いて第4世代以上のIntelを使用している場合は、おそらく問題ないか、AMDRyzenシリーズです。 将来的には、これは単一のexeに戻り、サポートしている場合はAVX2を有効にするチェッカーを備えたデフォルトのSSE4になります。

CI:ビルド名からダッシュを削除します。
CI:macosバージョンを11にバンプします。
GitHub:新しい問題フォームに切り替えます。

他のその他の改善点

macOS:非同期ファイルリーダーのエラー処理を修正しました。
KeyboardQueue:Windows固有のcritsecを削除します。
サードパーティ:jpgdプロジェクトを追加します。
その他:必要のないときにHomebrewを更新しないでください。
依存関係:GHC1.5.4を1.5.8に更新します。
依存関係:OpenGLの依存関係を更新します。
その他:StartupWMClassをデスクトップファイルに追加します。
Linuxディストリビューション情報をプログラムログに追加します。
アプリ:Windowsexeのバージョン情報を追加します。