Site cover image

🐾 flag3

ポケットモンスター クリスタル バイナリエディタ

The English version is here:

📄Arrow icon of a page linkRAM Writer in Pokémon Crystal (JP)

バイナリエディタは、元々初代ポケモンにおける任意コード実行の究極の到達点とも言えるツールで、今回紹介するバイナリエディタは第二世代用に移植されたものです。このエディタを使用すると、ゲーム内のあらゆるメモリの読み書きが可能になります。さらに、プログラムを記述し、実行させることもできます。

本記事は以下の動画の解説となります。

バイナリエディタ導入手順

環境

ポケットモンスター クリスタルの日本語版のみに対応しています。ポケットモンスター 金・銀や日本語版以外のバージョンには対応していません。またポケモンスタジアム金銀のGBビルや一部のエミュレータでは動作しません。ポケットモンスター 金・銀におけるバイナリエディタ導入については以下の記事をご覧ください。

📄Arrow icon of a page linkポケットモンスター 金・銀 バイナリエディタ

手順1: 手持ちのポケモンを2匹にする

さいしょからはじめる場合は、モンスターボールを入手するまで進める必要があります。主人公の性別、時間、主人公の名前、曜日、最初のポケモン、ライバルの名前はなんでも良いです。わざマシン17を使ってバイナリエディタを起動するまで手持ちのポケモンを3匹以上にしないでください

手順2: ボックスの名前を変更する

ボックスの名前を以下のようにしてください。

📦
ボックス1:ダだギョにヂだゾ

ボックス2:ダだゲムよダだガ

ボックス3:よノゥネろてエろ

ボックス4:にらヅノるひジデ

ボックス5:にテゥキリゅゅの

ボックス6:へブひひ はムろ

ボックス7:どダれアろダだや

ボックス8:ざダれむをダリ

ボックス9:だかがをぜジだを

手順3: 名前がバグったポケモンを入手

  1. セーブをする際に特定のタイミングで強制リセットをすることで、名前がバグったポケモンを入手します。
    1. さいしょからはじめた場合はボックス3に切り替えます。既存のセーブデータで行う際は一度も満タンにしたことのないボックスに切り替えます。一度も使用したことのないボックスにすることをおすすめします。ボックスの切り替えによるセーブを行うようにしてください。
    2. ポケモンを1匹預けます。「ボックスせいり/メールはずしてね」を選択し、レポートにうえからかいてもいいですか?に対して「はい」を押して、「でんげんをきらないでください」と完全に表示された直後に強制リセットをします。
    3. ゲームを再開させて、リュックを開いてから、ボックスの状態を確認します。
    4. 新しく預けたポケモンのニックネームが?からなる文字列になっていれば成功しています。そうでない場合はb.をやり直してください。ポケモンが預けられていない場合は、リセットが早すぎたことになります。ポケモンが正常に預けられている場合は、リセットが遅すぎたことになります。
      • 名前がバグったポケモンの入手に成功するための強制リセットのタイミングは猶予2フレームで、「はい」を押してから149、150フレーム後となります。
  2. 名前がバグったポケモンを入手したらボックス3の一番上に配置してください。
  3. (既存のセーブデータを使っている場合は)ボックス3に切り替えてください。

手順4: 0x1500制御コードによる任意コード実行を行う

  1. 名前がバグったポケモンを入手したらどうぐの1番目を不要なアイテムにしてパソコンの前でセーブとリセットを行います
  2. ゲームを再開後、パソコンの前から左に1歩、下に1歩移動しポケモンずかんを開きます。画像のこの場所でポケモンずかんを開くようにしてください。
    Image in a image block
  3. ポケモンずかんでカーソルをオニスズメに合わせます。
    • ポッポ以外のポケモンに遭遇したことがない場合は「しんがたずかんモード」ではカーソルをオニスズメに合わせることができないので「ふるいずかんモード」に切り替えてカーソルをオニスズメに合わせるようにしてください。
    • しんがたずかんモードの並び方は以下のようになっているのでオニスズメに遭遇したことがない場合でもこれを目印にしてカーソルをオニスズメにすると良いです。
      🔍
      ワニノコ

      アリゲイツ

      オーダイル

      ポッポ

      ピジョン

      ピジョット

      オニスズメ

      オニドリル

      ホーホー

      ヨルノズク

      コラッタ

      ラッタ

      オタチ

  4. ポケモンずかんを閉じてから、右に1歩、上に1歩進んでパソコンを開き名前がバグったポケモンのニックネームを表示させます。ポケモンずかんを閉じてからはこの順番の通りに進んでください。この移動の順番を守らないと失敗します。

