معمارية نظام نينتندو الترفيهي (NES)

تحليل عملي من قبل Rodrigo Copetti

هذه ترجمة تطوعية لالمقال الأصلي. إذا وجدت أي أخطاء، يرجى المساعدة في تحسينها. شكرًا!

إذا كنت تستخدم أدوات الوصول أو المتصفحات القديمة، قم بالتبديل إلى النسخة 'الكلاسيكية'.




الصور الداعمة

الطراز

Image
الوصف = "NES الصادر في تاريخ 18/10/1985 في أمريكا و 01/09/1986 في أوروبا".
Image
فاميكوم
الصادر في تاريخ 15/07/1983 في اليابان.

اللوحة الأم

Image
اللوحة الأم
عرض أنواع 'نيس'.
Image
لوحة الأم مع أجزاء مهمة معلمة

الرسوم البيانية

Image
الرسم البياني المعماري الرئيسي

نبذة سريعة

يبدو للوهلة الأولى أن جهاز نيس مجرد حاسوب بمعالج 6502 آخر، مع غطاء مطوَّر وآله تحكم.

وفي حين أن هذا تقنيا صحيح، دعوني أريكم لماذا وحدة المعالجة المركزية ليست جزءًا مركزيًا من هذا النظام.


النماذج و الإصدارات

Image
مسجل بيتاماكس نموذجي. هذا والأجهزة المشابهة أثرت على التصميم الدولي لـ NES. لقد لاحظت هذا الجهاز على وجه الخصوص في مركز تاريخ الحوسبة (كامبريدج، المملكة المتحدة) عندما زرت في أغسطس 2024.

نينتندو انتهى به الأمر إلى شحن الكثير من الانواع المختلفة لنفس جهاز الالعاب عبر العالم [1] وعلى الرغم من أنها جميعا تشترك في نفس المعمارية، يبدو الكثير منها مختلفًا بشكل كبير وقد يتضمن البعض ملحقات مدمجة. ولكي أجعلها مختصرة في هذه المقال ، سأركز على المراجعتين الأكثر شعبية:

و لأن المؤلفين إعتاد على اسم ‘NES’ ، سأفترض استخدام هذا المصطلح للإشارة إلى وحدة التحكم بشكل عام، لكني سأتحول إلى اسم ‘Famicom’ عند الإشارة إلى القدرات الفريدة الموجودة فقط في النسخة اليابانية.


المعالج

وحدة المعالجة المركزية لـNES هي ريكوه 2A03 [3] ، المقتبسة من وحدة 8 بت MOS Technology 6502 ويعمل على تردد 1.79 ميغاهرتز (أو 1.66 ميغاهرتز في أنظمة PAL).

القليل من السياق

كان سوق وحدات المعالجة المركزية في أواخر السبعينات وأوائل الثمانينات متنوع للغاية.

Image
حاسوب كومودور PET، مع وحده المعالجة المركزيه 6502.
Image
حاسوب تندي TRS-80، مع وحده المعالجة المركزيه Z80.
بانوراما حواسيب أواخر السبعينيات، المتاحة أيضًا من مركز تاريخ الحوسبة (كامبريدج، المملكة المتحدة).

وإذا كانت شركة ما راغبة في بناء حاسوب صغير فإن الخيارات التالية متاحة:

وكأن هذه الخيارات لم تكن كافية، ظهرت في السوق شركة أخرى تسمى MOS وقدمت نسخة معاد تصميمها من 6800: نسخة 6502. وإن كانت غير متوافقة مع الباقين، كانت الشريحة الجديدة بكثير أقل تكلفة للإنتاج [5] [6] ولم تكن مسألة وقت إلا أمام أشهر صانعي الحواسيب (كومودور، تندي، أبل، أتاري، أكورن وما إلى ذلك) اختاروا 6502 لتشغيل آلاتهم.

نعود إلى اليابان، احتاجت نينتندو إلى شيء منخفض الثمن ولكنه مألوف لتطويره، لذا فقد اختاروا 6502. تحديدا ريكوه، موردة المعالجات وأنتجت بنجاح معالج متوافق مع معالجات 6502.

لغز ترخيص ريكوه

كيفية تمكن ريكوه من استنساخ معالجات 6502 ليس واضحا حتى هذا اليوم. من المتوقع أن MOS رخصت تصميم الرقائق لريكوه ولكن هناك العديد من التناقضات حول ذلك:

وظائف مخبأة

إن ريكوه 2A03 ألغت وضع العد الثنائي المشفر عشريًا (BCD) الذي تم تضمينه في 6502 [10]. يرمز BCD لكل منزلة عشرية كرقم ثنائي 4-بت منفصل. تستخدم معالجات 6502 ‘كلمات’ 8-بت، بمعنى أن يمكن كل كلمة تخزن رقمين عشريين.

كمثال، الرقم العشري 42 يمثل كما يلي:

ويمكننا أن نمضي قدما وأن نتكلم عن هذا النظام، ولكن لإعطيكم موجزاً: BCD مفيد للتطبيقات التي تتطلب معالجة كل منزلة عشري على حدة (على سبيل المثال، الساعات الرقمية). غير ذلك يتطلب المزيد من التخزين، لأن كل كلمة 8 بت يمكن أن ترمز فقط إلى الرقم العشري 99 - في حين يمكن ترميز الأرقام الثنائية التقليدية حتى 255.

على أية حال، قامت ريكوه بتعمد بكسر وضع BCD في رقاقاتها بقطع خطوط التحكم التي تفعله. تم القيام بذلك على الأرجح لتجنب دفع الإتاوات لـ MOS، حيث أن BCD تم تسجيلها بواسطتهم (والتشريع الذي مكن من حماية حقوق الطبع والنشر لتصاميم الدوائر المتكاملة في الولايات المتحدة لم يدخل حيز التنفيذ حتى عام 1984 [11]).

الذاكرة

كل من ريكوه 2A03 و MOS 6502 تتميز بمسار بيانات 8 بت و مسار عناوين 16 بت، والذي يسمح لهم بالوصول إلى ما يصل إلى 64 كيلو بايت من الذاكرة. إذاً، كيف ملأت نينتندو هذه الذاكرة؟

من ناحية، تحتوي اللوحة الأم على شريحة توفر 2 كيلوبايت من ذاكرة الوصول العشوائي الثابتة (SRAM) [12]. نينتندو تطلق على هذه المنطقة ب ذاكرة العمل (WRAM) ويمكن استخدامها في تخزين:

على الجانب الآخر، من مكونات النظام هي الذاكرة الممثَّلة [13]، بمعنى أنه يتم الوصول إليها باستخدام عناوين الذاكرة، وبالتالي فإنها تشغل جزءاً من مساحة عنوان المعالج. لذا تملأ ذاكرة المعالج المركزي بعناوين تشير إلى شريط اللعبة و WRAM و PPU و APU ووحدتين تحكم (لا تقلق بشأن كل مكون، حيث يتم شرحها طوال هذا المقال).

الخرطوشة و بيانات اللعبة

فقط في حالة عدم معرفتك، يتم توزيع ألعاب NES على شكل خراطيش، وتتصل خطوط الشريط مباشرة بالمعالج المركزي.

قامت نينتندو بربط خطوط الخرطوشة بطريقة تجعل فقط 49120 بايت (~ 49.97 كيلوبايت) من بيانات الخرطوشة يمكن الوصول إليها [14]. الآن، ماذا أعني بـ ‘بيانات الشريط’؟ حسنًا، أي شريحة متصلة بتلك الخطوط، على سبيل المثال:

