バイナリエディタ(第一世代)

メモリエディタ、RAMエディタとも。

RAMを自由自在に編集できるプログラム。任意コード実行の最高到達点の一つ。
これがあればもはや書き換え系のコードをいちいち作成する必要性がなくなり、任意コード実行用のプログラムの書き込みも非常に容易になる。
思わぬ範囲まで効果が及ぶ可能性があるので危険が伴います。実験・使用・使用後のセーブには十分注意しましょう。
特にsRAMバンク01h(A000h~BFFFh)は下手に弄ると簡単にフアイルのデータが壊れます。
(一応対策はされました)

このページで扱うバイナリエディタにはROMバンクやSRAMバンクの切り替え機能があります。

これらの機能が不要な場合、未使用領域を使ったバージョンが公開されているのでそちらを使うことをお勧めします。
未使用領域型バイナリエディタ
 

参考資料

ポケットモンスター 赤・緑・青 バイナリエディタ - flag3
上記の未使用領域型バイナリエディタの導入チャート及びその原理等の詳細な解説あり。
【初代ポケモン】お手軽20分。バイナリエディタ作成チャート解説【バグ技 任意コード実行】 - YouTube
ニューゲーム(要データクリア)からバイナリエディタを作成するまでのチャート紹介および実践動画。
このページで紹介する簡易型バイナリエディタは動画と操作方法が少し違うことに注意。
ポケットモンスター ピカチュウ バイナリエディタ - flag3
ピカチュウ版でニューゲームからバイナリエディタを作成するまでのチャート。(※レポートバグ使用)
このページで紹介するものとはコードの組み方が違う点に注意。
ポケットモンスター ピカチュウ バイナリエディタ レポートバグなし - flag3
こちらはレポートバグ無しのいわゆる森地図チャート。トキワのもりでfifth法を利用する必要あり。
ポケットモンスター ピカチュウ バイナリエディタ 毒サファリ+いあいぎり - flag3
既存データをそのまま流用できるバイナリエディタ導入チャート。
パソコンの道具を50種埋める必要があるが、市販品とイベントアイテムだけでもちゃんと埋まりはする。

導入

バージョンによってサブルーチンの位置が簿妙に違うため、コードを変える必要がある。

簡易型バイナリエディタ

引用:memory_editor.asm · GitHub(リンク切れ)

下記のコードをボックスの1番目から並べ、

  • サファリボール0個
    • 今回の実行では育て屋フラグを利用するため、この場所は何もしないようにするのが確実。
      • D983:00[nop]
    • 「あなぬけのヒモ」や「あなをほる」を使うと、サファリボールが0個になる。
      この仕様自体に使用する場所は関係ないので、適当なダンジョンで使用しておけば準備完了となる。
  • 育て屋に「わてん」を預けた状態にする
    • これはbcレジスタにDCE0hを代入しつつボックス22匹目のニックネームに飛ぶ命令となる。
      • D984:01 E0 DC[ld bc,DEC0]
      • D987:C3 E2 DE[jp DEE2]
    • わてEん」の場合はボックス1匹目のニックネームに直接飛ぶ。作り方は5かいバグのページを参考に。

の条件を満たしたうえでなかよしバッヂを使用する。3匹目のニックネームがバージョンによって異なるため注意。
なお、足りない部分を補完するため実行時にボックスのポケモンの名前が少し変わるようになっている。
2回目以降は気にせず実行しておk。

ピカチュウ版ではなかよしバッヂの代わりにかいがらバッヂを使用する。
その仕様上、預けるポケモンの数および種類にも指定がある。

  • コード用以外の余計なポケモンは預けない。(しっかり22匹で止める)
    • 24匹だと余計なジャンプで暴走し、26匹だと予期せぬ場所が書き換えられて困る。
      一応30匹にしてもいいが修正が面倒になる。
  • 1~17匹目にコラッタ(A5h)またはポッポ(24h)。
    • 必ずしもこの2種でなければならないわけではないが、1番道路で適当に乱獲すればいいので楽。
  • 18匹目にメノクラゲ(18h)「へみんちレ」。
    • これは適当に21番水道などで手に入れればいい。
  • 19匹目にウツボット(BEh)「ぼダメギて」。
    • ウツドンは12~15番道路に出現する(マダツボミも即進化可能)ため、これをリーフのいしで進化させればいい。
  • 20~22匹目はニックネームさえ合えば何でもいい。

