用語集
EE (Emotion Engine):
PS2のメインプロセッサ。パソコンで言う所のCPU。内部にFPU、VU0、VU1の計3個の演算ユニットを持つ。
IOP (I/O Processor): 周辺機器とのやりとりを司るサブプロセッサ。PS1のCPUと同じ。
GS (Graphics Synthesizer): グラフィックプロセッサ。ビデオカードに相当するが、頂点処理機能はEmition Engine側に置き、プログラマブルにしている。
SPU2 (Sound Processing Unit 2): サウンドプロセッサ
FPU (Floating Point number processing Unit): EEに搭載されている浮動小数点演算ユニット。
VU (Vector Unit): EEに2系統搭載されているベクトル演算ユニット。主に3次元描画の座標変換などの頂点処理を担当し、DirectX8/9世代のビデオカードにおけるVertex Shaderに相当する。
IOP (I/O Processor): 周辺機器とのやりとりを司るサブプロセッサ。PS1のCPUと同じ。
GS (Graphics Synthesizer): グラフィックプロセッサ。ビデオカードに相当するが、頂点処理機能はEmition Engine側に置き、プログラマブルにしている。
SPU2 (Sound Processing Unit 2): サウンドプロセッサ
FPU (Floating Point number processing Unit): EEに搭載されている浮動小数点演算ユニット。
VU (Vector Unit): EEに2系統搭載されているベクトル演算ユニット。主に3次元描画の座標変換などの頂点処理を担当し、DirectX8/9世代のビデオカードにおけるVertex Shaderに相当する。
Game Specific Fixes
[設定->Gamefixes]
ある特定のゲームでの動作の不具合を解消するチェックボックスです。該当するゲーム以外では基本的に使用してはいけません。
ある特定のゲームでの動作の不具合を解消するチェックボックスです。該当するゲーム以外では基本的に使用してはいけません。
PCSX2 Gamefixes
FPU Compare Hack:
「Digimon Rumble Arena」不具合を解消します。
VU Add / Sub Hack: トライエース作品のゲームにおける不具合を解消します。
VU FCOR Hack: 「ICO」における不具合を解消します。最新版では不要になったので削除されています。
VU Add / Sub Hack: トライエース作品のゲームにおける不具合を解消します。
VU FCOR Hack: 「ICO」における不具合を解消します。最新版では不要になったので削除されています。
PCSX2 Speed Hacks
[設定->Speed Hacks]
Emotion Engine (EE) Sync Hacks
EEにおける同期処理の頻度を下げる事によって、速度を稼ぎます。フレームレート向上の効果が出易い反面、不具合が出るゲームも多く、同期のタイミングに敏感なゲームでは、フレームレートが上がっても動作がぎこちなくなる、処理落ちが発生する、固まる等の不具合が発生する可能性があります。
Default Cycle Rate: 通常の同期を行います。
Use x1.5 Cycle Rate: EEで同期を行う頻度を1/1.5に下げます。
Use x2 Cycle Rate: EEで同期を行う頻度を1/2に下げます。
Use x3 Cycle Rate: EEで同期を行う頻度を1/3に下げます。
Default Cycle Rate: 通常の同期を行います。
Use x1.5 Cycle Rate: EEで同期を行う頻度を1/1.5に下げます。
Use x2 Cycle Rate: EEで同期を行う頻度を1/2に下げます。
Use x3 Cycle Rate: EEで同期を行う頻度を1/3に下げます。
INTC Sync Hack:
割り込みコントローラでの不要な同期処理を省く事で、高速化を行います。一部のゲームで大きな効果があります。
Enable IOP x2 Cycke Rate: IOPで同期を行う頻度を1/2に下げます。
WaitCycles Sync Hack:
Enable IOP x2 Cycke Rate: IOPで同期を行う頻度を1/2に下げます。
WaitCycles Sync Hack:
Miscellaneous
Escape Hack:
プレイ中にescキーを押すとPCSX2が終了するようになります。動作速度には影響しません。
Advanced Options
[設定->Advanced]
EE Recs Options
EEのFPUのリコンパイラの設定です。EEの浮動小数点演算命令をSSEの浮動小数点演算命令に変換するのがリコンパイラですが、命令が一対一対応しているわけではないので、完全に動作を一致させるのは困難です。そのため、細かい挙動を制御するためのオプションがここに用意されています。
Roundmode: 浮動小数点演算の丸めモードを指定します。
基本的にはデフォルト (Chop/Zero) のままで良いです。変更すると不具合が出る事があります。
Roundmode: 浮動小数点演算の丸めモードを指定します。
基本的にはデフォルト (Chop/Zero) のままで良いです。変更すると不具合が出る事があります。
- Nearest:最も近い正規化数に丸めます。いわゆる2進数の0捨1入。
- Negative:切り捨てにより丸めを行います。
- Positive:切り上げにより丸めを行います。
- Chop/Zero:正数の時は切り捨て、負数の時は切り上げにより丸めを行います。
Clamp Mode:
オーバーフロー (無限大/NaN) のチェックと丸めの有無を指定します。
- None:オーバーフローのチェックを行いません。速度は上がりますが互換性は低下します。
- Normal:演算結果に対してオーバーフローのチェックを行います (デフォルト) 。
- Extra+Preserve Sign:Normalに加え、演算前や、積和演算の中間結果に対してもオーバーフローのチェックを行います。また、NaNの符号を保存します。一部のゲームの不具合が解消される事があります。
Flush to Zero:
浮動小数点演算の結果がアンダーフローにより非正規化数(絶対値が非常に小さい数)になった場合、0として扱うオプションです。演算精度は下がりますが、高速になります。
Denormals are Zero: 浮動小数点演算の入力における非正規化数を0として扱うオプションです。非正規化数の浮動小数点演算はソフトウェアで行われるため、非常に低速です。そのため、0扱いすることにより非正規化数の演算そのものが発生しないようににする事ができます。
Denormals are Zero: 浮動小数点演算の入力における非正規化数を0として扱うオプションです。非正規化数の浮動小数点演算はソフトウェアで行われるため、非常に低速です。そのため、0扱いすることにより非正規化数の演算そのものが発生しないようににする事ができます。
VU Recs Options
VUのリコンパイラの設定です。EE Recs Optionsと同じオプションが並んでいますが、デフォルトの設定は異なります。こちらの設定は主にグラフィックに影響を及ぼします。オプションの意味はEE Recs Optionsと同じです。
VUのDenormals are Zeroについて
Denormals are Zero (DaZ) は現在のPCSX2ではデフォルトでオンになっています。DaZはあくまで速度向上のためのhackで、演算の精度を下げるから良くないと考える人も多いようですが、PS2のエミュレーションに限って言えばそれは誤りです。
何故かと言うと、DaZはIEEE754的に見ると確かに演算精度を下げるオプションですが、EEではそもそも非正規化数は0として扱うのが正しいので、DaZをオンにするのがエミュレーションとしては正確だからです。
では、何故DaZがオプション扱いされてきたのでしょうか。それは、一部のゲームが浮動小数点の最大/最小命令を (おそらくFTOI系の命令と組み合わせて) 整数に対して使っているからです。浮動小数点の最大/最小命令は、符号が分かっていれば整数に対しても利用できます。VUの最大/最小命令は内部で純粋な論理比較を行っているらしく (Max(a, b) = Sign(a) > Sign(b) ? b : Sign(b) > Sign(a) ? a : Exponent_Mantissa(a) > Exponent_Mantissa(b) ? (Sign(a) ? b : a) : (Sign(a) ? a : b);)、浮動小数点数としては非正規化数である可能性がある整数を入力しても特に何も起こりません。一方でx86の浮動小数点最大/最小命令では、DaZがオンになっていると、問答無用で非正規化数を0にしてしまうため、整数には使えません。そこで、PCSX2での最大/最小命令のエミュレーションでは、単精度の浮動小数点数の指数部をバイアスして倍精度として扱い、単精度における非正規化数を倍精度で正規化数に見せることでこれを回避しています。
Denormals are Zero (DaZ) は現在のPCSX2ではデフォルトでオンになっています。DaZはあくまで速度向上のためのhackで、演算の精度を下げるから良くないと考える人も多いようですが、PS2のエミュレーションに限って言えばそれは誤りです。
何故かと言うと、DaZはIEEE754的に見ると確かに演算精度を下げるオプションですが、EEではそもそも非正規化数は0として扱うのが正しいので、DaZをオンにするのがエミュレーションとしては正確だからです。
では、何故DaZがオプション扱いされてきたのでしょうか。それは、一部のゲームが浮動小数点の最大/最小命令を (おそらくFTOI系の命令と組み合わせて) 整数に対して使っているからです。浮動小数点の最大/最小命令は、符号が分かっていれば整数に対しても利用できます。VUの最大/最小命令は内部で純粋な論理比較を行っているらしく (Max(a, b) = Sign(a) > Sign(b) ? b : Sign(b) > Sign(a) ? a : Exponent_Mantissa(a) > Exponent_Mantissa(b) ? (Sign(a) ? b : a) : (Sign(a) ? a : b);)、浮動小数点数としては非正規化数である可能性がある整数を入力しても特に何も起こりません。一方でx86の浮動小数点最大/最小命令では、DaZがオンになっていると、問答無用で非正規化数を0にしてしまうため、整数には使えません。そこで、PCSX2での最大/最小命令のエミュレーションでは、単精度の浮動小数点数の指数部をバイアスして倍精度として扱い、単精度における非正規化数を倍精度で正規化数に見せることでこれを回避しています。
このwikiの更新情報RSS