PS2は開発中にバグが多く発生する事が多いのかなんなのか
デバッグモードが残ってる可能性が結構高いです
稀に、レガイアの様に凄く細かい設定が出来るぐらい
完全なデバッグモードが残ってる事もあります


今回の題材はゼノサーガです

まずは、デバッグに関係ありそうな文字列か
ラベル(シンボル)を探します。

ゼノサーガでは、文字を
Shift JisではなくEUCで管理しているようなので
漢字コードをEUCにして検索します

「デバッグ」で検索してみた所
最初に「== デバッグフラグ ==」
という文字列に当たると思います

この周辺を見てみると
カメラ切り替えやイベント実行などの
いかにもデバッグっぽい文字列があると思います
試しに004BB258を参照先にしてF3を押して下さい

すると、002507C4の一ヶ所だけヒットすると思います
このアドレスの次の命令を見て下さい
jalでxglFontDebugPrintfルーチンに飛んでいます
文字列を通過してからジャンプしています。
早速このルーチンに飛んで解析してみましょう

この下の画像を見て頂ければ分かると思いますが
0087B308のアドレスの数値を元に
大きく分岐する事が分かると思います

分岐しないように、0087B308のアドレスに
何か数値を書き込んで見ましょう
するとなにやらメニューが表示されました

これはデバッグメニューの一種のようですが
デバッグモードでは無いようです。

でも、解析の助けにはなりそうなので
このコードは入れっぱなしにしておきました
実はここでこのコードを入れておいたので
後にデバッグモードを見付ける事が出来ました(かなりの偶然)
他を探してみましょう

今度はラベルで探してみます
すると、GameModeDebugMenuというラベルを発見
そこに飛んでみましょう
すると、ルーチンの最初の方に
0048BD0Eの数値によって分岐する命令があるので
分岐しなかった場合の部分を見てみましょう

この中のストア命令に注目して下さい
sq、sd、sw、shの3つがありますが
デバッグフラグを扱っているルーチン内なら
フラグを立てるときにストアを使う可能性があります
フラグは、普通ならば何ケタも書き込む必要がないので
一番書き込むデータ数が少ないshに注目
ここではアドレス0035BCE0の数値を00333D8Cに移しているようです

試しに00333D8Cに数値を入力してみます
すると、数値を8にした時にデバッグモードに入りました


大成功〜

かと思いきや
デバッグメニューから抜けれない罠(汗)
数値を固定してるのがNGみたいです

特定の場面でコードをONにするなら
パッドコードが便利ですが
PSの様に自由に見つける事が出来ません。
しかし、上で「0048BD0Eの数値によって分岐」
と書きましたが、0100はパッドコードで言うと
セレクトボタンと同じ数値です。
もしかしたら0048BD0Eはパッドアドレスでは?・・・

早速、L2を押したらコードがONになるように
条件判定コードとして0048BD0Eを使ってみました
すると、見事に押した時にデバッグモードに入りました
が、どうやってメニューから抜け出すのか未だに謎です

ここでもう一度おさらい
「0048BD0Eの数値と0100を比較している」
つまり、セレクトを押すか押さないか
かなりセレクトボタンが怪しいですね・・・
早速デバッグメニューでセレクトを押してみました
すると、デバッグメニューから抜ける事が出来ました
これでデバッグモードの完成です

サーチ終了後に分かった事ですが
0087B308のコードを入れてないと
デバッグメニューが正しく使えません


実際はこんなに早く見つからず
大分混乱しながら作ったので
この説明と一部食い違う可能性があります(汗)
特に、実際にコードで使ってるパッドアドレスは
モデルコントロールで見つけた0048BD10だったりします