バイナリエディタ導入 毒サファリ・いあいぎりルート ピカチュウ版

はじめに

以前ピカチュウ版のバイナリエディタ導入に関するチャートを 2 つ程紹介させていただきました.

1 つ目の記事ではレポートバグを使用するためさいしょからにする必要があり,2 つ目の記事ではトキワのもりにいるトレーナーに対して fifth 法を行うためそのトレーナーを倒していると実行できないという欠点があります.そのため冒険の途中からでもバイナリエディタを実行できるようにするというのが今回の記事の目的です.

冒険の途中から任意コード実行環境を構築する方法として最近 (2023/02/03) まへっちさんが以下の記事を出していました.

これらの方法は通信交換できることが前提となっています*1

しかし通信交換をしなくても「毒サファリ・いあいぎり」を行うことでパソコンの道具欄を拡張しはやぶさバッヂを入手することができるというやり取りを見かけました.

そこでこの「毒サファリ・いあいぎり」を用いてバイナリエディタを導入したいと思います.

「毒サファリ・いあいぎり」によるかいがらバッヂ入手

「毒サファリ・いあいぎり」を用いてかいがらバッヂを入手するための手順を述べます.

準備

  1. PCに道具を50種類 (満タンまで) あずける.
  2. コインの枚数を 63 枚にする*2
  3. 毒状態かつ残り HP わずかなポケモン
  4. いあいぎりを覚えたポケモン (ひんし状態)*3
  5. そらをとぶかテレポートを覚えたポケモン (ひんし状態)*4
  6. セキチクシティのポケモンセンターで回復してリスポーン先にしておく.

手順

  1. サファリゾーンに入ってから受付に戻り捕獲ゲームを終えるかどうかの質問にいいえを選択してからレポートとリセットをする.
  2. 受付に戻ると捕獲ゲームを終えるかどうかが聞かれなくなるのでそのまま下から脱出する (捕獲ゲームに参加するかどうか聞かれるが参加しないで脱出する).
  3. 手持ちを毒状態かつ残り HP わずかなポケモンとひんし状態のひでん要員だけにする.
  4. 残り歩数 0 のアナウンスのタイミングで段差を降りて,ジャンプ中に呼び出される.
  5. 壁貫通モードになるので,受付内でしばらく歩いて毒全滅する.
  6. 壁貫通モードのままセキチクシティのポケモンセンターにリスポーンするので,そこから下に 8 歩,左に 96 歩,上に 99 歩歩く.
  7. いあいぎりの木があるので切る.
  8. テレポートかそらをとぶで帰還.

これで PC の道具欄のやめるよりも下にカーソルを動かすことができます.PC の道具欄の 54 番目にかいがらバッヂがあるのでそれを引き出すことでかいがらバッヂを入手することができます.

バグマップにある木を切ることでメモリを書き換えることによって PC の道具欄を破壊しているようです.この記事を読んでみると分かるかもしれません.
https://glitchcity.wiki/Glitch_City_RAM_manipulation_(Cut_abuse)

簡易版バイナリエディタ

かいがらバッヂを入手した後は以下の手順を踏むことで簡易版バイナリエディタを起動させることができます.

  1. 育て屋にニックネーム「ゃわてょん」のついたポケモンを預ける.このポケモンは預けっぱなしにしてください.
  2. ボックスの中身を以下のようにする.23匹以上は預けないでください*5
  3. かいがらバッヂを使用する.
番号 種族 ニックネーム
1 コラッタ がんぜレョ
2 コラッタ よヂづよく
3 コラッタ づにゲづな ← v1.0 の場合は「づにグづな」
4 コラッタ ゅョダだグ
5 コラッタ ぼヂてツん
6 コラッタ ダだグぼダ
7 コラッタ ぞてツんダ
8 コラッタ だガムキづ
9 コラッタ ごぱへぬん
10 コラッタ ぴへぬんボ
11 コラッタ ぷへぬんへ
12 コラッタ うううヅー
13 コラッタ ひ空はうん
14 コラッタ どダれナん
15 コラッタ ダめせんざ
16 コラッタ ダれゃわダ
17 コイル りだあなレ
18 メノクラゲ ひだへむん
19 ウツボット ちぼダメに
20 (任意) にルだガに
21 (任意) にヂ空ギて
22 (任意) ぐアボデの

コラッタの代わりにポッポを使用しても大丈夫です.なので 1 ばんどうろで乱獲するのが良いかと思います.
コイルは 10 ばんどうろの草むらで,メノクラゲは 19〜21 ばんすいどうで出現します.
ウツボットは 12〜15 ばんどうろで出現するマダツボミ or ウツドンを進化させると良いです.リーフのいしタマムシデパートで買えます.

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

以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法

A: アドレス+1h
B: アドレス-1h
↓: 中身+1h
↑: 中身-1h
→: 中身+10h
←: 中身-10h
Start: 終了
Select: DCE0 からプログラムを起動

Select はバイナリエディタのプログラムを入力し終えるまで押さないでください.

バイナリエディタを実行するまで

以下の URL にあるプログラムを入力してバイナリエディタを作りましょう.
memory_editor.asm · GitHub
簡易版バイナリエディタを使って DCE0 から DD58 のアドレスの中身をリンク先のものに書き換えてください.

ただし DD17 の中身は v1.0 の場合は 3F に,それ以外のバージョンの場合は 40 にしてください.書き換えたら一回 Start で終了してセーブしておくと良いかもしれません.書き換えをした後に Select を押すとバイナリエディタが起動できます.

バイナリエディタの操作

↓: アドレス+1h
↑: アドレス-1h
→: アドレス+10h
←: アドレス-10h
B+↓: アドレス+100h
B+↑: アドレス-100h
B+→: アドレス+1000h
B+←: アドレス-1000h
A+↓: 中身+1h
A+↑: 中身-1h
A+→: 中身+10h
A+←: 中身-10h
SELECT: 指しているアドレスを実行
START: 終了

簡易版バイナリエディタよりも操作できることが増えて快適になるかと思います.

「SELECT」は不用意に押すとフリーズする可能性が高いので気をつけましょう.
慣れてないうちは「SELECT」はないものと思って良いかもしれません.

仕上げ操作

バイナリエディタを再び起動する際はかいがらバッヂで簡易版バイナリエディタを起動してから Select を押すことになります.毎回簡易版バイナリエディタを経由するのも面倒なのでかいがらバッヂを使用することで直接バイナリエディタを起動できるようにします.
D9B2 から D9B6 の値は

16 A5 A5 A5 A5

になっていますがこれを

1E A5 C3 E0 DC

に変更をしてください*6

謝辞&参考

今回の毒サファリ・いあいぎりルートの記事を書くきっかけはまへっちさんと junin さんの Twitter でのやり取りでした.
個人的には junin さんの以下のツイートが結構感動しました.簡易版バイナリエディタを作る際にもこれを活用させていただきました.
また毒サファリ・いあいぎりの手順につきましてはオーキドせんせい研究者さんに色々教えていただきました.ありがとうございました.

*1:これらの記事を元にバイナリエディタを導入する手法を考案したのですが,通信ケーブルを使った任意コード実行の開発が 2023/02/09 現在ア▶イスさんにより行われていてそちらを待った方が良さそうと感じたため記事にする予定は今の所ないです.

*2:65 枚にするとはやぶさバッヂを入手することができます.

*3:毒状態かつ残り HP わずかなポケモンがいあいぎりを覚えていても良いです.

*4:毒状態かつ残り HP わずかなポケモンそらをとぶかテレポートを覚えていても良いです.またいあいぎりを覚えているポケモンと同一の個体でも良いです.

*5:実際には預けているポケモンの数が 24, 25 匹でなければ大丈夫です.

*6:直接バイナリエディタを起動するだけなら D9B2 の値を変える必要はないのですが D9B2 を 1E にすることでボックスに預けているポケモンの数が 30 となるため間違えてポケモンを預けてバイナリエディタのプログラムを壊すのを防いでいます.

バイナリエディタ導入 森地図チャート ピカチュウ版

注意: 2023/09/19 に内容をアップデートしました.

はじめに

バイナリエディタ導入チャート ピカチュウ版 - flag3833753
という記事を以前出させていただきました.
このチャートではレポートバグという猶予数フレームのバグ技を行う前提で書いていたのですが,そのレポートバグを使わないでバイナリエディタを導入する方法について書いていきたいと思います.

