Question

Selon Wikipedia, le N64 a seulement 4 Mo de RDRAM (8 Mo avec le pack d'extension), et les autres quantités sont aussi faible (4 Ko ou si de cache L1). Toutefois, les documents techniques j'ai trouvé sur l'état Google que ses adresses de mémoire vont de 0000 $: 0000 à $ FFFF: FFFF - c'est de 4 Go! Depuis émulateurs N64 existants comme Project64 n'utilisent pas 4 Go de RAM, comment n'émule le travail de carte mémoire? Je l'ai essayé de regarder à travers divers documents et autres, et tous semblent différer au moins légèrement. Quelqu'un at-il des conseils à ce sujet?

Plus précisément, voici la carte mémoire je trouve:

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
Était-ce utile?

La solution

Quelle que soit la quantité de mémoire vous émule, vous n'avez pas besoin que la quantité de mémoire disponible sur la machine hôte (vous n'avez pas besoin de 4 Go, et vous ne même pas besoin de 4 MB). Au lieu de cela, utiliser une structure de données où vous pouvez accéder à votre mémoire émulé par valeur d'adresse. Seulement allouer de l'espace dans votre mémoire réelle lorsque vous avez besoin de stocker quelque chose dans votre mémoire émulé.

Cependant, il peut être trivial d'allouer effectivement la quantité de mémoire interne décrite ci-dessus.

Comme Simon, je voudrais également supposer d'abord le segment: théorie offset, mais l'adresse plages vous liste ci-dessus semblent contredire cette théorie tout à fait. En outre, l'ensemble "64" chose espace d'adressage -bit.

Notez que la majorité de l'espace d'adressage est allouée aux interfaces externes (cartouches, etc.), et non pas des ressources matérielles internes.

Autres conseils

La carte vous est abstraite, si vous regardez un mémoire plus détaillée carte , vous remarquerez de grandes lacunes de la mémoire non cartographiées. Non compris ROM de la cartouche externe associée (etc), ajoutez chaque partie de mémoire utilisable. Vous finirez par allouer un peu plus de 4 Mo dont la RDRAM. A noter également que les adresses sont effectivement plus 0x80000000 miroirs d'adresses inférieures, avec la distinction que certains sont directement mis en correspondance (mémoire physique), et une partie est mappée TLB (mémoire virtuelle).

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

En outre, notez que la mémoire de la cartouche est mise en correspondance dans à 0xb0000000. Ce n'est pas indiqué explicitement dans la carte mémoire.

Le processeur AFAIK du système peut avoir jusqu'à 4 Go sans aucun problème, mais le N64 lui-même n'a pas été en utilisant cette feauture. Je pense donc que si le processeur a demandé des données de cette région, il serait tout simplement revenir 00.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top