この記事は旧バージョンです.新しいバージョンは以下のものとなります.
ポケモンクリスタルにおけるバイナリエディタ - flag3833753
はじめに
以前,初代と金銀でバイナリエディタを導入する記事を出させていただきました.
簡易版バイナリエディタ導入の方法
まずは簡易版バイナリエディタを導入します.
環境:ポケモンクリスタルでの動作を確認しております.
推奨:任意コード実行可能なソフト (初代でも金銀でも可) と通信交換できること*1
準備:「バグ図鑑」を用いた「最後に読んだメール*2」による任意コード実行環境
「わざマシン」を用いた「最後に読んだメール」による任意コード実行環境も可能ですが注意点があります.
準備の詳細は次の動画に丸投げお任せします.「バグ図鑑」の説明も省略します.
以下の手順を踏むと簡易版バイナリエディタが起動します.
- ボックスの名前を表 1 の通りにする.
- 表 2 と表 3 のメールを用意する.
- 表 2 のメールを読んで「バグ図鑑」を起動する.
- 表 3 のメールを読んで「バグ図鑑」を起動する.
手順 3. の前にセーブすることをオススメします.
「バグ図鑑」を起動したら「B」で閉じましょう.
表 1
- ヘブ空グだ空どグ
- だガョベヘワろグ
- だグぼダぞヘワろ
- グわレろグリググ
- だ空ざグわンろぱ
- ヅまとヘゴみぴヘ
- みボぷヘゴみだつ
- ぼヂキづごョの空
- がもぜオだい
表 2
ゾだゴにどづぼゴぜマづの
表 3
メに0だガにだにだ空ボデの
簡易版バイナリエディタを起動するとこんな感じになると思います.
左 4 桁がアドレス,右 2 桁がその中身となっています.
文字の表示がおかしいところがあるのですが気にせず使いましょう.
gは A,青色の線は B,携帯マークは C だと思ってください.
特に 9 と g を混同しないように注意しましょう.
注意
初期アドレスは D384 となっています.
これは 9 番目のボックスの 2 文字目「も」と 4 文字目「オ」に対応しています.
この 2 文字を変えることで初期アドレスを変更することができます.
初期アドレスを変えたくなった場合は 9 番目のボックスの名前を変更して表 3 のメールを実行すれば良いです.表 2 のメールを既に実行した場合再度実行しなくても良いです.
簡易版バイナリエディタの操作方法
以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法
B: アドレス-1
↓: 中身+1
↑: 中身-1
→: 中身+10h
←: 中身-10h
Start: 終了
簡易版バイナリエディタを再度起動する場合は表 3 のメールを読んで「バグ図鑑」を起動すれば良いです.表 2 のメールを読む必要はありません.
バイナリエディタを起動するまで
簡易版バイナリエディタを使ってアドレス D2B1 から D383 の中身を後述のものに書き換えて「てあめ」と書かれたメールを読んで「バグ図鑑」を起動すればバイナリエディタが起動できます (この文を読んでいる段階ではまだ書き換えなくて良いです).ただし D2B1 から D383 の領域はセーブ & リセットで 00 に書き換えられてしまうので 3 段階に分けて対策をします.1 段階終わるごとにセーブすることを想定しています.
1. メールの作成
D384 から D3AF の中身を
3E 00 01 21 00 11 00 A6 21 99 D3 CD 9D 2F CD F2 2F CD AD 2F C9 3E 03 01 E8 00 11 B1 D2 21 94 AA CD 9D 2F CD F2 2F 4E CD AD 2F C9 50
に書き換えてください.その後手持ちのポケモン 1 匹目に (任意コード実行などに) いらないメールを持たせ,「てオも」と書かれたメールを読んで「バグ図鑑」を起動してください.
そうすると手持ちのポケモン 1 匹目に持たせたメールの内容が
に変化しています.このようになっていなければコードを見直してください.
2. バイナリエディタの作成
D384 から D398 の中身を
3E 03 01 E8 00 11 94 AA 21 B1 D2 CD 9D 2F CD F2 2F CD AD 2F C9
に書き換えてください.そしてアドレス D2B1 から D383 の中身を後述のものに書き換えてください.長いので一番下に載せています.
その後「てオも」と書かれたメールを読んで「バグ図鑑」を起動してください.
そうするとボックス 9 のデータが書き換えられます.
3. バイナリエディタの起動
「1. メールの作成」のメールを読んで「バグ図鑑」を起動し,「てあめ」と書かれたメールを読んで「バグ図鑑」を起動してください.
打ち間違いがなければバイナリエディタが起動できます.
起動できない場合はリセットしてください.「1. メールの作成」のメールを読んで「バグ図鑑」を起動し,その後簡易版バイナリエディタを起動して D2B1 から D398 のコードの修正をしてください.修正後は「てオも」「てあめ」の順にコードを実行することでバイナリエディタが起動できます.
バイナリエディタが起動するとこのようになります.
二重線で囲まれた領域の左 4 桁がアドレス,右 2 桁がその中身となっています.
ゲーム画面の上部にも (16 進数で) 2 桁の数字があるのですが,これは SRAM バンクの数字が表示されています.アドレス A000 から BFFF の中身を扱う際に必要になってきます.
バイナリエディタの操作
初代でのバイナリエディタと殆ど同じですが「SELECT」のみ少し違います.
↑: アドレス-1
→: アドレス+10
←: アドレス-10
B+↓: アドレス+100
B+↑: アドレス-100
B+→: アドレス+1000
B+←: アドレス-1000
A+↓: 中身+1
A+↑: 中身-1
A+→: 中身+10
A+←: 中身-10
SELECT+↓: バンク+1
SELECT+↑: バンク-1
SELECT+→: バンク+10
SELECT+←: バンク-10
SELECT+A: 指しているアドレスを実行
START: 終了
「SELECT+A」は不用意に押すとフリーズする可能性が高いので気をつけましょう.
「1. メールの作成」のメールをアップデートする
「1. メールの作成」のメールを手持ちのポケモン 1 匹目に持たせてください.
そしてバイナリエディタを開くとバンク 00 のアドレス A615 から A618 の中身は
C9 50 00 00
になっています.これを
C3 B1 D2 50
に書き換えてください.そうすると手持ちのポケモン 1 匹目が持っているメールが書き換えられます.このメールを読んで「バグ図鑑」を実行するとバイナリエディタを起動することができます.こうすることで (「てあめ」のメールを使わずに) 1 つのメールだけでバイナリエディタを起動することができます.
「わざマシン」を用いた「最後に読んだメール」による任意コード実行環境について
基本的には上記の手順とほぼ同様です.ただし表 3 のメールは
メに0だガにだにだ空ボデの
AF 3C E0 D4
とし D2C1 から D2C6 の部分は
00 00 00 00 00 00
参考文献
参考文献は次の 2 つです.今回もお世話になりました.
コード
WRA1:D2B1 CD C5 32 call 32C5 WRA1:D2B4 00 nop WRA1:D2B5 11 C0 4D ld de,4DC0 WRA1:D2B8 21 00 90 ld hl,9000 WRA1:D2BB 01 22 3E ld bc,3E22 WRA1:D2BE CD C6 0D call 0DC6 WRA1:D2C1 CD 3B 0E call 0E3B WRA1:D2C4 CD 49 0E call 0E49 WRA1:D2C7 21 00 DA ld hl,DA00 WRA1:D2CA CD 1F D3 call D31F WRA1:D2CD E5 push hl WRA1:D2CE 54 ld d,h WRA1:D2CF 5D ld e,l WRA1:D2D0 3E F8 ld a,F8 WRA1:D2D2 83 add e WRA1:D2D3 5F ld e,a WRA1:D2D4 38 01 jr c,D2D7 WRA1:D2D6 15 dec d WRA1:D2D7 06 12 ld b,12 WRA1:D2D9 FA 94 D4 ld a,(D494) WRA1:D2DC 21 A9 C4 ld hl,C4A9 WRA1:D2DF CD 9D 2F call 2F9D WRA1:D2E2 CD 12 D3 call D312 WRA1:D2E5 3E 7C ld a,7C WRA1:D2E7 22 ldi (hl),a WRA1:D2E8 7A ld a,d WRA1:D2E9 CD 12 D3 call D312 WRA1:D2EC 7B ld a,e WRA1:D2ED CD 12 D3 call D312 WRA1:D2F0 3E 7F ld a,7F WRA1:D2F2 22 ldi (hl),a WRA1:D2F3 1A ld a,(de) WRA1:D2F4 CD 12 D3 call D312 WRA1:D2F7 36 7C ld (hl),7C WRA1:D2F9 3E 0C ld a,0C WRA1:D2FB 85 add l WRA1:D2FC 6F ld l,a WRA1:D2FD 30 01 jr nc,D300 WRA1:D2FF 24 inc h WRA1:D300 1C inc e WRA1:D301 20 01 jr nz,D304 WRA1:D303 14 inc d WRA1:D304 05 dec b WRA1:D305 20 DE jr nz,D2E5 WRA1:D307 CD AD 2F call 2FAD WRA1:D30A 21 4B C5 ld hl,C54B WRA1:D30D 36 ED ld (hl),ED WRA1:D30F E1 pop hl WRA1:D310 18 B8 jr D2CA WRA1:D312 F5 push af WRA1:D313 CB 37 swap a WRA1:D315 CD 19 D3 call D319 WRA1:D318 F1 pop af WRA1:D319 E6 0F and a,0F WRA1:D31B C6 F6 add a,F6 WRA1:D31D 22 ldi (hl),a WRA1:D31E C9 ret WRA1:D31F CD 1B 35 call 351B WRA1:D322 F0 A9 ld a,(ff00+A9) WRA1:D324 5F ld e,a WRA1:D325 CB 5F bit 3,a WRA1:D327 28 02 jr z,D32B WRA1:D329 C1 pop bc WRA1:D32A C9 ret WRA1:D32B CB 77 bit 6,a WRA1:D32D 28 04 jr z,D333 WRA1:D32F 3E FF ld a,FF WRA1:D331 18 19 jr D34C WRA1:D333 CB 7F bit 7,a WRA1:D335 28 04 jr z,D33B WRA1:D337 3E 01 ld a,01 WRA1:D339 18 11 jr D34C WRA1:D33B CB 67 bit 4,a WRA1:D33D 28 04 jr z,D343 WRA1:D33F 3E 10 ld a,10 WRA1:D341 18 09 jr D34C WRA1:D343 CB 6F bit 5,a WRA1:D345 28 04 jr z,D34B WRA1:D347 3E F0 ld a,F0 WRA1:D349 18 01 jr D34C WRA1:D34B AF xor a WRA1:D34C CB 53 bit 2,e WRA1:D34E 28 0D jr z,D35D WRA1:D350 CB 43 bit 0,e WRA1:D352 28 01 jr z,D355 WRA1:D354 E9 jp hl WRA1:D355 E5 push hl WRA1:D356 21 94 D4 ld hl,D494 WRA1:D359 86 add (hl) WRA1:D35A 77 ld (hl),a WRA1:D35B E1 pop hl WRA1:D35C C9 ret WRA1:D35D CB 43 bit 0,e WRA1:D35F 28 0E jr z,D36F WRA1:D361 F5 push af WRA1:D362 FA 94 D4 ld a,(D494) WRA1:D365 CD 9D 2F call 2F9D WRA1:D368 F1 pop af WRA1:D369 86 add (hl) WRA1:D36A 77 ld (hl),a WRA1:D36B CD AD 2F call 2FAD WRA1:D36E C9 ret WRA1:D36F CB 4B bit 1,e WRA1:D371 28 03 jr z,D376 WRA1:D373 84 add h WRA1:D374 67 ld h,a WRA1:D375 C9 ret WRA1:D376 CB 7F bit 7,a WRA1:D378 28 05 jr z,D37F WRA1:D37A 85 add l WRA1:D37B 6F ld l,a WRA1:D37C D8 ret c WRA1:D37D 25 dec h WRA1:D37E C9 ret WRA1:D37F 85 add l WRA1:D380 6F ld l,a WRA1:D381 D0 ret nc WRA1:D382 24 inc h WRA1:D383 C9 ret
バイナリ
CD C5 32 00 11 C0 4D 21 00 90 01 22 3E CD C6 0D CD 3B 0E CD 49 0E 21 00 DA CD 1F D3 E5 54 5D 3E F8 83 5F 38 01 15 06 12 FA 94 D4 21 A9 C4 CD 9D 2F CD 12 D3 3E 7C 22 7A CD 12 D3 7B CD 12 D3 3E 7F 22 1A CD 12 D3 36 7C 3E 0C 85 6F 30 01 24 1C 20 01 14 05 20 DE CD AD 2F 21 4B C5 36 ED E1 18 B8 F5 CB 37 CD 19 D3 F1 E6 0F C6 F6 22 C9 CD 1B 35 F0 A9 5F CB 5F 28 02 C1 C9 CB 77 28 04 3E FF 18 19 CB 7F 28 04 3E 01 18 11 CB 67 28 04 3E 10 18 09 CB 6F 28 04 3E F0 18 01 AF CB 53 28 0D CB 43 28 01 E9 E5 21 94 D4 86 77 E1 C9 CB 43 28 0E F5 FA 94 D4 CD 9D 2F F1 86 77 CD AD 2F C9 CB 4B 28 03 84 67 C9 CB 7F 28 05 85 6F D8 25 C9 85 6F D0 24 C9