2009-12-02 15 views
5

Según Wikipedia, el N64 solo tiene 4 MB de RDRAM (8 MB con el paquete de expansión), y las demás cantidades son igualmente pequeñas (4 KB o menos de caché L1). Sin embargo, los documentos técnicos que he encontrado en Google indican que sus direcciones de memoria van desde $ 0000: 0000 a $ FFFF: ¡FFFF, eso es 4 GB! Dado que los emuladores N64 existentes como Project64 no utilizan hasta 4 GB de RAM, ¿cómo funciona la emulación del mapa de memoria? He intentado buscar en varios documentos, y todos parecen diferir al menos ligeramente. ¿Alguien tiene algún consejo sobre este tema?¿Cómo estructurar el mapa de memoria en un emulador N64?

Específicamente, aquí está el mapa de memoria que encontré:

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 
+0

¿Quizás sean direcciones segmento: desplazamiento, como 16-bit x86? –

Respuesta

1

Independientemente de la cantidad de memoria que está emulando, no necesidad de que la cantidad de memoria disponible en el ordenador central (no lo hace necesita 4 GB, y ni siquiera necesita 4 MB). En su lugar, use una estructura de datos donde pueda acceder a su memoria emulada por el valor de la dirección. Solo asigne espacio en su memoria real cuando necesite almacenar algo en su memoria emulada.

Sin embargo, puede ser trivial asignar realmente la cantidad de memoria interna descrita anteriormente.

Al igual que Simon, también asumiría primero el segmento: teoría de compensación, pero la dirección oscila entre y la lista anterior parece contradecir completamente esa teoría. Además, todo el espacio del espacio de direcciones "64 bits".

Observe que la mayor parte del espacio de direcciones se asigna a interfaces externas (cartuchos, etc.), no a recursos de hardware internos.

+0

Hm, supongo que es cierto. Debería haberse dado cuenta de eso. Gracias! –

2

El mapa que tiene es abstracto, si observa un more detailed memory map, observará grandes espacios de memoria no asignados. Sin incluir la ROM del cartucho externo mapeada (etc.), sume cada parte de la memoria utilizable. Acabará asignando poco más de 4 MB incluyendo RDRAM. También tenga en cuenta que las direcciones de más de 0x80000000 son efectivamente réplicas de direcciones más bajas, con la diferencia de que algunas se asignan directamente (memoria física) y algunas se asignan TLB (memoria virtual).

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 

Además, tenga en cuenta que la memoria del cartucho está mapeada en 0xb0000000. Esto no se muestra explícitamente en el mapa de memoria.

0

AFAIK El procesador del sistema puede tener hasta 4 GB sin ningún problema, pero el n64 en sí no estaba usando esta característica. Entonces, creo que si el procesador solicitara datos de esa región, simplemente devolvería 00.

Cuestiones relacionadas