フリーズすることなく以下のようになれば成功となります。

  • ボックス6の名前が「へブばん どうろひ はムろ」に変化する。
  • どうぐの1番目がはながらメールに変化する。

手順5: 簡易版バイナリエディタ導入

ボックス3からボックス5までの名前を以下のようにしてください。ボックス6の名前は変更しないでください

📦
ボックス3:だじダムキづごぱ

ボックス4:ヅまとへゲみぴよ

ボックス5:へゲみボぷへゲみ

ボックスの名前を変更したらボックスの名前が以下のようになっていることを確認してください。

📦
ボックス1:ダだギョにヂだゾ

ボックス2:ダだゲムよダだガ

ボックス3:だじダムキづごぱ

ボックス4:ヅまとへゲみぴよ

ボックス5:へゲみボぷへゲみ

ボックス6:へブばん どうろひ はムろ

ボックス7:どダれアろダだや

ボックス8:ざダれむをダリ

ボックス9:だかがをぜジだを

下記の内容のメールをポケモンに持たせます。

✉️
へなづていろなひだへダみちぼダメ
に0ぞ?ムぞボデののののののだっ

メールの作成後はメールの中身を読みます。その後ずかんを開くことで簡易版バイナリエディタを起動することができます。

簡易版バイナリエディタ

これ以降、上記のメールを読んでからずかんを開くたびに簡易版バイナリエディタを起動することができます。

Image in a image block

左側のDD0Bが書き換えようとしているメモリのアドレスで、右の00がその中身です。この簡易版バイナリエディタではA、B、Cの表示が正常でないことに注意してください。Aがg、Bが横線、Cが電話マークとなっています。

🎮
簡易版バイナリエディタ操作方法

B: アドレス-01

A: アドレス+01

↑: 中身-01

↓: 中身+01

←: 中身-10

→: 中身+10

START: 終了

SELECT: DDD1からのコードを実行(プログラム入力するまで押さないように注意)

手順6: バイナリエディタ導入

簡易版バイナリエディタを使用してバイナリエディタのプログラムを入力していきます。入力を終えたらセレクトボタンを押すことでバイナリエディタを起動することができます。バイナリエディタを起動する前に一旦スタートボタンを押して簡易版バイナリエディタを終了させてセーブすることをおすすめします。