السبب في أن هناك مجموعات مختلفة هو أن المعالج المركزي لا يهتم بنوع المكون الذي يقرأه، فهو يرى فقط مواقع الذاكرة. لذا يقع على عاتق استوديوهات الألعاب اختيار (أو المجيء بـ) تصميم قابل للتطبيق يناسب لعبتهم.

Image
لوحة دائرة مطبوعة من سوبر ماريو بروس [15].
Image
نفس لوحة الدائرة مع أجزاء مهمة معلمة. يتم شرح معنى شريحة ‘Lockout’ في قسم ‘مكافحة القرصنة’.

على سبيل المثال، استخدم “سوبر ماريو براذرز” من نينتندو تصميمًا يسمى NES-NROM-256 ويتكون من 32 كيلوبايت من برنامج ROM و 8 كيلوبايت من ‘Character ROM’ للرسومات (سنرى المزيد عنها في قسم ‘الرسومات’) [16]. تم تجهيزه NES-NROM-256 أيضًا لاستيعاب ما يصل إلى 3 كيلوبايت من WRAM إضافي، رغم أن اللعبة لا تستخدمه.

ما وراء القدرات الحالية

إحدى القيود الكبيرة لشركات العنوان 16 بت (التي تؤثر في وحدات تحكم الجيل الثالث والرابع) هي مساحة العنوان المضغوطة. في الوقت الحاضر، يمكن لأجهزة الكمبيوتر 32 بت أن تعالج ذاكرة تصل إلى 4 جيجابايت (وتستمتع أجهزة 64 بت بذاكرة تصل إلى 16 إكسابايت) لذا لم يعد هذا الأمر مقلقًا، ولكن في ذلك الوقت كان لدى NES مساحة عناوين تبلغ 64 كيلوبايت فقط وكان جزء كبير منها تستهلكه الأجهزة الموجهة بالذاكرة (وهو ما تجنبه المنافسون).

إذن، هل يعني هذا أن استوديوهات الألعاب يمكنها فقط تطوير ألعاب لا تتجاوز حد 49.97 كيلوبايت؟ بالطبع لا! إذا علمتنا التاريخ شيئاً، فهو أنه دائماً هناك حلاً ذكياً لمشكلة تحدي؛ وتم معالجة هذه المشكلة باستخدام Mapper.

Image
تمثيل مبسط لكيفية توسيع الممر لعناوين المعالج. مع تضمين الMapper، يمكن للمعالج الوصول إلى بنوك إضافية (مجموعات من العناوين) لبرنامج ROM الكبير. على الرغم من أن اللعبة/البرنامج لديه المهمة الجديدة بتحويل العمل بين البنوك يدوياً كلما دعت الحاجة.
Image
نفس الترتيب ولكن بدون Mapper مثبت. بينما هو أبسط وأقل تكلفة، يمكن للمعالج الوصول فقط إلى عدد محدود من البنوك.

الMapper هو شريحة إضافية مضمنة في الخرطوشة تقع بين رقائق الذاكرة وخطوط العنوان الخاصة بوحدة التحكم. وظيفته الرئيسية هي توسيع فضاء العنوان بحيث يتمكن المطورون من تضمين المزيد من الرقائق. يتم ذلك عن طريق تبديل البنوك: يتم تجميع عناوين الذاكرة في بنوك، ويوفر الMapper مفاتيح (التي يتم التحكم بها عبر عناوين الذاكرة) للتبديل بين البنوك. الآن، لا يزال المعالج يرى نفس كمية الذاكرة، لذا فإن اللعبة التي تمت برمجتها بوجود Mapper هي المسؤولة عن تشغيله. بسبب فعاليته من حيث التكلفة، كانت Mappers هي الترتيب السائد في تقنية الثمانينات إلى أوائل التسعينات.

Image
لوحة دائرة مطبوعة للعبة سوبر ماريو بروس 2 [17]. سوبر ماريو بروس 3 يستخدم هذا التنسيق أيضًا ولكنه يحتوي على 256 كيلوبايت من ذاكرة ROM الخاصة بالبرنامج.
Image
نفس الصورة مع الأجزاء المهمة المعلمة. في البداية، كنت أعتقد أن WRAM الإضافي كان لتخزين الحفظات، ولكن أدركت بعد ذلك أنه لا توجد أي حفظات في هذه اللعبة (وليس هناك بطارية أيضًا). في الواقع، تُستخدم شريحة RAM تلك لتخزين مستوى غير مضغوط.

بالعودة إلى NES، ألعاب مثل ‘سوبر ماريو بروس 2’ و’سوبر ماريو بروس 3’ تم شحنها مع مخطط ‘MMC3’ (الذي صنعته نينتندو) في الكارتريدج الخاص بها. للمقارنة، قدم MMC3 ما يصل إلى 512 كيلوبايت من المساحة لبرنامج ROM، وما يصل إلى 256 كيلوبايت لذاكرة الشخصيات وما يصل إلى 8 كيلوبايت من WRAM إضافية [18]. يمكنك الآن أن ترى لماذا تختلف جودة ‘Super Mario Bros 3’ بشكل كبير مقارنة بالنسخة الأولى.

بشكل عام، بينما قد تبدو هذه الوحدة محدودة عند فحص ميزاتها الداخلية، تأكدت نينتندو من أنها يمكن أن تتكيف مع تطور التكنولوجيا. على الجانب الآخر، في حين أن هذه التقنية ساعدت في تقليل تكلفة الوحدة، فإنها حولت جزءاً من العبء إلى خرطوشة اللعبة. لذا، جودة الألعاب وتكاليف الخرطوشة كانتا محورين يجب على استوديوهات الألعاب التوازن بينهما.


الجرافيك

يتم إنشاء الرسومات بواسطة شريحة خاصة تسمى وحدة معالجة الصور (PPU). هذه واحدة من الشرائح التي تمنح NES تميّزاً. للتوضيح، يمكن لأي شخص أن يلتقط معالج 6502 من المتجر التقني، فلماذا يختلف NES عن، على سبيل المثال، Apple 2 أو Commodore 64؟ حسناً، ما يميز NES عن الأجهزة الأخرى هي الشرائح التي تحيط بالمعالج: PPU وAPU. تشمل هذه القدرات الرسومية والصوتية الفريدة لـ NES، على التوالي.

مع ذلك، تقوم PPU بعرض الرسومات الثنائية الأبعاد المسماة sprites و الخلفيات، وتخرج النتيجة إلى إشارة الفيديو.

تنظيم المحتوى

Image
هيكل ذاكرة PPU

لرسم شيء ما على الشاشة، يجب أن تعرف PPU ما الرسومات التي سترسمها، أين تضعها على الشاشة، وكيف ترسمها (أي أي لون يجب استخدامه).

للإجابة على هذه الأسئلة، جاءت PPU مبرمجة مسبقاً بخريطة ذاكرة مختلفة تبحث عن نوع البيانات التالي:

لا تقلق بشأن المصطلحات الجديدة، سيتم مناقشة معنى هذه الهياكل البيانية خطوة بخطوة في الفقرات التالية.

بناء الإطار

كما هو الحال مع أقرانها المعاصرين، تم تصميم هذه الشريحة لسلوك عرض CRT. لا يوجد مخزن مؤقت للإطار: ستقوم PPU بالرسم بالتزامن مع شعاع CRT، وبناء الصورة أثناء الطيران.

