コンフィグファイルの作り方

emuhasteと同じフォルダ内にあるconfigフォルダを開くと色々なINIファイルが入っていますが、
これが各エミュレータに対応するための設定情報が記載されたコンフィグファイルです。

例えば NDS_no$gba.ini を開くとこんな感じ。各命令の意味と比較してみます。
;Config by Imaha486
[EMUHASTE]
PROCESS_NAME=NO$GBA.EXE
BASEADDR_KEY=FFDEFFE7FFDEFFE7
BASEADDR_TRY=2
VIRTUAL_ADDR=2000000
MEMORY_SIZE=400000
COMMENT=CleanROM専用\n暗号化ROMでは利用不可。
セミコロンを頭に付けるとコメント扱いになります。
[EMUHASTE]項として宣言(必須)。
ターゲットとなるプロセス(プログラム)名。
配列 FFDEFFE7FFDEFFE7 を目印にメモリを検索。
2回目に出てきた配列を基点として定義。
基点をアドレス 2000000h とする。
メモリサイズを400000hバイトとする。
emuhaste右下のコメント欄に表示する内容。\nで改行。

これを意味だけ抽出すると
「プログラム NO$.GBA.EXE のメモリから FFDEFFE7FFDEFFE7 という配列を探し、
2回目に見つかった場所を基準とする。基準は2000000hから始まり、そのサイズは400000hバイト」。


INIファイルでサポートしている構文は以下の通り。基本的に全ての数値は16進数表記。
項目名意味記述例
[EMUHASTE]コンフィグ先頭の宣言文。必ず初めに入れてください。.
PROCESS_NAME対象プロセス(プログラム)名。部分一致だけでも検出する。
(chank→chankast.exe or chankex.exe ..)
PROCESS_NAME=no$gba.exe
BASE_ADDRベースアドレスをダイレクトに指定。普通は使わない。BASE_ADDR=0021FE00
BASEADDR_KEYベースアドレスを検出するためのキー配列を指定。
最も効果的で、バージョン違いなどにも影響されない。
BASEADDR_KEY=FFDEFFE7FFDEFFE7
BASEADDR_LOAD任意アドレスに格納された4バイトを読み込み、
読んだ値のアドレスからベースアドレスを取得する。
BASEADDR_LOAD=00638000
BASEADDR_FIX検出したベースアドレスの値を加減算して調整する。
検出場所と基準アドレスが異なる場合に使用。
BASEADDR_FIX=-3E7
BASEADDR_TRYBASEADDR_KEYで指定したキーを何回探すかを指定。
未指定の場合、デフォルト値は1。
BASEADDR_TRY=2
VIRTUAL_ADDR開始アドレスがどの値から始まるかを指定する。
例えばDSのARM9はアドレス02000000から始まっている。
VIRTUAL_ADDR=2000000
MEMORY_SIZEサーチするメモリサイズをバイト単位で指定する。
DSは4MB(400000)、PS2は32MB(1000000)。
MEMORY_SIZE=400000
COMMENTコメント。対応バージョンや注意書きなどにどうぞ。COMMENT=自己責任で!

ベースアドレスを探す手順

1.デバッガやメモリビューア付きのエミュレータでゲーム開始。

2.タイトル前くらいでエミュレーションを停止させ、メモリビューアからアドレス00000000付近の
 基準になりそうな特徴的な値を探す(BIOSコードなど)。

3.DBxSTANDやSTAND-Mxなどのプロセスメモリエディタでその値を検索。

4.うまくヒットしたら実際コンフィグファイルを組んで動作検証する。

5.他のゲームでも正しくアドレスが検出できれば成功。

ベースアドレスを探す手順(BASEADDR_LOAD使用)

1.デバッガやメモリビューア付きのエミュレータでゲーム開始。

2.メモリビューアのアドレス00000000以降にある特徴的な値を探す。

3.DBxSTANDやSTAND-Mxなどのプロセスメモリエディタでその値を検索。

4.うまくヒットしたらそのアドレス00000000の位置のリアルアドレスを反転する
(例:010DC250にヒット→50C20D01)。

5.反転した値を検索し、EXEモジュール内のアドレスにヒットしたら成功

6.BASEADDR_LOAD=ヒットしたアドレス、で定義完了。