アドレス 中身
DD0B CD
DD0C C5
DD0D 32
DD0E CD
DD0F C2
DD10 31
DD11 CD
DD12 3B
DD13 0E
DD14 CD
DD15 49
DD16 0E
DD17 11
DD18 00
DD19 40
DD1A 21
DD1B 00
DD1C 96
DD1D 01
DD1E 19
DD1F 3E
DD20 CD
DD21 B3
DD22 0D
DD23 F0
DD24 9D
DD25 F5
DD26 21
DD27 00
DD28 D0
DD29 CD
DD2A 5C
DD2B C8
DD2C E5
DD2D 11
DD2E F8
DD2F FF
DD30 19
DD31 E5
DD32 D1
DD33 21
DD34 A9
DD35 C4
DD36 F0
DD37 9D
DD38 CD
DD39 9D
DD3A 2F
DD3B CD
DD3C AB
DD3D C8
DD3E 01
DD3F 0C
DD40 00
DD41 36
DD42 7C
DD43 23
DD44 7A
DD45 CD
DD46 AB
DD47 C8
DD48 7B
DD49 CD
DD4A AB
DD4B C8
DD4C 36
DD4D 7F
DD4E 23
DD4F 1A
DD50 CD
DD51 AB
DD52 C8
DD53 13
DD54 36
DD55 7C
DD56 09
DD57 7C
DD58 FE
DD59 C6
DD5A 20
DD5B E5
DD5C CD
DD5D AD
DD5E 2F
DD5F 3E
DD60 ED
DD61 EA
DD62 4B
DD63 C5
DD64 E1
DD65 18
DD66 C2
DD67 CD
DD68 1B
DD69 35
DD6A F0
DD6B A9
DD6C 5F
DD6D 01
DD6E 01
DD6F 00
DD70 07
DD71 38
DD72 1E
DD73 0B
DD74 0B
DD75 07
DD76 38
DD77 19
DD78 0E
DD79 F0
DD7A 07
DD7B 38
DD7C 14
DD7D 01
DD7E 10
DD7F 00
DD80 07
DD81 38
DD82 0E
DD83 48
DD84 07
DD85 30
DD86 0A
DD87 E1
DD88 F1
DD89 D7
DD8A 3E
DD8B F9
DD8C E0
DD8D 70
DD8E C3
DD8F ED
DD90 21
DD91 7B
DD92 0F
DD93 30
DD94 10
DD95 0F
DD96 0F
DD97 30
DD98 01
DD99 E9
DD9A F0
DD9B 9D
DD9C CD
DD9D 9D
DD9E 2F
DD9F 79
DDA0 86
DDA1 77
DDA2 C3
DDA3 AD
DDA4 2F
DDA5 0F
DDA6 38
DDA7 05
DDA8 0F
DDA9 38
DDAA 06
DDAB 09
DDAC C9
DDAD 79
DDAE 84
DDAF 67
DDB0 C9
DDB1 F0
DDB2 9D
DDB3 81
DDB4 D7
DDB5 C9
DDB6 F5
DDB7 CB
DDB8 37
DDB9 CD
DDBA B2
DDBB C8
DDBC F1
DDBD E6
DDBE 0F
DDBF C6
DDC0 F6
DDC1 F6
DDC2 60
DDC3 22
DDC4 C9
DDD1 11
DDD2 DE
DDD3 AF
DDD4 CD
DDD5 DB
DDD6 DD
DDD7 11
DDD8 00
DDD9 C8
DDDA D5
DDDB 3E
DDDC 03
DDDD 01
DDDE BA
DDDF 00
DDE0 21
DDE1 0B
DDE2 DD
DDE3 CD
DDE4 9D
DDE5 2F
DDE6 C3
DDE7 F2
DDE8 2F

バイナリエディタ

これ以降、簡易版バイナリエディタを起動してからセレクトボタンを押すたびに、バイナリエディタを起動することができます。

Image in a image block

画面上部の10が現在のROMバンクとSRAMバンクとなります。

🎮
バイナリエディタ操作方法

↑: アドレス-01

↓: アドレス+01

←: アドレス-10

→: アドレス+10

B+↑: アドレス-100

B+↓: アドレス+100

B+←: アドレス-1000

B+→: アドレス+1000

A+↑: 中身-01

A+↓: 中身+01

A+←: 中身-10

A+→: 中身+10

START: 終了

SELECT+↑: バンク-01

SELECT+↓: バンク+01

SELECT+←: バンク-10

SELECT+→: バンク+10

SELECT+A: 現在のアドレスからのコードを実行(注意して使用してください)

バイナリエディタを使ってアドレスD300~D30B、DA47~DA55の中身を以下のように書き換えてください。

アドレス 中身
D300 3E
D301 D0
D302 EA
D303 C6
D304 D0
D305 3E
D306 03
D307 21
D308 D7
D309 55
D30A CF
D30B C9
DA47 3E
DA48 03
DA49 01
DA4A BA
DA4B 00
DA4C 11
DA4D 00
DA4E C8
DA4F 21
DA50 DE
DA51 AF
DA52 D5
DA53 C3
DA54 8C
DA55 68

書き変えたらカーソルをアドレスD300に合わせてSELECT+Aボタンを押すことでたいせつなものポケットにわざマシン17を入手することができます。このわざマシン17を使うたびにバイナリエディタを直接起動することができます。

Image in a image block

手順7: 通常の状態に戻す

バイナリエディタの導入で様々な副作用が発生しています。

  • ポケモンずかん
  • ボックス名
  • 名前がバグったポケモン
ポケモンずかん

アドレスD94Cの中身を00にすることでポケモンずかんを正常にすることができます。

ボックス名

わざマシン17によるバイナリエディタ導入後はボックス名を好きなように変えることができます。

ROMバンクを01にしてカーソルをアドレス5C95に合わせてSELECT+Aボタンを押すことでボックスの名前をデフォルトの名前に戻すことができます。

名前がバグったポケモン

リュックを開いてからボックスを開いて名前がバグったポケモンを逃がしてください。

使い方

バイナリエディタを導入した後は以下の記事で使い方を確認することができます。