メノクラゲ→ウツボット(18 BE ; jr BE)で育て屋預けフラグまで飛び(pcをD9C6h→D984hに)、
預けフラグ(01h)と「ゃわ」(E0h DCh)でbcレジスタにDCE0を代入(01 E0 DC ; ld bc,DCE0)、
「てょん」(C3 E2 DE ; jp DEE2)で22匹目のニックネームまで飛び、「だア」(30 80 ; jr nc,80)で1匹目のニックネームに飛ぶ(pcをDEE4h→DE64hに)ようにしている。
はやぶさバッヂ使用ルートは初期・後期で微妙に手順が異なってくるためここでは触れないことにする。(はやぶさバッヂ使用チャートの動画やブログは多い)

ボックス内コード
  1. がんぜルョ
  2. よヂづよく
  3. づよ
    • 赤緑初期では「づよ」(む→そ)※67→79
    • 青では「づよ」(む→ワ)※67→8F
    • ピカチュウ初期(Ver.1.0)では「にグ」(よむ→にグ)※67→3F
    • ピカチュウ後期(Ver.1.1~)では「にゲ」(よむ→にゲ)※67→40
  4. ゅョダだグ
  5. ぼヂてソん
  6. ダだギムツ
  7. てソんダム
  8. キづごヅー
  9. ぱへにんぴ
  10. へにんボぷ
  11. へにんへ※5、6文字目は冒頭のコードで「Hね゜」書き換えられる。※「H」(67h)は赤緑後期の場合。
  12. うゾダグ※1文字目は冒頭のコードで「円」に書き換えられる。
  13. ダめいんど
  14. ダれチんダ
  15. めしんざダ
  16. れゃわダリ
  17. だいなひだ
  18. へみんちレ
  19. ぼダメギて
  20. よザれんん
  21. よメボデの
  22. だアの※「てょん」で飛んでくる先。ここから相対ジャンプでボックス1匹目のニックネームに飛ぶ。

操作方法

簡易型バイナリエディタでは、アドレスとその値が表示される。
「ゃわ」でDCE0h(ボックス24番目のすばやさ努力値下桁)を指定するので初期状態のアドレス表示はDCE0と表示されているはず。

なお、「ゃわ」の部分を変えることで開始位置を変えることもできる。(例:「たむてん」を預ければ手持ち4匹目のHP努力値上桁から開始できる)
あくまで育て屋に預けている状態である必要がある点には注意。

A 指すアドレスを+1h
数値を入力したらAで進めていくことになる。
B 指すアドレスを-1h
指しているアドレスの値を+1h
指しているアドレスの値を-1h
指しているアドレスの値を+10h
指しているアドレスの値を-10h
SELECT アドレスDCE0hからプログラム実行。バイナリエディタが完成してから行うこと。
START 簡易型バイナリエディタを終了。長いコードを打ち込むので、セーブしながら進めるのが吉。
始点はDCE0hで固定されている点に注意。

おまけ1:バイナリエディタリセット

バイナリエディタを1から書き直す場合、元の数値が残っていると入力ミスの元になることも考えられる。

そこで、簡易型バイナリエディタで実行できるリセットコードを作成してみた。

DCEBh~DDA0hの0フィル
アドレス ニモニック 備考
DCE0 21 ld hl,DCEB コード部分を残す必要があるので、コードの先を指定。
DCE1 EB
DCE2 DC
DCE3 06 ld b,B6 B6h(182)バイトの繰り返し
DCE4 B6
DCE5 AF xor a aレジスタを00hにする。
DCE6 22 ldi (hl),a これでDA00hまでを00hで埋めていく。
DCE7 05 dec b bレジスタの値を1減らす。
DCE8 20 jr nz,FC bレジスタが00hになるまで
DCE9 FC
DCEA C9 ret コード終了。ここから下を書き換えていく。

