PCSX2開発進捗レポート 2021年4月

2021年04月11日

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

圧倒的な再現性を誇るPS2エミュレータとして名高いPCSX2は、チートやネットプレイに対応するなど遊びやすい方向に進化している最強のエミュレータでもあります。

PS2エミュレータ 完成度 BIOS プラグイン 日本語 RetroArch
PCSX2アイコン PCSX2 ★★★ 必要 必要 O O
Play!アイコン Play! ★★☆ 不要 不要 X O
PS2ゲーム機アイコン PS2 Games エミュレータで遊ぶためのPS2ソフトを入手

Coreの改善

機能強化: #4115 PAD/Counters

UIでVSyncキューを調整可能にしました。Extra Padを更新。

新しいUIオプションによりユーザーはパフォーマンスをほんの僅か向上させるか、入力ラグを減らすかを選択できます。また、PAD 更新をVSyncでCountersの呼び出しに追加しました。これにより入力ラグをわずかに減らすことができるでしょう。

機能強化: #4066 IPU

FDEC/VDECを除くCMDのFIFOで以下の内容を返すようにしました。

これはDobiestationで@PSI-Rockinを動かした場合に基づいていますが、FDEC/VDECコマンドが実行されない限り常にFIFOは32ビットを返すという仕様で調整されています。ただし、FDECは基本的に上記の内容を実行していますがVDECはデコードされた情報を返すでしょう。

修正されたかもしれないEAゲーム一覧
F1 2001
F1 2002
ネオ魂斗羅
ラリーショックス
Theme Park Rollercoaster/World

機能強化: #4255 IPU

次のコマンドを呼び出すためにFIFOインプットのコマンドを終了するようにしました。

ダンスサミット2001:
基本的にこのゲームはいくつかのIPU処理を実行しますが、DMAは読み取るために1 QWCが残っているためハードウェアでは通常FIFOにフラッシュされます。

そうして次にFIFO情報をリセットして別のDMAを開始します。私たちが抱えていた問題はDMAが1 QWCを保留していて、新しいDMAの実行が無視されてしまいIPUがデータの入力を待ち続けてしまいハングアップすることです。

この更新はそれらの問題を解決します。

テストドライブ:
DMAを停止せずにBCLRが呼び出された場合にフラッシュされていたDMA 4(IPU)を追加しました。

IPU_CTRLで0に設定されている場合は、VDECの画像タイプをI-Pictureに設定します。これにより、このレジスタを誤って設定していた一連のEyetoyゲームが修正されます。

修正されたゲーム
EyeToy Play(1-3)
爆封スラッシュ!キズナ 嵐
かいけつゾロリ めざせ!!いたずらキング (SIF0/SIF1失速制御)
テストドライブ (IPUはイベント5の途中で固まります)

機能強化: DEV9の改善

#4062 DEV9:
SPD_R_PIO_DATAおよびSPD_R_PIO_DIRの16ビット読み取り/書き込みに対応しました。
これにより#3192が改善されてオンラインベータ版はDHCP Discoverパケットを送信するようになりましたが無効化されています。

#4059 DEV9:
TAP用に一般的な独自なMACアドレスを生成します。
XLink Kai(エックスリンクカイ)との完全な互換性を保つには独自のMACアドレスが必要です。pcapに対して行われていやり方と同様です。

#3932 DEV9:
HDDエミュレーションを追加しました。

#4214 DEV9:
_DEV9*()関数を*Net()に統合してInitNet()を呼び出す前にethEnableを確認します。
以前はネットワークRXネットスレッドを開始する前にethEnable構成値がチェックされていませんでした。

#4219 DEV9:
アダプターを開かない場合にLinuxでクラッシュしていた問題を修正しました。

#4149 DEV9:
Windowsにpcap(ブリッジとスイッチの両方)を再び追加しました。

機能強化: CDVDの改善

#4314 #4045 CDVD:
CHD圧縮形式のファイルの読み込みに対応しました。

#4146 CDVD:
DVD_LAYER_DESCRIPTORのバッファ量を増加しました。

#4236 CDVD:
mechaconコマンドに0xEFを実装します。

