バイナリエディタを真似して作ってみた

  • facebook�с�激�с��
  • twitter�с�ゃ�吟����
追記2018/02/16:本家のが公開されているみたいです

 おふがお氏のバイナリエディタ公開場所→
http://offgao.net/poke/
 >
このサイトの内容またはアドレスを、NAVERまとめへ転載・引用・掲載することを禁ず。







さっきの記事
を書いたのは
こちらの動画
を見て自分も使ってみたかったからです

そして今から書く記事もそうです

(ソースが無ければ作ればいいという発想ですw)



さっきの記事
の方法を使って

ボックスのステータス欄に書き込んでいます


BGM変更も無ければUIも微妙に違います



WRA1:D9B4 21 00 D0         ld   hl,D000
;開始したときはD000に合わせておきます

WRA1:D9B7 CD 0D DA         call DA0D
;キー入力関連

WRA1:D9BA E5               push hl
;描画中はhlを退避

WRA1:D9BB 54               ld   d,h

WRA1:D9BC 5D               ld   e,l

WRA1:D9BD 3E F8            ld   a,F8
;deを描画する先頭にあわせます

WRA1:D9BF 83               add  e

WRA1:D9C0 5F               ld   e,a

WRA1:D9C1 38 01            jr   c,D9C4
;dに繰り下がり

WRA1:D9C3 15               dec  d

WRA1:D9C4 06 12            ld   b,12
;ループ回数

WRA1:D9C6 21 AB C3         ld   hl,C3AB
;描画位置の指定

WRA1:D9C9 3E 7C            ld   a,7C
;横枠
ここから18回ループ

WRA1:D9CB 22               ldi  (hl),a

WRA1:D9CC 7A               ld   a,d

WRA1:D9CD CD 01 DA         call DA01
;dの上位ビットを描画

WRA1:D9D0 7A               ld   a,d

WRA1:D9D1 CD 03 DA         call DA03
;dの下位ビットを描画

WRA1:D9D4 7B               ld   a,e

WRA1:D9D5 CD 01 DA         call DA01
;eの上位ビットを描画

WRA1:D9D8 7B               ld   a,e

WRA1:D9D9 CD 03 DA         call DA03
;eの上位ビットを描画

WRA1:D9DC 3E 7F            ld   a,7F
;空白

WRA1:D9DE 22               ldi  (hl),a

WRA1:D9DF 1A               ld   a,(de)

WRA1:D9E0 CD 01 DA         call DA01
;(de)の上位ビットを描画

WRA1:D9E3 1A               ld   a,(de)

WRA1:D9E4 CD 03 DA         call DA03
;(de)の上位ビットを描画

WRA1:D9E7 3E 7C            ld   a,7C
;横枠

WRA1:D9E9 22               ldi  (hl),a

WRA1:D9EA 3E 0B            ld   a,0B
;次の行へ

WRA1:D9EC 85               add  l

WRA1:D9ED 6F               ld   l,a

WRA1:D9EE 30 01            jr   nc,D9F1
;hに繰り上がり

WRA1:D9F0 24               inc  h

WRA1:D9F1 1C               inc  e

WRA1:D9F2 20 01            jr   nz,D9F5
;dに繰り上がり

WRA1:D9F4 14               inc  d

WRA1:D9F5 05               dec  b

WRA1:D9F6 20 D1            jr   nz,D9C9
;ループ範囲ここまで

WRA1:D9F8 21 4B C4         ld   hl,C44B

WRA1:D9FB 36 ED            ld   (hl),ED
;カーソル黒を描画

WRA1:D9FD E1               pop  hl

WRA1:D9FE C3 B7 D9         jp   D9B7
;最初に戻ります(hlの指定を除く)



WRA1:DA01 CB 37            swap a
;上位ビットと下位ビットを入れ替えます


WRA1:DA03 E6 0F            and  a,0F
;aを下位ビットだけにします

WRA1:DA05 C6 F6            add  a,F6
;数字を文字に変換します

WRA1:DA07 30 02            jr   nc,DA0B
;アルファベットの場合オーバーフローします

WRA1:DA09 C6 60            add  a,60
;アルファベットを文字に変換します

WRA1:DA0B 22               ldi  (hl),a

WRA1:DA0C C9               ret  