📄Arrow icon of a page linkポケットモンスター 金・銀・クリスタル バイナリエディタ 使い方

注意

SRAMバンク03のアドレスAFDE~B097及びアドレスC800~C8B9、DA47~DA55はバイナリエディタで編集しないようにしてください。

技術的補足

0x1500制御コードによる任意コード実行

0x1500制御コードによる任意コード実行はポケットモンスター クリスタルで発見された任意コード実行の手法でポケットモンスター 金・銀では実行できません。テキスト文字列内の0x15制御文字の後に0x00が続く組み合わせが関係しています。

0x15制御文字を読み込むことで次の文字を引数としてモバイルスクリプトが実行されます。次の文字の内部番号が0x01~0x0Fならばモバイル関数を実行し、0x10以上ならばモバイルスクリプトを終了する処理となっています。しかし0x00については適切に処理されずにアドレスCD46が実行されます。アドレスCD46は一部のモバイル関数で使用されるアドレスとなっています。したがって、テキストが0x15、0x00の組み合わせを見つけることでアドレスCD46を実行することができます。

アドレス 機能
D05B ポケモンやアイテムの名前が一時的に格納されるアドレス
D0C8 現在選択されているポケモンの種族が一時的に格納されるアドレス
D0C9 現在選択されているポケモンが何番目かが一時的に格納されるアドレス
D0CE ポケモンの情報を一時的に格納するアドレス
D296 ポケモンの種族を一時的に格納するアドレス
D297 戦闘から逃げることに失敗したときに関連するアドレス

ゲームをリセットするとアドレスD05B以降の中身が0x00となります。名前がバグったポケモンには名前の終端を示す0x50がないために、名前がバグったポケモンのニックネームを表示させようとすると終端を示す0x50を出力するまでテキストを読み込もうとします。

ゲームを再開後上記の手順の通りに行動をすると、アドレスD0C8の中身は最後にずかんで姿を見たポケモンの種族のID、アドレスD0C9の中身は0x02、アドレスD0CEの中身は0x00、アドレスD296の中身は0x15、アドレスD297の中身は0x00となります。アドレスD0C9の中身が0x02となっている理由は毒状態の判定のためであり手持ちのポケモンの所持数と同じとなります。

オニスズメをみつけたことがない場合は、アドレスD0C8の中身は0x15にはならないです。そのためアドレスD296の中身0x15をテキストとして読み込もうとする際に、次のアドレスD297の中身0x00を引数としてモバイルスクリプトを実行するためアドレスCD46が実行されます。

オニスズメをみつけたことがある場合は、アドレスD0C8の中身は0x15となり、次のアドレスD0C9の中身0x02を引数としてモバイルスクリプトを実行します。0x02に対応するモバイル関数を実行することで、アドレスD0CEの中身0x00を引数としてモバイルスクリプトを実行するためアドレスCD46が実行されます。

指定された位置でずかんを開いて1歩右に移動して1歩上に移動すると、アドレスCD64以降の中身を C2 9B C4 (jp nz, C49B) にします。アドレスCD46からCD63までは0x00が格納されているので、アドレスCD46を実行した後はアドレスC49Bを実行することになります。

画面に関するデータ

アドレスC49BからC49Fまでは00が格納されています。アドレスC4A0以降は画面に関するデータが格納されており以下のようになっています。