機能強化: microVUの改善

ee07f86 microVU:
オーバーフローチェックを実装します。これによりスーパーマンリターンが修正されました。

413fd00 microVU:
doJumpAsSameProgramを使用する場合にキャッシュをジャンプするように修正しました。

c9bc6ea microVU:
EbitでPフラグ管理を修正しました。また、BranchのM-Bitのフラグステータスを少し修正しました。

0f7044a microVU:
完全フラグの最適化機能を削除しました。それらは使われておらず、壊れているかコードが乱雑でした。

#4198 microVU:
Esin opcodeを修正しました。誰かが誤って不正な関数を使用していたのでmicroVUのESIN opcodeを分析しました。これは、不正な値が生成されて誤ったレジスタフィールドが使用されていました。これによりX-MEN Wolverines Revengeを修正。

f9d96f5 microVU:
オーバーフローしていたフラグ管理を正しい位置に移動します。

機能強化: VIFの改善

ddffd9ac VIF:
MPG VUアドレスの折り返しを修正しました。これによりBoogieが修正されます。

8999159 VIF:
いくつかの古いもしくは正しくないコードを掃除しました。

機能強化: SPU2の改善

#4074 SPU2:
48KHzが失敗した場合は96KHzのサンプルレートを試行します(WASAPI)。WASAPIは使い勝手が悪く、共有モードのサンプルレート変換をサポートしておらず排他モードが必要です。

PS2の基本サンプルレートである48KHzから96KHzへ倍化させます。これは、Windowsでは96KHzがデフォルトになる傾向があるためです。失敗すると排他モードを使用する必要があることを示すメッセージが表示されます。

※PS1ゲームを動かす場合は排他モードを使用する必要があります。これについては何も対策できません。44.1KHzは48KHzまたは96KHzへうまく変換できません。

#4057 #4085 f1e44bf SPU2:
DMA/IRQタイミングを改善します。
ZeroSPU2以外で起動しなかったSIMPLE2000シリーズ Vol.51(THE 戦艦)を修正しました。
The Simpsonsを修正しました。
問題はADMA切り換えバグが原因でした。

f5d8906 SPU2:
DMAを読み取る前に音声サウンドを更新してリセット時にOutPosを初期化します。
エミュレータを終了せずに長時間連続して起動している場合にGTA VCを起動する信頼性が向上します。

#4134 SPU2:
より正確なノイズアルゴリズムに切り替えます。
このアルゴリズムはPCSX-Rを参照して実装した機能でDr.Hell氏の研究を参考にしました。
以前の実装は単純なLFSRであり、ATTRレジスタから提供されたノイズクロックは使用されてていませんでした。

#4171 SPU2:
ADMAの動作/タイミングを改善します。

  • うまくいけば、バーンアウト3のパチパチ音が改善されます。
  • Ratatouilleの音楽ループ部分を修正しました。
  • Vexxのクリック音を修正しました。(部分的なADMA転送)
  • PrimalでDolby Pro Logicビデオの欠落しているサウンドを修正します(部分的なADMA転送)。
  • カットシーンでスプリンターセルのサウンド定位の問題と高音のノイズを修正しました。
  • Myst3のサウンド定位の問題を修正しました。
  • ドルビーが有効になっている場合にDynasty Warriors 5の途切れ途切れになっていたビデオを修正しました。

e039492 SPU2:
AutoDMA IRQタイミングをより厳しくします。
転送中にMADRを監視するゲームを修正しました。
War of the WhiskersのジャンプするミュージックのTom&Jerryを修正しました。

#4210 SPU2:
補間の実装を調整します。
これらはcatmull-romの出力が間違っているときに一致するように音量調整されているようです。
補間された出力が妥当な結果であるとして、ApplyVolumeを使用しADSRボリュームが適用されます。

#4203 SPU2:
キャッシュがHitしたときにブロックデコードされたサンプルと一致することを確認します。

ADPCMのキャッシングブロックは、古いサンプルが音声の開始かループ中かによって変わる可能性があるためやや大雑把です。
そのためブリップやグリッチが発生する可能性があります。
サンプルと一致するか確認することによりキャッシュが完全に使用できなくなることなく、問題を回避できます。