يقوم PPU برسم الإطارات بأبعاد ثابتة 256x240 بكسل [19]. لسوء الحظ، بسبب التفاوتات في معايير الفيديو التناظرية حول العالم، ستختلف الصورة في مظهرها اعتمادًا على المنطقة التي تعرض منها (NTSC أو PAL). بإيجاز، تلفزيونات NTSC تقوم بقص الحواف العلوية والسفلية لاستيعاب المسح الزائد (حوالي ~224 خط مسح مرئي)، لذا تعتبر هذه الحواف ‘مناطق خطرة’ من قبل المطورين عند تحديد مكان وضع العناصر على اللعبة. من جهة أخرى، تلفزيونات PAL لن تقص الحواف ولكن ستظهر أشرطة سوداء إضافية لملء الإشارة الأطول (PAL يستخدم 288 خط مسح).

خلف الكواليس، يتكون الإطار الذي ينتجه PPU من طبقتين مختلفتين. لأغراض التوضيح، دعونا نستخدم Super Mario Bros. لنوضح كيف يعمل هذا:

بلاط

Image
جدولان من الأنماط مع عدة قوالب مجمعة معًا.
Image
بلاطة واحدة.
القوالب الموجودة في ذاكرة الشخصيات ROM (يتم استخدام لوحة ألوان افتراضية لأغراض التوضيح).

للبدء، يستخدم PPU البلاطات كمكون أساسي لإنتاج الرسومات الخلفية والخلفيات.

تعرّف NES القوالب كخرائط بكسل أساسية بحجم 8x8، يتم تخزينها في ذاكرة الشخصيات (التي تقع في خرطوشة اللعبة) وتنظم في بنية بيانات كبيرة تسمى جدول الأنماط [20]. كل قالب يشغل 16 بايت ويحتوي جدول الأنماط 256 قالبًا [21]. نظرًا لأن PPU يعالج ما يصل إلى 8 ك.ب من ذاكرة الأحرف، فإنه يمكنه الوصول إلى جدولين من الأنماط.

داخل القالب، يتم ترميز كل بكسل باستخدام قيمة مكونة من 2 بت، والتي تشير إلى أحد الألوان الأربعة من لوحة الألوان. يمكن للمبرمجين تحديد ما يصل إلى ثمانية لوحات ألوان (أربع للخلفيات والأربع الباقية للشخصيات). تشير الألوان المرجعية في كل لوحة إلى ‘لوحة الألوان الرئيسية’ المكونة من 64 لونًا [22]، والتي تمثل جميع الألوان التي يمكن أن تنتجها هذه الوحدة. تتكون اللوحات من أربعة ألوان، على الرغم من أن لونًا واحدًا محجوز لـ الشفاف.

لبدء رسم شيء ما على الشاشة، تعبئ الألعاب مجموعة من الجداول بمراجع للقوالب في ذاكرة الشخصيات. كل جدول مسؤول عن طبقة واحدة (شخصية أو خلفية) من الإطار. ثم، يقرأ PPU من تلك الجداول ويقوم بتركيب خطوط المسح التي سيتم تشغيلها بواسطة بندقية CRT.

سأشرح الآن كيف تعمل كل طبقة/جدول وكيف تختلف من حيث الوظائف.

طبقة الخلفية

Image
خريطة الخلفية المخصصة.
Image
خريطة الخلفية المخصصة مع المنطقة المحددة معلّمة.
تم إعداد خريطة الخلفية مع انعكاس رأسي، مما يتيح التمرير الأفقي السلس. ومع ذلك، يمكن استخدام نصف واحد فقط.

طبقة الخلفية هي خريطة بحجم 512x480 بكسل تحتوي على قوالب ثابتة [23]. قد تتذكر أن الإطار القابل للمشاهدة أصغر بكثير، لذا تقرر الألعاب أي جزء من الطبقة يتم اختياره للعرض. يمكن أيضًا نقل المنطقة القابلة للمشاهدة أثناء اللعب؛ هذه هي الطريقة التي يتم بها تحقيق تأثير التمرير.

لتوفير الذاكرة، يتم دمج مجموعات من أربعة قوالب في خرائط بكسل بحجم 16x16 تسمى الكتل، والتي تشترك جميع القوالب داخلها في لوحة ألوان.

جداول الأسماء (المخزنة في VRAM) تحدد أي القوالب ستعرض في طبقة الخلفية. يبحث PPU عن أربع جداول أسماء بحجم 1024-بايت، كل واحدة منها تتوافق مع ربع من الطبقة. ومع ذلك، هناك 2 كيلوبايت فقط من VRAM المتاحة! نتيجة لذلك، يمكن تخزين جدولين فقط بدون أجهزة إضافية من الخرطوشة. ومع ذلك، يجب معالجة الاثنين المتبقيين في مكان ما: معظم الألعاب تعين الاثنين المتبقيين حيث تكون الأولين (وهذا يسمى المطابقة).

بينما قد تبدو هذه البنية معيبة في البداية، فقد صممت لتخفض التكاليف مع توفير التوسعية البسيطة: إذا كانت الألعاب بحاجة إلى خلفية أوسع، يمكن تضمين VRAM إضافية في الخرطوشة.

تخزن آخر بايتات من كل جدول أسماء جدول السمات بحجم 64 بايت المحدد أي لوحة ألوان مخصصة لكل كتلة [24].

طبقة رسومات

Image
الطبقة الرمز التوضيحي.

الشخصيات هي القوالب التي يمكن تحريكها حول الشاشة. كما يمكنها أن تتداخل مع بعضها البعض، أو تظهر خلف الخلفية. سيتم تحديد الصورة القابلة للعرض بناءً على قيمة الأولوية لها (وهو نفس مفهوم ‘الطبقات’ في برامج التصميم الجرافيكي التقليدية).

جدول ذاكرة السمة للكائنات (OAM) يحدد أي القوالب سيتم استخدامها كشخصيات [25]. بالإضافة إلى فهرس القوالب، تحتوي كل إدخال على موقع (x,y) وسمات متعددة (لوحة الألوان، الأولوية، وأعلام الانعكاس). يتم تخزين هذا الجدول في ذاكرة DRAM بحجم 256-بايت الموجودة في رقاقة PPU.

يمكن ملء جدول OAM بواسطة وحدة المعالجة المركزية. ومع ذلك، يمكن أن يكون هذا بطيئًا جدًا في التطبيق (ويخاطر بإفساد الإطار إذا لم يتم في الوقت المناسب)، نتيجة لذلك، تحتوي وحدة PPU على مكون صغير يسمى الوصول المباشر إلى الذاكرة أو “DMA” الذي يمكن برمجته (عن طريق تغيير سجلات PPU) لجلب الجدول من ذاكرة WRAM. مع DMA، يتم ضمان تحميل الجدول عند رسم الإطار التالي، ولكن تذكر أن وحدة المعالجة المركزية ستتوقف أثناء النقل!

تقتصر PPU على ثمانية رسومات لكل سطر مسح وما يصل إلى 64 رسمة لكل إطار. يمكن تجاوز حد سطر المسح بفضل تقنية تسمى ‘دوران ترتيب OAM’، حيث تقوم اللعبة بتعديل ترتيب الإدخالات يدوياً في OAM. هذا يجعل PPU ترسم مجموعة رسومات مختلفة في كل إطار، وسرعة شعاع CRT ستخدع المستخدم لرؤية رسومات أكثر من المسموح بها. ومع ذلك، ستظهر أيضًا كمضية على الشاشة.

