6

ウィキペディアによると、N64 には 4 MB の RDRAM (拡張パックで 8 MB) しかなく、他の容量も同様に小さい (4 KB 程度の L1 キャッシュ)。しかし、私が Google で見つけた技術文書によると、そのメモリ アドレスは $0000:0000 から $FFFF:FFFF の範囲であり、4 GB です。Project64 などの既存の N64 エミュレーターは 4 GB の RAM を使用しないため、メモリ マップのエミュレートはどのように機能しますか? いろいろな資料などを調べてみましたが、どれも微妙に違うようです。この問題について誰かアドバイスはありますか?

具体的には、私が見つけたメモリマップは次のとおりです。

0x0000 0000 to 0x03EF FFFF RDRAM Memory
0x03F0 0000 to 0x03FF FFFF RDRAM Registers
0x0400 0000 to 0x040F FFFF SP Registers
0x0410 0000 to 0x041F FFFF DP Command Registers
0x0420 0000 to 0x042F FFFF DP Span Registers
0x0430 0000 to 0x043F FFFF MIPS Interface (MI) Registers
0x0440 0000 to 0x044F FFFF Video Interface (VI) Registers
0x0450 0000 to 0x045F FFFF Audio Interface (AI) Registers
0x0460 0000 to 0x046F FFFF Peripheral Interface (PI) Registers
0x0470 0000 to 0x047F FFFF RDRAM Interface (RI) Registers
0x0480 0000 to 0x048F FFFF Serial Interface (SI) Registers
0x0490 0000 to 0x04FF FFFF Unused
0x0500 0000 to 0x05FF FFFF Cartridge Domain 2 Address 1
0x0600 0000 to 0x07FF FFFF Cartridge Domain 1 Address 1
0x0800 0000 to 0x0FFF FFFF Cartridge Domain 2 Address 2
0x1000 0000 to 0x1FBF FFFF Cartridge Domain 1 Address 2
0x1FC0 0000 to 0x1FC0 07BF PIF Boot ROM
0x1FC0 07C0 to 0x1FC0 07FF PIF RAM
0x1FC0 0800 to 0x1FCF FFFF Reserved
0x1FD0 0000 to 0x7FFF FFFF Cartridge Domain 1 Address 3
0x8000 0000 to 0xFFFF FFFF External SysAD Device
4

3 に答える 3

2

あなたが持っているマップは抽象的です。より詳細なメモリマップを見ると、マップされていないメモリの大きなギャップに気付くでしょう。マップされた外部カートリッジ ROM (など) を含まず、使用可能なメモリの各部分を合計します。RDRAM を含めて 4MB 強を割り当てることになります。また、0x80000000 を超えるアドレスは、事実上下位アドレスのミラーであり、直接マップされているもの (物理メモリ) と TLB マップされているもの (仮想メモリ) が区別されることに注意してください。

0x00000000 - 0x7fffffff  KUSEG  TLB mapping
0x80000000 - 0x9fffffff  KSEG0  Direct map, cache
0xa0000000 - 0xbfffffff  KSEG1  Direct map, non-cache
0xc0000000 - 0xdfffffff  KSSEG  TLB mapping
0xe0000000 - 0xffffffff  KSEG3  TLB mapping

また、カートリッジ メモリが 0xb0000000 にマップされていることに注意してください。これは、メモリ マップには明示的に示されていません。

于 2011-08-11T17:28:20.010 に答える
1

エミュレートするメモリの量に関係なく、ホスト マシンで使用可能なメモリはそれほど多くは必要ありません (4 GB は必要なく、4 MB も必要ありません)。代わりに、エミュレートされたメモリにアドレス値でアクセスできるデータ構造を使用してください。エミュレートされたメモリに何かを格納する必要がある場合にのみ、実メモリにスペースを割り当てます。

ただし、上記の内部メモリの量を実際に割り当てるのは些細なことかもしれません。

Simon のように、私も最初にセグメント: オフセット理論を仮定しますが、上記のアドレス範囲はその理論と完全に矛盾しているようです。また、「64」ビットのアドレス空間全体。

アドレス空間の大部分は、内部ハードウェア リソースではなく、外部インターフェイス (カートリッジなど) に割り当てられていることに注意してください。

于 2009-12-03T05:03:45.557 に答える