森地図について

fifth 法による任意コード実行でニビシティの民家のタウンマップを見てからトキワのもりへ行くという行動から森地図と呼ばれています.
詳細は以下の記事を見ていただくと良いかと思います.

チャート

環境: ピカチュウ版のみ対応しています.
ピカチュウ版はバージョンが v1.0 ~ v1.3 とあるのですがどのバージョンにも対応しています.バージョンの見分け方についてはこちらの記事が参考になります.
【VC版対応】ポケットモンスターピカチュウ 任意コード実行下準備チュートリアル : 魚肉の雑記帳

1. 主人公の名前を「てぽん」にする.

ライバルの名前は何でも良いです.

2. トキワのもりの出口から数えて 2 番目にいるむしとりしょうねんと戦わないようにニビシティまで進める.

このトレーナーとは戦わないでください.

3. ニビシティでポケモンセンターとフレンドリィショップに寄る.

ポケモンセンターで回復をしてください (これをしないと後の fifth 法のときに困ります).
フレンドリィショップでモンスターボールとあなぬけのひもを購入してください*1
モンスターボールは 19 個必要となりお金がカツカツなので気をつけましょう*2

4. ニックネームをつけながらポケモンを 19 匹捕獲しボックス 1 に預ける*3

ヅクまプレ
ひでぼラデ
がふぜのョ
ひすづギぺ
ひだレレレ
ゾなレレレ ← v1.0 の場合は「ゾよひけレ」
ひぢなの
(任意)
(任意)
(任意)
がめぜヨづ
よヒづづョ
ぶづよマレ
がむぜミレ
ひすづがや
ぜふぼんづ
にキづぼて
づがんの
ゲョべだひ

5. あなぬけのひもを用いて fifth 法を実行する.

2. で述べたむしとりしょうねんであなぬけのひもを用いて fifth 法を実行します.

6. 任意コード実行のためのセットアップを行う.

あなぬけのひも使用後はニビシティにいるはずです.以下のことをしてください.

(a) ポケモンセンターのパソコンでボックスを 1 から 1 に変更してレポートをしリセットする.
(b) はくぶつかんへ道案内する NPC に話しかけ道案内される.
(c) ニビシティ南西の民家に行き壁にあるタウンマップを閲覧する.

はくぶつかんへ道案内する NPC というのはこの NPC のことです.

(c) の行動の後はトキワのもりに行くまでメニューを開かないで下さい.

7. トキワのもりへ行き,任意コード実行が成功しているか確認する.

トキワのもりに行くとメッセージが一瞬表示されます.
メッセージを閉じるとピカチュウが後ろからついて来なくなります.
メニューを開くと主人公の名前が「てEん」に変化しています.
道具を開くと中身が「はやぶさバッヂ」のみになっています.
はやぶさバッヂ」を使用するとコラッタにニックネームをつけますか?と聞かれます.
うまくいかない場合はボックスに預けているポケモンのニックネームを見直してください*4

8. コラッタにニックネームをつけていく.

以上の操作で「はやぶさバッヂ」を使用するとコラッタを無限に入手できるになりました.
このコラッタを使ってボックス 2 の中身を以下のようにしてください*5
ただしボックス 1 が選択されてないときに「はやぶさバッヂ」を使用すると動作不良を起こすので気をつけましょう.また手持ちが 6 匹いる状態で「はやぶさバッヂ」を使用しても何も起きないことに注意してください.

がんぜルョ
よヂづよく
づひせがわ
ぜゃダだグ
ぼヂてソん
ダだギムツ
てソんダム
キづごヅー
ぱへにんぴ
へにんボぷ
へにんへた ← v1.0 の場合は「へにんへそ」
ううゾダグ
ダめいんど
ダれチんダ
めしんざダ
れゃわダり
だいなひだ
へみんちレ
ぼダメギて
よザれんん
よメボデの

9. 簡易版バイナリエディタを起動する.

上のニックネームを入力した後,ボックス 2 を選択している状態で「はやぶさバッヂ」を使用すると簡易版バイナリエディタが起動します.

簡易版バイナリエディタの操作方法
以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法

A: アドレス+1h
B: アドレス-1h
↓: 中身+1h
↑: 中身-1h
→: 中身+10h
←: 中身-10h
Start: 終了
Select: DCE0 からプログラムを起動

Select はバイナリエディタのプログラムを入力し終えるまで押さないでください.

10. バイナリエディタを実行するまで.

以下の URL にあるプログラムを入力してバイナリエディタを作りましょう.
memory_editor.asm · GitHub
簡易版バイナリエディタを使って DCE0 から DD58 のアドレスの中身をリンク先のものに書き換えてください.

ただし DD17 の中身は v1.0 の場合は 3F に,それ以外のバージョンの場合は 40 にしてください.書き換えたら一回 Start で終了してセーブしておくと良いかもしれません.書き換えをした後に Select を押すとバイナリエディタが起動できます.

仕上げ操作

以下の 2 つのことをしたいと思います.

1. 主人公の名前を正常にする.
2. 「かいがらバッヂ」でバイナリエディタを起動できるようにする.

1. については D11E の中身を 48 にすることで主人公の名前を「てぽん」に戻すことができます.そうすることでピカチュウが後ろからついてくるようになります.
主人公の名前を好きな名前にしたい場合は D11D から D122 の中身を変更することになります.例えば主人公の名前を「イエロー」にしたい場合は D11D から D122 の中身を

81 83 A8 E3 50 00

としてください.ただしこのようにするとピカチュウが後ろからついてこなくなりますが,ピカチュウを手持ちの 1 匹目にしてから D233 から D238 の中身を D11D から D122 の中身と一致するようにすれば後ろからついてくるようになります*6

2. については D9B2 から D9B6 の中身を

1E A5 C3 E0 DC

にしてください.これを行った後 D2A2 の中身を 65 から 63 に変更してください.そうすると手持ちの道具は「かいがらバッヂ」のみとなりますがこれを使用するとバイナリエディタを起動することができるようになります*7

参考文献 & 謝辞

森地図に関する文献は上でも挙げた通りですが以下の 2 つとなります.

コラッタを生成するプログラムについては以下の 2 つを参考にしています.

またコラッタを生成するプログラムについては (v1.1 以外のバージョンで) オーキドせんせい研究者さんに協力していただきました.この場をお借りして感謝申し上げます.

*1:ポケモンを 19 匹捕獲してニックネームをつける必要があるのでトキワシティモンスターボールを 15 個購入しニビシティまでの道中で出現するポケモンを捕獲してニックネームをつけていくと良いかと思います.

*2:最初のライバルとトキワのもりの出口最後のむしとりしょうねんに勝利して道中でモンスターボールとキズぐすり ×6 を回収しキズぐすり ×6 を売るとモンスターボール 18 個とあなぬけのひもが購入できます.

*3:v1.1 ~ v1.3 なら他のボックスでも大丈夫ですが v1.0 の場合はボックス 1 でないと後に「はやぶさバッヂ」を使用する際にフリーズします.

*4:手持ちのポケモンが 6 匹だとニックネームをつけますか?と聞かれなくなります.このチャート通りに進めているなら手持ちが 6 匹になっていることの方が少ないとは思いますが.

*5:既に埋まっているボックスでなければどのボックスでも大丈夫です.

*6:おやの名前だけでなくおやの ID も一致している必要があるのですが今回のチャートで ID はいじってないので問題ありません.

*7:はやぶさバッヂ」については v1.1 ~ v1.3 の場合パソコンの道具をプログラムとして実行するためパソコンの道具を変更することができないという欠点があります.

ポケモンクリスタルにおけるバイナリエディタ (ver.20220825)

この記事は旧バージョンです.新しいバージョンは以下のものとなります.
ポケモンクリスタルにおけるバイナリエディタ - flag3833753

簡易版バイナリエディタ導入の方法

まずは簡易版バイナリエディタを導入します.
環境:ポケモンクリスタルでの動作を確認しております.
推奨:任意コード実行可能なソフト (初代でも金銀でも可) と通信交換できること*1
準備:「バグ図鑑」を用いた「最後に読んだメール*2」による任意コード実行環境

