2009-12-02 29 views
5

Theo Wikipedia, N64 chỉ có 4 MB RDRAM (8 MB với Gói mở rộng) và các số lượng khác tương tự nhỏ (4 KB hoặc hơn so với bộ đệm L1). Tuy nhiên, các tài liệu kỹ thuật tôi đã tìm thấy trên Google nói rằng địa chỉ bộ nhớ của nó nằm trong khoảng từ $ 0000: 0000 đến $ FFFF: FFFF - đó là 4 GB! Vì các trình giả lập N64 hiện tại như Project64 không sử dụng hết 4 GB RAM, làm thế nào để mô phỏng bản đồ bộ nhớ hoạt động? Tôi đã thử xem qua các tài liệu khác nhau và như vậy, và tất cả chúng dường như khác nhau ít nhất một chút. Có ai có một số lời khuyên về vấn đề này?Làm cách nào để cấu trúc bản đồ bộ nhớ trong trình giả lập N64?

Cụ thể, đây là bản đồ bộ nhớ tôi thấy:

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

Có lẽ chúng là phân đoạn: địa chỉ offset, như x86 16 bit? –

Trả lời

1

Bất kể bao nhiêu bộ nhớ bạn đang bắt chước, bạn không cần rằng có rất nhiều bộ nhớ có sẵn trên máy chủ (bạn không cần 4 GB và bạn thậm chí không cần 4 MB). Thay vào đó, hãy sử dụng cấu trúc dữ liệu nơi bạn có thể truy cập bộ nhớ giả lập của mình theo giá trị địa chỉ. Chỉ phân bổ không gian trong bộ nhớ thực của bạn khi bạn cần lưu trữ một thứ gì đó trong bộ nhớ giả lập của bạn.

Tuy nhiên, nó có thể tầm thường để thực sự phân bổ số lượng bộ nhớ trong được mô tả ở trên.

Giống như Simon, trước tiên tôi cũng giả định phân khúc: lý thuyết bù trừ, nhưng địa chỉ phạm vi bạn liệt kê ở trên dường như hoàn toàn mâu thuẫn với lý thuyết đó. Ngoài ra, toàn bộ không gian địa chỉ "64" -bit.

Lưu ý rằng phần lớn không gian địa chỉ được cấp phát cho giao diện bên ngoài (hộp mực, v.v.), không phải tài nguyên phần cứng nội bộ.

+0

Hm, tôi cho rằng đó là sự thật. Nên đã nhận ra điều đó. Cảm ơn! –

2

Bản đồ bạn có là trừu tượng, nếu bạn nhìn vào một more detailed memory map, bạn sẽ nhận thấy những khoảng trống lớn của bộ nhớ chưa được ánh xạ. Không bao gồm ROM hộp mực bên ngoài được ánh xạ (vv), thêm từng phần bộ nhớ có thể sử dụng. Bạn sẽ chỉ phân bổ hơn 4MB bao gồm RDRAM. Cũng lưu ý rằng các địa chỉ trên 0x80000000 là các gương hiệu quả của các địa chỉ thấp hơn, với sự phân biệt mà một số được ánh xạ trực tiếp (bộ nhớ vật lý) và một số là ánh xạ TLB (bộ nhớ ảo).

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 

Ngoài ra, lưu ý rằng bộ nhớ hộp mực được ánh xạ tại 0xb0000000. Điều này không được hiển thị rõ ràng trong bản đồ bộ nhớ.

0

AFAIK Bộ xử lý của hệ thống có thể có tối đa 4 GB mà không gặp bất kỳ sự cố nào, nhưng chính bản thân n64 không sử dụng tính năng này. Vì vậy, tôi nghĩ rằng nếu bộ xử lý yêu cầu dữ liệu từ khu vực đó, nó sẽ chỉ trả lại 00.

Các vấn đề liên quan