WRA0:C4A0 7F               ld   a,a
WRA0:C4A1 7F               ld   a,a
WRA0:C4A2 7F               ld   a,a
WRA0:C4A3 7F               ld   a,a
WRA0:C4A4 7F               ld   a,a
WRA0:C4A5 7F               ld   a,a
WRA0:C4A6 7F               ld   a,a
WRA0:C4A7 7F               ld   a,a
WRA0:C4A8 7F               ld   a,a
WRA0:C4A9 79               ld   a,c
WRA0:C4AA 7A               ld   a,d
WRA0:C4AB 7A               ld   a,d
WRA0:C4AC 7A               ld   a,d
WRA0:C4AD 7A               ld   a,d
WRA0:C4AE 7A               ld   a,d
WRA0:C4AF 7A               ld   a,d
WRA0:C4B0 7A               ld   a,d
WRA0:C4B1 7A               ld   a,d
WRA0:C4B2 7A               ld   a,d
WRA0:C4B3 7B               ld   a,e
WRA0:C4B4 7F               ld   a,a
WRA0:C4B5 7F               ld   a,a
WRA0:C4B6 7F               ld   a,a
WRA0:C4B7 7F               ld   a,a
WRA0:C4B8 7F               ld   a,a
WRA0:C4B9 7F               ld   a,a
WRA0:C4BA 7F               ld   a,a
WRA0:C4BB 7F               ld   a,a
WRA0:C4BC 7F               ld   a,a
WRA0:C4BD 7C               ld   a,h
WRA0:C4BE 7F               ld   a,a
WRA0:C4BF 7F               ld   a,a
WRA0:C4C0 7F               ld   a,a
WRA0:C4C1 7F               ld   a,a
WRA0:C4C2 7F               ld   a,a
WRA0:C4C3 7F               ld   a,a
WRA0:C4C4 7F               ld   a,a
WRA0:C4C5 7F               ld   a,a
WRA0:C4C6 7F               ld   a,a
WRA0:C4C7 7C               ld   a,h
WRA0:C4C8 7F               ld   a,a
WRA0:C4C9 7F               ld   a,a
WRA0:C4CA 7F               ld   a,a
WRA0:C4CB 7F               ld   a,a
WRA0:C4CC 7F               ld   a,a
WRA0:C4CD 7F               ld   a,a
WRA0:C4CE 7F               ld   a,a
WRA0:C4CF 7F               ld   a,a
WRA0:C4D0 7F               ld   a,a
WRA0:C4D1 7C               ld   a,h
WRA0:C4D2 D6 98            sub  a,98
WRA0:C4D4 EA 97 DB         ld   (DB97),a
WRA0:C4D7 C3 83 DB         jp   DB83

ボックス名

説明

0x1500制御コードによる任意コード実行ではボックス3からボックス5の名前を利用しています。アドレスC4D2以降は現在のボックスの名前に関する画面のデータが格納されており、手順通りに行うとボックス3の名前となっています。

アドレスC4D1まで実行することによってaレジスタにはCDが格納されているので、この任意コード実行の効果は、アドレスDB97の中身を35、アドレスD94Cの中身を0C、アドレスD886の中身を9Eにする効果となります。

アドレスDB97はボックスの名前を格納しており、簡易版バイナリエディタを実行するために書き換えます。アドレスD94Cはポケモンずかんのモードを格納しており、正常でない値を入れることによってポケモンずかんを使って任意コード実行を行うようにします。アドレスD886はどうぐの1番目の種類を格納しており、9Eにすることでどうぐをの1番目をはながらメールにします。

WRA0:C4D2 D6 98            sub  a,98
WRA0:C4D4 EA 97 DB         ld   (DB97),a
WRA0:C4D7 C3 83 DB         jp   DB83

WRA1:DB83 C6 D7            add  a,D7
WRA1:DB85 11 98 D9         ld   de,D998
WRA1:DB88 CB 0B            rrc  e
WRA1:DB8A 12               ld   (de),a
WRA1:DB8B 50               ld   d,b
WRA1:DB8C C6 92            add  a,92
WRA1:DB8E EA 86 D8         ld   (D886),a
WRA1:DB91 E1               pop  hl
WRA1:DB92 E1               pop  hl
WRA1:DB93 C9               ret  
WRA1:DB94 50               ld   d,b
バイナリ
C4D2:
D6 98 EA A0 DB C3 83 DB

DB83:
C6 D7 11 98 D9 CB 0B 12 50
C6 92 EA 86 D8 E1 E1 C9 50

簡易版バイナリエディタ

説明

ポケモンずかんのモードを0Cにしてポケモンずかんを開くことでアドレスD021を実行します。アドレスD002からD022までは最後に閲覧したメールの内容を格納しているため、メールを読んでからポケモンずかんを開くことで簡易版バイナリエディタを起動することができます。

簡易版バイナリエディタはhlレジスタが指しているアドレスとその中身を出力するプログラムです。キーの入力でhlレジスタの指すアドレスとその中身を変化させるようにしています。