わざマシン」を用いた「最後に読んだメール」による任意コード実行環境も可能ですが注意点があります.

準備の詳細は次の動画に丸投げお任せします.「バグ図鑑」の説明も省略します.

以下の手順を踏むと簡易版バイナリエディタが起動します.

  1. ボックスの名前を表 1 の通りにする.
  2. 表 2 と表 3 のメールを用意する.
  3. 表 2 のメールを読んで「バグ図鑑」を起動する.
  4. 表 3 のメールを読んで「バグ図鑑」を起動する.

手順 3. の前にセーブすることをオススメします.
「バグ図鑑」を起動したら「B」で閉じましょう.

表 1

  1. ヘブ空グだ空どグ
  2. だガョベヘワろグ
  3. だグぼダぞヘワろ
  4. グわレろグリググ
  5. だ空ざグわンろぱ
  6. ヅまとヘゴみぴヘ
  7. みボぷヘゴみだつ
  8. ぼヂキづごョの空
  9. がもぜオだい

表 2

がろぜべョぺゾだゴぶづぜセづぜば
ゾだゴにどづぼゴぜマづの

表 3

ヘなづ空てィろなひだヘヂみちぼダ
メに0だガにだにだ空ボデの

簡易版バイナリエディタを起動するとこんな感じになると思います.

左 4 桁がアドレス,右 2 桁がその中身となっています.

文字の表示がおかしいところがあるのですが気にせず使いましょう.
gは A,青色の線は B,携帯マークは C だと思ってください.
特に 9 と g を混同しないように注意しましょう.

注意

初期アドレスは D384 となっています.
これは 9 番目のボックスの 2 文字目「も」と 4 文字目「オ」に対応しています.
この 2 文字を変えることで初期アドレスを変更することができます.
初期アドレスを変えたくなった場合は 9 番目のボックスの名前を変更して表 3 のメールを実行すれば良いです.表 2 のメールを既に実行した場合再度実行しなくても良いです.

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

以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法

A: アドレス+1
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
↑: アドレス-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」は不用意に押すとフリーズする可能性が高いので気をつけましょう.

注意

D2B1 から D383 のアドレスを用いてバイナリエディタを作成しているので,
この部分をバイナリエディタでいじると壊れるので注意してください.

「1. メールの作成」のメールをアップデートする

「1. メールの作成」のメールを手持ちのポケモン 1 匹目に持たせてください.
そしてバイナリエディタを開くとバンク 00 のアドレス A615 から A618 の中身は

C9 50 00 00 

になっています.これを

C3 B1 D2 50

に書き換えてください.そうすると手持ちのポケモン 1 匹目が持っているメールが書き換えられます.このメールを読んで「バグ図鑑」を実行するとバイナリエディタを起動することができます.こうすることで (「てあめ」のメールを使わずに) 1 つのメールだけでバイナリエディタを起動することができます.

わざマシン」を用いた「最後に読んだメール」による任意コード実行環境について

基本的には上記の手順とほぼ同様です.ただし表 3 のメールは

ョぶゃやてィろなひだヘヂみちぼダ
メに0だガにだにだ空ボデの
としてください.特に先頭 4 文字が変わります.またバイナリエディタを作る際 D2B1 から D2B4 の部分は

AF 3C E0 D4

とし D2C1 から D2C6 の部分は

00 00 00 00 00 00

としてください.「わざマシン」を使って簡易版バイナリエディタ及びバイナリエディタを起動するとこんな感じになります.

コード

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

*1:レポートバグを使えば通信交換できなくても任意コード実行できるらしいのですが執筆者は試したことがありません.

*2:この記事ではメールの 1 文字目から実行するものについて書いています.31 文字目から実行する場合は「だっ」や「18 DF」を適切に補えば同じ手順でできます.

ポケモン金銀にバイナリエディタを移植したお話 (ver.20220817)

この記事は旧バージョンです.新しいバージョンは以下のものとなります.
ポケモン金銀にバイナリエディタを移植したお話 - flag3833753

はじめに

以前,初代でバイナリエディタを導入する記事を出させていただきました.

このバイナリエディタポケモン金銀に移植しました.

そういうことで導入する方法について書こうと思います.

簡易版バイナリエディタ導入の方法

まずは簡易版バイナリエディタを導入します.
環境:ポケモン金銀での動作を確認しております.クリスタル版には非対応です.
準備:「たいせつポケット」の「わざマシン17」を用いた「最後に読んだメール」による任意コード実行環境*1

準備の詳細は次のブログ,動画にお任せします.Teraman64DD さんの動画だと Part.04 で導入しています.

以下の手順を踏むと簡易版バイナリエディタが起動します.

  1. ボックスの名前を表 1 の通りにする.
  2. 表 2 と表 3 のメールを用意する.
  3. 表 2 のメールを読んで「わざマシン17」を使用する.
  4. 表 3 のメールを読んで「わざマシン17」を使用する.

手順 3. の前にセーブすることをオススメします.

表 1

  1. ぼヂキづごョの空
  2. ヘォォグだ空どグ
  3. だガョベヘえリグ
  4. だグぼダぞヘえリ
  5. グわいリグリググ
  6. だ空ざグわかリぱ
  7. ヅまてヘぐまぴヘ
  8. まボぷヘぐまだつ
  9. がわぜにださ

表 2

がリぜたョぶづぜゃづよひぜすづ空
ぜゅひゼぼぐづの

表 3

ョぶゃよて4リなひだヘぞまちぼダ
メに0だガにだにだ空ボデの

簡易版バイナリエディタを起動するとこんな感じになると思います.

3 回目の記事になって今まで説明し忘れていたことに気付いたのですが
左 4 桁がアドレス,右 2 桁がその中身となっています.

見ての通り表示がおかしいのですが気にせず使いましょう.
■は A,▲は B,携帯マークは C だと思ってください.

注意

初期アドレスは DCC6 となっています.
これは 9 番目のボックスの 2 文字目「わ」と 4 文字目「に」に対応しています.
この 2 文字を変えることで初期アドレスを変更することができます.
初期アドレスを変えたくなった場合は 9 番目のボックスの名前を変更して表 3 のメールを実行すれば良いです.表 2 のメールを既に実行した場合再度実行しなくても良いです.

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

以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法

A: アドレス+1
B: アドレス-1
↓: 中身+1
↑: 中身-1
→: 中身+10h
←: 中身-10h
Start: 終了

簡易版バイナリエディタを再度起動する場合は表 3 のメールを読んで「わざマシン17」を使用すれば良いです.表 2 のメールを読む必要はありません.

バイナリエディタを起動するまで

簡易版バイナリエディタを使ってアドレス DCC6 から DD92 の中身を後述のものに書き換えます.長いので一番下に載せています.

書き換えたら簡易版バイナリエディタを終了してセーブすることをオススメします.
その後「てにわ」と書かれたメールを読んで「わざマシン17」を使用するとバイナリエディタが起動できます.

二重線で囲まれた領域の左 4 桁がアドレス,右 2 桁がその中身となっています.
ゲーム画面の上部にも (16 進数で) 2 桁の数字があるのですが,これは SRAM バンクの数字が表示されています.アドレス A000 から BFFF の中身を扱う際に必要になってきます.

バイナリエディタの操作

初代でのバイナリエディタと殆ど同じですが「SELECT」のみ少し違います.

↓: アドレス+1
↑: アドレス-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」は不用意に押すとフリーズする可能性が高いので気をつけましょう.

注意

DCC6 から DD92 のアドレスを用いてバイナリエディタを作成しているので,
この部分をバイナリエディタでいじると壊れるので注意してください.

またこの領域は敵トレーナーのポケモンが格納されている領域なので戦闘をするとバイナリエディタが壊れてしまいます.通信をしても壊れます.

戦闘をしても壊れないバイナリエディタの作り方

バイナリエディタをボックスに格納する

上記にもある通り戦闘をするとバイナリエディタが壊れます.戦闘をする度にバイナリエディタを作り直すのは面倒なので対策する必要があります.

まずバイナリエディタでアドレス DD93 から DDA7 の中身を

3E 03 01 CD 00 11 94 AA 21 C6 DC CD 9D 30 CD D6 30 CD AD 30 C9 

