簡易メモリエディタは便利なツールではありますが、「過去の入力を確認できないので入力ミスを完全に根絶するのが困難」、「毎回16進数を10進数に変換して入力しないとならない」等の欠点もあり使い勝手はあまり良くないです。
これらの欠点を解消するべく開発したのが今回紹介するバイナリエディタになります。
概要
前回の記事で導入した簡易メモリエディタを駆使してより複雑なプログラムの改変やメモリの改ざんを行うことでバイナリエディタを実装します。
入力ミス以外で失敗する余地はありませんが、なにぶん書き換え量が多いので最後までミスしないというのは結構難しいと思います。複数のパートに分割してリカバリー用のセーブデータを作りつつ進める手順を組んでいますが、慣れないうちは休憩を挟みながらやった方がいいかもしれません。
導入手順
前回の記事の手順により、簡易メモリエディタの導入が終わったところからスタートします。
手順1:ゴールドの編集ボックスを×ボタンで閉じた時の書き換えを無効化する
魔法耐性(下から3番目)は3999で固定とし、EXP(下から2番目)とゴールド(1番下)に以下の値を入力していきます。
※ここは必ず上から順番通りに入力しないとフリーズの危険があるので注意
| EXP | ゴールド |
| 206 | 38529 |
| 204 | 156 |
| 232 | 32 |
| 234 | 37955 |
| 252 | 55 |
| 254 | 4193 |
| 246 | 0 |
これで×ボタンでゴールドの編集ボックスを閉じた時はメモリの上書きは行われなくなるので、アドレスを間違えた状態でゴールドを選択してしまった場合でも〇ボタンで確定しなければキャンセルできるようになります。
手順2:リカバリー用セーブデータを作成可能にする
まず以下の入力を行います。
| 魔法耐性 | EXP | ゴールド |
| 4817 | 232 | 55732 |
| 4817 | 234 | 32882 |
入力し終わったら1つ前の画面(モンスター指定画面)に戻ってからもう一度No24のモンスターデータ編集画面に入り直します。
簡易メモリエディタが正しく機能していればパラメーター名が正常なものに戻るはずです。
戻らなかったらどこかで間違えているので残念ながら簡易メモリエディタの導入からやり直しです。
次に以下の入力を行います。
| 魔法耐性 | EXP | ゴールド |
| 1654 | 192 | 47843 |
| 1654 | 194 | 2052 |
ここからしばらく魔法耐性は4808で固定とし、EXPとゴールドに以下の値を入力していきます。
| EXP | ゴールド |
| 220 | 32476 |
| 222 | 32659 |
| EXP | ゴールド |
| 512 | 43746 |
| 514 | 32876 |
| EXP | ゴールド |
| 4736 | 60300 |
| 4738 | 18 |
| 4740 | 60352 |
| 4742 | 18 |
| 4744 | 48 |
| EXP | ゴールド |
| 4748 | 30464 |
| 4750 | 6 |
| 4752 | 60720 |
| 4754 | 18 |
| 4756 | 192 |
| EXP | ゴールド |
| 4768 | 0 |
| EXP | ゴールド |
| 9100 | 19 |
| 9102 | 15377 |
| 9104 | 55936 |
| 9106 | 36388 |
| 9108 | 55940 |
| 9110 | 36389 |
| 9112 | 2553 |
| 9114 | 3074 |
| 9116 | 55944 |
| 9118 | 38438 |
| 9120 | 65531 |
| 9122 | 5188 |
| 9124 | 12 |
| 9126 | 9777 |
| 9128 | 30 |
| 9130 | 15361 |
| 9132 | 20602 |
| 9134 | 40992 |
| 9136 | 15 |
| 9138 | 15361 |
| 9140 | 39505 |
| 9142 | 2049 |
| 9144 | 31120 |
| 9146 | 42016 |
ここまで入力したら一度□ボタンを押す (これ以降、指定されたタイミング以外で□ボタンを押さないこと)
□ボタンを押したら引き続き入力を行います。
| EXP | ゴールド |
| 4738 | 20 |
| EXP | ゴールド |
| 4742 | 21 |
| EXP | ゴールド |
| 9140 | 40404 |
| EXP | ゴールド |
| 9164 | 2557 |
| EXP | ゴールド |
| 9548 | 1 |
| 9550 | 9219 |
| EXP | ゴールド |
| 9592 | 47843 |
| 9594 | 3076 |
ここで魔法耐性の固定は終了とし、さらに以下の入力を行います。
| 魔法耐性 | EXP | ゴールド |
| 1654 | 192 | 47856 |
ここまで入力したら一度□ボタンを押す
□ボタンを押したら引き続き入力を行います。
ここからは魔法耐性は4826で固定とし、EXPとゴールドに以下の値を入力していきます。
| EXP | ゴールド |
| 128 | 40248 |
| 130 | 15 |
| 132 | 57000 |
| 134 | 18 |
| 136 | 920 |
ここまで入力したら一度 L2 ボタンを押す (これ以降、指定されたタイミング以外でL2ボタンを押さないこと)
L2ボタンを押したらメインメニューまで戻り、スタートボタンを押しながら[メモリーカード]を選択して[圧縮情報]を表示し
システム: 15872( 2) >> 6868 ( 1)
となっていることを確認したらセーブします。
なっていなければどこかで間違っているので簡易メモリエディタの導入からやり直しです。
これでここまでの作業内容を復旧可能なセーブデータが作成された状態となります。
●セーブデータからの復旧方法
- タイトル画面(PUSHSTART)まで戻る。
- システムデータをロードする。
- No24のモンスターデータ編集画面に入り、ゴールドの値を310000に変更する。
- ×ボタンを3回押して「データを更新して終わる」を選択する。
- モンスター指定画面まで進み、□ボタンを押す。
- 再度No24のモンスターデータ編集画面に入る。
これで復旧完了となります。
この後も何度かリカバリー用のセーブデータを作成する場面がありますが、全て同じ方法で復旧可能です。
手順3:数値表示を16進数表示に変更
復旧用のセーブデータがちゃんと作成できているかを確認するため、一度タイトル画面(PUSHSTART)まで戻ってから再び入り直し、システムデータをロードします。
上述の復旧手順を行い、No24のモンスターデータ編集画面に入ってから以下の入力を行います。
| 魔法耐性 | EXP | ゴールド |
| 7760 | 106 | 99 |
入力したら1つ前の画面に戻ってからもう一度モンスターデータ編集画面に入り直します。
正しく復旧できていればHPの値が99になっているはずです。
問題なければ次の作業に進みます。
ここから魔法耐性は4826で固定とし、EXPとゴールドに以下の値を入力していきます。
| EXP | ゴールド |
| 152 | 33104 |
| 154 | 2 |
| 156 | 56100 |
| 158 | 18 |
| 160 | 856 |
| EXP | ゴールド |
| 164 | 35288 |
| 166 | 6 |
| 168 | 57920 |
| 170 | 18 |
| 172 | 2356 |
| EXP | ゴールド |
| 184 | 0 |
ここまで入力したら一度L2ボタンを押す
L2ボタンを押したら引き続き入力を行います。
| EXP | ゴールド |
| 292 | 2 |
| 294 | 0 |
| EXP | ゴールド |
| 314 | 4096 |
| EXP | ゴールド |
| 960 | 10 |
| EXP | ゴールド |
| 984 | 15 |
| 986 | 12421 |
| EXP | ゴールド |
| 1016 | 8450 |
| 1018 | 4 |
| 1020 | 10 |
| 1022 | 11433 |
| EXP | ゴールド |
| 1028 | 3 |
| 1030 | 4384 |
| 1032 | 55 |
| 1034 | 9378 |
| EXP | ゴールド |
| 1144 | 65535 |
| EXP | ゴールド |
| 2112 | 8448 |
| EXP | ゴールド |
| 2120 | 8227 |
| EXP | ゴールド |
| 2612 | 15 |
| EXP | ゴールド |
| 2636 | 8448 |
| EXP | ゴールド |
| 2644 | 8227 |
| EXP | ゴールド |
| 4314 | 4096 |
| 4316 | 8320 |
| 4318 | 4 |
| EXP | ゴールド |
| 4356 | 4100 |
| 4358 | 131 |
| EXP | ゴールド |
| 4460 | 2 |
| 4462 | 0 |
| 4464 | 15 |
ここまで入力したら一度□ボタンを押す
□ボタンを押したら1つ前の画面に戻り、もう一度モンスターデータ編集画面に入り直すと16進数表示に切り替わります。
16進数化に成功したらメインメニューまで戻り、スタートボタンを押しながら[メモリーカード]を選択して[圧縮情報]を表示し
システム: 003E00(02) >> 001C94(01)
となっていることを確認したらセーブします。
なっていなければタイトル画面(PUSHSTART)まで戻って1つ前のセーブデータからやり直します。
手順4:バイナリエディタの作成1/3 (アドレス移動機能(表示のみ)の追加)
モンスター指定画面まで進んで□ボタンを押し、No018(16進数表示なので実際はNo24)のモンスターデータ編集画面に入ります。
ここから魔法耐性は12DAで固定とし、EXPとゴールドに以下の値を入力していきます。
| EXP | ゴールド |
| 00B0 | 9410 |
| 00B2 | 000F |
| 00B4 | EE00 |
| 00B6 | 0012 |
| 00B8 | 0784 |
| EXP | ゴールド |
| 00BC | A110 |
| 00BE | 000F |
| 00C0 | F600 |
| 00C2 | 0012 |
| 00C4 | 0750 |
| EXP | ゴールド |
| 00D0 | 0000 |
ここまで入力したら一度L2ボタンを押す
L2ボタンを押したら引き続き入力を行います。
| EXP | ゴールド |
| 1480 | 0062 |
| 1482 | 1000 |
| EXP | ゴールド |
| 160C | 0020 |
| 160E | 3C05 |
| 1610 | FFF0 |
| 1612 | 24A5 |
| EXP | ゴールド |
| 162C | 0006 |
| EXP | ゴールド |
| 1644 | 0013 |
| 1646 | 3C01 |
| 1648 | FE00 |
| 164A | 8C24 |
| 164C | 0008 |
| EXP | ゴールド |
| 1654 | 0024 |
| EXP | ゴールド |
| 1948 | 0077 |
| EXP | ゴールド |
| 1B28 | FFFF |
| 1B2A | 2401 |
| 1B2C | 0167 |
| 1B2E | 1461 |
| EXP | ゴールド |
| 1B60 | 0013 |
| 1B62 | 3C01 |
| 1B64 | FE00 |
| 1B66 | 8C23 |
| EXP | ゴールド |
| 1B74 | FFFE |
| 1B76 | 2404 |
| 1B78 | 9024 |
| 1B7A | 0044 |
| 1B7C | 0162 |
| 1B7E | 1000 |
| 1B80 | FE00 |
| 1B82 | AC32 |
| EXP | ゴールド |
| 1E12 | 2411 |
| EXP | ゴールド |
| 1E18 | 0013 |
| 1E1A | 3C01 |
| EXP | ゴールド |
| 1E28 | FE00 |
| 1E2A | 8C32 |
| EXP | ゴールド |
| 1E38 | 0006 |
| 1E3A | 2406 |
| EXP | ゴールド |
| 1E42 | 0232 |
| 1E44 | A02D |
| EXP | ゴールド |
| 1E64 | 000E |
| 1E66 | 2401 |
| 1E68 | FFF0 |
| 1E6A | 1621 |
| 1E6C | 0002 |
| 1E6E | 2631 |
| 1E70 | 00BB |
| 1E72 | 1000 |
| EXP | ゴールド |
| 2400 | 0000 |
| 2402 | 0001 |
ここまで入力したら一度□ボタンを押す
「戦闘と宝箱の設定」を選択して000000を入力し、左側のパラメーター名が000000~00000Eに変化することを確認します。確認出来たらメインメニューまで戻り、スタートボタンを押しながら[メモリーカード]を選択して[圧縮情報]を表示し
システム: 003E00(02) >> 001BE4(01)
となっていることを確認したらセーブします。
なっていなければタイトル画面(PUSHSTART)まで戻って1つ前のセーブデータからやり直します。
この時点ではまだパラメーター名の表示を書き換えただけなので右側の数値はアドレスの中身とは無関係です。簡易メモリエディタはまだ有効なので引き続き使用していきます。
手順5:バイナリエディタの作成2/3 (書き込み機能を追加)
モンスター指定画面まで進んで□ボタンを押し、No018(No24)のモンスターデータ編集画面に入ります。
魔法耐性(下から3番目)は12EEで固定とし、EXP(下から2番目)とゴールド(1番下)に以下の値を入力していきます。
| EXP | ゴールド |
| 0000 | FFFE |
| 0002 | 2463 |
| 0004 | 004A |
| 0006 | 1000 |
| 0008 | 8840 |
| 000A | 0003 |
| EXP | ゴールド |
| 0138 | FFFF |
| 013A | 3405 |
| EXP | ゴールド |
| 0158 | 002C |
| 015A | 0620 |
| EXP | ゴールド |
| 0160 | 0013 |
| 0162 | 3C01 |
| 0164 | FE00 |
| 0166 | 8C22 |
| 0168 | 1880 |
| 016A | 0011 |
| EXP | ゴールド |
| 016E | 0051 |
| 0170 | 0000 |
| EXP | ゴールド |
| 017C | 1021 |
| 017E | 0043 |
| EXP | ゴールド |
| 0560 | 2040 |
| 0562 | 0003 |
| EXP | ゴールド |
| 058C | 0013 |
| 058E | 3C01 |
| 0590 | FE00 |
| 0592 | 8C21 |
| EXP | ゴールド |
| 0598 | 8021 |
| 059A | 0024 |
| 059C | 0000 |
| 059E | 9603 |
| EXP | ゴールド |
| 05E0 | 1840 |
| 05E2 | 0004 |
| 05E4 | F021 |
| 05E6 | 03C3 |
| EXP | ゴールド |
| 0634 | 0000 |
| 0636 | A604 |
ここまで入力したら一度□ボタンを押す
□ボタンを押したら「戦闘と宝箱の設定」でアドレス12FE00にジャンプし、12FE00の中身の値(右側の数値)をFE00からF000に書き換えてみます。1つ前の画面に戻ってからもう一度モンスターデータ編集画面に入り直し、一番上のアドレスが12F000に変化していれば成功です。
そのままメインメニューまで戻り、スタートボタンを押しながら[メモリーカード]を選択して[圧縮情報]を表示し
システム: 003E00(02) >> 001C38(01)
となっていることを確認したらセーブします。
なっていなければタイトル画面(PUSHSTART)まで戻って前回のセーブデータからやり直します。
手順6:バイナリエディタの作成3/3 (読み取り機能を追加)
モンスター指定画面まで進んで□ボタンを押し、No018(No24)のモンスターデータ編集画面に入ります。
この時点で簡易メモリエディタは消滅しているので、ここからはバイナリエディタで書き換えを行います。
まだ読み取り機能が有効になっていないので、アドレスの右側に表示されている値と実際の中身の値が一致していないことに注意が必要です。(編集ボックスを開いた時に出てくる値の方が正しい値)
| アドレス | 値 |
| 12FC98 | 0006 |
| 12FC9A | 2411 |
| アドレス | 値 |
| 12FCC0 | 0000 |
| 12FCC2 | 9644 |
| アドレス | 値 |
| 12FD30 | 0002 |
| 12FD32 | 2652 |
| 12FD34 | 0000 |
| 12FD36 | 9644 |
| アドレス | 値 |
| 12FD40 | FFFF |
| 12FD42 | 2631 |
| 12FD44 | FFE1 |
| 12FD46 | 0621 |
| アドレス | 値 |
| 12FD4C | FE1D |
| 12FD4E | 1000 |
ここまで入力したら一度□ボタンを押す
□ボタンを押したら1つ前の画面に戻ってからもう一度モンスターデータ編集画面に入り直し、「戦闘と宝箱の設定」でアドレス130000にジャンプして右側の値が全て0000になることを確認します。
確認できたらメインメニューまで戻り、スタートボタンを押しながら[メモリーカード]を選択して[圧縮情報]を表示し
システム: 003E00(02) >> 001C64(01)
となっていることを確認してセーブします。
なっていなければタイトル画面(PUSHSTART)まで戻って前回のセーブデータからやり直します。
これで最低限の機能(メモリの読み書きおよびアドレス移動機能)を持つバイナリエディタが完成したので、ここからは「バイナリエディタを使ってバイナリエディタに機能を追加する」という作業を行っていきます。
手順7:チェックサム表示機能の追加
手始めに、入力ミス防止用のチェックサム表示機能を追加します。
モンスター指定画面まで進んで□ボタンを押し、No018(No24)のモンスターデータ編集画面に入ります。
バイナリエディタが起動したら以下の入力を行います。
| アドレス | 値 |
| 12ED00 | 0013 |
| 12ED02 | 3C01 |
| 12ED04 | FE00 |
| 12ED06 | 8C22 |
| 12ED08 | 0007 |
| 12ED0A | 2404 |
| 12ED0C | 2821 |
| 12ED0E | 0040 |
| アドレス | 値 |
| 12ED10 | 0000 |
| 12ED12 | 9446 |
| 12ED14 | 0002 |
| 12ED16 | 2442 |
| 12ED18 | 3004 |
| 12ED1A | 0086 |
| 12ED1C | FFFF |
| 12ED1E | 2484 |
| アドレス | 値 |
| 12ED20 | FFFB |
| 12ED22 | 0481 |
| 12ED24 | 2826 |
| 12ED26 | 00A6 |
| 12ED28 | 0008 |
| 12ED2A | 03E0 |
| 12ED2C | 0094 |
| 12ED2E | AE85 |
| アドレス | 値 |
| 12F444 | FC94 |
| 12F446 | 1000 |
| アドレス | 値 |
| 12F608 | BB40 |
| 12F60A | 0C04 |
ここまで入力したら一度□ボタンを押す
これで一番上にある「モンスターエディット 残り」の右側の6桁の数値部分にチェックサムが表示されるようになります。 現在表示中のアドレスと中身の値が順番含めて全て同一ならチェックサムも同じ値となります。
適当なアドレスにジャンプしてチェックサムが変化することを確認したらセーブします。
手順8:左右ボタンによるアドレス増減機能の追加
移動をやりやすくするため、左右ボタンでアドレスの値を10hずつ増減する機能を実装します。
モンスター指定画面まで進んで□ボタンを押し、No018(No24)のモンスターデータ編集画面に入ります。
バイナリエディタが起動したら以下の入力を行います。(括弧つきの値は元のまま変更しなくてよいことを意味します)
チェックサムは必要な入力が全て終わった後の値を記載しています。
| アドレス | 値 | チェックサム |
| 12DAC0 | (F600) | |
| 12DAC2 | (0012) | |
| 12DAC4 | (0750) | |
| 12DAC6 | (1011) | |
| 12DAC8 | 7A54 | |
| 12DACA | 0006 | |
| 12DACC | EDF0 | |
| 12DACE | 0012 | 6A3C1A |
| アドレス | 値 | チェックサム |
| 12DAD0 | 0004 | |
| 12DAD2 | (2315) | |
| 12DAD4 | (2011) | |
| 12DAD6 | (0000) | |
| 12DAD8 | (A69B) | |
| 12DADA | (A69B) | |
| 12DADC | 0000 | |
| 12DADE | (2020) | 199124 |
| アドレス | 値 | チェックサム |
| 12EC00 | 000C | |
| 12EC02 | 3C01 | |
| 12EC04 | F230 | |
| 12EC06 | 9428 | |
| 12EC08 | 0013 | |
| 12EC0A | 3C01 | |
| 12EC0C | FE00 | |
| 12EC0E | 8C29 | 0B6E75 |
| アドレス | 値 | チェックサム |
| 12EC10 | 4800 | |
| 12EC12 | 2402 | |
| 12EC14 | 0014 | |
| 12EC16 | 1102 | |
| 12EC18 | 1800 | |
| 12EC1A | 2402 | |
| 12EC1C | 0012 | |
| 12EC1E | 1102 | 3EBF1E |
| アドレス | 値 | チェックサム |
| 12EC20 | 000C | |
| 12EC22 | 2402 | |
| 12EC24 | 000F | |
| 12EC26 | 1482 | |
| 12EC28 | 2000 | |
| 12EC2A | 2402 | |
| 12EC2C | 0004 | |
| 12EC2E | 1102 | 1B2262 |
| アドレス | 値 | チェックサム |
| 12EC30 | 0010 | |
| 12EC32 | 2403 | |
| 12EC34 | 8000 | |
| 12EC36 | 3402 | |
| 12EC38 | 000A | |
| 12EC3A | 1502 | |
| 12EC3C | FFF0 | |
| 12EC3E | 2403 | 092B6B |
| アドレス | 値 | チェックサム |
| 12EC40 | 4821 | |
| 12EC42 | 0123 | |
| 12EC44 | (0000) | |
| 12EC46 | 2923 | |
| 12EC48 | 0002 | |
| 12EC4A | 1060 | |
| 12EC4C | 0008 | |
| 12EC4E | 8CA2 | 34EB12 |
| アドレス | 値 | チェックサム |
| 12EC50 | (0000) | |
| 12EC52 | 2409 | |
| 12EC54 | 0002 | |
| 12EC56 | 2403 | |
| 12EC58 | 0081 | |
| 12EC5A | A043 | |
| 12EC5C | 0008 | |
| 12EC5E | 03E0 | 1B2894 |
| アドレス | 値 | チェックサム |
| 12EC60 | FE00 | |
| 12EC62 | AC29 | |
| 12EC64 | 9E9B | |
| 12EC66 | 0801 | |
| 12EC68 | 4382 | |
| 12EC6A | 0008 | |
| 12EC6C | 004E | |
| 12EC6E | 2508 | 578CF4 |
| アドレス | 値 | チェックサム |
| 12EDF0 | BB00 | |
| 12EDF2 | 0C04 | |
| 12EDF4 | (0000) | |
| 12EDF6 | (0000) | |
| 12EDF8 | (0000) | |
| 12EDFA | (0900) | |
| 12EDFC | (0000) | |
| 12EDFE | (0000) | 4C48F0 |
ここまで入力したら一度□ボタンを押す
これで左ボタンでアドレス-10h、右ボタンでアドレス+10hされるようになります。
手順9:任意コード実行機能の追加
特定のアドレス以降に記述されたコードを実行して、自作のプログラムを動作させることができる機能を追加します。
バイナリエディタで以下の入力を行います。
| アドレス | 値 | チェックサム |
| 12ED30 | (0060) | |
| 12ED32 | (8E22) | |
| 12ED34 | (800C) | |
| 12ED36 | (3C05) | |
| 12ED38 | (F230) | |
| 12ED3A | (24A5) | |
| 12ED3C | 0013 | |
| 12ED3E | 3C10 | 25AB42 |
| アドレス | 値 | チェックサム |
| 12ED40 | (0028) | |
| 12ED42 | (1200) | |
| 12ED44 | (0000) | |
| 12ED46 | (0000) | |
| 12ED48 | (0000) | |
| 12ED4A | (94A2) | |
| 12ED4C | FE10 | |
| 12ED4E | 9603 | 1541EB |
| アドレス | 値 | チェックサム |
| 12ED50 | (0000) | |
| 12ED52 | (0000) | |
| 12ED54 | (1024) | |
| 12ED56 | (0043) | |
| 12ED58 | (001D) | |
| 12ED5A | (1040) | |
| 12ED5C | FE12 | |
| 12ED5E | 9603 | 11C62F |
| アドレス | 値 | チェックサム |
| 12ED60 | (0008) | |
| 12ED62 | (94A2) | |
| 12ED64 | (0000) | |
| 12ED66 | (0000) | |
| 12ED68 | (1024) | |
| 12ED6A | (0043) | |
| 12ED6C | 0018 | |
| 12ED6E | (1040) | 3751BC |
| アドレス | 値 | チェックサム |
| 12ED70 | FE20 | |
| 12ED72 | 8E0F | |
| 12ED74 | (2021) | |
| 12ED76 | (0220) | |
| 12ED78 | F809 | |
| 12ED7A | 01E0 | |
| 12ED7C | (00FF) | |
| 12ED7E | (30C6) | 4DAE60 |
| アドレス | 値 | チェックサム |
| 12EDE0 | 0004 | |
| 12EDE2 | (2610) | |
| 12EDE4 | (0000) | |
| 12EDE6 | (9603) | |
| 12EDE8 | (1021) | |
| 12EDEA | (0080) | |
| 12EDEC | (0086) | |
| 12EDEE | (A623) | 122FF7 |
| アドレス | 値 | チェックサム |
| 12FE10 | 0100 | |
| 12FE12 | 0010 | |
| 12FE14 | 0100 | |
| 12FE16 | 0800 | |
| 12FE18 | (0000) | |
| 12FE1A | 0000 | |
| 12FE1C | 0000 | |
| 12FE1E | 0000 | 12DA10 |
| アドレス | 値 | チェックサム |
| 12FE20 | 0000 | |
| 12FE22 | 0014 | |
| 12FE24 | FF20 | |
| 12FE26 | 0012 | |
| 12FE28 | 0000 | |
| 12FE2A | 0000 | |
| 12FE2C | 0000 | |
| 12FE2E | 0000 | 0D1E00 |
ここまで入力したら一度□ボタンを押す
この後、SELECTボタンを押したまま△ボタンを押すとアドレス140000以降に入力したコードが実行されるようになります。
なお、コードの最後は jr ra で終了しないとバイナリエディタに処理が戻ってこないので注意が必要です。
(raレジスタの中身が破棄されるようなコードならスタックに退避する等の処理も必要になります)
手順10:メモリーカードの読み書き機能の追加
メモリーカードの任意のセクタを指定して読み書きを行う機能を追加します。
バイナリエディタで以下の入力を行います。
| アドレス | 値 | チェックサム |
| 12EC70 | FFFF | |
| 12EC72 | A028 | |
| 12EC74 | FE98 | |
| 12EC76 | 0C01 | |
| 12EC78 | 0010 | |
| 12EC7A | 2404 | |
| 12EC7C | (0000) | |
| 12EC7E | 2411 | 5ABE61 |
| アドレス | 値 | チェックサム |
| 12EC80 | 0001 | |
| 12EC82 | 2404 | |
| 12EC84 | 002C | |
| 12EC86 | 0C00 | |
| 12EC88 | 005D | |
| 12EC8A | 2409 | |
| 12EC8C | 0013 | |
| 12EC8E | 3C01 | 1B866B |
| アドレス | 値 | チェックサム |
| 12EC90 | FFF2 | |
| 12EC92 | 9422 | |
| 12EC94 | 0010 | |
| 12EC96 | 2404 | |
| 12EC98 | 0008 | |
| 12EC9A | 1222 | |
| 12EC9C | FFF0 | |
| 12EC9E | 9423 | 4B7C5B |
| アドレス | 値 | チェックサム |
| 12ECA0 | FFF4 | |
| 12ECA2 | 8C22 | |
| 12ECA4 | 31C0 | |
| 12ECA6 | 0011 | |
| 12ECA8 | 2821 | |
| 12ECAA | 0071 | |
| 12ECAC | 3021 | |
| 12ECAE | 00C2 | 49077C |
| アドレス | 値 | チェックサム |
| 12ECB0 | 002C | |
| 12ECB2 | 0C00 | |
| 12ECB4 | FFFF | |
| 12ECB6 | 9029 | |
| 12ECB8 | FFF1 | |
| 12ECBA | 1000 | |
| 12ECBC | 0001 | |
| 12ECBE | 2631 | 009E7B |
| アドレス | 値 | チェックサム |
| 12ECC0 | 9E97 | |
| 12ECC2 | 0801 | |
| 12ECC4 | (0000) | |
| 12ECC6 | (0000) | |
| 12ECC8 | (0000) | |
| 12ECCA | (0000) | |
| 12ECCC | (0000) | |
| 12ECCE | (0000) | 5FA700 |
ここまでの入力が完了すると
-
STARTボタンを押しながら下ボタンを押すことで、[セクタ番号, サイズ(セクタ数), dstアドレス]の指定に従ってスロット2のメモリーカードからデータをメモリ上に読み込む。
-
STARTボタンを押しながら上ボタンを押すことで、[セクタ番号, サイズ(セクタ数), srcアドレス]の指定に従ってスロット2のメモリーカードにメモリ上のデータを書き込む。
という状態になります。セクタ番号、セクタ数、dst/srcは以下のアドレスに入力することで指定が可能です。
| アドレス | 意味 |
| 12FFF0 | 読み込み/書き込みを開始するセクタ番号 |
| 12FFF2 | 読み込み/書き込みを行うセクタ数(1セクタ=0x80バイト) |
| 12FFF4 | dst/srcアドレス(下位2バイト) |
| 12FFF6 | dst/srcアドレス(上位2バイト) |
※確認等は無しでいきなり読み書きするので操作には十分注意すること。
(特に書き込みの方は既存のデータを破壊しうるので)
手順11:ディスク入れ替え機能の追加
電源を入れたままディスクを交換して他のソフトを起動する機能を追加します。
バイナリエディタで以下の入力を行います。
| アドレス | 値 | チェックサム |
| 12DAD0 | (0004) | |
| 12DAD2 | (2315) | |
| 12DAD4 | 7094 | |
| 12DAD6 | 0004 | |
| 12DAD8 | FEF0 | |
| 12DADA | 0012 | |
| 12DADC | 0004 | |
| 12DADE | (2020) | 13D8B0 |
| アドレス | 値 | チェックサム |
| 12DAE0 | (2020) | |
| 12DAE2 | (2020) | |
| 12DAE4 | (2020) | |
| 12DAE6 | (2020) | |
| 12DAE8 | 0000 | |
| 12DAEA | (0405) | |
| 12DAEC | (090C) | |
| 12DAEE | (0109) | 0CC7E5 |
| アドレス | 値 | チェックサム |
| 12FEF0 | 33D2 | |
| 12FEF2 | 0800 | |
| 12FEF4 | (0000) | |
| 12FEF6 | (0000) | |
| 12FEF8 | (0000) | |
| 12FEFA | (0000) | |
| 12FEFC | (0000) | |
| 12FEFE | (0000) | 0917F0 |
| アドレス | 値 | チェックサム |
| 12FF00 | 6463 | |
| 12FF02 | 6F72 | |
| 12FF04 | 3A6D | |
| 12FF06 | 5953 | |
| 12FF08 | 5453 | |
| 12FF0A | 4D45 | |
| 12FF0C | 432E | |
| 12FF0E | 464E | 3A9D0E |
| アドレス | 値 | チェックサム |
| 12FF10 | 313B | |
| 12FF12 | (0000) | |
| 12FF14 | (0000) | |
| 12FF16 | (0000) | |
| 12FF18 | (0000) | |
| 12FF1A | (0000) | |
| 12FF1C | (0000) | |
| 12FF1E | (0000) | 0A6290 |
| アドレス | 値 | チェックサム |
| 12FF20 | CF48 | |
| 12FF22 | 3404 | |
| 12FF24 | 0013 | |
| 12FF26 | 3C05 | |
| 12FF28 | FF48 | |
| 12FF2A | 24A5 | |
| 12FF2C | 09FD | |
| 12FF2E | 0C02 | 7CEF3C |
| アドレス | 値 | チェックサム |
| 12FF30 | 00B8 | |
| 12FF32 | 2406 | |
| 12FF34 | 0002 | |
| 12FF36 | 2404 | |
| 12FF38 | 1789 | |
| 12FF3A | 0C02 | |
| 12FF3C | 0001 | |
| 12FF3E | 2405 | 194AF7 |
| アドレス | 値 | チェックサム |
| 12FF40 | 1BF3 | |
| 12FF42 | 0C01 | |
| 12FF44 | 0000 | |
| 12FF46 | 0000 | |
| 12FF48 | 0013 | |
| 12FF4A | 3C04 | |
| 12FF4C | FF00 | |
| 12FF4E | 2484 | 1D2C8C |
| アドレス | 値 | チェックサム |
| 12FF50 | 08B3 | |
| 12FF52 | 0C02 | |
| 12FF54 | 0001 | |
| 12FF56 | 2405 | |
| 12FF58 | 2021 | |
| 12FF5A | 0002 | |
| 12FF5C | 001E | |
| 12FF5E | 3C05 | 16DB19 |
| アドレス | 値 | チェックサム |
| 12FF60 | 08BB | |
| 12FF62 | 0C02 | |
| 12FF64 | 0800 | |
| 12FF66 | 2406 | |
| 12FF68 | 001E | |
| 12FF6A | 3C01 | |
| 12FF6C | 0000 | |
| 12FF6E | 9022 | 1682D6 |
| アドレス | 値 | チェックサム |
| 12FF70 | 0020 | |
| 12FF72 | 2403 | |
| 12FF74 | 102A | |
| 12FF76 | 0043 | |
| 12FF78 | FFFC | |
| 12FF7A | 1040 | |
| 12FF7C | 0001 | |
| 12FF7E | 2421 | 1E7403 |
| アドレス | 値 | チェックサム |
| 12FF80 | FFFF | |
| 12FF82 | A020 | |
| 12FF84 | 001E | |
| 12FF86 | 3C04 | |
| 12FF88 | 0013 | |
| 12FF8A | 3C05 | |
| 12FF8C | FF00 | |
| 12FF8E | 24A5 | 47E1A9 |
| アドレス | 値 | チェックサム |
| 12FF90 | 0006 | |
| 12FF92 | A0A0 | |
| 12FF94 | 0028 | |
| 12FF96 | 0C00 | |
| 12FF98 | 0024 | |
| 12FF9A | 2409 | |
| 12FF9C | 2021 | |
| 12FF9E | 0002 | 3AC0D4 |
| アドレス | 値 | チェックサム |
| 12FFA0 | CE00 | |
| 12FFA2 | 3405 | |
| 12FFA4 | 0028 | |
| 12FFA6 | 0C00 | |
| 12FFA8 | 0042 | |
| 12FFAA | 2409 | |
| 12FFAC | 0001 | |
| 12FFAE | 3C01 | 7895D7 |
| アドレス | 値 | チェックサム |
| 12FFB0 | D000 | |
| 12FFB2 | 8C22 | |
| 12FFB4 | 0000 | |
| 12FFB6 | 0000 | |
| 12FFB8 | 0003 | |
| 12FFBA | 1040 | |
| 12FFBC | 0000 | |
| 12FFBE | 0000 | 59B628 |
| アドレス | 値 | チェックサム |
| 12FFC0 | 3400 | |
| 12FFC2 | 0C00 | |
| 12FFC4 | 0000 | |
| 12FFC6 | 0000 | |
| 12FFC8 | CE00 | |
| 12FFCA | 3404 | |
| 12FFCC | 8020 | |
| 12FFCE | 3C02 | 0C6392 |
| アドレス | 値 | チェックサム |
| 12FFD0 | FFF0 | |
| 12FFD2 | 2442 | |
| 12FFD4 | 0020 | |
| 12FFD6 | AC82 | |
| 12FFD8 | 0024 | |
| 12FFDA | AC80 | |
| 12FFDC | 0001 | |
| 12FFDE | 2405 | 6C4C57 |
| アドレス | 値 | チェックサム |
| 12FFE0 | 0000 | |
| 12FFE2 | 2406 | |
| 12FFE4 | 0028 | |
| 12FFE6 | 0C00 | |
| 12FFE8 | 0043 | |
| 12FFEA | 2409 | |
| 12FFEC | 0000 | |
| 12FFEE | 0000 | 1BA95C |
ここまで入力したら一度□ボタンを押す
ここまで進めるとディスク入れ替え機能が有効になるのでセーブしておきます。
これで上述の機能を全て内包したバイナリエディタを復元可能なセーブデータが作成された状態になります。
その後、モンスター指定画面まで進んで□ボタンを押し、No018(No24)のモンスターデータ編集画面に入って再びバイナリエディタを起動します。
ディスクを他のPS1ソフトのものに入れ替えてトレイを閉じ、SELECTボタンを押したままSTARTボタンを押すと入れ替えたソフトが起動します。(SYSTEM.CNFから実行ファイル名を自動で取得するようにしているのでファイル名を入力する必要はありません)
この際、メインの実行ファイルがメモリにロードされた後、ゲームが起動する直前にアドレス00D000以降に記述してあるコード(最終的に jr ra で終了している必要あり)が一度だけ実行されます。
(ただし00D000と00D002が両方0000の場合コードの実行は無効化され、入れ替えたゲームが起動するだけになります)
これにより、メインの実行ファイルにパッチを当てた状態でゲームを起動できるようになります。
例えば、前回の記事のようにINT版FF7でデバッグルームから開始したいなら
| アドレス | 値 | チェックサム |
| 00D000 | 0001 | |
| 00D002 | 3C01 | |
| 00D004 | 0041 | |
| 00D006 | 2402 | |
| 00D008 | 0008 | |
| 00D00A | 03E0 | |
| 00D00C | 1BD8 | |
| 00D00E | A422 | 0D0492 |
と入力するだけで済みます。
参考資料

コメント