تقسيم الخلفية

Image
طبقة الخلفية المرسومة التي تبرز الجزأين بتعريف قيم التمرير المختلفة. فقط الجزء الثاني يتنقل عندما يتحرك ماريو.

قبل أن نتابع، هناك شيء لم أخبرك به بعد. إذا لعبت Super Mario Bros، ستلاحظ أنه عندما يتحرك ماريو، تتحرك المشهد بسهولة. ومع ذلك، ستلاحظ أيضًا أن المنطقة العلوية (حيث الإحصاءات) تبقى ثابتة رغم أن كلا الجزأين جزء من نفس طبقة الخلفية! إذًا، ماذا يحدث هنا؟ حسنًا، اللعبة تغير قيم التمرير في منتصف الإطار لعرض سطح العالم والإحصاءات (الموجودة في جزء ثابت من الخلفية) في نفس الوقت. لا يوفر نظام NES هذه الميزة محلياً، ولكن اللعبة تستنتج التوقيتات من خلال مراقبة حالة وحدة معالجة الرسوميات (تظهر عبر سجل الحالة الخاص بها [26]).

لتحقيق ذلك، تقوم الألعاب بتنفيذ تقنية تسمى ضرب العفريت 0. تقوم لعبة Super Mario Bros بتوجيه PPU لرسم عفريت وهمي خلف العملة، وهذا يحدث ليكون العفريت الأول المرسوم داخل الإطار. بعد أن تضيء PPU العفريت، تقوم بتحديث سجل الحالة الخاص بها بعلم يشير إلى أنه تم رسم العفريت الأول (المعروف باسم ‘عفريت 0’). في هذه الأثناء، تتحقق اللعبة باستمرار في منتصف الإطار إذا كان حالة الرسمة 0 قد تم تفعيلها (المعروفة ب’الإصابة’)، إذا حدث ذلك، تتابع اللعبة لتحديث خاصية التمرير في جدول الخلفية لتحريكها إلى حيث يوجد ماريو.

بشكل عام، يُعتبر ‘ضربة السبرايت 0’ إجراءً حساساً للغاية، حيث أنه من السهل العبث بالتوقيتات (لا يتم مسح علم السبرايت 0 بعد استقطابه، مما يؤدي إلى ‘إيجابيات مزدوجة’ [27]). علاوة على ذلك، بما أن هذا الروتين يتكرر إلى ما لا نهاية، فإنه يمكن أن يكون مكلفًا جدًا (من حيث دورات وحدة المعالجة المركزية) للتنفيذ. ولكن من ناحية أخرى، تولى المربعات اللاحقة هذه الوظيفة باستخدام مقاطعات تلقائية تتسبب في التشغيل عندما تصطدم بسرورة مسح تعسفية [28] (وهي تقنية أكثر كفاءة بكثير)، مما حسن بشكل كبير القدرات البصرية لـ Super Mario Bros 3، على سبيل المثال.

النتيجة

Image
تادا!

بمجرد الانتهاء من الإطار، حان وقت الانتقال إلى الإطار التالي!

ومع ذلك، لا يمكن لوحدة المعالجة المركزية تعديل أي جدول يتم استخدامه حاليًا بواسطة PPU، وإلا، قد تظهر قطع أثرية على الشاشة. لذلك، عند اكتمال جميع خطوط المسح، تتسبب PPU في حدوث مقاطعة إيقاف العمودي (V-Blank) على وحدة المعالجة المركزية [29]. هذا يخطر اللعبة أنها يمكن أن تبدأ في تحديث الجداول دون تمزيق الصورة المعروضة حاليًا. في تلك اللحظة، يشير شعاع CRT إلى ما تحت المنطقة المرئية للشاشة، في العرض الزائد (أو منطقة الحدود السفلية).

يمكن تحديث مجموعة محدودة فقط من سجلات PPU خارج نافذة V-Blank [30]، وهو ما يفسر القدرة على تمرير طبقة الخلفية في منتصف الإطار.

الأسرار و القيود

إذا كنت تفكر في أن نظام التخزين المؤقت للإطار مع الذاكرة المخصصة لتخزين الإطار الكامل كان سيكون مفضلًا: كانت تكاليف ذاكرة الوصول العشوائي مرتفعة جدًا، وكان هدف وحدة التحكم هو أن تكون ميسورة التكلفة. دعني الآن أريك لماذا أثبت التصميم أنه فعال ومرن للغاية.

التمرير المتعدد

Image
Super Mario Bros. 2. إعداد Nametable للتمرير العمودي (الانعكاس الأفقي).
Image
Super Mario Bros. 3. يمكن لماريو الركض والطيران، لذلك تحتاج PPU للتمرير بشكل قطري. لاحظ الحافة اليمنى التي تظهر لوحة الألوان الخاطئة! تم تطبيق قناع على الحافة اليسرى.

بعض الألعاب تتطلب من الشخصية الرئيسية التحرك عموديًا - وبالتالي سيتم إعداد Nametable مع الانعكاس الأفقي. تحتاج الألعاب الأخرى إلى تحريك شخصيتها إلى اليسار واليمين، وبالتالي تستخدم الانعكاس العمودي بدلاً من ذلك.

سيسمح أي نوع من الانعكاس لـ PPU بتحديث بلاطات الخلفية دون أن يلاحظ المستخدم: هناك مساحة كافية للتمرير أثناء رسم بلاطات جديدة على مسافة.

لكن ماذا لو أرادت الشخصية التحرك بشكل قطري؟ يمكن لـ PPU التمرير في أي اتجاه، ولكن بدون ذاكرة VRAM إضافية، يجب أن تشترك الحواف في نفس لوحة الألوان (تذكر أن البلاط ينظم في كتل).

هذا هو السبب في أن بعض الألعاب مثل Super Mario Bros. 3 تظهر رسومًا غريبة على الحافة اليمنى للشاشة بينما يتحرك ماريو (تم إعداد اللعبة للتمرير العمودي) [31]. من الممكن أنهم احتاجوا إلى تقليل تكلفة الأجهزة لكل خرطوشة (نظرًا لأن هذه اللعبة تحتوي بالفعل على قارئ قوي).

كنوع ممتع من الإصلاح: سمحت PPU للمطورين بتطبيق قناع عمودي على البلاط، مما يخفي بشكل فعال جزءًا من المنطقة المعطلة.

تبادل البلاط

Image
خطوط المسح المبكرة.
Image
خطوط المسح المتأخرة.
Image
الإطار الفعلي المعروض للمستخدم.
إطارات افتراضية يتم إنشاؤها باستخدام البلاطات المتاحة خلال خطوط المسح الضوئي المحددة.

ميزة أخرى لـSuper Mario Bros. 3 هي كمية الرسومات التي يمكنه عرضها.

هذه اللعبة تعرض المزيد من بلاطات الخلفية أكثر من المسموح بها بشكل صارم. فكيف تفعل ذلك؟ إذا أخذنا لقطة شاشة في وقتين مختلفين أثناء إنشاء العرض، يمكننا أن نرى أن الإطار النهائي في الواقع يتكون من إطارين مختلفين.

هذه خدعة أخرى من المتحكم MMC3، الذي لم يُستخدم فقط للوصول إلى مساحة أكبر في ذاكرة برنامج القراءة فقط، بل أيضًا يزيد مساحة ذاكرة الشخصيات بتوصيل شريحتين مختلفتين للشخصيات. من خلال التحقق من أي جزء من الشاشة يطلبه معالج الصور، سيعيد المتحكم التوجيه إلى إحدى الشريحتين – مما يسمح برؤية المزيد من البلاطات الفريدة على الشاشة مما كان مدعومًا في الأصل [32].