に書き換えてください.その後 DD93 で「Select+A」を押してください.
そうするとバンク 03 の AA94 から AB60 がバイナリエディタのコードに変化しています.確かめてみてください.
バンク 03 の AA94 から AB60 はボックス 9 のデータが格納されています.

実行用メールを作る

手持ちのポケモン 1 匹目に (任意コード実行などに) いらないメールを持たせてください.
その後バイナリエディタを起動して,バンクを 00 にしアドレス A600 から A616 の中身を

3E 03 01 CD 00 11 C6 DC 21 94 AA CD 9D 30 CD D6 30 CD AD 30 C3 C6 DC 

に書き換えてください.そうすると手持ちのポケモン 1 匹目が持っているメールが書き換えられます.このメールを読んで「わざマシン17」を使用するとバイナリエディタが起動されますが,このバイナリエディタは戦闘をしても壊れません.一度敵トレーナーと対戦してみて実際に壊れてないか確かめると良いです.

補足

アドレス A600 から A616 の中身を書き換えることでメールの中身を変えるという手法と取りましたが,他の手法としてはアドレス D8B2 から D8C8 の中身を

3E 03 01 CD 00 11 C6 DC 21 94 AA CD 9D 30 CD D6 30 CD AD 30 C3 C6 DC 

に書き換えて「ボックス 1 の名前」による任意コード実行を行うという手法があります.そうすると一々メールを読まなくてもバイナリエディタが起動できます.この手法のデメリットとして,簡易版バイナリエディタを壊してしまうので (バイナリエディタを作成してしまえば簡易版は不要になるのですが) 失敗した場合リカバリが面倒になります.(執筆者はどのアドレスに何が格納されているのかあまり詳しくないので) もしかするともっと格納するのにいいアドレスがあるかもしれません.

参考文献

今回のバイナリエディタを作るにあたって参考にした文献は次の 3 つです.日本語版のポケモン金銀バイナリエディタに関する動画,記事は (執筆者の調べた限りだと) 最初の 2 つぐらいしかない気がします.

pokemonbug @ ウィキさんの記事にもバイナリエディタのコードがあります.こちらは 344 バイトととても長くまた操作が初代でのバイナリエディタと異なります.そのため初代のバイナリエディタを移植するという形でポケモン金銀でもバイナリエディタを使えるようにしました.こちらは 205 バイトとなっています.
pokemonbug @ ウィキさんの記事にあるバイナリエディタは ROM バンクの切り替えもできるようですが,この機能は今回紹介するバイナリエディタの機能にはありません.

コード

WRA1:DCC6 11 B2 4E         ld   de,4EB2
WRA1:DCC9 21 00 90         ld   hl,9000
WRA1:DCCC 01 23 3E         ld   bc,3E23
WRA1:DCCF CD 76 0E         call 0E76
WRA1:DCD2 AF               xor  a
WRA1:DCD3 3C               inc  a
WRA1:DCD4 E0 D6            ld   (ff00+D6),a
WRA1:DCD6 21 00 DA         ld   hl,DA00
WRA1:DCD9 CD 2E DD         call DD2E
WRA1:DCDC E5               push hl
WRA1:DCDD 54               ld   d,h
WRA1:DCDE 5D               ld   e,l
WRA1:DCDF 3E F8            ld   a,F8
WRA1:DCE1 83               add  e
WRA1:DCE2 5F               ld   e,a
WRA1:DCE3 38 01            jr   c,DCE6
WRA1:DCE5 15               dec  d
WRA1:DCE6 06 12            ld   b,12
WRA1:DCE8 FA BD D1         ld   a,(D1BD)
WRA1:DCEB 21 A9 C3         ld   hl,C3A9
WRA1:DCEE CD 9D 30         call 309D
WRA1:DCF1 CD 21 DD         call DD21
WRA1:DCF4 3E 7C            ld   a,7C
WRA1:DCF6 22               ldi  (hl),a
WRA1:DCF7 7A               ld   a,d
WRA1:DCF8 CD 21 DD         call DD21
WRA1:DCFB 7B               ld   a,e
WRA1:DCFC CD 21 DD         call DD21
WRA1:DCFF 3E 7F            ld   a,7F
WRA1:DD01 22               ldi  (hl),a
WRA1:DD02 1A               ld   a,(de)
WRA1:DD03 CD 21 DD         call DD21
WRA1:DD06 36 7C            ld   (hl),7C
WRA1:DD08 3E 0C            ld   a,0C
WRA1:DD0A 85               add  l
WRA1:DD0B 6F               ld   l,a
WRA1:DD0C 30 01            jr   nc,DD0F
WRA1:DD0E 24               inc  h
WRA1:DD0F 1C               inc  e
WRA1:DD10 20 01            jr   nz,DD13
WRA1:DD12 14               inc  d
WRA1:DD13 05               dec  b
WRA1:DD14 20 DE            jr   nz,DCF4
WRA1:DD16 CD AD 30         call 30AD
WRA1:DD19 21 4B C4         ld   hl,C44B
WRA1:DD1C 36 ED            ld   (hl),ED
WRA1:DD1E E1               pop  hl
WRA1:DD1F 18 B8            jr   DCD9
WRA1:DD21 F5               push af
WRA1:DD22 CB 37            swap a
WRA1:DD24 CD 28 DD         call DD28
WRA1:DD27 F1               pop  af
WRA1:DD28 E6 0F            and  a,0F
WRA1:DD2A C6 F6            add  a,F6
WRA1:DD2C 22               ldi  (hl),a
WRA1:DD2D C9               ret  
WRA1:DD2E CD F4 36         call 36F4
WRA1:DD31 F0 AB            ld   a,(ff00+AB)
WRA1:DD33 5F               ld   e,a
WRA1:DD34 CB 5F            bit  3,a
WRA1:DD36 28 02            jr   z,DD3A
WRA1:DD38 C1               pop  bc
WRA1:DD39 C9               ret  
WRA1:DD3A CB 77            bit  6,a
WRA1:DD3C 28 04            jr   z,DD42
WRA1:DD3E 3E FF            ld   a,FF
WRA1:DD40 18 19            jr   DD5B
WRA1:DD42 CB 7F            bit  7,a
WRA1:DD44 28 04            jr   z,DD4A
WRA1:DD46 3E 01            ld   a,01
WRA1:DD48 18 11            jr   DD5B
WRA1:DD4A CB 67            bit  4,a
WRA1:DD4C 28 04            jr   z,DD52
WRA1:DD4E 3E 10            ld   a,10
WRA1:DD50 18 09            jr   DD5B
WRA1:DD52 CB 6F            bit  5,a
WRA1:DD54 28 04            jr   z,DD5A
WRA1:DD56 3E F0            ld   a,F0
WRA1:DD58 18 01            jr   DD5B
WRA1:DD5A AF               xor  a
WRA1:DD5B CB 53            bit  2,e
WRA1:DD5D 28 0D            jr   z,DD6C
WRA1:DD5F CB 43            bit  0,e
WRA1:DD61 28 01            jr   z,DD64
WRA1:DD63 E9               jp   hl
WRA1:DD64 E5               push hl
WRA1:DD65 21 BD D1         ld   hl,D1BD
WRA1:DD68 86               add  (hl)
WRA1:DD69 77               ld   (hl),a
WRA1:DD6A E1               pop  hl
WRA1:DD6B C9               ret  
WRA1:DD6C CB 43            bit  0,e
WRA1:DD6E 28 0E            jr   z,DD7E
WRA1:DD70 F5               push af
WRA1:DD71 FA BD D1         ld   a,(D1BD)
WRA1:DD74 CD 9D 30         call 309D
WRA1:DD77 F1               pop  af
WRA1:DD78 86               add  (hl)
WRA1:DD79 77               ld   (hl),a
WRA1:DD7A CD AD 30         call 30AD
WRA1:DD7D C9               ret  
WRA1:DD7E CB 4B            bit  1,e
WRA1:DD80 28 03            jr   z,DD85
WRA1:DD82 84               add  h
WRA1:DD83 67               ld   h,a
WRA1:DD84 C9               ret  
WRA1:DD85 CB 7F            bit  7,a
WRA1:DD87 28 05            jr   z,DD8E
WRA1:DD89 85               add  l
WRA1:DD8A 6F               ld   l,a
WRA1:DD8B D8               ret  c
WRA1:DD8C 25               dec  h
WRA1:DD8D C9               ret  
WRA1:DD8E 85               add  l
WRA1:DD8F 6F               ld   l,a
WRA1:DD90 D0               ret  nc
WRA1:DD91 24               inc  h
WRA1:DD92 C9               ret  

