ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

コードクリエイターコミュのニンテンドーDS ゲーム改造

  • mixiチェック
  • このエントリーをはてなブックマークに追加
あまりにもNDS改造が寂れているのでトピック作ってみたテスト。

先に見ておくと良いかもなリンク
NDSTech Wiki
http://www.bottledlight.com/ds/index.php/Main/HomePage
すずめ愛好会(GameboyAdvanceの項)
http://vsync.org/
NDSHACK(自分のとこ(ぉ
http://hp.vector.co.jp/authors/VA018359/nds/ndshack.html

・・・

第1回のネタは「きみのためなら死ねる」でぃす。
ゲームラボ11月号で扱ったネタですが、ページの都合上、
かなり端折って書いたので詳細を説明ー。

このゲームでは
「ミニゲームをクリアするごとにポイントが溜まり、
 100集めると次のシーンに進む」
というシステムを採用していますが、例えば、
現在のポイントが95で、40を取得しても超過せず、
ちゃんと100で止まるように組まれています。
つまり「100を超えたら100に留める」という処理が
あると予想されるので、それっぽい処理をテキトーに
探しますです。

んで、出てくるのは
:02007B84 E594001C ldr r0,[r4, #+0x1c]
  ;r4+0x1c=*(0206ca4c)=#-508526590(0xe1b08002)
:02007B88 E3500064 cmp r0,#0x64
:02007B8C A3A00064 movge r0,#0x64
  ;r0=100(0x64)
:02007B90 E584001C str r0,[r4, #+0x1c]
  ;r4+0x1c=*(0206ca4c)=#-508526590(0xe1b08002)
こんな処理。
アドレス0206ca4cの内容をr0レジスタにロードし、
cmpでr0と#0x64(100)を比較。
次の行でGreater and Equal(ge)条件付の
movを実行し、超過している場合は100に留める。
最終的にアドレス0206ca4cにr0を書き戻す…。
とまあ、こんな感じ。

ちなみにr4+0x2c=0206ca4cですが、r4の値は
さかのぼって
:02007AD0 E59F4130 ldr r4,[r15, #+0x130]
  ;r15+0x130=*(02007c08)=#33999400(0x0206ca28)
ここで定義されてます。

NDSプログラムのパラメータの大半は
「近くであればr15レジスタ+xxx
 遠くであれば適当なレジスタ+xxx」
といった具合に、間接的(というか指標か…)に
アクセスすることがとても多いです。

しかし、そのアドレスを見ると命令行だったりと、
何とも不可解な点も多い…。
どういうことなんかなぁ。

コメント(4)

PS2で言う所の最大値検索のNDS版ですね。
ラボではmovge r0,#0x64を書き換えて100にしていましたが
「cmp r0,#0x64」→「cmp r0,#0x00」
としても100になるのでしょうか?
ARMの命令セットを見る感じでは良さそうですが。

少し命令表などを眺めてみましたが
これは新境地が開けそうな感じがします(笑)
>「cmp r0,#0x64」→「cmp r0,#0x00」
>としても100になるのでしょうか?
恐らく、ふつーに100になると思われますです。

最初はどちらの方法を使おうか迷いましたが、
とりあえずge条件を削るほうが簡単なので。

>少し命令表などを眺めてみましたが
>これは新境地が開けそうな感じがします(笑)
ARMはなかなか面白いですぞよ〜。

・・・

今の研究課題は「必ず確保できる余剰領域」がどこにあるか?と、
「必ず自作処理に誘導できるループ処理」がどこにあるか?
でしょうか。

Main RAM 0x02000000-0x023FFFFFなので、
23FF000〜23FFFFF辺りは空いていると仮定し、
ここを確保。
「必ず」実行されているとすればウェイト(タイミング)か、
キー入力(アドレス04000130アクセス)辺りが考えられますので、
04000130の格納値をロードする瞬間を"b 023FF000"に書き換え、
自作処理を実行した後に潰した命令を復元し、
ジャンプ元に戻れば完了、と。

これがうまくいけば、NDS改造が身近になるかも…。
問題はどうやって023FF000にプログラムコードを置くねんっ
というツッコミ(ぉ

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

コードクリエイター 更新情報

コードクリエイターのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。