سلوك غريب

خلال بحثي، صادفت العديد من المقالات المثيرة للاهتمام التي تشرح السلوك غير المعتاد لـPPU، لذا فكرت في ذكر بعضها هنا:

  • على عكس وحدة معالجة الفيديو لنظام الـ ماستر، التي تولد ألوان RGB التي يتم ترميزها لاحقًا إلى إشارات NTSC/PAL للبث، فإن وحدة معالجة الرسوميات لنظام NES تقوم بكل ذلك مرة واحدة [33]. لذلك، لا يوجد اتصال واحد-لواحد بين ألوان لوحة الألوان الرئيسية لوحدة معالجة الرسوميات والمساحة اللونية القياسية لـ RGB (المعتمدة على نطاق واسع من التكنولوجيا الحالية). يترك هذا بعض المساحة للتفسير وبالتالي ستعرض المحاكيات المختلفة لوحات ألوان مختلفة.
    • الفروقات بين لوحات ألوان RGB تكون أكثر وضوحًا مع طقم Tim Worthington’s DIY الذي يضيف إشارة خروج RGB إلى NES، حيث إنه يحتوي أيضًا على مفتاح يختار بين ثلاث لوحات محددة مسبقاً [34].
  • تحتوي اللوحة الرئيسية على لون ‘ملعون’ ($0D) الذي قد يتسبب في فوضى في إشارة تلفزيون NTSC [35]. حسناً، ما يحدث هو أن بعض أجهزة التلفاز تخطئ في الإشارة لعرض ذلك اللون مع إشارة الفراغ، لذلك قد يحدث وميض.
  • يعتمد PPU على DRAM لتخزين ذاكرة سمات الكائنات (OAM). الآن، تحتاج ذاكرة DRAM إلى التحديث باستمرار لمنع فقدان البيانات (على عكس ذاكرة SRAM)، واتضح أن وحدة معالجة الرسوميات لن تقوم بتحديث ذاكرة DRAM عندما لا ترسم الإطار [36]. يتجلى هذا خلال الحجب الرأسي. لهذا السبب، يُنصح بعدم تحديث OAM خارج الحجب الرأسي، حيث أن الفترة غير المحدثة التي تحدث خلال الحجب الرأسي سوف تكون قد أفسدت جزءًا من الجدول.
    • إن إصدار PPU لنظم PAL ليس متأثراً بهذا، حيث يتم تحديثه خلال الحجب الرأسي (الذي يستمر لفترة أطول في نظم PAL).

الصوت

مكون مخصص يُسمى وحدة معالجة الصوت (APU) يوفر هذه الخدمات [37]. تم تضمينها في رقاقة وحدة المعالجة المركزية بواسطة ريكو على الأرجح لتجنب نسخ غير مرخص لكل من وحدة المعالجة المركزية و APU.

الوظيفة

يشار إلى هذه الدائرة الصوتية عمومًا باسم مولد الصوت القابل للبرمجة (PSG)، مما يعني بشكل غامض أنه يمكنه فقط إنتاج مجموعة محددة مسبقًا من الموجات، وهذا غالبًا صحيح في هذه الحالة. يقوم APU بتسلسل البيانات الصوتية عبر خمسة قنوات صوتية – كل واحدة مخصصة لنوع معين من الموجات أو الإشارات. تحتوي كل قناة على خصائص مختلفة تغير نغمة الموجة الصوتية أو الصوت أو الحجم و/أو المدة. يتم خلطها باستمرار وإرسالها عبر إشارة الصوت الصادرة.

تعرض وظائف APU من خلال عناوين الذاكرة، تقوم وحدة المعالجة المركزية بقراءة البيانات المتعلقة بالموسيقى في ذاكرة برنامج القراءة فقط وتبرمج APU وفقًا لذلك.

علاوة على ذلك، يوفر طراز فاميكوم على وجه الخصوص دبابيس خرطوشة ترسل إشارة الصوت المختلطة إلى الخرطوشة، حتى يتمكن الأخير من خلطها مع قنوات إضافية (تتطلب رقاقة إضافية) [38].

دعونا الآن نتناول القنوات الخمسة التي يوفرها APU [39]:

النبض

عرض الأوسليسكوب لقناة النبض 1.
عرض الأوسليسكوب لقناة النبض 2.
عرض الأوسليسكوب لجميع قنوات الصوت.
الأم (1989).

القناتان الأوليان تُنتجان موجات النبض [40]. عندما تُسمع، فإنها تعرض صوت بيب متميز للغاية والذي يُستخدم أساسًا لللحن أو تأثيرات صوتية. يمكن للمُركِب المُزَامِن المعني أن يولد ثلاثة أنواع من موجات النبض، عن طريق تغيير عرض النبض (المعروف أيضًا بـ دورة الواجب). الدارات مرتبطة أيضاً بـ وحدة المسح (مما يسمح بثني النغمة) ومولد المغلف لتقليل الصوت بمرور الوقت (المعروف أيضًا بـ التلاشي).

تستخدم معظم الألعاب قناة نبضة واحدة للحن والأخرى للمرافقة. ستجد غالبًا أنه عندما تحتاج اللعبة إلى تشغيل تأثير صوتي، يتم تحويل قناة المرافقة لتشغيل التأثير ثم تعود للمرافقة. هذا يتجنب قطع اللحن أثناء اللعب.

أعتقد أنه من العدل أن نقول إن الموجات النبضية هي أحد رموز هذا الجيل من الأجهزة. أفترض أن اعتماده تم فقط لأسباب جديرة بالتكلفة: لا يمكن لوحدة المعالجة المركزية (CPU) (المحدودة) معالجة الكثير من البيانات في وقت واحد، وموجات النبض مثالية من حيث أنها لا تتطلب العديد من المعلمات لتشغيل الألحان البسيطة (مما يساهم في تحرير دورات وحدة المعالجة المركزية لعمليات أخرى).

مثلث

عرض أوسيلوغرافي لقناة المثلث.
عرض الأوسليسكوب لجميع قنوات الصوت.
الأم (1989).

إحدى ميزات APU الخاصة، عند مقارنته بالمنافسة، هي القدرة على إنتاج موجات ثلاثية. غالبًا ما تُستخدم هذه الموجات كـ خط صوتي للصوت الرئيسي. علاوة على ذلك، من خلال تعديل الأصوات بشكل كبير، يمكن أيضًا استخدامها لـ القرع.

لدى APU قناة واحدة مخصصة لهذا النوع من الموجات. خلف الكواليس، يستغرق جهاز التتابع المخصص 32 دورة لإنتاج إشارة ثلاثية [41]، هذا القيد يجعل الموجة الثلاثية الناتجة تأخذ شكل سلم.

من جانب آخر، لا يوفر الدائرة الكهربائية المقابلة تحكمًا في مستوى الصوت. على أي حال، وجدت بعض الألعاب وسائل أخرى عن طريق التلاعب في تحكم مستوى الصوت في الميكسر.

الضجيج

عرض الأوسليسكوب لقناة الضجيج.
عرض الأوسليسكوب لجميع قنوات الصوت.
الأم (1989).