バイナリエディタ作成

簡易版バイナリエディタができたら、それを使ってDCE0から以下の数値を書き込んでいく。
DD24h、DD73h、DD74hに書き込む値がバージョンによって異なる点に注意。
なお、このバイナリエディタはボックス24~30番目のポケモンのステータスを使用している。

引用:memory_editor_rom.asm · GitHub(リンク切れ)

※ROMバンク切り替え機能なし版:memory_editor.asm · GitHub(リンク切れ)

2024/5/7更新!SELECT+Aでの実行時、hlレジスタを変更するとフリーズする問題の対策をしました。
DD47を43→6F(DD46hのCBhと合わせてbit 0,eをbit 5,aに変更)に変えてください。(導入済みの場合は、3E 6F EA 47 DD C9 [ld a,6F→ld (DD47),a→ret]でも直せます)

バイナリエディタ本体
アドレス ニモニック 備考
DCE0 21 ld hl,D000 開始位置を指定
DCE1 00    
DCE2 D0    
DCE3 CD call DD23 操作部へ(メインループここから)
DCE4 23    
DCE5 DD    
DCE6 E5 push hl  
DCE7 11 ld de,FFF8  
DCE8 F8    
DCE9 FF    
DCEA 19 add hl,de  
DCEB E5 push hl  
DCEC D1 pop de  
DCED 21 ld hl,C3A9 画面描画開始位置指定
DCEE A9    
DCEF C3    
DCF0 CD call DD8E バンク参照部へ
DCF1 8E    
DCF2 DD    
DCF3 CD call DD7D  
DCF4 7D    
DCF5 DD    
DCF6 01 ld bc,000C  
DCF7 0C    
DCF8 00    
DCF9 36 ld (hl),7C ウインドウ枠(縦)
DCFA 7C    
DCFB 23 lnc hl  
DCFC 7A ld a,d  
DCFD CD call DD7D  
DCFE 7D    
DCFF DD    
DD00 7B ld a,e  
DD01 CD call DD7D  
DD02 7D    
DD03 DD    
DD04 36 ld (hl),7F 空白
DD05 7F    
DD06 23 inc hl  
DD07 1A ld a,(de)  
DD08 CD call DD7D  
DD09 7D    
DD0A DD    
DD0B 13 inc de  
DD0C 36 ld (hl),7C ウインドウ枠(縦)
DD0D 7C    
DD0E 09 add hl,bc  
DD0F 7C ld a,h  
DD10 FE cp a,C5  
DD11 C5    
DD12 20 jr nz,E5 DCF9へ(ループ処理)
DD13 E5    
DD14 3E ld a,ED 黒カーソル
DD15 ED    
DD16 EA ld (C44B),a  
DD17 4B    
DD18 C4    
DD19 AF xor a  
DD1A EA ld (6000),a  
DD1B 00    
DD1C 60    
DD1D EA ld (0000),a  
DD1E 00    
DD1F 00    
DD20 E1 pop hl  
DD21 18 jr C0 DCE3へ(メインループここまで)
DD22 C0    
DD23 CD call 38XX 操作部
DD24 赤緑初期:79
赤緑後期:67
青:8F
ピカ初期:3F
ピカ後期:40
   