バイナリ

11 B2 4E 21 00 90 01 23 3E CD 76 0E AF 3C E0 D6
21 00 DA CD 2E DD E5 54 5D 3E F8 83 5F 38 01 15
06 12 FA BD D1 21 A9 C3 CD 9D 30 CD 21 DD 3E 7C
22 7A CD 21 DD 7B CD 21 DD 3E 7F 22 1A CD 21 DD
36 7C 3E 0C 85 6F 30 01 24 1C 20 01 14 05 20 DE
CD AD 30 21 4B C4 36 ED E1 18 B8 F5 CB 37 CD 28
DD F1 E6 0F C6 F6 22 C9 CD F4 36 F0 AB 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
BD D1 86 77 E1 C9 CB 43 28 0E F5 FA BD D1 CD 9D
30 F1 86 77 CD AD 30 C9 CB 4B 28 03 84 67 C9 CB
7F 28 05 85 6F D8 25 C9 85 6F D0 24 C9                                

*1:ポケットは「わざマシンポケット」でなければ良いです.アドレス CF21 が実行できれば「わざマシン17」である必要もありません.「わざマシン17」でない道具で任意コード実行環境を用意した場合は適宜読み替えてください.

バイナリエディタ導入チャート ピカチュウ版 (ver.20220806)

この記事は旧バージョンです.新しいバージョンは以下のものとなります.
バイナリエディタ導入チャート ピカチュウ版 - flag3833753

はじめに

ポケモン赤緑で簡易版バイナリエディタを作ったお話 - flag3833753
という記事を以前出させていただきました*1
この簡易版バイナリエディタピカチュウ版でも使えるようにしたため*2導入するチャートを書かせていただきます.

注意 (2023/01/30 追記)

このチャートはレポートバグという猶予数フレームのバグ技を使います.
このバグ技が難しいという方向けに森地図チャートも作っていますのでそちらもご参照ください.
バイナリエディタ導入 森地図チャート ピカチュウ版 - flag3833753

オーキド先生研究者さんの動画

【旧記録】バイナリエディタ起動RTA12:45【ポケモン初代(黄) ゆっくり解説】 - YouTube
という動画でバイナリエディタを導入しています.
まだ見たことない方は是非 1 度見ておくことをおすすめします.

この動画ではバイナリエディタの導入を次の 2 段階に分けて行っています.

1. 簡易的なバイナリエディタ(仮)を作る.
2. 簡易的なバイナリエディタ(仮)を使って thfan さんのバイナリエディタを作成する.

thfan さんのバイナリエディタは以下で閲覧することができます.
バイナリエディタを真似して作ってみた - thfanのブログですね分かりますん

ただこの動画の簡易的なバイナリエディタ(仮)にはRTA向けということでとても人間向きではなく (褒め言葉) 普通の人が操作するのは不可能に近いです.
この簡易的なバイナリエディタ(仮)の部分をまともに扱えるようにしたのが今回紹介する記事の内容となります.
なのでここで紹介するチャートはこのオーキド先生研究者さんの動画を丸パクリかなり参考にしています.

チャート

環境: ポケモンピカチュウの後期版 (v1.1 から v1.3) のみ動作を確認しています.
初期版 (v1.0) については後述します.

まずデータを初期化します.タイトル画面で「SELECT」+「B」+「↑」を同時に押して消去してください (レポートバグの関係上つづきからでやるのは非推奨です).

1. ライバルの名前を「て空んオオ」にする.

空というのは空白文字の意味です.主人公の名前はなんでも良いです.

2. レポートバグを行う.

レポート中の特定のタイミングで強制リセット*3をすることで手持ちポケモンのメモリに異常を生じさせます.

特定のタイミングというのはレポートを書きますか?に対し「はい」を押してから (私の感覚だと) 0.5 秒もないくらいです.これが一番難しいです.コツとかはないのでできるまで何回もトライしてみてください (としか私からは言えません).

強制リセットのタイミングが早すぎるとセーブされません.
タイミングが少し遅いとセーブデータが壊れるのでデータの初期化からやり直しです.
タイミングが遅すぎると普通にセーブされてしまいます.

オーキド先生研究者さんが布教している動画
ピカチュウ版レポートバグのすすめ(図鑑完成RTA実演)【ポケモン初代(黄) ゆっくり解説】 - YouTube
が参考になるかもしれません.

3. ポケモンの 6 番目と 9 番目を入れ替える.

レポートバグを成功させると手持ちポケモンが開けるようになっているので 6 番目と 9 番目のポケモンを入れ替えます.
そうすることで道具欄のメモリに異常を生じさせます.

4. 主人公の部屋にあるパソコンを開き道具の操作を行う.

具体的には以下のことをします.

a. 道具の 1 番目の「やめる」を 1 個預ける.
b. 道具の 22 番目の「カードキー」を預ける.これを 6 回行う.
c. 道具の 23 番目の「ポケモン」を 100 個預ける.
d. 道具の 24 番目の「わざマシン22」を 1 個預ける.
e. 道具の 25 番目の「ぬのヅ」を 34 番目にある道具と入れ替える.

a. について,もし道具の 1 番目が「やめる」になってなければ最初からやり直してください.レポートバグのところで失敗している可能性があります.
c. について,道具の 23 番目にある「ポケモン」は最初 127 個持っています.「いくつ あずけますか?」のところで「↓」を使って数を減らしていく方が早いです.100 が分からないようでしたら 99 個預けるでも構いません.2 回に分けて預けるのはダメです.
e. について,道具の 35 番目は「モンスターボール」になっていると思うのでこれを目印にすると良いです.道具の 34 番目はこの「モンスターボール」の 1 個上となります.

5. タマムシマンションの屋上のイーブイの部屋へとワープする.

4. によって主人公の家の玄関はタマムシシティの屋上のイーブイの部屋と繋がっています.家から出ましょう.

6. 無限イーブイ編にする.

まずは設定を以下の通りにしてください.

はなしのはやさ:おそい
せんとうアニメ:じっくりみる
しあいのルール:かちぬきタイプ
サウンド:イヤホン2

そうすると道具の 26 番目に「はやぶさバッヂ」が錬成されます.
そして以下のことをしてください.

1. ニックネーム「ヅずゆデの」のイーブイを取得し「はやぶさバッヂ」を使う.
2. ニックネーム「ひでぶデョ」のイーブイを取得し「はやぶさバッヂ」を使う.
3. ニックネーム「ヅやゆョプ」のイーブイを取得し「はやぶさバッヂ」を使う.

イーブイは本来 1 匹しか手に入らないのですが「はやぶさバッヂ」を使うことでボールが再配置されてイーブイを再取得することができるようになります.

3. の「はやぶさバッヂ」で以降イーブイを取得するとき,ボールではなく近くにいるおじさんが消えるようになるのでイーブイを無限に取得することができるようになります.

7. イーブイを取得しニックネームをつけていく.

無限に取得できるようになったイーブイを使ってプログラムを組みます.
下から順番にニックネームをつけてください.

がんぜクョ
ぶづぜンづ
よヅぜウづ
にぽづがる
ぜい空へパ
ううグ空だ
どグだギョ
べへにんグ
だゲぼダぞ
空へにんグ
わとんヅー
グリググだ
ざグわねん
ぱへふんぴ
へふんボぷ
へふんだし
ぼヂキづご
ョのなひだ
へよんち空
ぼダメにぽ
にュだガに
にヂ空ギて
ボデの

8. 簡易版バイナリエディタを実行する.

上のニックネームを入力した後,
はやぶさバッヂ」を実行すると簡易版バイナリエディタが起動します.
こんな感じになるかと思います.

起動しない場合はリセットしてレポートバグ直後からやり直してください.

起動できたら一回セーブしておくと良いかもしれません.

簡易版バイナリエディタの操作方法
以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法

A: アドレス+1
B: アドレス-1
↓: 中身+1
↑: 中身-1
→: 中身+10h
←: 中身-10h
Start: 終了

9. バイナリエディタを実行するまで

