エミュレーション機能

ちょっとややこしいので時間がある時にでも読んで下さい

PS2DISの画期的な機能といえば「エミュレーション機能」
これはPS2DIS側で命令を自動的に処理し
レジスタ内がどう変化するかなどを表示する機能で
「このプログラムはどういう処理をしているんだろう?」
といった物を調べる時に使用するそうですが
実際にゲームをプレイしながら調べれる訳ではないので
実行ファイルの動作を完璧に再現出来るという訳ではありません。

今回は、実行ファイルのエミュレーションではなく
プログラム埋め込みコードのエミュレーションをしてみましょう
簡単に組まれたプログラムであれば、このエミュ機能で
プログラムの動作を完全に把握する事が出来ます。

エミュ機能はキーボードの「Ctrl、Shift、R」
を同時に押すと起動します(最終的に3つ一緒に押していればOK)

ちなみにエミュ機能はUNDEFかCODE表示の行を処理するので
それ以外の.wordなどの場所からエミュレーションしようとしても
処理する事が出来ないので注意してください。



それぞれの項目の説明をします
まず「Step」これはカーソルの合わさっている1命令のみ
どういう処理をするのかを実行します
次の「StepOver」は「Step」と殆ど同じ様です
「Run」は、カーソルの合わさっている命令から
UNDEFかCODE表示以外の場所に処理が達するまで、または
処理できない命令に当たるまで延々と処理をします。
「Clear」はレジスタの値を全部0000にクリアします。
ActivateとPCについては特に気にしなくて良いです
(というより難しいです)

レジスタをクリックするとレジスタ編集が表示され
レジスタの数値を自由に変更する事が出来ますが
特に解析だけする人が使う機能ではありません。

試しに、前項目の.hackのコードがどういう処理をするのか
実際にエミュレーション機能で処理を見てみて下さい
パッチリストでコードをペーストして、表示をUNDEFにしてから
エミュレーション機能のStepで1つずつ命令を処理していきます
すると、テーブル管理の数値を読み込んでいる事や
規定回数だけ特定の命令を実行しているのが良く分かると思います。


ちなみに、変化するのはエミュ機能のレジスタだけでなく
あのプログラム内での数値を書き込む先である
アドレス00B3F1E8へ飛んでみて下さい
なんとストア命令があると数値も実際に書き込まれ
より確実に自作プログラムの動作を確認する事が出来ます。


途中で書いたように、実は現時点(2003.11.08)でのPS2DISでは
処理できない命令がいくつか存在します、例えば
pinteh、pmadduw、prot3w、pmthl.lwなどがあり
ベクトルユニットの命令は基本的に全て未対応になります
ただこのエミュ機能が全命令に対応してしまうと
無断転載防止などで複雑にプログラムを組んだとしても
全部バレバレになるので嬉しいような困るようなです、個人的に。

ついでですが「メモリーカードクラッシュ?」に載っているコード
実はあれはエミュ出来ない命令を複数使用しているので
赤本でも持っていないとどうなっているかは分からないはずです。