WRA1:D002 CD C5 32         call 32C5
WRA1:D005 C3 B2 DB         jp   DBB2
WRA1:D008 C5               push bc
WRA1:D009 CB 30            swap b
WRA1:D00B CD 0F D0         call D00F
WRA1:D00E C1               pop  bc
WRA1:D00F 3E 0F            ld   a,0F
WRA1:D011 A0               and  b
WRA1:D012 4E               ld   c,(hl)
WRA1:D013 C6 F6            add  a,F6
WRA1:D015 2F               cpl  
WRA1:D016 E6 9F            and  a,9F
WRA1:D018 2F               cpl  
WRA1:D019 1C               inc  e
WRA1:D01A 12               ld   (de),a
WRA1:D01B C9               ret  
WRA1:D01C C9               ret  
WRA1:D01D C9               ret  
WRA1:D01E C9               ret  
WRA1:D01F C9               ret  
WRA1:D020 C9               ret  
WRA1:D021 30 DF            jr   nc,D002

WRA1:DB68 0F               rrca 
WRA1:DB69 30 06            jr   nc,DB71
WRA1:DB6B AF               xor  a
WRA1:DB6C C6 10            add  a,10
WRA1:DB6E 30 0E            jr   nc,DB7E
WRA1:DB70 50               ld   d,b
WRA1:DB71 0F               rrca 
WRA1:DB72 30 08            jr   nc,DB7C
WRA1:DB74 9F               sbc  a
WRA1:DB75 D6 0F            sub  a,0F
WRA1:DB77 30 05            jr   nc,DB7E
WRA1:DB79 50               ld   d,b
WRA1:DB7A 30 2C            jr   nc,DBA8
WRA1:DB7C 0F               rrca 
WRA1:DB7D 9F               sbc  a
WRA1:DB7E 86               add  (hl)
WRA1:DB7F 32               ldd  (hl),a
WRA1:DB80 2A               ldi  a,(hl)
WRA1:DB81 44               ld   b,h
WRA1:DB82 50               ld   d,b
WRA1:DB83 11 CF C4         ld   de,C4CF
WRA1:DB86 CD 08 D0         call D008
WRA1:DB89 45               ld   b,l
WRA1:DB8A D6 50            sub  a,50
WRA1:DB8C CD 08 D0         call D008
WRA1:DB8F 1C               inc  e
WRA1:DB90 46               ld   b,(hl)
WRA1:DB91 CD 08 D0         call D008
WRA1:DB94 50               ld   d,b
WRA1:DB95 CD 1B 35         call 351B
WRA1:DB98 CB 7F            bit  7,a
WRA1:DB9A CA 9F DB         jp   z,DB9F
WRA1:DB9D 50               ld   d,b
WRA1:DB9E 34               inc  (hl)
WRA1:DB9F 0F               rrca 
WRA1:DBA0 DA 80 DB         jp   c,DB80
WRA1:DBA3 0F               rrca 
WRA1:DBA4 30 D4            jr   nc,DB7A
WRA1:DBA6 50               ld   d,b
WRA1:DBA7 2B               dec  hl
WRA1:DBA8 0F               rrca 
WRA1:DBA9 DA D1 DD         jp   c,DDD1
WRA1:DBAC 0F               rrca 
WRA1:DBAD D8               ret  c
WRA1:DBAE 50               ld   d,b
WRA1:DBAF 50               ld   d,b
WRA1:DBB0 30 B6            jr   nc,DB68
WRA1:DBB2 26 DD            ld   h,DD
WRA1:DBB4 2E 0B            ld   l,0B
WRA1:DBB6 30 DD            jr   nc,DB95
WRA1:DBB8 50               ld   d,b
バイナリ
D002:
CD C5 32 C3 B2 DB C5 CB 30 CD 0F D0 C1 3E 0F A0 4E
C6 F6 2F E6 9F 2F 1C 12 C9 C9 C9 C9 C9 C9 30 DF

DB68:
0F 30 06 AF C6 10 30 0E 50
0F 30 08 9F D6 0F 30 05 50
30 2C 0F 9F 86 32 2A 44 50
11 CF C4 CD 08 D0 45 D6 50
CD 08 D0 1C 46 CD 08 D0 50
CD 1B 35 CB 7F CA 9F DB 50
34 0F DA 80 DB 0F 30 D4 50
2B 0F DA D1 DD 0F D8 50 50
30 B6 26 DD 2E 0B 30 DD 50

簡易版バイナリエディタのセレクトボタンで実行したコード

説明

アドレスDD0B以降の中身をSRAMバンク03のアドレスAFDE以降とアドレスC800以降へコピーをしてC800を実行するプログラムとなっています。