WRA1:DA0D CD 67 38         call 
3867 ;キー入力を取得します(VC版ならこれでいいはず)(赤初期ならcall 3879
WRA1:DA10 F0 B3            ld   a,(ff00+B3)
;今入力されたキー入力

WRA1:DA12 CB 5F            bit  3,a
;スタートが押された場合

WRA1:DA14 28 02            jr   z,DA18

WRA1:DA16 C1               pop  bc
;メインルーチンを飛ばすための空打ち

WRA1:DA17 C9               ret
;バイナリエディタを終了する

WRA1:DA18 CB 57            bit  2,a
;セレクトが押された場合

WRA1:DA1A 28 06            jr   z,DA22

WRA1:DA1C 01 B7 D9         ld   bc,D9B7

WRA1:DA1F D1               pop  de
;戻り先を変更するために空打ちします

WRA1:DA20 C5               push bc
;戻り先をバイナリエディタの最初にしておきます

WRA1:DA21 E9               jp   hl
;現在のアドレスから実行します

WRA1:DA22 47               ld   b,a
;今入力されたキーをbに退避します

WRA1:DA23 F0 B4            ld   a,(ff00+B4)
;入力されているキーをcに入れておきます

WRA1:DA25 4F               ld   c,a

WRA1:DA26 CB 70            bit  6,b
;上が入力された場合

WRA1:DA28 28 04            jr   z,DA2E

WRA1:DA2A 3E FF            ld   a,FF
;-01をaに入れておきます

WRA1:DA2C 18 15            jr   DA43

WRA1:DA2E CB 78            bit  7,b
;下が入力された場合

WRA1:DA30 28 04            jr   z,DA36

WRA1:DA32 3E 01            ld   a,01
;01をaに入れておきます

WRA1:DA34 18 0D            jr   DA43

WRA1:DA36 CB 60            bit  4,b
;右が入力された場合

WRA1:DA38 28 04            jr   z,DA3E

WRA1:DA3A 3E 10            ld   a,10
;10をaに入れておきます

WRA1:DA3C 18 05            jr   DA43

WRA1:DA3E CB 68            bit  5,b

WRA1:DA40 C8               ret  z
;方向キーが入力されていない場合描画に進みます

WRA1:DA41 3E F0            ld   a,F0
;左が入力された場合は-10をaに入れておきます

WRA1:DA43 CB 41            bit  0,c
;Aが入力されている場合

WRA1:DA45 28 03            jr   z,DA4A

WRA1:DA47 86               add  (hl)
;現在のアドレスの中身にaを加算します

WRA1:DA48 77               ld   (hl),a

WRA1:DA49 C9               ret  

WRA1:DA4A CB 49            bit  1,c
;Bが入力されていた場合

WRA1:DA4C 28 03            jr   z,DA51

WRA1:DA4E 84               add  h
;現在のアドレスの上位バイトにaを加算します

WRA1:DA4F 67               ld   h,a

WRA1:DA50 C9               ret  

WRA1:DA51 CB 7F            bit  7,a
;aがマイナスだった場合

WRA1:DA53 28 05            jr   z,DA5A

WRA1:DA55 85               add  l
;現在のアドレスの下位バイトにaを加算します

WRA1:DA56 6F               ld   l,a

WRA1:DA57 D8               ret  c

WRA1:DA58 25               dec  h
;hに繰り下がり

WRA1:DA59 C9               ret  

WRA1:DA5A 85               add  l
;aがプラスだった場合

WRA1:DA5B 6F               ld   l,a
;現在のアドレスの下位バイトにaを加算します

WRA1:DA5C D0               ret  nc

WRA1:DA5D 24               inc  h
;hに繰り上がり

WRA1:DA5E C9               ret  



注意:むやみに変なところを書き換えるとプログラムが暴走してデータが壊れることがあるかもしれません
いじるならある程度は知識をつけておいたほうがいいです
また、変にいじってデータが消えた場合の保証は出来ませんのであしからず


実行方法は
こちらの動画
を見てみると

「なかよしバッヂ」でも任意コードが実行出来るようです

やり方は

・サファリゾーンに1回入って即効で出る

・育て屋さんにニックネーム「てえるのの」を預けておく

その後
「なかよしバッヂ」を実行すればD9B4から開始できるはずです





操作方法は

セレクトで今指しているアドレスをcallして
D9B7に復帰
スタートで終了
上下キーで
指しているアドレスを
+-1

左右キーで
指しているアドレスを+-10
Bを押しながら
上下キー
だと
指しているアドレスを+-100
Bを押しながら左右キーだと指しているアドレスを+-1000
Aを押しながら
上下キー
だと
指しているアドレスの中身を+-1
Aを押しながら左右キーだと指しているアドレスの中身+-10








ところで「なかよしバッヂ」でも実行できるといってた動画のブロマガ
4かい
」で
FA67(DA67のコピー)から実行出来ると書いてあるので

このバイナリエディタの後(
DA5Fから空いてます)にプログラムを書くにはちょうどいいアドレスかもしれませんね


追記2019/04/02:

>SELECTで終了とするとアイテム整理のコマンドと被ってしまい、意図せずセレクトバグを起こしてしまう恐れがあると考え、私はSTARTとSELECTを入れ替えて使わせていただいております。一考の余地はあると思うのですが、いかがでしょうか。
と、コメントに頂いたので入れ替えてみました
thfanさんのブログをお気に入りに登録

thfanさんのブログ更新をマイページでチェックしよう

  • facebookでシェア
  • twitterでつぶやく
  • はてなブックマーク
  • LINEで送る