DD25 38    
DD26 F0 ld a,(FF00+B3)  
DD27 B3    
DD28 01 ld bc,0001  
DD29 01    
DD2A 00    
DD2B 07 rlca  
DD2C 38 jr c,14 下入力があればDD42へ
DD2D 14    
DD2E 0B dec bc 0001→0000
DD2F 0B dec bc 0000→FFFF
DD30 07 rlca  
DD31 38 jr c,0F 上入力があればDD42へ
DD32 0F    
DD33 0E ld c,F0  
DD34 F0    
DD35 07 rlca  
DD36 38 jr c,0A 左入力があればDD42へ
DD37 0A    
DD38 01 ld bc,0010  
DD39 10    
DD3A 00    
DD3B 07 rlca  
DD3C 38 jr c,04 右入力があればDD42へ
DD3D 04    
DD3E 48 ld c,b cを00に
DD3F 07 rlca  
DD40 38 jr c,09 STARTが押されていればDD4Bへ
DD41 09    
DD42 CB bit 2,e  
DD43 53    
DD44 28 jr z,0D SELECTが押されていなければDD53へ
DD45 0D    
DD46 CB bit 5,a  
DD47 6F    
DD48 28 jr z,03 Aが押されていなければDD4Dへ
DD49 03    
DD4A E9 jp hl SELECT+Aの挙動
DD4B E1 pop hl  
DD4C C9 ret バイナリエディタに戻る
(STARTの場合は終了)
DD4D F0 ld a,(FF00+B8)  
DD4E B8    
DD4F 81 add c  
DD50 E0 ld (FF00+B8),a バンク切り替え
DD51 B8    
DD52 C9 ret メインループに戻る
DD53 79 ld a,c  
DD54 CB bit 0,e  
DD55 43    
DD56 20 jr nz,06 Aが押されていればDD5Eへ
DD57 06    
DD58 CB bit 1,e  
DD59 4B    
DD5A 20 jr nz,1E Bが押されていればDD7Aへ
DD5B 1E    
DD5C 09 add hl,bc アドレス変更
DD5D C9 ret メインループに戻る
DD5E A7 and a  
DD5F C8 ret z 上下左右未入力ならメインループに戻る
DD60 F5 push af 変化量退避
DD61 CD call DD8E  
DD62 8E    
DD63 DD    
DD64 F1 pop af  
DD65 86 add (hl)  
DD66 77 ld (hl),a アドレス内数値変更
DD67 E5 push hl  
DD68 F0 ld a,(FF00+B8)  
DD69 B8    
DD6A F5 push af  
DD6B 3E ld a,1C  
DD6C 1C    
DD6D E0 ld (FF00+B8),a  
DD6E B8    
DD6F EA ld (2000),a  
DD70 00    
DD71 20    
DD72 CD call YYXX チェックサム計算ルーチン呼び出し
DD73 赤緑:69
青:59
ピカ初期:B4
ピカ後期:BF
   
DD74 赤緑青:7C
ピカチュウ:77
   
DD75 F1 pop af  
DD76 E0 ld a,(FF00+B8)  
DD77 B8    
DD78 E1 pop hl  
DD79 C9 ret  
DD7A 84 add h B押下時の挙動
DD7B 67 ld h,a  
DD7C C9 ret  
DD7D F5 push af  
DD7E CB swap a  
DD7F 37    
DD80 CD call DD84  
DD81 84    
DD82 DD    
DD83 F1 pop af  
DD84 E6 and a,0F  
DD85 0F    
DD86 C6 add a,30  
DD87 F6    
DD88 30    
DD89 02 ld (bc),a  
DD8A C6 add a,60  
DD8B 60    
DD8C 22 ldi (hl),a  
DD8D C9 ret  
DD8E 3E ld a,01 バンク参照部
DD8F 01    
DD90 EA ld (6000),a  
DD91 00    
DD92 60    
DD93 3E ld a,0A  
DD94 0A    
DD95 EA ld (0000),a  
DD96 00    
DD97 00    
DD98 F0 ld a,(FF00+B8)  
DD99 B8    
DD9A EA ld (2000),a  
DD9B 00    
DD9C 20    
DD9D EA ld(4000),a  
DD9E 00    
DD9F 40    
DDA0 C9 ret メインループに戻る

実行と仕上げ