يرجع مفهوم ‘الضوضاء’ إلى سلسلة من الموجات التي لا تتبع أي نمط أو ترتيب. بدورها، تفسر آذاننا ذلك على أنه تموج أبيض. بعد قولي هذا، يخصص APU قناة واحدة تستطيع تشغيل أنواع مختلفة من الضوضاء.

خلف الكواليس، يعتمد مولد الضوضاء على مولد مغلف (مماثل لقناة الدفعة) ويتم إسكاتها عشوائيًا بواسطة بوابة OR [42]. يعتمد شرط الإسكاة على قيمة مسجل إزاحة مكون من 15 بت متصل بدائرة تغذية راجعة. عمومًا، يجعل هذا الدائرة تعمل بشكل شبه غير متوقع، وبالتالي تُحدث ضوضاء.

من حيث التحكم، تقوم 4 بتات بتغيير فترة مولد المغلف وبتة واحدة تغير ‘الوضع’ لمسجل الإزاحة. يترك ذلك 32 إعداداً مسبقاً للضوضاء متاحة. نصف هذه الإعدادات المسبقة (16) تنتج تموج نظيف، والنصف الآخر ينتج تموج ميكانيكي.

عمومًا، تستخدم الألعاب قناة الضوضاء للقرع أو التأثيرات المحيطية.

عينة

عرض راسم الذبذبات لقناة العينة.
عرض الأوسليسكوب لجميع قنوات الصوت.
الأم (1989).

العينات هي قطع مسجلة من الموسيقى يمكن إعادة تشغيلها. كما ترى، العينات ليست مقيدة بنوع موجة واحدة، لكنها تستهلك مساحة أكبر بكثير.

لدى APU قناة واحدة مخصصة للعينات. هنا، العينات محدودة بدقة 7 بت (مشفره بقيمه من 0 إلى 127) و بمعدل أخذ عينات ~15.74 كيلو هرتز [43]. لبرمجة هذه القناة، يمكن للألعاب أن تبث قيم 7 بت (والتي تستهلك الكثير من الدورات والتخزين) أو تستخدم تعديل دلتا لترميز الاختلاف فقط بين العينة التالية والسابقة.

تنفيذ تعديل دلتا في APU يستقبل فقط قيم 1 بت، هذا يعني أن الألعاب يمكنها فقط معرفة ما إذا كانت العينة تزداد أو تنقص بمقدار 1 في كل مرة يدخل فيها العداد. لذا، على حساب الوفاء، يمكن لتعديل دلتا أن يوفر على الألعاب الحاجة إلى بث قيم مستمرة إلى APU.

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

الأسرار و القيود

بينما لم يكن APU قابلاً للمقارنة بجودة الفينيل أو الكاسيت أو الأقراص المدمجة، وجد المبرمجون طرقًا لتوسيع قدراته، بفضل البنية التماثلية لـ NES.

القنوات الإضافية

عرض راسم الذبذبات لـ Castlevania III (الولايات المتحدة الأمريكية/أوروبا، 1989).
عرض راسم الذبذبات لـ Akumajō Densetsu (النسخة اليابانية من Castlevania III، 1989).

هل تتذكر أن Famicom وفرت دبابيس خرطوشة حصرية متاحة لتوسيع الصوت؟ حسنًا، الألعاب مثل Castlevania 3 استفادت من هذا وضمت شريحة إضافية تدعى Konami VRC6، والتي أضافت موجتين دفعتين إضافيتين وموجة سن منشار إلى الخليط.

ألقِ نظرة على المثالين اللذين يوضحان الفرق بين النسختين اليابانية والأمريكية من اللعبة (الأخيرة تعمل على نوع NES، الذي لم يوفر قدرات توسيع الصوت).

ترموللو

عرض راسم الذبذبات لـ Final Fantasy III (1990).

بدلاً من زيادة تكاليف الخرطوشة، أولت بعض الألعاب الأولوية للإبداع على التكنولوجيا لإضافة قنوات أكثر.

في هذا المثال، جاء Final Fantasy III بفكرة استخدام تأثيرات التريمولو لإعطاء الشعور بالقنوات الإضافية.

ملاحظة أكثر دقة

الآن بعد أن حصلت على لمحة عن قدرات APU، دعني أريك طريقة بديلة لمراقبة صوتها. هذا لن يكمل ما تعرفه بالفعل عن APU فحسب، بل سيوفر أيضًا فحصًا أكثر موضوعية، خاصةً لأنه لا يعتمد على آذانك بعد الآن.

أولاً، لنبدأ بمقدمة سريعة لنظرية الصوت.

بفضل مبادئ تحليل فورييه، يمكننا تفكيك كل صوت نسمعه إلى مجموع موجات جيبية بترددات وسعات مختلفة [44]. الموجة الجيبية الأكثر بُعداً (ذات التردد الأدنى) تُسمى الأساسية والباقي يُسمى التوافقيات. إذا قمت بإضافة الموجة الأساسية وتوافقياتها، ستحصل على الصوت الأصلي. بعد قولي هذا، مع الأصوات التي تحتوي على نغمة معترف بها، ستجد أن معظم (إن لم يكن كل) التوافقيات لها ترددات مضاعفة لتردد الأساسي. لذلك، تُسمى هذه التوافقيات بـالتوافقيات [45].

ستصبح التوافقيات موضوعاً متكرراً في هذا القسم، حيث أن أشكال الموجات مثل النبضات والمثلثات والمشرومبات تتبع صيغة تحدد التوافقيات التي تحتويها. بخلاف ذلك، قد تنحرف هذه الأشكال الموجية عن شكلها ‘المثالي’.

مقدمة إلى المخططات الطيفية

نظرًا لأن الموجات الجيبية تُعد الآن المكون الرئيسي الذي يمكن أن يشكل أي صوت، يمكننا الآن تحليل الأصوات التي نسمعها بواسطة موجاتها الجيبية. الآن، لأي نوع من تحليل البيانات، لا يوجد شيء أكثر ملاءمة من رسم بياني لتنظيم كميات ضخمة من المعلومات. حسنًا، في حالة تحليل الصوت، لدينا الطيف الصوتي. تشفّر هذه الرسوم البيانية جميع معلومات عينة الصوت في رسم بياني واحد. يمثل محور X الزمن (بالثواني)، ويمثل محور Y الترددات (بالهرتز) للموجات الجيبية التي تم إنتاجها خلال ذلك الوقت، ويمثل المحور Z (سطوع الألوان لكل نقطة) القدرة/الجهارة (بالديسيبيل) لكل تردد.

مثال على الطيف الصوتي الذي يصور ست ثوانٍ من قناة نبضية.

كما يمكنك أن تلاحظ من هذا المثال، كل خط أفقي (يُعرف أيضاً باسم تسلسل النقاط) يتوافق مع موجة جيبية (أقلها هو الأساسي، بينما الباقي هي التوافقيات) ويدل سطوعها على السعة. وبهذا الاعتبار، يمكننا استخراج المعلومات التالية:

لاحظ كيف أن معظم هذه الملاحظات ليس من السهل استنتاجها بمجرد سماع عينة صوت، هذا هو السبب في كتابة هذا القسم.

رسم وحدة معالجة الصوت

لدراسة وحدة معالجة الصوت NES’، قمت بتجميع خمس طيفات صوتية، كل منها يتوافق مع قناة من وحدة معالجة الصوت باستخدام الأمثلة السابقة. بالإضافة إليها، ستجد محاولتي لكشف ما تعرضه البيانات.

