The English version is here:
📄RAM Writer in Pokémon Crystal (JP)
バイナリエディタは、元々初代ポケモンにおける任意コード実行の究極の到達点とも言えるツールで、今回紹介するバイナリエディタは第二世代用に移植されたものです。このエディタを使用すると、ゲーム内のあらゆるメモリの読み書きが可能になります。さらに、プログラムを記述し、実行させることもできます。
本記事は以下の動画の解説となります。
バイナリエディタ導入手順
環境
ポケットモンスター クリスタルの日本語版のみに対応しています。ポケットモンスター 金・銀や日本語版以外のバージョンには対応していません。またポケモンスタジアム金銀のGBビルや一部のエミュレータでは動作しません。ポケットモンスター 金・銀におけるバイナリエディタ導入については以下の記事をご覧ください。
手順1: 手持ちのポケモンを2匹にする
さいしょからはじめる場合は、モンスターボールを入手するまで進める必要があります。主人公の性別、時間、主人公の名前、曜日、最初のポケモン、ライバルの名前はなんでも良いです。わざマシン17を使ってバイナリエディタを起動するまで手持ちのポケモンを3匹以上にしないでください。
手順2: ボックスの名前を変更する
ボックスの名前を以下のようにしてください。
ボックス2:ダだゲムよダだガ
ボックス3:よノゥネろてエろ
ボックス4:にらヅノるひジデ
ボックス5:にテゥキリゅゅの
ボックス6:へブひひ はムろ
ボックス7:どダれアろダだや
ボックス8:ざダれむをダリ
ボックス9:だかがをぜジだを
手順3: 名前がバグったポケモンを入手
- セーブをする際に特定のタイミングで強制リセットをすることで、名前がバグったポケモンを入手します。
- さいしょからはじめた場合はボックス3に切り替えます。既存のセーブデータで行う際は一度も満タンにしたことのないボックスに切り替えます。一度も使用したことのないボックスにすることをおすすめします。ボックスの切り替えによるセーブを行うようにしてください。
- ポケモンを1匹預けます。「ボックスせいり/メールはずしてね」を選択し、レポートにうえからかいてもいいですか?に対して「はい」を押して、「でんげんをきらないでください」と完全に表示された直後に強制リセットをします。
- ゲームを再開させて、リュックを開いてから、ボックスの状態を確認します。
- 新しく預けたポケモンのニックネームが?からなる文字列になっていれば成功しています。そうでない場合はb.をやり直してください。ポケモンが預けられていない場合は、リセットが早すぎたことになります。ポケモンが正常に預けられている場合は、リセットが遅すぎたことになります。
- 名前がバグったポケモンの入手に成功するための強制リセットのタイミングは猶予2フレームで、「はい」を押してから149、150フレーム後となります。
- 名前がバグったポケモンを入手したらボックス3の一番上に配置してください。
- (既存のセーブデータを使っている場合は)ボックス3に切り替えてください。
手順4: 0x1500制御コードによる任意コード実行を行う
- 名前がバグったポケモンを入手したらどうぐの1番目を不要なアイテムにしてパソコンの前でセーブとリセットを行います。
- ゲームを再開後、パソコンの前から左に1歩、下に1歩移動しポケモンずかんを開きます。画像のこの場所でポケモンずかんを開くようにしてください。
- ポケモンずかんでカーソルをオニスズメに合わせます。
- ポッポ以外のポケモンに遭遇したことがない場合は「しんがたずかんモード」ではカーソルをオニスズメに合わせることができないので「ふるいずかんモード」に切り替えてカーソルをオニスズメに合わせるようにしてください。
- しんがたずかんモードの並び方は以下のようになっているのでオニスズメに遭遇したことがない場合でもこれを目印にしてカーソルをオニスズメにすると良いです。🔍ワニノコ
アリゲイツ
オーダイル
ポッポ
ピジョン
ピジョット
オニスズメ
オニドリル
ホーホー
ヨルノズク
コラッタ
ラッタ
オタチ
- ポケモンずかんを閉じてから、右に1歩、上に1歩進んでパソコンを開き名前がバグったポケモンのニックネームを表示させます。ポケモンずかんを閉じてからはこの順番の通りに進んでください。この移動の順番を守らないと失敗します。
フリーズすることなく以下のようになれば成功となります。
- ボックス6の名前が「へブばん どうろひ はムろ」に変化する。
- どうぐの1番目がはながらメールに変化する。
手順5: 簡易版バイナリエディタ導入
ボックス3からボックス5までの名前を以下のようにしてください。ボックス6の名前は変更しないでください。
ボックス4:ヅまとへゲみぴよ
ボックス5:へゲみボぷへゲみ
ボックスの名前を変更したらボックスの名前が以下のようになっていることを確認してください。
ボックス2:ダだゲムよダだガ
ボックス3:だじダムキづごぱ
ボックス4:ヅまとへゲみぴよ
ボックス5:へゲみボぷへゲみ
ボックス6:へブばん どうろひ はムろ
ボックス7:どダれアろダだや
ボックス8:ざダれむをダリ
ボックス9:だかがをぜジだを
下記の内容のメールをポケモンに持たせます。
に0ぞ?ムぞボデののののののだっ
メールの作成後はメールの中身を読みます。その後ずかんを開くことで簡易版バイナリエディタを起動することができます。
簡易版バイナリエディタ
これ以降、上記のメールを読んでからずかんを開くたびに簡易版バイナリエディタを起動することができます。
左側の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 |
バイナリエディタ
これ以降、簡易版バイナリエディタを起動してからセレクトボタンを押すたびに、バイナリエディタを起動することができます。
画面上部の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を使うたびにバイナリエディタを直接起動することができます。
手順7: 通常の状態に戻す
バイナリエディタの導入で様々な副作用が発生しています。
- ポケモンずかん
- ボックス名
- 名前がバグったポケモン
ポケモンずかん
アドレスD94Cの中身を00にすることでポケモンずかんを正常にすることができます。
ボックス名
わざマシン17によるバイナリエディタ導入後はボックス名を好きなように変えることができます。
ROMバンクを01にしてカーソルをアドレス5C95に合わせてSELECT+Aボタンを押すことでボックスの名前をデフォルトの名前に戻すことができます。
名前がバグったポケモン
リュックを開いてからボックスを開いて名前がバグったポケモンを逃がしてください。
使い方
バイナリエディタを導入した後は以下の記事で使い方を確認することができます。
📄ポケットモンスター 金・銀・クリスタル バイナリエディタ 使い方
注意
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