打ち込みに成功していれば、簡易版バイナリエディタでSTARTを押すとバイナリエディタが起動する。
始点はDCE2とDCE1で設定されている。(デフォルトはD000h)
ROMバンクとsRAMバンクは同時に変更される。(初期値は03h)

操作方法
キー 操作
アドレスを-01h
アドレスを+01h
アドレスを-10h
アドレスを+10h
B+上 アドレスを-100h
B+下 アドレスを+100h
B+左 アドレスを-1000h
B+右 アドレスを+1000h
SELECT+上 バンクを+01h
SELECT+下 バンクを-01h
SELECT+左 バンクを-10h
SELECT+右 バンクを+10h
SELECT+A カーソル位置のプログラム実行
A+下 数値を+01h
A+上 数値を-01h
A+左 数値を-10h
A+右 数値を+10h
START バイナリエディタを終了

おまけ2:バイナリエディタを他ボックスにコピー

DA00hから実行するような巨大なコードを複数保存したい場合、バイナリエディタごと他のボックスにコピーするのが有効。バックアップという点でも重要。

手順
  1. コピー先のボックスに一度切り替える。(念のため)
    • 未使用のボックスの場合、初めて切り替えた時に初期化処理が行われるため。
  2. コピー元のボックスに切り替える。
  3. バイナリエディタを起動し、アドレスD51Fhの値をコピー先のボックスに合わせて書き換える。
    • 1:80 / 2:81 / 3:82 / 4:83 / 5:84 / 6:85 / 7:86 / 8:87
      上桁の8は初期化済みを示すもので、下桁はボックスの番号より1少なくなると覚えておけばいい。
  4. 書き換えたら、現在ボックスがコピー先のボックスになっているので、コピー元のボックスにもう一度切り替える。
    ここを間違えると逆にコッピ―元のボックスが消えるので注意。
  5. コピー元のボックスでバイナリエディタを起動し、アドレスD9B2hの値を1Eに書き換える。
    • これで、コピー元のボックスのボールマークが復活する。

バイナリエディタを直接起動できるようにする

動作確認ができたら、バイナリエディタを直接起動できるようにすると便利。
また、ボックスの中身が変わるとバイナリエディタが崩壊するので、D9B2hを1Eに書き換えてポケモンを追加できないようにしておくと安心。

赤緑青の場合

育て屋に預けるポケモンを「パパてゃわ」に変えることで、サファリボールや育て屋の状態にかかわらずバイナリエディタを直接起動できるようになる。
具体的にはD985h~を以下のように書き換える。

名前変更
アドレス 文字
D985 40
D986 40
D987 C3
D988 E0
D999 DC
ピカチュウの場合

D9B2h~を以下のように書き換える。

書き換え箇所
アドレス 備考
D9B2 1E 30匹預けていることにして崩壊防止
D9B3 A5 ここは即値(ld a,xxの「xx」)として使うため元のままでいい。
ポッポの場合は24になっているが変更する必要はない。
D9B3 C3 以下3匹は(見た目だけ)バグポケモン(ここは「アム゛」)になるので強さを見るのは避ける。
D9B4 E0 ポケスタで見ると中身の種族に見えてしまうが、
ボックスの中身を弄らなければ書き換えられることはない。
D9B5 DC 「ゃパ」というバグポケモンだったり

ピカチュウバージョンではかいがらバッヂを手に入れる過程で道具周りのデータを破損させたりするため、そちらのリカバリーも行うこと。

例:毒サファリいあいぎりルートの場合はD4B9hを32に戻したり、D525hを1足しておく。

おまけ3:ROMバンクの切り替え法(バンク切り替え機能がある場合は不要)

アドレス4000h~7FFFhにはROMデータの一部が格納されている。
バイナリエディタを起動した時点のROMバンクは03hになっているが、ROMバンク自体は01h~1Fhまで存在する(殿堂入りのプログラムはバンク1Chに入っている)
ROMバンクを切り替えてデータを見たい場合は2000hとFFB8hに書き換えたいバンクの番号を入れる必要がある。
バイナリエディタ上で適当な場所(D000hでも一応おk)に以下のコードを書き込み、コードの先頭にカーソルを合わせてSELECTを押すと、指定したバンクの4000hからデータを見ることができる。