thfan さんのコードを使ってバイナリエディタを起動させましょう.
バイナリエディタを真似して作ってみた - thfanのブログですね分かりますん
簡易版バイナリエディタを使って D9B4 から DA5E のアドレスの中身をリンク先のものに書き換えます.
ただし DA0D から DA0F については

CD 67 38

ではなくて

CD 40 38

としてください.特に DA0E の値が 40 ということに注意してください.
書き換えたら一回セーブしておくと良いかもしれません.

そして設定を以下の通りにしてください.

はなしのはやさ:ふつう
せんとうアニメ:じっくりみる
しあいのルール:かちぬきタイプ
サウンド:イヤホン2

そうすると道具の 26 番目に「かいがらバッヂ」が錬成されます.
その「かいがらバッヂ」を実行することでバイナリエディタが起動することができます.
完成するとこんな感じになるかと思います.

バイナリエディタの操作

↓: アドレス+1
↑: アドレス-1
→: アドレス+10
←: アドレス-10
B+↓: アドレス+100
B+↑: アドレス-100
B+→: アドレス+1000
B+←: アドレス-1000
A+↓: 中身+1
A+↑: 中身-1
A+→: 中身+10
A+←: 中身-10
SELECT: 指しているアドレスを実行
START: 終了

簡易版バイナリエディタよりも操作できることが増えて快適になるかと思います.

「SELECT」は不用意に押すとフリーズする可能性が高いので気をつけましょう.
慣れてないうちは「SELECT」はないものと思って良いかもしれません.

注意 (2022/08/07 追記)

D9B4 から DA5E のアドレスを用いてバイナリエディタを作成しているので,
この部分をバイナリエディタでいじると壊れるので注意してください.
特に DA00 から始まるプログラムを公開している方が一定数 (?) いらっしゃるので
これらのプログラムを動かしたいのであれば DA5F からでも実行できるように調整するというのが一つあります.
もう一つの方法として詳細は省くのですが完成したバイナリエディタを使ってもう一度 DE64 からバイナリエディタを作るという方法があります.
この手法を取る場合は D9B4 から D9B6 *4 を C3 64 DE にして「かいがらバッヂ」を使うことで DE64 からのバイナリエディタが実行でき,かつ DA00 からプログラムを書くことができるようになります.

ストーリーに戻るには

バイナリエディタが起動できるようになったので大抵のことはできるようになりました.
この先どうするかは自由ですが,1 つの案として普通のストーリー進行に戻るというのがあるかもしれないのでこれを紹介します.

レポートバグによって手持ちポケモンのメモリと道具欄のメモリに異常が発生しているのでまずこれを直す必要があります.
D123 を 00 にすることで手持ちを 0 匹にすることができます.
D2A1 を 01 に,D2A2 を 63 にすることで道具を「かいがらバッヂ」のみ所有にすることができます.バイナリエディタ終了後はカーソルがまだ 26 番目にあるので 1 番目になるまで「↑」を押すことで道具欄が正常 (?) になります.
また D287 から D28D の値を 00 にすることでつかまえた数を 0 にすることができます (これをしておかないとオーキド博士から図鑑がもらえなくなります).

D331 と D335 を 00 に書き換えてからイーブイの部屋を出るとマサラタウンに戻ることができます.これでストーリーを進めることができます.

余談

7. のニックネームについて 4, 5 匹目以外は前回の記事と全く同じだったりします.

最後の「かいがらバッヂ」ですが道具コードは 63,効果は D9B2 にジャンプするものとなっています.
内部コード 63 は設定から錬成可能で,D9B2 はボックスに預けているポケモンの匹数なのでバイナリエディタを実行するのにかなり都合の良いアイテムだと思いました.

「かいがらバッヂ」に関する情報は以下の記事 (特に下の方の画像版) を参考にさせていただきました.
【初代ポケモン】アイテムのアドレス参照先リスト - Wonderland Seeker

初期版について (2022/08/07 追記)

初期版 (v1.0) だと上の通りに動きません.なぜなら「はやぶさバッヂ」のジャンプアドレスが初期版 (v1.0) と後期版 (v1.1 から v1.3) で異なるためです.
そのためこの記事を公開した当初は初期版 (v1.0) に非対応とさせていただいていました.
しかし新快速さんから次のようなコメントを頂きました.

https://twitter.com/JmfyjB069yGvh7X/status/1555954676734238720

主人公の名前を無害なものにすれば初期版 (v1.0) でも任意コード実行ができるということを教えていただいたので,これを使って初期版でも導入方法を紹介したいと思います.後期版と何が違うのかを書いていきます.
ただし執筆者が初期版を持っていなく実際にできるか確認していないので自己責任でお願いします.何か問題がありましたらお知らせいただけますと幸いです.

「2. レポートバグを行う.」「3. ポケモンの 6 番目と 9 番目を入れ替える.」「5. タマムシマンションの屋上のイーブイの部屋へとワープする.」「6. 無限イーブイ編にする.」「8. 簡易版バイナリエディタを実行する.」は後期版と全く同じです.

「1. ライバルの名前を「て空んオオ」にする.」のところは大きく変更となります.
初期版 (v1.0) では,主人公の名前を「ギるゾい」にし,ライバルの名前はなんでも良いです.「オオオオオ」としてください.実際には5文字目が「オ」であればなんでも良いです.(2022/10/29 修正)

「4. 主人公の部屋にあるパソコンを開き道具の操作を行う.」は e. の操作のみ行ってください.道具の入れ替えをするだけなのでパソコンを開かずにメニュー欄の道具から開いても良いです.
2022/10/29 追記: ただし 25 番目の道具は「ぬのヅ」ではなくもっとバグった名称になっています.

「7. イーブイを取得しニックネームをつけていく.」についてはニックネームが少しだけ変わります.
上から 4, 5 匹目

にぽづがる
ぜい空へパ
の部分を
にぽづにグ
づなゅへへ
に読み替えてください.

「9. バイナリエディタを実行するまで」について
DA0D から DA0F について初期版 (v1.0) は

CD 3F 38

としてください.

コード

WRA1:DE64 26 DE            ld   h,DE
WRA1:DE66 2E 87            ld   l,87
WRA1:DE68 AF               xor  a
WRA1:DE69 50               ld   d,b
WRA1:DE6A 3C               inc  a
WRA1:DE6B 32               ldd  (hl),a
WRA1:DE6C 2E AB            ld   l,AB
WRA1:DE6E 32               ldd  (hl),a
WRA1:DE6F 50               ld   d,b
WRA1:DE70 D6 11            sub  a,11
WRA1:DE72 2E 82            ld   l,82
WRA1:DE74 32               ldd  (hl),a
WRA1:DE75 50               ld   d,b
WRA1:DE76 C6 48            add  a,48
WRA1:DE78 32               ldd  (hl),a
WRA1:DE79 26 D9            ld   h,D9
WRA1:DE7B 50               ld   d,b
WRA1:DE7C 2E B2            ld   l,B2
WRA1:DE7E 7F               ld   a,a

WRA1:DE7F CD 40 (38)       call 3840
WRA1:DE82 (F0) B3          ld   a,(ff00+B3)
WRA1:DE84 07               rlca 
WRA1:DE85 7F               ld   a,a
WRA1:DE86 30 (01)          jr   nc,DE89
WRA1:DE88 34               inc  (hl)
WRA1:DE89 07               rlca 
WRA1:DE8A 30 06            jr   nc,DE92
WRA1:DE8C AF               xor  a
WRA1:DE8D 50               ld   d,b
WRA1:DE8E 3D               dec  a
WRA1:DE8F CD C6 DE         call DEC6
WRA1:DE92 07               rlca 
WRA1:DE93 50               ld   d,b
WRA1:DE94 30 08            jr   nc,DE9E
WRA1:DE96 3E 0F            ld   a,0F
WRA1:DE98 2F               cpl  
WRA1:DE99 50               ld   d,b
WRA1:DE9A 7F               ld   a,a
WRA1:DE9B CD C6 DE         call DEC6
WRA1:DE9E 07               rlca 
WRA1:DE9F 50               ld   d,b
WRA1:DEA0 DC C4 DE         call c,DEC4
WRA1:DEA3 11 E3 50         ld   de,50E3
WRA1:DEA6 07               rlca 
WRA1:DEA7 D8               ret  c
WRA1:DEA8 07               rlca 
WRA1:DEA9 07               rlca 
WRA1:DEAA 30 (01)          jr   nc,DEAD
WRA1:DEAC 2B               dec  hl
WRA1:DEAD 07               rlca 
WRA1:DEAE DC C8 DE         call c,DEC8
WRA1:DEB1 50               ld   d,b
WRA1:DEB2 44               ld   b,h
WRA1:DEB3 CD CC DE         call DECC
WRA1:DEB6 45               ld   b,l
WRA1:DEB7 50               ld   d,b
WRA1:DEB8 CD CC DE         call DECC
WRA1:DEBB 1C               inc  e
WRA1:DEBC 46               ld   b,(hl)
WRA1:DEBD 50               ld   d,b
WRA1:DEBE CD CC DE         call DECC
WRA1:DEC1 30 BC            jr   nc,DE7F
WRA1:DEC3 50               ld   d,b