ループサンプルのクリックノイズやポップノイズを取り除く必要があります。SphinxとCursedMummyのサウンドの歪みを修正しました。またVexxの残りのブリップを修正します。

#4195 SPU2:
ガウス補間を追加します。これにより、キャッシュがない状態でで文書化されているSPU補間が実装されます。

#4226 SPU2:
リバーブの入出力を再サンプリングします。
リバーブは半分のサンプルレートで動作するため、SPUサンプルレートを変更する必要があります。
現在行われている方法はダウンサンプリング時に解雇して、アップサンプリング時にサンプルを複製することでフィルタリングを実行していません。

これによりプロセスに適切なフィルタリングが追加されます。フィルター係数はMednafenを参考にしたものですが、元々はNeill Corlett氏によって発見されたと考えられます。

f42befa SPU2:
ステートセーブをロードするときにDMAポインターを回復しようと試行します。

#4186 SPU2:
音声がループポイントを設定したときにキーをオンにするとLSAL/Hの書き込みを無視します。
音声が独自のループポイントを設定した場合にハードウェアからの書き込みを無視して、古い遅延サイクルがアドレス指定した音声キーイング4Tのループアドレスの書き込み動作を修正します。
Mafiaの音楽ループを修正しました。

ce8047b SPU2:
前もって設定されたケースに備えて、ゲームを交換するときにIRQステータスをリセットします。

機能強化: メモリーカードの改良

#4113 メモリカード:
フォルダメモリカードの範囲外にある配列アクセスを修正しました。
次のクラスターにアクセスしたいときはDataClusterInUseビットを保持しないでください。
このフォルダを使用するときメモリーカードは64ビットで動作します。

#2995 メモリカード:
Open PS2 Loader Virtual MemoryCardsのサポートを追加します。
512バイトのページファイルを使用するOPLVMCファイル(.bin)は基本的なサポートを追加します。
通常のページ容量は528バイトになっており余分な16バイトの中には12バイトのECCデータ(エラー補正)が含まれています。

機能強化: デバッガーの改善

#4252 デバッガ:
disasmとメモリビュー両方のコンテキストメニューに「Go to address」を追加しました。

#4289 デバッガー:
[Break/Run]ボタンを有効にする前にエミュレーターの再起動を要求します。

#4287 #4326 その他:
デバッガスレッドビューによってさらに多くのBIOSに対応しました。

#4271 GS/Core:
新世代のGSデバッガーを実装します。
これはGSDumpGUIの完全なCore再実装です。GSdxがCoreに統合されるとGSデバッグが使用されます。
GSdxをCoreに統合することに一歩近づきました。

機能強化: その他のコアの改善

#3011 IOP:
IOPブレークポイントを実装します。

#4234 IOP:
インタープリターのブレークポイントを実行します。

#4205 Pad:
modalsをDestroy()しないでください。
macOSでは、親ウィンドウがフォーカスをするのを防ぎます。

#4223 PGIF:
PS1DRVはPGIFではなくGPUステータスレジスタにあるbit28を処理します。

  • いくつかのPS1ゲームを修正します。
  • 悪魔城ドラキュラX 月下の夜想曲
  • ツイステッド・メタル
  • ピンクパンサー

c695a7e USB:
USBマイク:48KHzおよび8KHzのサンプルレートでは1msの速さでサンプルを送信します。

#4310 USB:
UIをブロックしないように、フォースフィードバックテストを改善しました。
これによりDirectInput USB Force Feedbackテストが変更されてUIがブロックされなくなります。
UIスレッドで同期テストを実行する代わりに0.5秒ごとにテストを進めるタイマーが作成されます。

#4232 USB:
Eyetoyをミラーリングしました。
爆封スラッシュ!キズナ 嵐を修正しました。

#4250 Core:
COP0構成レジスタの読み取り専用bitsを保持します。
読み取り専用bitは命令キャッシュサイズ(IC)とデータキャッシュサイズ(DC)です。
以前はMTC0の構成レジスタに自由に書き込まれていました。