コード例
数値 ニモニック 備考
3E ld a,xx  
xx 即値 切り替えたいバンクの番号を入れる
EA ld (2000),a 2000hにバンク番号を代入
00 即値  
20 即値  
E0 ld (FF00+B8),a FFB8hにバンク番号を代入
B8 即値  
21 ld hl,4000  
00 即値 この数値を変えることでバイナリエディタの始点を変えられる
40 即値
C9 ret 処理を終了してバイナリエディタに戻る

おまけ4:パソコン型バイナリエディタ

※過去の遺物。(ピカチュウ版では応用できるかもしれないが)
これを導入すると育て屋が使えなくなるため、現在ではイベントフラグの未使用領域(セーブもされる)を利用したバイナリエディタの導入を推奨。
未使用領域型バイナリエディタ
こちらならパソコンを解放でき、書き込み箇所もまとまっているので簡易型バイナリエディタで導入できる。

今回作成したバイナリエディタはボックスのポケモン内に本体があるため、ボックスを切り替えて実行するようなことができない。
そこで、育て屋の領域とパソコンの道具を使うことでボックスの領域を自由に使えるようにするバイナリエディタも開発されている。
打ち込みはバイナリエディタで行うといいだろう。※容量が足りないため、ROMバンクの切り替え機能は入っていない。

参考:memory_editor_stored_item.asm · GitHub(リンク切れ)
※下記のコードはパソコンのデータを3バイトずらしていることに注意。変更点を緑字強調で示す。

育て屋データ
アドレス ニモニック 備考
D983 00 nop 1Eh(サファリボール30個)でも一応問題はない
D984 00 nop 01h以上にするとD99Fh~D9A1h(経験値)が歩行で変化してしまう。
D985 21 ld hl,D000 開始アドレス設定 ピカ版の場合はここに飛ぶようにすればいい(「てカる」に対応)
D986 00   ニックネーム:あ゛[無効]みへはや
D987 D0    
D988 CD call D4CA ※パソコン内に飛ぶ
D989 CA    
D98A D4    
D98B E5 push hl 親名:゛ヅ29パポケモン
D98C 11 ld de,FFF8  
D98D F8    
D98E FF    
D98F 19 add hl,de  
D990 54 ld d,h  
D991 5D ld e,l 種族:シードラ
D992 21 ld hl,C3AB 現在HP:8619
D993 AB    
D994 C3   引き取りレベル:195(預けた状態にできない理由でもある)
D995 36 ld (hl),7C 左側の枠線を描画する部分
D996 7C   タイプ1(謎)
D997 23 inc hl タイプ2も存在しないタイプ
D998 7A ld a,d ちからのねっこを持っていることになる…らしい
D999 CD call D50A パソコンに飛ぶ
D99A 0A   わざマシン05、ひっかく
D99B D5   わざマシン13
D99C 7B ld a,e スモッグ
D99D CD call D50A 再びパソコンへ
D99E 0A   ID:52490
D99F D5   ここから経験値
D9A0 36 ld (hl),7F アドレスと数値の間のスペースを描画する部分
D9A1 7F    
D9A2 23 inc hl ここから努力値
D9A3 1A ld a(de)  
D9A4 CD call D50A  
D9A5 0A    
D9A6 D5    
D9A7 36 ld (hl),7C 右側の枠線を描画する部分
D9A8 7C    
D9A9 01 ld bc,000C  
D9AA 0C    
D9AB 00   ここまで努力値
D9AC 09 add hl,bc AB個体値
D9AD 13 inc de SC個体値
D9AE 7D ld a,l ここから技PP
D9AF C3 jp D4BC パソコン2番目の種類に飛ぶ
D9B0 BC   参考元のコードではD4B9hで預け数に飛んでいる
D9B1 D4   この先はボックスのデータ。結構ギリギリ。
パソコンデータ
アドレス ニモニック 備考
D4B9 31   道具49種類でできるため、預け数もそれに合わせておく。
D4BA FF   先頭にやめるを設置。
D4BB 63   特に理由もなく99個。一応やめるも引き出せてしまうので…
D4BC FE cp a,13  
D4BD 13    
D4BE C2 jp nz,D995 左枠線描画部
D4BF 95    
D4C0 D9    
D4C1 3E ld a,ED  
D4C2 ED    
D4C3 EA ld (C44B),a カーソルを描画する部分
D4C4 4B    
D4C5 C4    
D4C6 E1 pop hl  
D4C7 C3 jp D988 育て屋に飛ぶ
D4C8 88    
D4C9 D9    
D4CA CD call 38※  
D4CB 赤緑初期:79
赤緑後期:67
青:8F
ピカ初期:3F
ピカ後期:40
  ※バージョンによってサブルーチンの位置が違うため、