WRA1:DEC4 3E 10            ld   a,10

WRA1:DEC6 86               add  (hl)
WRA1:DEC7 32               ldd  (hl),a

WRA1:DEC8 2A               ldi  a,(hl)
WRA1:DEC9 50               ld   d,b
WRA1:DECA AF               xor  a
WRA1:DECB C9               ret  

WRA1:DECC C5               push bc
WRA1:DECD CB 30            swap b
WRA1:DECF 50               ld   d,b
WRA1:DED0 CD D6 DE         call DED6
WRA1:DED3 C1               pop  bc
WRA1:DED4 7F               ld   a,a
WRA1:DED5 50               ld   d,b
WRA1:DED6 3E 0F            ld   a,0F
WRA1:DED8 A0               and  b
WRA1:DED9 C6 48            add  a,48
WRA1:DEDB 50               ld   d,b
WRA1:DEDC C6 AE            add  a,AE
WRA1:DEDE 30 05            jr   nc,DEE5
WRA1:DEE0 C6 50            add  a,50
WRA1:DEE2 C6 10            add  a,10
WRA1:DEE4 7F               ld   a,a
WRA1:DEE5 06 C3            ld   b,C3
WRA1:DEE7 50               ld   d,b
WRA1:DEE8 1C               inc  e
WRA1:DEE9 12               ld   (de),a
WRA1:DEEA C9               ret  
WRA1:DEEB 50               ld   d,b

バイナリ

26 DE 2E 87 AF 50 
3C 32 2E AB 32 50 
D6 11 2E 82 32 50 
C6 48 32 26 D9 50 
2E B3 7F CD 40 50 
B3 B3 07 7F 30 50 
34 07 30 06 AF 50 
3D CD C6 DE 07 50 
30 08 3E 0F 2F 50 
7F CD C6 DE 07 50 
DC C4 DE 11 E3 50 
07 D8 07 07 30 50 
2B 07 DC C8 DE 50 
44 CD CC DE 45 50 
CD CC DE 1C 46 50 
CD CC DE 30 BC 50 
3E 10 86 32 2A 50 
AF C9 C5 CB 30 50 
CD D6 DE C1 7F 50 
3E 0F A0 C6 48 50 
C6 AE 30 05 C6 50 
C6 10 7F 06 C3 50 
1C 12 C9 50 

*1:そんなにアクセス数はないのでいい感じに拡散していただけると執筆者が喜びます.

*2:前の記事を書いた段階でピカチュウ版に対応する簡易版バイナリエディタも作っていましたが執筆者の怠惰のためしばらく実際に動かしていませんでした.

*3:「A」+「B」+「Start」+「Select」によるリセットではなくハードごとリセットをする必要があります.

*4:先程壊れると書いたのですがこの 3 つならまだなんとかなります.

ポケモン赤緑で簡易版バイナリエディタを作ったお話

バイナリエディタとは?

アドレスの中身を書き換えるアイテムとなっています.
エンディングを呼び出したりミュウを出したりポケモンの中でテトリスを作ったりとなんでもできます.

バイナリエディタをなるべく早く作るための先行研究

バイナリエディタをなるべく早く作ること自体は多くの人がやっています.
アイスさんの動画やてらろーしゃさんの動画が有名なのかと思います.

どちらの方法もおもしろい方法でバイナリエディタが作られています.
しかしどちらの方法もミスをした際のリカバリが難しいのではないかと考えました.

簡易版バイナリエディタ

そこでリカバリが簡単になるように,そしてお二方の動画よりもさらに早くバイナリエディタを導入することができるようにするため,僕とでぃぐさんで簡易版バイナリエディタを作りました.
(でぃぐさんはミニバイナリエディタと呼んでいます)


またでぃぐさんに記事で紹介していただきました.

以下に載せるニックネームは ver.220121 よりもさらに短縮したもので 23 匹のニックネームを用いて簡易版バイナリエディタを実行するものとなります.

簡易版バイナリエディタ導入の方法

環境:ポケモン赤緑の後期版のみ動作を確認しています.
赤緑の初期版と青版については後述します.

準備するもの

  • なかよしバッヂ

あると望ましいもの

  • 未使用のボックス

なかよしバッヂの入手方法は調べてください.
もし「さいしょからはじめる」でプレイするならありす*さんのチャートがオススメです.
【初代ポケモン】なかよしバッヂ導入チャート【任意コード実行】 - Wonderland Seeker
以下の手順を踏むと簡易版バイナリエディタが起動します.

  1. サファリボールの残り個数を 0 個にする.「さいしょからはじめる」の場合はサファリゾーンによらなければ大丈夫です.
  2. 育て屋にニックネーム「うるてぽん」のついたポケモンを預ける.このポケモンは預けっぱなしにしてください.
  3. 以下のニックネームをつけたポケモンを未使用のボックスに預ける.(ありす*さんのチャートで進めているのであれば「5.イーブイをプログラムにしよう」でニックネームをつけていくのが良いです)
  4. なかよしバッヂを使用する.

もし簡易版バイナリエディタが起動しない場合はニックネームを見直してみる.
もしくはボックスを未使用のものに切り換えましょう.
(または後で紹介する方法に進んでください)

がんぜクョ
ぶづぜンづ
よヅぜウづ
にぽづにぞ
づなゅへへ
ううグ空だ
どグだギョ
べへにんグ
だゲぼダぞ
空へにんグ
わとんヅー
グリググだ
ざグわねん
ぱへふんぴ
へふんボぷ
へふんだし
ぼヂキづご
ョのなひだ
へよんち空
ぼダメにぽ
にュだガに
にヂ空ギて
ボデの

注意

初期アドレスは D9B3 となっています.
これは育て屋に預けるポケモン「うるてぽん」の最初の 2 文字が初期アドレスとなっているためです.
この最初の 2 文字を変えることで初期アドレスを変更することができます.

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

以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法

A: アドレス+1h
B: アドレス-1h
↓: 中身+1h
↑: 中身-1h
→: 中身+10h
←: 中身-10h
Start: 終了

バイナリエディタを起動するまで

ぽけもんとか。さんのコードを使ってバイナリエディタを起動させましょう.
https://pkmn.tk/z80/files/binary.txt
簡易版バイナリエディタを使って D9B3 から DA52 のアドレスの中身をリンク先のものに書き換えます.
書き換えたら簡易版バイナリエディタを終了してセーブすることをオススメします.
そしてその後 D984 から D987 のアドレスの中身を

00 C3 B3 D9

に書き換えます.
書き換えたら終了してもう一度なかよしバッヂを起動するとバイナリエディタが起動します.
起動しなかった場合はリセットしてバイナリエディタのコードを確認しましょう.

未使用のボックスがない場合

ニックネーム「うるてぽん」の変わりに「うるてEん」を使ってください.
ニックネーム「うるてEん」は以下の手順で作れます.

  1. サファリボールの残り個数を 0 or 30 個にする.
  2. 育て屋にニックネーム「てウん」のついたポケモンを預ける.サファリボールの個数が 0 の場合は預けたポケモンを引き取ってください.
  3. 以下のニックネームをつけたポケモンボックスの 6 匹目から順番に配置する.
  4. ニックネーム「うるてぽん」のポケモンを手持ちの 6 匹目に配置する.
  5. なかよしバッヂを使用する.

ゾケゼひぢ
ギめなぼづ
ゅにづづの

注意 (2022/08/07 追記)

