掲示板の方でエミュレーター使用時の
ゲームのメニューを開く速度を速くするコードを
探してほしいといわれ割と簡単にコードが見つかったので
そのやり方を書いておきます。
とりあえず下のファイルをダウンロードしてください。
私が4年くらい前に自分用に作ったPJ64 v1.6用のレジスタモニタです。
実行するとPJ64のメモリからレジスタ情報を取得し表示してくれます。
=== 探し方 ===
例としてマリオストーリーでやってみましょう。
このゲームはエミュレーターで動かすとゲーム中のメニューを開こうとすると
一瞬止まったかのようになりメニューを開くのに時間がかかります。
レジスタモニタを起動してもう一度メニューを開いてみると
pcレジスタは802747C、raレジスタは8027B04で
処理が重くなっているのがわかります。
つぎに逆アセンブラで該当箇所を見てみましょう。
PD2DISまたはNemu64で逆アセンブルして8027B04付近を見てみました。
上記の処理を簡単に説明すると
8027AFCへの処理から戻ってきた後、S2に1を加算、
値が0x13Eより大きくなるまで処理をループ
という流れになっています。
おそらくこのループ部分で処理が重くなりメニューが開くのに
時間がかかるようになっていると推測されるので
強制的にループを抜けるようにするにするために
80027B28を書き換えて
80027B28: SLTI V0, S2, 0x013E
↓
80027B28: SLTI V0, S2, 0x0000
にしてしまえばすぐにループを抜けるようになるはずです。
そんなわけでマリオストーリーのコードは
81027B2A 0000
になります。
※追記
逆アセンブル結果をよく見てみたら80027B4Cにも分岐命令がありますね。
80027B44: SLTI V0, S3, 0x00EF
80027B48: ADDIU T0,T0, 0x0140
80027B4C: BEZ V0,0x80027790
最初のところと併せて二重ループになっているようなので
これもき換えた方がいいのかな?と思ったんですが
値をよく見てみると0xEFは10進法で219、0x13Eは318
というわけで捜査線の数っぽいですね。
つまり画面のエフェクトの処理をしている部分ではないかと推測されます。
こんな処理の重いエフェクトは必要ないので、
このエフェクト処理を呼び出している部分をつぶしてしまいましょう。
Nemu64でやった場合をせつめいしますと、
エフェクト処理が終わって元の処理に戻す部分
80027B74: JR RA
にブレイクポイントを仕掛けたあと、もう一度メニューを開いてブレイクさせたら
逆アセンブルウィンドウのStepボタンを押すと逆アセンブルリストが切り替わって
80027FD8付近のエフェクト処理の呼び出し部分に行くことが出来ます。
少し上の80027FD0を見てみると
80027FD0: JAL 0x80027984
でエフェクト処理を呼び出しています。
このエフェクト処理を呼び出しているのは1カ所しかないので
ここを呼び出ししないようにすればOKとなりますので
最終的なコードは
81027FD0 2400
となります。
いきなりの書き込みですみません。
サイトでマリオストーリーの画像貼ってたのでねこかぶさんもやっていると思い一つ質問があるんですけど仲間の能力を使うボタン?ってどこなんですかね...
いろいろ試してみたのですが出来なくて...
>仲間の能力を使うボタン
ちゃんとやったことないのでわかりません。
適当にボタン押したら見つかると思いますけど
ねこかぶさんって、すごいですね。
ヨーヨーがお好きなようですし、パソコンにも、とても詳しいです。
やっぱり、ねこかぶさんは工業高校とか大学の工学部卒なんでしょうか?
コードだけでなく調べ方まで書いて頂けるなんて。
快適にプレイできるようになりました。
有り難うございました。
>工業高校とか大学の工学部卒なんでしょうか?
違います。物好きなだけですー