9か月くらい前に撮った、デバッグモードを実機で起動する動画。
これなんですが、
どうやってこのバグを起こしたのか、当時の研究の記録が残ってなくて絶望しました。
めちゃくちゃ簡単に起こせたような、めちゃくちゃ手間をかけたような。
エクセルで研究したような、裏紙にいろいろ書き込んで研究したような。
記憶も曖昧。もう年かな……
ということで、改めて研究してみた所、簡単なジャンプ命令などではうまく実現ができなくて、「デバッグモードの残滓を利用した大規模な復元」をするしかこの動画のバグを再現する方法はなさそうという結論になりました。
当時こんな方法使ってたっけなあ……???
記録が残ってないものはしょうがない。
(2024.2.26追記 ケミカさんの最適化研究によりめちゃくちゃ効率の良い起動法が開発されました。記事の最後に追記しているので是非ご覧ください)
というわけでやり方ですが、
まずはレポートバグ等で最強のバグアイテム「バイナリエディタ」を作成。
次に、メモリアドレスDA70~DB61までに下記の数値を打ち込んでいきます。
長い……
DA70~ | 3E | 3F | D7 | CD | B2 | 0F | CD | D7 | 2F | 11 | 00 | 00 | CD | 24 | 3B | 3E |
DA80~ | 01 | E0 | AA | 21 | 19 | C5 | 11 | B1 | 73 | CD | 57 | 10 | AF | EA | 02 | D0 |
DA90~ | CD | 26 | DB | AF | EA | 05 | D0 | CD | 55 | DB | CD | C2 | 31 | CD | 4D | 0A |
DAA0~ | F0 | A7 | CD | AA | DA | CD | 5A | 04 | 18 | F3 | CB | 4F | 20 | 4A | CB | 5F |
DAB0~ | 20 | 4C | F0 | A9 | CB | 77 | 20 | 21 | CB | 7F | 20 | 2C | CB | 67 | 20 | 47 |
DAC0~ | CB | 6F | 20 | 52 | CB | 47 | C8 | 11 | 00 | 00 | CD | 24 | 3B | CD | 5A | 04 |
DAD0~ | FA | 02 | D0 | 5F | 16 | 00 | C3 | 24 | 3B | FA | 02 | D0 | 3C | FE | 67 | 20 |
DAE0~ | 01 | AF | EA | 02 | D0 | C3 | 26 | DB | FA | 02 | D0 | 3D | FE | FF | 20 | 02 |
DAF0~ | 3E | 66 | EA | 02 | D0 | C3 | 26 | DB | 11 | 00 | 00 | C3 | 24 | 3F | FA | 05 |
DB00~ | D0 | 5F | 16 | 00 | C3 | B0 | 3B | FA | 05 | D0 | 3C | FE | CF | 20 | 01 | AF |
DB10~ | EA | 05 | D0 | C3 | 55 | DB | FA | 05 | D0 | 3D | FE | FF | 20 | 02 | 3E | CE |
DB20~ | EA | 05 | D0 | C3 | 55 | DB | 21 | 0A | C5 | 01 | 05 | 00 | 3E | 7F | CD | 0D |
DB30~ | 30 | 21 | CF | 73 | FA | 02 | D0 | 5F | 16 | 00 | 19 | 19 | 19 | 19 | 19 | 11 |
DB40~ | 5B | D0 | D5 | 01 | 05 | 00 | CD | F2 | 2F | D1 | 3E | 50 | EA | 60 | D0 | 21 |
DB50~ | 1E | C5 | C3 | 57 | 10 | 21 | 96 | C5 | 11 | 05 | D0 | 01 | 03 | 81 | C3 | 64 |
DB60~ | 31 |
↓コピペ用
3E3FD7CDB20FCDD72F110000CD243B3E01E0AA2119C511B173CD5710AFEA02D0CD26DBAFEA05D0CD55DBCDC231CD4D0AF0A7CDAADACD5A0418F3CB4F204ACB5F204CF0A9CB772021CB7F202CCB672047CB6F2052CB47C8110000CD243BCD5A04FA02D05F1600C3243BFA02D03CFE672001AFEA02D0C326DBFA02D03DFEFF20023E66EA02D0C326DB110000C3243FFA05D05F1600C3B03BFA05D03CFECF2001AFEA05D0C355DBFA05D03DFEFF20023ECEEA05D0C355DB210AC50105003E7FCD0D3021CF73FA02D05F16001919191919115BD0D5010500CDF22FD13E50EA60D0211EC5C357102196C51105D0010381C36431
上記の準備が終わったら、あとはDA70にカーソルを合わせてSELECT+Aを押せば、デバッグモードの1つである「サウンドテスト」を起動することができます。
(分類違いわざマシンで起動してください。バグモード図鑑で起動すると文字が出てきません)
仕組みとしては、
①そのままでは使えない、壊れた残骸として眠っているデバッグモードを発掘。
②おそらく開発時はこうだったんだろう、という形に修復・復元。
③デバッグモード実行。
という感じです。
デバッグモードの力で、
古き良きゲームボーイ時代の音楽を実機で自由に堪能しましょう~
それではよいバグポケライフを!
ーーーーーーーーーーーーーーーーー
2024.02.26追記
ケミカさん(@tamagokakegohanium)の最適化研究により、なんと上記の約半分のコード長でサウンドテストの起動が可能になりました!
スゴすぎる……!!!
許可を頂いたのでこちらに掲載させていただきますm(_ _)m
①DA73〜DAAB以外の場所(C800〜推奨とのこと)に下記のコードを打ち込む。
②打ち込んだコードの先頭(C800から打ち込んだのならC800)にカーソルを合わせてSELECT+Aを実行するとサウンドテストが起動する。
C800~ | 3E | 3F | D7 | 01 | EE | 00 | 11 | 73 | DA | D5 | 21 | C3 | 72 | CD | F2 | 2F |
C810~ | 3E | D7 | EA | 77 | DA | 3E | 2F | EA | 78 | DA | EA | 48 | DB | 3E | 24 | EA |
C820~ | 7D | DA | EA | CB | DA | EA | D7 | DA | EA | FC | DA | 3E | 26 | EA | 91 | DA |
C830~ | EA | E6 | DA | EA | F6 | DA | 3E | DB | EA | 92 | DA | EA | 99 | DA | EA | E7 |
C840~ | DA | EA | F7 | DA | EA | 15 | DB | EA | 25 | DB | 3D | EA | A4 | DA | 3E | 55 |
C850~ | EA | 98 | DA | EA | 14 | DB | EA | 24 | DB | 3E | C2 | EA | 9B | DA | 3E | AA |
C860~ | EA | A3 | DA | 3E | B0 | EA | 05 | DB | 3E | 0D | EA | 2F | DB | 3E | F2 | EA |
C870~ | 47 | DB | 3E | 64 | EA | 5F | DB | E1 | E9 | |||||||
だいたい240byte→120byteの削減。すごすぎぃ。。。
プチ追記:
ちなみに自分の一番好きなSEは「こうかおん151」です。是非サウンドテストで聞いてみてね