قبل أن نبدأ، يجب أن أعترف أنه لكي أتمكن من جمع البيانات بدون تحريفات (مثل الضجيج الإضافي)، كان هناك بعض التنازلات. تم الحصول على التسجيلات باستخدام برنامج Windows يسمى ‘towave’، والذي يستخدم التوليف المحدود النطاق لحل مشكلة أساسية مع محاكاة رقائق الصوت القائمة على PSG. ببساطة، النبضات والمثلثات والمشرومبات مكونة من توافقيات لا نهائية. ومع ذلك، هذا لا يتوافق جيدًا مع بطاقات الصوت الحديثة المحدودة بـ 44.1 كيلوهيرتز للعينة. لذلك، تُستخدم تقنية تسمى ‘التوليف المحدود النطاق’ لاختيار التوافقيات الصحيحة ضمن حدود بطاقة الصوت. بشكل عام، توفر هذه التقنية توازنًا ممكنًا بين الأداء والدقة ومنع الناتج المشوّه. ومع ذلك، قد لا تكون البيانات متطابقة بنسبة 100% مع نظيرها التماثلي (الذي، بالمقابل، سيقدم أيضًا مشكلات أخرى، مثل الضوضاء من معدات التسجيل)، لكنني أعتقد أنها مقبولة إلى درجة معقولة، والأهم من ذلك، أنها تؤدي الوظيفة المطلوبة لهذا القسم من المقال.

وقيل ذلك، دعونا نبدأ التحليل.

النبض
Image
طيف قناة النبض 1.

تقول النظرية أن نغمة النبضة تحتوي فقط على توافقيات فردية. بمعنى آخر، يتم دمج الأساسي مع توافقه الثالث والخامس وما إلى ذلك. علاوة على ذلك، تقل سعة كل توافق مع ابتعادها عن الأساسي. صيغة السعة هي السعة = 1 ÷ رقم التوافق [46].

لذا، لاحظ كيف أن سطوع كل توافق في الطيف يخف كلما ارتفعت في محور Y. ومع ذلك، يبدو أن موجات نبض وحدة معالجة الصوت تعرض أيضًا تأثير التوافق المذكور سابقاً والذي يزداد مع كل رقم توافق. علاوة على ذلك، تحتوي مناطق في مخطط الطيف التي من المفترض أن تكون خالية من أي صوت على ترددات خافتة (ربما نتيجة الضجيج وعيوب أخرى).

مثلث
Image
طيف قناة المثلث.

الموجة المثلثة تتكون أيضاً من توافقيات فردية ولكن مع انخفاض أسرع في سعتها (حيث السعة = 1 ÷ رقم التوافق² [47]).

ومع ذلك، هذا ليس ما يظهر هنا، فالمثلث على شكل سلم الذي تنتجه وحدة معالجة الصوت يؤدي إلى توافقيات إضافية وزيادة في السعات.

الضجيج
Image
المخطط الطيفي لقناة الضوضاء.

بطبيعة الحال، لا تلتزم الضوضاء بقواعد التوافقيات وقد تملأ الفضاء الترددي بالكامل عشوائيًا، وبالتالي الافتقار إلى درجة يمكن التعرف عليها بسهولة.

على الرغم من ذلك، من خلال متابعة الجدول الزمني يمكنك التمييز بين مختلف الإعدادات المسبقة للضوضاء التي توفرها وحدة APU، وكل منها يعرض مجموعة مميزة من التوافقيات.

عينة
Image
المخطط الطيفي لقناة العينة.

على عكس القنوات السالفة، تشغل قناة العينة فقط أي تسجيل منخفض الدقة يقودها المطور إلى وحدة APU. باعتبار المثال الذي يلعب مجموعة الطبول، لا أستطيع رؤية أي ميزات قابلة للتحديد على المخطط الطيفي (باستثناء أوجه التشابه مع الضوضاء البيضاء).

سن منشار
Image
المخطط الطيفي لقناة المنشار في VRC6.

كمكافأة، دعونا نتحقق أيضًا من قناة المنشار من توسعة VRC6. في البداية، يتم تكوين موجة سن المنشار المثالية من جميع التوافقيات وكل واحدة منها تظهر مع انخفاض في السعة (حيث السعة = 1 ÷ رقم التوافقي [48]).

هذا مطلب كبير بالنسبة للمعدات الرقمية وهو مكلف بطبيعة الحال على خرطوشة الألعاب (قد لا يحتاج ذلك إلى مثل هذا الكمال!). لذلك، وبالمثل لموجات المثلث في وحدة APU، تسلسل VRC6 موجات المنشار في 7 دورات (وبالتالي ينتج عن ذلك تأثيرات سلمية مشابهة).

وبالتالي، فإن المخطط الطيفي المقابل فوضوي جدًا، تملأ تقنيات التقريب في VRC6 الموجة بتوافقيات إضافية في العديد من الأماكن.

الخاتمة

حسناً، يبدو أن الأشكال الموجية الاصطناعية لنظام NES لا تتطابق بأي حال مع ما تمليه النظرية. هل يعني ذلك أن وحدة APU بها عيوب؟ لا! انتهى تصميم وحدة APU بمنح هذه الوحدة أصواتًا فريدة ويمكن التعرف عليها - وهذه الخصائص، سواء كانت مقصودة أم لا، جعلت المخططات الطيفية تعرض نتائج غير اعتيادية.

كملاحظة جانبية، قد تكون الجغرافيا المثالية ممتعة للنظر بأعيننا، لكن الفضول يكاد يوصل إلى نتيجة أن آذاننا ليست مولعة بشكل خاص بالموجات ذات الحواف المثالية! (قد تبدأ في سماع ضوضاء النقر).

بالنظر إلى المستقبل، سيكون تحليل الصوت باستخدام المخططات الطيفية مفيدًا في مقالات أخرى، سواء كان ذلك لتحليل بسيط أو لإجراء مقارنات مع أنظمة أخرى. يرجى ملاحظة أن هذه الرسوم البيانية ليست الأداة الشاملة بأي حال من الأحوال، خاصة مع العينات الصوتية التي تم خلطها بالعديد من القنوات/الأدوات (مما يصعب تفكيكها بشكل كبير). لكنني أعتقد أنها ستوفر بداية قوية لأي نوع من الدراسات الموضوعية.


الألعاب

تم كتابة ألعاب NES بشكل أساسي بلغة التجميع 6502 وتقع في ذاكرة البرنامج ROM، بينما يتم تخزين رسومات اللعبة (البلاطات) في ذاكرة الأحرف.

علاوة على ذلك، كانت الألعاب تباع (أو تؤجر) في متاجر التجزئة بموافقة نينتندو.

الوسط البديل

على الرغم من أنه تم إصدارها فقط في اليابان، اعتقدت أن هذه ستكون فرصة جيدة لتقديم ملحق قصير العمر ولكنه غريب، وعلى غرار الأجهزة المحمولة، أضاف مزايا إضافية إلى هذه الوحدة. تمت تسمية هذا الجهاز الطرفي Famicom Disk System (FDS) وتم شحنه في عام 1986 (~3 سنوات بعد فاميكوم). كان له شكل قارئ قرص مرن خارجي وجاء مع خرطوشة بشكل غريب تسمى ‘محول RAM’.

Image
محرك الأقراص، حيث يتم إدخال الأقراص المرنة (الصورة تظهر قرص مرن من الورق المقوى مدخلاً للحماية). يعمل إما على ست بطاريات C (كل منها 1.5 فولت) أو بمحول AC بقدرة 3.6 وات.
Image
محول RAM مثبت في فتحة الخرطوشة لفاميكون ومتصل بالمحرك عبر كابل.
المكونان اللذان يشكلان نظام قرص فاميكون (FDS).