WRA1:DDD1 11 DE AF         ld   de,AFDE
WRA1:DDD4 CD DB DD         call DDDB
WRA1:DDD7 11 00 C8         ld   de,C800
WRA1:DDDA D5               push de
WRA1:DDDB 3E 03            ld   a,03
WRA1:DDDD 01 BA 00         ld   bc,00BA
WRA1:DDE0 21 0B DD         ld   hl,DD0B
WRA1:DDE3 CD 9D 2F         call 2F9D
WRA1:DDE6 C3 F2 2F         jp   2FF2
バイナリ
11 DE AF CD DB DD 11 00 C8 D5 3E 03 01 BA 00 21 
0B DD CD 9D 2F C3 F2 2F

バイナリエディタ

説明

バイナリエディタはhlレジスタが指しているアドレスを含む18個のアドレスとその中身を出力するプログラムとなっています。更に画面上部にROMバンクとSRAMバンクを表示させて変更しやすいようにしています。アドレスC800を実行することでバイナリエディタを起動することができるようになっています。

WRA0:C800 CD C5 32         call 32C5
WRA0:C803 CD C2 31         call 31C2
WRA0:C806 CD 3B 0E         call 0E3B
WRA0:C809 CD 49 0E         call 0E49
WRA0:C80C 11 00 40         ld   de,4000
WRA0:C80F 21 00 96         ld   hl,9600
WRA0:C812 01 19 3E         ld   bc,3E19
WRA0:C815 CD B3 0D         call 0DB3
WRA0:C818 F0 9D            ld   a,(ff00+9D)
WRA0:C81A F5               push af
WRA0:C81B 21 00 D0         ld   hl,D000
WRA0:C81E CD 5C C8         call C85C
WRA0:C821 E5               push hl
WRA0:C822 11 F8 FF         ld   de,FFF8
WRA0:C825 19               add  hl,de
WRA0:C826 E5               push hl
WRA0:C827 D1               pop  de
WRA0:C828 21 A9 C4         ld   hl,C4A9
WRA0:C82B F0 9D            ld   a,(ff00+9D)
WRA0:C82D CD 9D 2F         call 2F9D
WRA0:C830 CD AB C8         call C8AB
WRA0:C833 01 0C 00         ld   bc,000C
WRA0:C836 36 7C            ld   (hl),7C
WRA0:C838 23               inc  hl
WRA0:C839 7A               ld   a,d
WRA0:C83A CD AB C8         call C8AB
WRA0:C83D 7B               ld   a,e
WRA0:C83E CD AB C8         call C8AB
WRA0:C841 36 7F            ld   (hl),7F
WRA0:C843 23               inc  hl
WRA0:C844 1A               ld   a,(de)
WRA0:C845 CD AB C8         call C8AB
WRA0:C848 13               inc  de
WRA0:C849 36 7C            ld   (hl),7C
WRA0:C84B 09               add  hl,bc
WRA0:C84C 7C               ld   a,h
WRA0:C84D FE C6            cp   a,C6
WRA0:C84F 20 E5            jr   nz,C836
WRA0:C851 CD AD 2F         call 2FAD
WRA0:C854 3E ED            ld   a,ED
WRA0:C856 EA 4B C5         ld   (C54B),a
WRA0:C859 E1               pop  hl
WRA0:C85A 18 C2            jr   C81E
WRA0:C85C CD 1B 35         call 351B
WRA0:C85F F0 A9            ld   a,(ff00+A9)
WRA0:C861 5F               ld   e,a
WRA0:C862 01 01 00         ld   bc,0001
WRA0:C865 07               rlca 
WRA0:C866 38 1E            jr   c,C886
WRA0:C868 0B               dec  bc
WRA0:C869 0B               dec  bc
WRA0:C86A 07               rlca 
WRA0:C86B 38 19            jr   c,C886
WRA0:C86D 0E F0            ld   c,F0
WRA0:C86F 07               rlca 
WRA0:C870 38 14            jr   c,C886
WRA0:C872 01 10 00         ld   bc,0010
WRA0:C875 07               rlca 
WRA0:C876 38 0E            jr   c,C886
WRA0:C878 48               ld   c,b
WRA0:C879 07               rlca 
WRA0:C87A 30 0A            jr   nc,C886
WRA0:C87C E1               pop  hl
WRA0:C87D F1               pop  af
WRA0:C87E D7               rst  10
WRA0:C87F 3E F9            ld   a,F9
WRA0:C881 E0 70            ld   (ff00+70),a
WRA0:C883 C3 ED 21         jp   21ED
WRA0:C886 7B               ld   a,e
WRA0:C887 0F               rrca 
WRA0:C888 30 10            jr   nc,C89A
WRA0:C88A 0F               rrca 
WRA0:C88B 0F               rrca 
WRA0:C88C 30 01            jr   nc,C88F
WRA0:C88E E9               jp   hl
WRA0:C88F F0 9D            ld   a,(ff00+9D)
WRA0:C891 CD 9D 2F         call 2F9D
WRA0:C894 79               ld   a,c
WRA0:C895 86               add  (hl)
WRA0:C896 77               ld   (hl),a
WRA0:C897 C3 AD 2F         jp   2FAD
WRA0:C89A 0F               rrca 
WRA0:C89B 38 05            jr   c,C8A2
WRA0:C89D 0F               rrca 
WRA0:C89E 38 06            jr   c,C8A6
WRA0:C8A0 09               add  hl,bc
WRA0:C8A1 C9               ret  
WRA0:C8A2 79               ld   a,c
WRA0:C8A3 84               add  h
WRA0:C8A4 67               ld   h,a
WRA0:C8A5 C9               ret  
WRA0:C8A6 F0 9D            ld   a,(ff00+9D)
WRA0:C8A8 81               add  c
WRA0:C8A9 D7               rst  10
WRA0:C8AA C9               ret  
WRA0:C8AB F5               push af
WRA0:C8AC CB 37            swap a
WRA0:C8AE CD B2 C8         call C8B2
WRA0:C8B1 F1               pop  af
WRA0:C8B2 E6 0F            and  a,0F
WRA0:C8B4 C6 F6            add  a,F6
WRA0:C8B6 F6 60            or   a,60
WRA0:C8B8 22               ldi  (hl),a
WRA0:C8B9 C9               ret  
バイナリ
CD C5 32 CD C2 31 CD 3B 0E CD 49 0E 11 00 40 21
00 96 01 19 3E CD B3 0D F0 9D F5 21 00 D0 CD 5C
C8 E5 11 F8 FF 19 E5 D1 21 A9 C4 F0 9D CD 9D 2F
CD AB C8 01 0C 00 36 7C 23 7A CD AB C8 7B CD AB
C8 36 7F 23 1A CD AB C8 13 36 7C 09 7C FE C6 20
E5 CD AD 2F 3E ED EA 4B C5 E1 18 C2 CD 1B 35 F0
A9 5F 01 01 00 07 38 1E 0B 0B 07 38 19 0E F0 07
38 14 01 10 00 07 38 0E 48 07 30 0A E1 F1 D7 3E
F9 E0 70 C3 ED 21 7B 0F 30 10 0F 0F 30 01 E9 F0
9D CD 9D 2F 79 86 77 C3 AD 2F 0F 38 05 0F 38 06
09 C9 79 84 67 C9 F0 9D 81 D7 C9 F5 CB 37 CD B2
C8 F1 E6 0F C6 F6 F6 60 22 C9