この部分を変える必要がある。
参考元ではD4C8hであることに注意。
D4CC 38    
D4CD F0 ld a,(FFB3) 入力検知部
D4CE B3    
D4CF 07 rlca  
D4D0 30 jr nc,04 D4D6hに飛ぶことになる
D4D1 04    
D4D2 3E ld a,01  
D4D3 01    
D4D4 18 jr 1C D4F2hに飛ぶことになる。
D4D5 1C    
D4D6 07 rlca  
D4D7 30 jr nc,03 D4DChに飛ぶことになる。
D4D8 03    
D4D9 9F sbc a  
D4DA 18 jr 16 D4F2に飛ぶことになる。
D4DB 16    
D4DC 07 rlca  
D4DD 30 jr nc,04 D4E3hに飛ぶことになる。
D4DE 04    
D4DF 3E ld a,F0  
D4E0 F0    
D4E1 18 jr 0F D4F2hに飛ぶことになる。
D4E2 0F    
D4E3 07 rlca  
D4E4 30 jr nc,04 D4EAhに飛ぶことになる。
D4E5 04    
D4E6 3E ld a,10  
D4D7 10    
D4E8 18 jr 08 D4F2hに飛ぶことになる。
D4E9 08    
D4EA 07 rlca  
D4EB 30 jr nc,02 D4EEhに飛ぶことになる。
D4EC 02    
D4ED E1 pop hl  
D4EE C9 ret  
D4EF 07 rlca  
D4F0 D0 ret nc  
D4F1 E9 jp hl  
D4F2 CB bit 0,e  
D4F3 43    
D4F4 28 jr z,03 D4F9hに飛ぶことになる。
D4F5 03    
D4F6 86 add (hl)  
D4F7 77 ld (hl),a 指しているアドレスの値増減処理
D4F8 C9 ret  
D4F9 CB bit 1,e  
D4FA 4B    
D4FB 28 jr z,03 D500hに飛ぶことになる。
D4FC 03    
D4FD 84 add h  
D4FE 67 ld h,a 指すアドレス上桁の増減処理
D4FF C9 ret  
D500 06 ld b,00  
D501 00    
D502 CB bit 7,a  
D503 7F    
D504 28 jr z,01 D507hに飛ぶことになる。
D505 01    
D506 05 dec b  
D507 4F ld c,a  
D508 09 add,hl,bc 指すアドレス下桁の増減処理
D509 C9 ret  
D50A 47 ld b,a  
D50B CB swap a  
D50C 37    
D50D CD call D511  
D50E 11   パソコン内なのでずれを考慮
D50F D5    
D510 78 ld a,b  
D511 E6 and a,0F  
D512 0F    
D513 C6 add a,F6  
D514 F6    
D515 30 jr nc,02 D519hに飛ぶことになる。
D516 02    
D517 C6 add a,60  
D518 60    
D519 22 ldi (hl),a  
D51A C9 ret  

タグ:

+ タグ編集
  • タグ:
最終更新:2025年10月11日 16:28