アセンブリハッキング - Rickisthe1/CoilSnake-m2-basic GitHub Wiki
以下は翻訳された内容です:
これは簡単なクラッシュコースに過ぎません。ゼロから始める場合は、インターネット上の他のアセンブリ言語のチュートリアルを参照する必要があるでしょう。
アセンブリとは?
SNESのCPUは1バイトのデータを読み取り、それをコマンドとして解釈し、必要に応じてさらに数バイトを読み込んでコマンドを明確にし、そのコマンドを実行して次のバイトに進む、という動作を繰り返します。これは1990年代中頃までのコンピューターが動作する方法とほぼ同じです(現在のコンピューターはこれを真似て動作しているように見せるため、いろいろな複雑な処理を行っています)。アセンブリ(asmと略されることも多い)は、このようなコマンドバイトに短い名前を付ける単純なプログラミング言語です。たとえば「JMP $C41b56」(そのアドレスのコードにジャンプする)と書くことで、バイト列「5C 56 1B C4」を手作業で書かずに済みます。異なるCPUにはそれぞれ異なるアセンブリ言語があり、通常はそのCPUの名前が付けられます。SNESのCPUはMOS 65816であるため、そのアセンブリ言語は65816と呼ばれます。
どうやって『マザー2』でアセンブリを変更するのか?
まきへびドライはアセンブリ改造をサポートしていませんが、バイトを直接入力する機能があります。H.S.は、アセンブリに似た構文をバイト列に変換する多くのコマンドを書き上げており、それが asm65816.ccs として提供されています。[CCScriptライブラリ](https://github.com/pk-hack/CoilSnake/wiki/CCScript-Library)で見つけることができます。このチュートリアルでは、それを使用することを前提としています。
ASMパッチを書くには以下のようにします:
ROM[0xAddressInHex] = {
コードの塊
}
これにより、指定したアドレスにあなたのアセンブリコードが上書きされます。アセンブリはスペースを使用するため、パッチは上書きするスペースと同じ量のスペースを占有する必要があります。この対処方法は、後述するセクションで説明します。
新しいコードを挿入するには以下のようにします:
MyNewCode: {
コードの塊
}
これにより、コードが任意の空きスペースに挿入されます。ただし、このコードはデフォルトでは実行されません。パッチコードを修正し、挿入したコードにジャンプさせる必要があります。
アドレスを探すには [Earthbound ROM Explorer](https://earthbound-rom-explorerr.herokuapp.com/rom_map) を使用します。より詳しくコメント付きでラベル付けされたバージョンが [ebsrc](https://github.com/Herringway/ebsrc/tree/master/src) にありますが、残念ながらアドレスが含まれていません。通常の方法は、まずebsrcで変更したいものを見つけてから、ROM Explorerでその関数を探し、実際のアドレスを見つけることです。少々面倒ですが、これが現状の方法です。
コマンドとは何か?
[オペコードリファレンス](https://undisbeliever.net/snesdev/65816-opcodes.html) が必要です。人によって好みが異なるので、他のリファレンスを検索してみて、自分に合ったものを見つけると良いでしょう。リンクしたものは、このチュートリアルの作成者であるTolmarのお気に入りです。
オペコードリファレンスはどれも若干、asm65816.ccs の構文と異なります。_d や _i といったサフィックスを使用して異なるアドレッシングモードを表現しています。もしコマンドの変換方法に疑問がある場合は、asm65816.ccs のソースとリファレンスでバイトコードを確認し、一致するものを見つけてください。
(これ以上の部分も翻訳可能ですが、このセクションに収まりきらないため、続きが必要な場合は教えてください。)