たいせつなものポケットのわざマシン17

説明

ROMバンク03のアドレス55D7を実行することによりアドレスD0C6の中身に対応するどうぐをたいせつなポケットに入手することができます。

わざマシンポケット以外でわざマシン17を使用することによりアドレスFA47を実行します。アドレスFA47以降のプログラムはSRAMバンク03のアドレスAFDE以降の中身をアドレスC800以降にコピーをしてアドレスC800を実行するプログラムとなっています。

WRA1:D300 3E D0            ld   a,D0
WRA1:D302 EA C6 D0         ld   (D0C6),a
WRA1:D305 3E 03            ld   a,03
WRA1:D307 21 D7 55         ld   hl,55D7
WRA1:D30A CF               rst  08
WRA1:D30B C9               ret  

ECH1:FA47 3E 03            ld   a,03
ECH1:FA49 01 BA 00         ld   bc,00BA
ECH1:FA4C 11 00 C8         ld   de,C800
ECH1:FA4F 21 DE AF         ld   hl,AFDE
ECH1:FA52 D5               push de
ECH1:FA53 C3 8C 68         jp   688C
バイナリ
D300:
3E D0 EA C6 D0 3E 03 21 D7 55 CF C9

FA47:
3E 03 01 BA 00 11 00 C8 21 DE AF D5 C3 8C 68

参考文献

日本語

英語