أضاف نظام قرص فاميكون الخدمات التالية إلى فاميكون:

Image
تم تركيب معدات FDS على فاميكون.

نظرًا لأن القرص المرن هو وسيط واحد (على عكس الخراطيش متعددة الشرائح)، يجب تكثيف جميع بيانات اللعبة بداخله، مع الحفاظ على تنظيمها باستخدام نظام ملفات المملوك.

ومع ذلك، يتطلب Famicom/NES بفصل صارم بين ذاكرة البرامج وذاكرة الأحرف لتعمل، لذا فإن وظيفة ‘محول RAM’ هي فرز البيانات. يحتوي هذا المكون على 32 كيلوبايت من ذاكرة البرنامج RAM و 8 كيلوبايت من ذاكرة الأحرف RAM لتخزين بيانات اللعبة المقروءة من القرص المرن، وبذلك يمكّن وحدة التحكم من قراءته كما لو كانت لعبة تستند إلى خراطيش.

لتشغيل المحرك، يضم محول RAM ROM إضافية بسعة 8 كيلوبايت لتخزين نظام BIOS [51]. يقوم هذا البرنامج بأداء المهام التالية:

Image
مثال على لعبتين للبيع بالتجزئة لنظام FDS. كانت نكهة القرص الأزرق مقاومة للأتربة أيضًا.
رسوم فلاش FDS، في انتظار المستخدم لـ… اهنم… إدخال لعبة.

خلال تلك الحقبة، نشرت نينتندو بعض ‘الكشك’ في متاجر البيع بالتجزئة حتى يتمكن المستخدمون من إحضار أقراصهم ونسخ لعبة جديدة بسعر منخفض.

لسوء الحظ، بعد بضع سنوات من عمر النظام، تم إيقاف نظام أقراص فاميكوم وعادت ألعاب لاحقة إلى الوسائط الكرتوشية. على الجانب المشرق، كانت هناك دوائر جديدة متاحة بقدرات مشابهة (أو أفضل) مقارنة بوظائف FDS.


مكافحة القرصنة وقفل المنطقة

تمكنت نينتندو من منع النشر غير المصرح به بفضل تضمين شريحة خاصة للتحكم في الوصول تسمى التحقق من الدائرة المتكاملة (CIC) [52]. يقع في وحدة التحكم وهو متصل بإشارة إعادة الضبط (وبالتالي لا يمكن إزالته بسهولة).

تقوم هذه الشريحة بتشغيل 10NES، وهو برنامج داخلي يتحقق من وجود شريحة قفل أخرى في خرطوشة اللعبة. إذا فشل هذا الفحص، يتم إرسال وحدة التحكم إلى إعادة ضبط لا نهائية.

تكون رقائق القفل في تواصل مستمر خلال وقت عمل وحدة التحكم. يمكن تهزيم هذا النظام عن طريق قطع واحد من دبابيس قفل وحدة التحكم، مما يترك الشريحة في حالة خاملة. بدلاً من ذلك، يمكن تجميده عن طريق إرسال إشارة -5V.

يترسخ نظام CIC نتيجة للخوف الناجم عن انهيار سوق ألعاب الفيديو عام 1983. قرر رئيس نينتندو في ذلك الوقت، هيروشي ياموتشي، أنه لتنفيذ ألعاب ذات جودة جيدة، ينبغي أن يكونوا مسؤولين عن الموافقة على كل واحدة منها [53].

ستلاحظ أن الطراز الياباني من وحدة التحكم، فاميكم، تم إصداره قبل انهيار 1983. هذا هو السبب في أن كل من خراطيش الألعاب ووحدة التحكم لا تحتوي على دائرة CIC [54]؛ بدلاً من ذلك، تُستخدم الدبابيس لتوسيع الصوت اختياريًا.


هذا كل شيء يا أصدقاء


المساهمة

هذه المقالة هي جزء من معماري Consoles السلسلة. إذا وجدتها مثيرة للاهتمام، فيرجى النظر في التبرع. وستستخدم مساهمتكم في تمويل شراء الأدوات والموارد التي ستساعدني على تحسين نوعية المقالات الموجودة والمقالات المقبلة.

Donate with PayPal
Become a Patreon

يمكنك أيضًا شراء نسخة الكتاب الإلكتروني باللغة الإنجليزية. أعتبر الأرباح كتبرعات.

Image

وتتبع هنا قائمة بالأدوات المستصوبة وآخر عمليات الاقتناء لهذه المادة:

### Interesting hardware to get (ordered by priority)

- Any development cart out there (only if found at a reasonable price)

بدلاً من ذلك، يمكنك المساعدة من خلال اقتراح تغييرات و/أو إضافة ترجمات.


Copyright and permissions

This work is licensed under a Creative Commons Attribution 4.0 International License. You may use it for your work at no cost, even for commercial purposes. But you have to respect the license and reference the article properly. Please take a look at the following guidelines and permissions:

Article information and referencing

For any referencing style, you can use the following information:

  • Title of article: Nintendo Entertainment System (NES) Architecture - A Practical Analysis
  • Author: Rodrigo Copetti
  • URL: https://www.copetti.org/writings/consoles/nes/
  • Date of publication: January 25, 2019
  • Last modified: August 29, 2024

For instance, to use with BibTeX:

@misc{copetti-nes,
    url = {https://www.copetti.org/writings/consoles/nes/},
    title = {Nintendo Entertainment System (NES) Architecture - A Practical Analysis},
    author = {Rodrigo Copetti},
    year = {2019}
}

or a IEEE style citation:

[1]R. Copetti, "Nintendo Entertainment System (NES) Architecture - A Practical Analysis", Copetti.org, 2019. [Online]. Available: https://www.copetti.org/writings/consoles/nes/. [Accessed: day- month- year].
Special use in multimedia (Youtube, Twitch, etc)

I only ask that you at least state the author’s name, the title of the article and the URL of the article, using any style of choice.

You don’t have to include all the information in the same place if it’s not feasible. For instance, if you use the article’s imagery in a Youtube video, you may state either the author’s name or URL of the article at the bottom of the image, and then include the complete reference in the video description. In other words, for any resource used from this website, let your viewers know where it originates from.

This is a very nice example because the channel shows this website directly and their viewers know where to find it. In fact, I was so impressed with their content and commentary that I gave them an interview 🙂.

Appreciated additions

If this article has significantly contributed to your work, I would appreciate it if you could dedicate an acknowledgement section, just like I do with the people and communities that helped me.

This is of course optional and beyond the requirements of the CC license, but I think it’s a nice detail that makes us, the random authors on the net, feel part of something bigger.

Third-party publishing

If you are interested in publishing this article on a third-party website, please get in touch.

If you have translated an article and wish to publish it on a third-party website, I tend to be open about it, but please contact me first.


المصادر / الاستمرار في القراءة

مكافحة القرصنة

صوت

المعالج

الألعاب

عام

الجرافيك

الفوتوغرافي


Rodrigo Copetti

Rodrigo Copetti

آمل أن تكون قد استمتعت بهذا المقال! إذا كنت ترغب في معرفة المزيد عن المؤلف انقر هنا وإذا كنت ترغب في دعمه اضغط هنا بدلا من ذلك

rsslinkedintwittergithub facebookreddit