D9B3 から DA52 のアドレスを用いてバイナリエディタを作成しているので,
この部分をバイナリエディタでいじると壊れるので注意してください.
特に DA00 から始まるプログラムを公開している方が一定数 (?) いらっしゃるので
これらのプログラムを動かしたいのであれば DA53 からでも実行できるように調整するというのが一つあります.
もう一つの方法として詳細は省くのですが完成したバイナリエディタを使ってもう一度 DE64 からバイナリエディタを作るという方法があります.

余談

オーキドせんせい研究者さんが 12:45 でバイナリエディタを起動するという RTA を走っていました.

今回紹介した 23 匹のニックネームは

に手を加えたものですが,一部オーキドせんせい研究者さんのプログラムを拝借させていただきました.

赤緑版初期版と青版について (2022/08/07 追記)

上から 4, 5 匹目
にぽづにぞ
づなゅへへ
の部分を
にぽづにピ
づなゅへへ
に読み替えることで赤緑初期版に,
にぽづ空空
空なゅへタ
に読み替えることで青版に対応します.
なお執筆者はどちらも持っていなく実際にできるか確認していないので自己責任でお願いします.何か問題がありましたらお知らせいただけますと幸いです.

またバイナリエディタ作成の際は

WRA1:DA0A CD 67 38	call 3867

の部分を赤緑初期版では

WRA1:DA0A CD 79 38	call 3879

としてください.青版では

WRA1:DA0A CD 8F 38	call 388F

としてください.

バイナリエディタ導入チャート (2022/12/10 追記)

オーキドせんせい研究者さんがバイナリエディタを 20 分で作成するチャートを解説していました.
自分の記事を参考にされたようで紹介していただきありがとうございます.
【初代ポケモン】お手軽20分。バイナリエディタ作成チャート解説【バグ技 任意コード実行】 - YouTube
まだ見たことない方は是非 1 度見ておくことをおすすめします.

この動画の簡易版バイナリエディタでは DCE0 にジャンプする機能をつけていました.
自分もその機能をつけて作ってみたので以下の URL の miniatur_memory_editor_RGB(JP).asm を参考に試してみてください.
ボックスに預けるポケモン 21 匹 (上のものより 2 匹少ない!) で作ることができます.
オーキドせんせい研究者さんの動画のものとは操作方法が異なるので好みが分かれるかもしれません.
またバイナリエディタを 171 byte から短縮したので以下の URL の memory_editor.asm に置いておきます.
memory_editor.asm · GitHub

バイナリエディタ導入の動画 (2024/03/06 追記)

バイナリエディタを導入するだけの動画を作成しました.
以下の動画が 2024/03/06 現在における最新の導入方法かと思います.
上記ではパソコンに預けているポケモンの領域を使ってバイナリエディタを作成しているのですがこの方法では未使用領域を使ったバイナリエディタとなります.
www.youtube.com

コード

WRA1:DE64 26 DE            ld   h,DE
WRA1:DE66 2E 87            ld   l,87
WRA1:DE68 AF               xor  a
WRA1:DE69 50               ld   d,b
WRA1:DE6A 3C               inc  a
WRA1:DE6B 32               ldd  (hl),a
WRA1:DE6C 2E AB            ld   l,AB
WRA1:DE6E 32               ldd  (hl),a
WRA1:DE6F 50               ld   d,b
WRA1:DE70 D6 11            sub  a,11
WRA1:DE72 2E 82            ld   l,82
WRA1:DE74 32               ldd  (hl),a
WRA1:DE75 50               ld   d,b
WRA1:DE76 C6 48            add  a,48
WRA1:DE78 32               ldd  (hl),a
WRA1:DE79 C6 2F            add  a,2F
WRA1:DE7B 50               ld   d,b
WRA1:DE7C 32               ldd  (hl),a
WRA1:DE7D C5               push bc
WRA1:DE7E E1               pop  hl

WRA1:DE7F CD (67) (38)     call 3867
WRA1:DE82 (F0) B3          ld   a,(ff00+B3)
WRA1:DE84 07               rlca 
WRA1:DE85 7F               ld   a,a
WRA1:DE86 30 (01)          jr   nc,DE89
WRA1:DE88 34               inc  (hl)
WRA1:DE89 07               rlca 
WRA1:DE8A 30 06            jr   nc,DE92
WRA1:DE8C AF               xor  a
WRA1:DE8D 50               ld   d,b
WRA1:DE8E 3D               dec  a
WRA1:DE8F CD C6 DE         call DEC6
WRA1:DE92 07               rlca 
WRA1:DE93 50               ld   d,b
WRA1:DE94 30 08            jr   nc,DE9E
WRA1:DE96 3E 0F            ld   a,0F
WRA1:DE98 2F               cpl  
WRA1:DE99 50               ld   d,b
WRA1:DE9A 7F               ld   a,a
WRA1:DE9B CD C6 DE         call DEC6
WRA1:DE9E 07               rlca 
WRA1:DE9F 50               ld   d,b
WRA1:DEA0 DC C4 DE         call c,DEC4
WRA1:DEA3 11 E3 50         ld   de,50E3
WRA1:DEA6 07               rlca 
WRA1:DEA7 D8               ret  c
WRA1:DEA8 07               rlca 
WRA1:DEA9 07               rlca 
WRA1:DEAA 30 (01)          jr   nc,DEAD
WRA1:DEAC 2B               dec  hl
WRA1:DEAD 07               rlca 
WRA1:DEAE DC C8 DE         call c,DEC8
WRA1:DEB1 50               ld   d,b
WRA1:DEB2 44               ld   b,h
WRA1:DEB3 CD CC DE         call DECC
WRA1:DEB6 45               ld   b,l
WRA1:DEB7 50               ld   d,b
WRA1:DEB8 CD CC DE         call DECC
WRA1:DEBB 1C               inc  e
WRA1:DEBC 46               ld   b,(hl)
WRA1:DEBD 50               ld   d,b
WRA1:DEBE CD CC DE         call DECC
WRA1:DEC1 30 BC            jr   nc,DE7F
WRA1:DEC3 50               ld   d,b

WRA1:DEC4 3E 10            ld   a,10

WRA1:DEC6 86               add  (hl)
WRA1:DEC7 32               ldd  (hl),a

WRA1:DEC8 2A               ldi  a,(hl)
WRA1:DEC9 50               ld   d,b
WRA1:DECA AF               xor  a
WRA1:DECB C9               ret  

WRA1:DECC C5               push bc
WRA1:DECD CB 30            swap b
WRA1:DECF 50               ld   d,b
WRA1:DED0 CD D6 DE         call DED6
WRA1:DED3 C1               pop  bc
WRA1:DED4 7F               ld   a,a
WRA1:DED5 50               ld   d,b
WRA1:DED6 3E 0F            ld   a,0F
WRA1:DED8 A0               and  b
WRA1:DED9 C6 48            add  a,48
WRA1:DEDB 50               ld   d,b
WRA1:DEDC C6 AE            add  a,AE
WRA1:DEDE 30 05            jr   nc,DEE5
WRA1:DEE0 C6 50            add  a,50
WRA1:DEE2 C6 10            add  a,10
WRA1:DEE4 7F               ld   a,a
WRA1:DEE5 06 C3            ld   b,C3
WRA1:DEE7 50               ld   d,b
WRA1:DEE8 1C               inc  e
WRA1:DEE9 12               ld   (de),a
WRA1:DEEA C9               ret  
WRA1:DEEB 50               ld   d,b

バイナリ

26 DE 2E 87 AF 50
3C 32 2E AB 32 50
D6 11 2E 82 32 50
C6 48 32 C6 2F 50
32 C5 E1 CD CD 50
B3 B3 07 7F 30 50
34 07 30 06 AF 50
3D CD C6 DE 07 50
30 08 3E 0F 2F 50
7F CD C6 DE 07 50
DC C4 DE 11 E3 50
07 D8 07 07 30 50
2B 07 DC C8 DE 50
44 CD CC DE 45 50
CD CC DE 1C 46 50
CD CC DE 30 BC 50
3E 10 86 32 2A 50
AF C9 C5 CB 30 50
CD D6 DE C1 7F 50
3E 0F A0 C6 48 50
C6 AE 30 05 C6 50
C6 10 7F 06 C3 50
1C 12 C9 50