#4123 Core:
syscall 117(0x75)の適切な%s処理を実装します。
一般的なsyscallは「Slow」なフォーマット文字列を反復処理しますが、このsyscallはデバッグ目的でのみ使用されます。

#4255 Core:
パッチのリトルエンディアンデータ(並び順)のサポートが追加されました。
ユーザーがパッチ内でleshort、leword、ledoubleなどのデータ型を使用できるようになります。
これらのデータ型を使用するとメモリビューの値がパッチの値と同じように表示されます。

開発者がエンディアンを逆さにすることを考慮せずにパッチを作成できるようになったため、パッチ開発が容易になることを考えて作られました。 これはリトルエンディアンで命令を表示するghidraのようなプログラムを使用する場合に便利です。

GSdxの改善

機能強化: #4206 GSdx-HW ピクセルごとのアルファブレンディング(PABE)を実装

特定ゲームの影やライティング効果を改善します。両方のHWレンダラーがこの機能をサポートしています。
これまでのところ改善が見られるゲームがいくつかあります。

  • Cartoon Network Racingの影/ライティングを修正しました。
  • Strawberry Shortcakeのキャラクターの影/照明を修正しました。
Cartoon Network Racing
Before After
Cartoon Network Racing: Before Cartoon Network Racing: After
Strawberry Shortcak
Before After
Cartoon Network Racing: Before Cartoon Network Racing: After

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

#3973 GSdx-Gui:
いくつかのGUIが変更されました。

  • 変更されたオプション
  • Large FramebufferはConservative Framebufferに名前が変更されました。
  • ディザリングのコンテキストメニューが並べ替えられました。
  • 8bitテクスチャの名前がGPUパレットコンバージョンに変更されました。

dabff8 GSdx-HW:
DATE選択時の余分なBranches/Conditionsを削除します。

#4182 GSdx-Gui:
フォントの配置を修正しました。非表示の文字を修正する必要があります。

#4188 #4261 #4320 GSdx:
Unicodeに切り替えます。これによりGSdxはCoreとの統合に一歩近づきます。

#4270 GSdx-D3d11:
gsdevice11.cppを掃除するときcodacyでエラー報告されました。

#4131 #4288 GSdx:
constexprを使用してAVX命令なしでAVXベクトルを初期化できます。

  • 削除されたCRCハックのリスト:
  • #4082 GSdx-HW:非公式CRCを削除します。
  • f6e12f8 Gsdx-HW:Bully crcハックを削除しました。多くのエフェクトが失われました。

TAS(Tool Assisted Speedrun)ユーティリティの改善

#4019 記録:
Input Recording Controlsを再編成および再調整します。

#4060 記録:
ステートセーブベースの入力記録に関するGUIの改善。

IPC(プロセス間通信)の改善

#4262 IPC:
ソケットの再利用性。
これによりWindowsポートのオーバーフィルが回避され、ポートのオーバーフィルを実行するOSでのパフォーマンスが大幅に向上します。

#4267 IPC:
スロットシステムを追加します。
これにより複数のエミュレータセッションを同時に実行でき、Windowsユーザーは使用するポートを好みのポートに設定できます。

#4272 IPC:
ポリモーフィズムとチェックボックスのタイプを修正しました。
wxWidgetsの一部バージョンでは動的キャストが他よりも感度が高いため、代わりにCスタイルのキャストを使用してクラッシュを防ぎます。

GameDBの改善

4b71dd3 GameDB:
Quake3ビデオのパッチを削除したことで不要になりました。

7512c01 GameDB:
不要になったFMVスキップパッチを削除しました。

  • ゲーム用に削除されたパッチリストは次のとおりです。
  • BDFL Manager 2005 (EU)
  • F1 Racing Championship (日本もしくはEU版)
  • Paris-Dakar Rally (EU)

#4259 GameDB:
改良されたゼノサーガ保存クラッシュ防止パッチを追加します。
更新されたパッチはゲームコードのチャンクを書き換えてJPEGの品質を低下させます。サムネイルを引き続き問題なく表示できるようにします。

