كيف يمكنني الهيكل خريطة الذاكرة في محاكي N64؟

StackOverflow https://stackoverflow.com/questions/1830146

  •  11-09-2019
  •  | 
  •  

سؤال

وفقا ل Wikipedia، يحتوي N64 فقط على 4 ميغابايت من RDRAM (8 ميغابايت مع حزمة التوسع)، والكميات الأخرى صغيرة بالمثل (4 كيلو بايت أو نحو ذلك من ذاكرة التخزين المؤقت L1). ومع ذلك، فإن المستندات الفنية التي عثرت عليها على Google State أن عناوين ذاكرةها تتراوح بين 0000 دولار: 0000 إلى $ FFFF: FFFF - هذا هو 4 جيجابايت! نظرا لأن محاكي N64 الموجودة مثل Project64 لا تستخدم ما يصل ارتفاعه 4 جيجابايت من ذاكرة الوصول العشوائي، فكيف يحفز خريطة الذاكرة؟ لقد حاولت النظر من خلال المستندات المختلفة، ويبدو أن كل منهم يختلفون قليلا. هل لدى أي شخص بعض النصائح حول هذه المسألة؟

على وجه التحديد، إليك خريطة الذاكرة التي وجدتها:

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 جيجابايت، ولا تحتاج حتى 4 ميغابايت). بدلا من ذلك، استخدم بنية بيانات حيث يمكنك الوصول إلى الذاكرة المثبتة عن طريق قيمة العنوان. تخصيص مساحة فقط في ذاكرتك الحقيقية عندما تحتاج إلى تخزين شيء ما في ذاكرتك المثبتة.

ومع ذلك، قد يكون الأمر تافهة لتخصيص كمية الذاكرة الداخلية الموضحة أعلاه.

مثل سيمون، أود أيضا أن افترض أيضا الجزء: نظرية الإزاحة، ولكن العنوان نطاقات يبدو أن القائمة أعلاه تناقض تماما هذه النظرية. أيضا، كل شيء "64" كل شيء.

لاحظ أنه يتم تخصيص غالبية مساحة العنوان إلى واجهات خارجية (خراطيش، إلخ)، وليس موارد الأجهزة الداخلية.

نصائح أخرى

الخريطة التي لديك مجردة، إذا نظرت إلى خريطة ذاكرة أكثر تفصيلا, ، سوف تلاحظ فجوات كبيرة من الذاكرة غير المعروفة. لا يشمل الخرطوشة الخارجية المعينة ROM (إلخ)، إضافة كل جزء من الذاكرة القابلة للاستخدام. سوف ينتهي بك الأمر تخصيص أكثر من 4 ميغابايت فقط بما في ذلك RDRAM. لاحظ أيضا أن العناوين عبر 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. لا يظهر هذا صراحة في خريطة الذاكرة.

AFAIK يمكن أن يكون معالج النظام ما يصل إلى 4 جيجابايت دون أي مشاكل، لكن N64 نفسه لم يكن يستخدم هذا التأبئ. لذلك أعتقد أنه إذا طلب المعالج بيانات من تلك المنطقة، فسوف يعود فقط 00.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top