N64のメモリー領域の割り当ては下記一覧のようになっており
0x00000000 to 0x03EFFFFF RDRAM Memory 0x03F00000 to 0x03FFFFFF RDRAM Registers 0x04000000 to 0x040FFFFF SP Registers 0x04100000 to 0x041FFFFF DP Command Registers 0x04200000 to 0x042FFFFF DP Span Registers 0x04300000 to 0x043FFFFF MIPS Interface (MI) Registers 0x04400000 to 0x044FFFFF Video Interface (VI) Registers 0x04500000 to 0x045FFFFF Audio Interface (AI) Registers 0x04600000 to 0x046FFFFF Peripheral Interface (PI) Registers 0x04700000 to 0x047FFFFF RDRAM Interface (RI) Registers 0x04800000 to 0x048FFFFF Serial Interface (SI) Registers 0x04900000 to 0x04FFFFFF Unused 0x05000000 to 0x05FFFFFF Cartridge Domain 2 Address 1 0x06000000 to 0x07FFFFFF Cartridge Domain 1 Address 1 0x08000000 to 0x0FFFFFFF Cartridge Domain 2 Address 2 0x10000000 to 0x1FBFFFFF Cartridge Domain 1 Address 2 0x1FC00000 to 0x1FC007BF PIF Boot ROM 0x1FC007C0 to 0x1FC007FF PIF RAM 0x1FC00800 to 0x1FCFFFFF Reserved 0x1FD00000 to 0x7FFFFFFF Cartridge Domain 1 Address 3 0x80000000 to 0xFFFFFFFF External SysAD Device
その中の、0x1FC00000〜0x1FC007BFまでの1984バイトの領域をPIF Boot ROMやPIF ROMなどと呼んでいる。
PIF ROMは、PIFがCPUでNMIを解放した後、データを送信し、0xBFC00000からコードの実行を開始します(32ビットモードではコールドリセット、ソフトリセット、およびNMI例外がこのアドレスにベクトル化されます)。基本的に、PIF ROMはn64を起動し、ROMに有効なブートコード(CIC)とチェックサムがあることを検証します(ROMの最初の0x1000バイト)。 80000300で、ブートストラップは起動時にPIF(Peripheral Interface)およびCICから返されたいくつかの値を80000300にコピーします。
IMEMおよびDMEMがクリアされる直前にPIF BootROMの一部はRSP IMEMで実行され、ゲームエントリポイントにジャンプし、80000300〜80000343までの状態フラグを生成します。
0x80000400(物理アドレス0x400) が、標準の起動場所です。すべてのR4xxxシリーズプロセッサは、例外ハンドラに最初の0x200のRAMを使用します。
物理メモリの最初の0x400には、割り込みベクターテーブル(および最初の0x180はプロセッサー例外ベクター)と構成パラメーターが含まれています。
「割り込みベクターテーブル」は、割り込みハンドラのリストを割り込み要求のリストに関連付けるデータ構造です。
簡単に言えば、割り込みと例外ハンドラの両方がプログラムの流れを変更します。
割り込みは外部イベントを処理します。カートリッジの問題(周辺装置割込み)、Pre-nmi(リセットタイプ)など。例外は、命令フォールトを処理します。ゼロ除算など
Nintendo 64の割り込みと例外について注意すべきことの1つは、R4300iアーキテクチャはそれらのハンドラーが本質的に1つであり、2つは一意のマスクを持っているだけなので、それらを区別しないことです。
ただし、この状況以外のアプリケーションでは、個々のハンドラーがあります。
それに加えて、CICチップはブートロケーション/エントリポイントを再配置することができます。
Nintendo 64 ROMで0x8(word長)に移動して、アドレスをコピーし、それをブレークポイント(改行)することで、コードセグメントの開始位置を見つけることができます。
そこにある単語は、実際のゲームコードの開始点へのポインタです。
それ以前はすべてブートストラップ関連であり、ほとんどの場合、ゲーム間で同じです。
64DDを使用するゲームでは、参照用に元のディスクのディスクヘッダーのコピーを800001A0に保管します。
N64 Memory#Boot_Strap - en64 wiki
SI Registers Detailed#PIF_Usage - en64 wiki
n64dev/pif.S at master · mikeryan/n64dev · GitHub
(WIP) UltraPIF - Multi Region N64 PIF Replacement - Eure Projekte - Circuit-Board