#4187 #4249 GameDB:
KOFシリーズのパッチを追加します。
深度精度を修正してゲームは深度の上位16bitを0xFFFFで埋めます。 これにより32bit値が非常に高くなりHWレンダラーとSWレンダラーの両方に倍精度がなくなり、最初の32bitから下位16bitの精度が失われるためfloatに変換されます。

その他の改善

#3999 GHCファイルシステムを追加します。
これによりGHCファイルシステムがPCSX2の一般ユーティリティに追加されます。

#4073 サードパーティ:
Port Audioを最新のマスターにアップグレードします。

#4277 サードパーティ:
Libsamplerateを0.2.1に更新します。

#3991 GUI:
キーボードショートカットの文字列。https://wiki.pcsx2.net/Hotkeysに基づいています。

#4216 その他:
スペースを含むパスでのコンパイルを修正しました。

#4283 その他:
Debug Tools Codacyで起きていたさまざまな不満を修正しました。

#4010 その他:
macOSのパスを修正しました。MacOSはwxの固有サブクラスではなくLinuxパスを使用していました。

これはアプリがmacOSにインストールされる方法と一致しません(すべてのパスは実行可能ファイルに対して相対的である必要があります)。
また、不足しているリソースをアプリバンドルにコピーする手順を追加します。

#4243 その他:
GSNullプラグインを完全に削除します。
プラグインは廃止されてGSdxはすでにNullを含んで提供しています(表示はありません)。

#4201 GUI:
プリセットの変更時にVsync設定が消去されないようにします。
プリセットオプションを変更すると現在適用されているvsyncモードが再適用されます。

#4230 共通:
未使用のコードを削除します。

#4244 GUI:
プリセットがVsync Queue Sizeをリセットしないようにしました。

Vsync Queue Size設定はプリセットの影響を受けており起動時にデフォルトへ戻ります。
設定はグレー表示されてないためこの変更による影響はありません。

#3556 GUI:
ゲームが最初に起動されたときにバックアップ保存状態をロードするためのメニューオプションを有効にします。

#4306 GUI:
Load/Saveのメニューで現在の保存状態スロットを視覚的に示します。

#4036 キャプチャ:
ファイル名、SPU2記録、およびキャプチャメニューをGUIによる最適化を施しました。
GSとSPU2の記録設定間でファイル名の転送に関連するいくつかの見落としに対処します。

ユーザーがビデオ録画と一緒にWAVファイルを生成するかどうかを制御できるオーディオトグル設定を追加します。 これを行うことでSPU2録音のセットアップに失敗した場合の動作がより明確になり、一貫性が保たれます。

さらにキャプチャメニューGUIを正確に保つために、GUIがアクティブな場合はF12ボタンでsMain Frameへルーティングするようになりました。

翻訳元: Q1 2021 Progress Report

ROMやBIOS管理の注意

ゲーム機本体からBIOSを吸い出すことやゲームソフトからROMイメージを吸い出して個人で遊ぶ方法は問題ありませんが不特定多数の人にROM/BIOSデータを配布することは禁止されており絶対にやらないでください。ダウンロードやアップロードも同様に手を出さないようお願いします。

また、心配される方もいますがエミュレータ本体には違法性はありませんので安心してください。

マリオ,ルイージ,ピーチ「エミュレータは安全です」
エミュレータ対応の実機コントローラー紹介
PCで使えるGCコン! ホリ製クラシックコントローラー
任天堂のライセンスを受けて作られたホリ製クラシックコントローラーです。Switchに限らずUSB接続することでパソコン上(Xinput)でも認識します。連射機能を搭載しておりエミュレータに最適。
PS4コントローラー USB接続
BlurtoothもしくはUSB接続することでパソコン上で認識します。デュアルバイブレーション、加速度・重力感覚、ジャイロセンサー搭載。エミュレータで遊ぶならDUALSHOCKシリーズ安定。
Xbox 360コントローラー USB接続
USB接続することでパソコン上でも認識します。もちろんPCゲームやエミュレータでも利用可能。公式のゲーム大会では有利すぎると使用禁止になった最強のゲーミングコントローラー。