الصور الداعمة
نبذة سريعة
يبدو للوهلة الأولى أن جهاز نيس مجرد حاسوب بمعالج 6502 آخر، مع غطاء مطوَّر وآله تحكم.
وفي حين أن هذا تقنيا صحيح، دعوني أريكم لماذا وحدة المعالجة المركزية ليست جزءًا مركزيًا من هذا النظام.
النماذج و الإصدارات
نينتندو انتهى به الأمر إلى شحن الكثير من الانواع المختلفة لنفس جهاز الالعاب عبر العالم [1] وعلى الرغم من أنها جميعا تشترك في نفس المعمارية، يبدو الكثير منها مختلفًا بشكل كبير وقد يتضمن البعض ملحقات مدمجة. ولكي أجعلها مختصرة في هذه المقال ، سأركز على المراجعتين الأكثر شعبية:
- الحاسوب العائلي (المعروف باسم فاميكوم) كان التجسد الأول، ولكنه أصدر فقط في اليابان. يتميز هذا التصميم الذي يشبه الألعاب بوحدتي تحكم غير قابلتين للإزالة (تحتوي وحدة التحكم الثانية على ميكروفون داخلي)، ومقبس أمامي للضوء (يسمى Zapper)، ومخرج فيديو RF (باستخدام إشارة NTSC-J) ودبابيس إضافية في فتحة الخرطوشة لتوسيع القدرات الصوتية.
- نظام ترفيه نينتندو (المعروف باسم NES) كان النسخة المعاد تصميمها للجماهير الغربية التي تعيش في أمريكا الشمالية وأوروبا وأوقيانوسيا؛ بمظهر وآلية تتناسب مع مشغل VHS/Betamax الشائع. ومن الناحية التقنية، أصبحت وحدات التحكم الآن قابله للفصل (يفتقر للميكروفون) و تم تحسين إنتاج الفيديو بوصلات إضافية من طراز NTSC/PAL المركبة لموصلات RCA وتم استبدال توسعة الصوت بنظام فرعي لمكافحة القرصنة. ولإضفاء لمسة نهائية، يختم الجزء السفلي من الحافظة بـ ‘منفذ التوسع’ الذي لم يستخدم، بالإضافة إلى دبابيس اضافية للأشرطة تتواصل مع هذا المنفذ [2].
و لأن المؤلفين إعتاد على اسم ‘NES’ ، سأفترض استخدام هذا المصطلح للإشارة إلى وحدة التحكم بشكل عام، لكني سأتحول إلى اسم ‘Famicom’ عند الإشارة إلى القدرات الفريدة الموجودة فقط في النسخة اليابانية.
المعالج
وحدة المعالجة المركزية لـNES هي ريكوه 2A03 [3] ، المقتبسة من وحدة 8 بت MOS Technology 6502 ويعمل على تردد 1.79 ميغاهرتز (أو 1.66 ميغاهرتز في أنظمة PAL).
القليل من السياق
كان سوق وحدات المعالجة المركزية في أواخر السبعينات وأوائل الثمانينات متنوع للغاية.
وإذا كانت شركة ما راغبة في بناء حاسوب صغير فإن الخيارات التالية متاحة:
- انتل 8080: معالج شعبي مميز في ألتير و أول كمبيوتر شخصي. و يحتوي على مسار بيانات مكون من 8 بت، و مسار عناوين مكون من 16 بت.
- زيالوج Z80: وهي نسخة ‘غير رسمية’ من معالجات 8080 معززة بمزيد من التعليمات والمسجلات والمكونات الداخلية. وتم بيعها بسعر أرخص ولا يزال بإمكانها تنفيذ برامج 8080 [4]. وقد اختار امسترد و سنكلير (ضمن آخرين) هذا المعالج.
- موتورولا 6800: معالج آخر 8 بت مصمم من قبل موتورولا، يحتوي على مجموعة تعليمات مختلفة تماما. تضمنت مجموعات الكمبيوتر ذاتية الصنع ومحركات السينثيسايزر وأجهزة الكمبيوتر الكل في واحد 6800.
وكأن هذه الخيارات لم تكن كافية، ظهرت في السوق شركة أخرى تسمى MOS وقدمت نسخة معاد تصميمها من 6800: نسخة 6502. وإن كانت غير متوافقة مع الباقين، كانت الشريحة الجديدة بكثير أقل تكلفة للإنتاج [5] [6] ولم تكن مسألة وقت إلا أمام أشهر صانعي الحواسيب (كومودور، تندي، أبل، أتاري، أكورن وما إلى ذلك) اختاروا 6502 لتشغيل آلاتهم.
نعود إلى اليابان، احتاجت نينتندو إلى شيء منخفض الثمن ولكنه مألوف لتطويره، لذا فقد اختاروا 6502. تحديدا ريكوه، موردة المعالجات وأنتجت بنجاح معالج متوافق مع معالجات 6502.
لغز ترخيص ريكوه
كيفية تمكن ريكوه من استنساخ معالجات 6502 ليس واضحا حتى هذا اليوم. من المتوقع أن MOS رخصت تصميم الرقائق لريكوه ولكن هناك العديد من التناقضات حول ذلك:
- كلاً من إصدار ريكوه و MOS يحتويان على نفس التصميم، ولكن ريكوه يحتوي على مسارات مقطوعة (تعطيل بعض الوظائف) [7]. سأدخل في المزيد من التفاصيل عنها لاحقا.
- لم يُعثر بعد على وثيقة تنص على أن شركة MOS منحت ترخيصا لمعالجات 6502 إلى ريكوه.
- يذكر مقال نشرته نيكي تريندي في عام 2008 أن ريكوه رخصت من روكويل وهي شركة مصنعة لرقائق مرخص لها [8]. على الرغم من أنه قابل للنقاش ما إذا كان المصدر الآخر قادراً على توفير IP لطرف ثالث، على الأقل بموافقة MOS.
- لن تكون المرة الأولى التي تهرب فيها نينتندو من حقوق الملكية الفكرية، إذ حكمت Ikegami Tsushinki v. Nintendo في اليابان أن نينتندو لم تكن تملك الشفرة الأصلية لدونكي كونج [9].
وظائف مخبأة
إن ريكوه 2A03 ألغت وضع العد الثنائي المشفر عشريًا (BCD) الذي تم تضمينه في 6502 [10]. يرمز BCD لكل منزلة عشرية كرقم ثنائي 4-بت منفصل. تستخدم معالجات 6502 ‘كلمات’ 8-بت، بمعنى أن يمكن كل كلمة تخزن رقمين عشريين.
كمثال، الرقم العشري 42
يمثل كما يلي:
0010 1010
في النظام الثنائي.0100 0010
في نظام الـ BCD.
ويمكننا أن نمضي قدما وأن نتكلم عن هذا النظام، ولكن لإعطيكم موجزاً: BCD مفيد للتطبيقات التي تتطلب معالجة كل منزلة عشري على حدة (على سبيل المثال، الساعات الرقمية). غير ذلك يتطلب المزيد من التخزين، لأن كل كلمة 8 بت يمكن أن ترمز فقط إلى الرقم العشري 99
- في حين يمكن ترميز الأرقام الثنائية التقليدية حتى 255
.
على أية حال، قامت ريكوه بتعمد بكسر وضع BCD في رقاقاتها بقطع خطوط التحكم التي تفعله. تم القيام بذلك على الأرجح لتجنب دفع الإتاوات لـ MOS، حيث أن BCD تم تسجيلها بواسطتهم (والتشريع الذي مكن من حماية حقوق الطبع والنشر لتصاميم الدوائر المتكاملة في الولايات المتحدة لم يدخل حيز التنفيذ حتى عام 1984 [11]).
الذاكرة
كل من ريكوه 2A03 و MOS 6502 تتميز بمسار بيانات 8 بت و مسار عناوين 16 بت، والذي يسمح لهم بالوصول إلى ما يصل إلى 64 كيلو بايت من الذاكرة. إذاً، كيف ملأت نينتندو هذه الذاكرة؟
من ناحية، تحتوي اللوحة الأم على شريحة توفر 2 كيلوبايت من ذاكرة الوصول العشوائي الثابتة (SRAM) [12]. نينتندو تطلق على هذه المنطقة ب ذاكرة العمل (WRAM) ويمكن استخدامها في تخزين:
- المتغيرات للتعامل مع حالة اللعبة أو البحث عن المعلومات.
- المكدس ‘stack’ والذي يحفظ قيم المسجلات مؤقتاً بينما تقوم وحدة المعالجة المركزية بتنفيذ الروتينات الفرعية.
- منطقة عازلة ‘buffer area’ حتى تتمكن وحدة المعالجة المركزية من نسخ بيانات كبيرة بين موقعين.
على الجانب الآخر، من مكونات النظام هي الذاكرة الممثَّلة [13]، بمعنى أنه يتم الوصول إليها باستخدام عناوين الذاكرة، وبالتالي فإنها تشغل جزءاً من مساحة عنوان المعالج. لذا تملأ ذاكرة المعالج المركزي بعناوين تشير إلى شريط اللعبة و WRAM و PPU و APU ووحدتين تحكم (لا تقلق بشأن كل مكون، حيث يتم شرحها طوال هذا المقال).
الخرطوشة و بيانات اللعبة
فقط في حالة عدم معرفتك، يتم توزيع ألعاب NES على شكل خراطيش، وتتصل خطوط الشريط مباشرة بالمعالج المركزي.
قامت نينتندو بربط خطوط الخرطوشة بطريقة تجعل فقط 49120 بايت (~ 49.97 كيلوبايت) من بيانات الخرطوشة يمكن الوصول إليها [14]. الآن، ماذا أعني بـ ‘بيانات الشريط’؟ حسنًا، أي شريحة متصلة بتلك الخطوط، على سبيل المثال:
- ذاكرة ROM للبرنامج حيث يقيم برنامج اللعبة. يستثني ذلك بيانات الرسومات، كما سترى لاحقًا في قسم ‘الرسومات’. بطبيعة الحال وعلى عكس الشرائح الأخرى، فهذه إلزامية.
- شرائح RAM لتمديد WRAM.
- شريحة RAM مع البطارية لتخزين الحفظ.
السبب في أن هناك مجموعات مختلفة هو أن المعالج المركزي لا يهتم بنوع المكون الذي يقرأه، فهو يرى فقط مواقع الذاكرة. لذا يقع على عاتق استوديوهات الألعاب اختيار (أو المجيء بـ) تصميم قابل للتطبيق يناسب لعبتهم.
على سبيل المثال، استخدم “سوبر ماريو براذرز” من نينتندو تصميمًا يسمى NES-NROM-256 ويتكون من 32 كيلوبايت من برنامج ROM و 8 كيلوبايت من ‘Character ROM’ للرسومات (سنرى المزيد عنها في قسم ‘الرسومات’) [16]. تم تجهيزه NES-NROM-256 أيضًا لاستيعاب ما يصل إلى 3 كيلوبايت من WRAM إضافي، رغم أن اللعبة لا تستخدمه.
ما وراء القدرات الحالية
إحدى القيود الكبيرة لشركات العنوان 16 بت (التي تؤثر في وحدات تحكم الجيل الثالث والرابع) هي مساحة العنوان المضغوطة. في الوقت الحاضر، يمكن لأجهزة الكمبيوتر 32 بت أن تعالج ذاكرة تصل إلى 4 جيجابايت (وتستمتع أجهزة 64 بت بذاكرة تصل إلى 16 إكسابايت) لذا لم يعد هذا الأمر مقلقًا، ولكن في ذلك الوقت كان لدى NES مساحة عناوين تبلغ 64 كيلوبايت فقط وكان جزء كبير منها تستهلكه الأجهزة الموجهة بالذاكرة (وهو ما تجنبه المنافسون).
إذن، هل يعني هذا أن استوديوهات الألعاب يمكنها فقط تطوير ألعاب لا تتجاوز حد 49.97 كيلوبايت؟ بالطبع لا! إذا علمتنا التاريخ شيئاً، فهو أنه دائماً هناك حلاً ذكياً لمشكلة تحدي؛ وتم معالجة هذه المشكلة باستخدام Mapper.
الMapper هو شريحة إضافية مضمنة في الخرطوشة تقع بين رقائق الذاكرة وخطوط العنوان الخاصة بوحدة التحكم. وظيفته الرئيسية هي توسيع فضاء العنوان بحيث يتمكن المطورون من تضمين المزيد من الرقائق. يتم ذلك عن طريق تبديل البنوك: يتم تجميع عناوين الذاكرة في بنوك، ويوفر الMapper مفاتيح (التي يتم التحكم بها عبر عناوين الذاكرة) للتبديل بين البنوك. الآن، لا يزال المعالج يرى نفس كمية الذاكرة، لذا فإن اللعبة التي تمت برمجتها بوجود Mapper هي المسؤولة عن تشغيله. بسبب فعاليته من حيث التكلفة، كانت Mappers هي الترتيب السائد في تقنية الثمانينات إلى أوائل التسعينات.
بالعودة إلى 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 و الخلفيات، وتخرج النتيجة إلى إشارة الفيديو.
تنظيم المحتوى
لرسم شيء ما على الشاشة، يجب أن تعرف PPU ما الرسومات التي سترسمها، أين تضعها على الشاشة، وكيف ترسمها (أي أي لون يجب استخدامه).
للإجابة على هذه الأسئلة، جاءت PPU مبرمجة مسبقاً بخريطة ذاكرة مختلفة تبحث عن نوع البيانات التالي:
- يتم سحب بيانات الرسومات من شريط اللعبة، الذي يتضمن شريحة مخصصة تسمى ذاكرة الكائنات التي تخزن الرسومات ثنائية الأبعاد (تسمى البلاطات) منظمة في بنية بيانات تُسمى جدول النمط. تتجسد ذاكرة الكائنات في شكل ‘ذاكرة للقراءة فقط’ (ROM) أو ‘ذاكرة الوصول العشوائي’ (RAM) اعتمادًا على ما إذا كانت اللعبة تُرسل مع مجموعة ثابتة من الرسومات أو يجب على المعالج المركزي التدخل، على التوالي.
- يُوجّه PPU حتى 8 كيلوبايت من ذاكرة الكائنات منظمة إلى مجموعتين من 4 كيلوبايت لكل منهما.
- توجد البيانات الفوقية التي تخبر PPU ‘أين’ و ‘كيف’ ترسم الرسومات في مناطق أخرى:
- يتم تركيب 2 كيلوبايت منفصل من ذاكرة SRAM على اللوحة الأم، هذه المرة مخصصة للبيانات المتعلقة بالرسومات. تسمي نينتندو هذه المساحة ذاكرة الفيديو (VRAM) وتخزن هيكلين من البيانات يسمى جداول الأسماء.
- يحتوي PPU على 256 بايت من ذاكرة DRAM لتخزين ذاكرة سمات الكائنات (OAM).
- أخيراً، تحتوي PPU أيضًا على 4 بايت من الذاكرة لتعريف المجموعات اللونية.
لا تقلق بشأن المصطلحات الجديدة، سيتم مناقشة معنى هذه الهياكل البيانية خطوة بخطوة في الفقرات التالية.
بناء الإطار
كما هو الحال مع أقرانها المعاصرين، تم تصميم هذه الشريحة لسلوك عرض CRT. لا يوجد مخزن مؤقت للإطار: ستقوم PPU بالرسم بالتزامن مع شعاع CRT، وبناء الصورة أثناء الطيران.
يقوم PPU برسم الإطارات بأبعاد ثابتة 256x240 بكسل [19]. لسوء الحظ، بسبب التفاوتات في معايير الفيديو التناظرية حول العالم، ستختلف الصورة في مظهرها اعتمادًا على المنطقة التي تعرض منها (NTSC أو PAL). بإيجاز، تلفزيونات NTSC تقوم بقص الحواف العلوية والسفلية لاستيعاب المسح الزائد (حوالي ~224 خط مسح مرئي)، لذا تعتبر هذه الحواف ‘مناطق خطرة’ من قبل المطورين عند تحديد مكان وضع العناصر على اللعبة. من جهة أخرى، تلفزيونات PAL لن تقص الحواف ولكن ستظهر أشرطة سوداء إضافية لملء الإشارة الأطول (PAL يستخدم 288 خط مسح).
خلف الكواليس، يتكون الإطار الذي ينتجه PPU من طبقتين مختلفتين. لأغراض التوضيح، دعونا نستخدم Super Mario Bros. لنوضح كيف يعمل هذا:
بلاط
للبدء، يستخدم PPU البلاطات كمكون أساسي لإنتاج الرسومات الخلفية والخلفيات.
تعرّف NES القوالب كخرائط بكسل أساسية بحجم 8x8، يتم تخزينها في ذاكرة الشخصيات (التي تقع في خرطوشة اللعبة) وتنظم في بنية بيانات كبيرة تسمى جدول الأنماط [20]. كل قالب يشغل 16 بايت ويحتوي جدول الأنماط 256 قالبًا [21]. نظرًا لأن PPU يعالج ما يصل إلى 8 ك.ب من ذاكرة الأحرف، فإنه يمكنه الوصول إلى جدولين من الأنماط.
داخل القالب، يتم ترميز كل بكسل باستخدام قيمة مكونة من 2 بت، والتي تشير إلى أحد الألوان الأربعة من لوحة الألوان. يمكن للمبرمجين تحديد ما يصل إلى ثمانية لوحات ألوان (أربع للخلفيات والأربع الباقية للشخصيات). تشير الألوان المرجعية في كل لوحة إلى ‘لوحة الألوان الرئيسية’ المكونة من 64 لونًا [22]، والتي تمثل جميع الألوان التي يمكن أن تنتجها هذه الوحدة. تتكون اللوحات من أربعة ألوان، على الرغم من أن لونًا واحدًا محجوز لـ الشفاف
.
لبدء رسم شيء ما على الشاشة، تعبئ الألعاب مجموعة من الجداول بمراجع للقوالب في ذاكرة الشخصيات. كل جدول مسؤول عن طبقة واحدة (شخصية أو خلفية) من الإطار. ثم، يقرأ PPU من تلك الجداول ويقوم بتركيب خطوط المسح التي سيتم تشغيلها بواسطة بندقية CRT.
سأشرح الآن كيف تعمل كل طبقة/جدول وكيف تختلف من حيث الوظائف.
طبقة الخلفية
طبقة الخلفية هي خريطة بحجم 512x480 بكسل تحتوي على قوالب ثابتة [23]. قد تتذكر أن الإطار القابل للمشاهدة أصغر بكثير، لذا تقرر الألعاب أي جزء من الطبقة يتم اختياره للعرض. يمكن أيضًا نقل المنطقة القابلة للمشاهدة أثناء اللعب؛ هذه هي الطريقة التي يتم بها تحقيق تأثير التمرير.
لتوفير الذاكرة، يتم دمج مجموعات من أربعة قوالب في خرائط بكسل بحجم 16x16 تسمى الكتل، والتي تشترك جميع القوالب داخلها في لوحة ألوان.
جداول الأسماء (المخزنة في VRAM) تحدد أي القوالب ستعرض في طبقة الخلفية. يبحث PPU عن أربع جداول أسماء بحجم 1024-بايت، كل واحدة منها تتوافق مع ربع من الطبقة. ومع ذلك، هناك 2 كيلوبايت فقط من VRAM المتاحة! نتيجة لذلك، يمكن تخزين جدولين فقط بدون أجهزة إضافية من الخرطوشة. ومع ذلك، يجب معالجة الاثنين المتبقيين في مكان ما: معظم الألعاب تعين الاثنين المتبقيين حيث تكون الأولين (وهذا يسمى المطابقة).
بينما قد تبدو هذه البنية معيبة في البداية، فقد صممت لتخفض التكاليف مع توفير التوسعية البسيطة: إذا كانت الألعاب بحاجة إلى خلفية أوسع، يمكن تضمين VRAM إضافية في الخرطوشة.
تخزن آخر بايتات من كل جدول أسماء جدول السمات بحجم 64 بايت المحدد أي لوحة ألوان مخصصة لكل كتلة [24].
طبقة رسومات
الشخصيات هي القوالب التي يمكن تحريكها حول الشاشة. كما يمكنها أن تتداخل مع بعضها البعض، أو تظهر خلف الخلفية. سيتم تحديد الصورة القابلة للعرض بناءً على قيمة الأولوية لها (وهو نفس مفهوم ‘الطبقات’ في برامج التصميم الجرافيكي التقليدية).
جدول ذاكرة السمة للكائنات (OAM) يحدد أي القوالب سيتم استخدامها كشخصيات [25]. بالإضافة إلى فهرس القوالب، تحتوي كل إدخال على موقع (x,y) وسمات متعددة (لوحة الألوان، الأولوية، وأعلام الانعكاس). يتم تخزين هذا الجدول في ذاكرة DRAM بحجم 256-بايت الموجودة في رقاقة PPU.
يمكن ملء جدول OAM بواسطة وحدة المعالجة المركزية. ومع ذلك، يمكن أن يكون هذا بطيئًا جدًا في التطبيق (ويخاطر بإفساد الإطار إذا لم يتم في الوقت المناسب)، نتيجة لذلك، تحتوي وحدة PPU على مكون صغير يسمى الوصول المباشر إلى الذاكرة أو “DMA” الذي يمكن برمجته (عن طريق تغيير سجلات PPU) لجلب الجدول من ذاكرة WRAM. مع DMA، يتم ضمان تحميل الجدول عند رسم الإطار التالي، ولكن تذكر أن وحدة المعالجة المركزية ستتوقف أثناء النقل!
تقتصر PPU على ثمانية رسومات لكل سطر مسح وما يصل إلى 64 رسمة لكل إطار. يمكن تجاوز حد سطر المسح بفضل تقنية تسمى ‘دوران ترتيب OAM’، حيث تقوم اللعبة بتعديل ترتيب الإدخالات يدوياً في OAM. هذا يجعل PPU ترسم مجموعة رسومات مختلفة في كل إطار، وسرعة شعاع CRT ستخدع المستخدم لرؤية رسومات أكثر من المسموح بها. ومع ذلك، ستظهر أيضًا كمضية على الشاشة.
تقسيم الخلفية
قبل أن نتابع، هناك شيء لم أخبرك به بعد. إذا لعبت Super Mario Bros، ستلاحظ أنه عندما يتحرك ماريو، تتحرك المشهد بسهولة. ومع ذلك، ستلاحظ أيضًا أن المنطقة العلوية (حيث الإحصاءات) تبقى ثابتة رغم أن كلا الجزأين جزء من نفس طبقة الخلفية! إذًا، ماذا يحدث هنا؟ حسنًا، اللعبة تغير قيم التمرير في منتصف الإطار لعرض سطح العالم والإحصاءات (الموجودة في جزء ثابت من الخلفية) في نفس الوقت. لا يوفر نظام NES هذه الميزة محلياً، ولكن اللعبة تستنتج التوقيتات من خلال مراقبة حالة وحدة معالجة الرسوميات (تظهر عبر سجل الحالة الخاص بها [26]).
لتحقيق ذلك، تقوم الألعاب بتنفيذ تقنية تسمى ضرب العفريت 0. تقوم لعبة Super Mario Bros بتوجيه PPU لرسم عفريت وهمي خلف العملة، وهذا يحدث ليكون العفريت الأول المرسوم داخل الإطار. بعد أن تضيء PPU العفريت، تقوم بتحديث سجل الحالة الخاص بها بعلم يشير إلى أنه تم رسم العفريت الأول (المعروف باسم ‘عفريت 0’). في هذه الأثناء، تتحقق اللعبة باستمرار في منتصف الإطار إذا كان حالة الرسمة 0 قد تم تفعيلها (المعروفة ب’الإصابة’)، إذا حدث ذلك، تتابع اللعبة لتحديث خاصية التمرير في جدول الخلفية لتحريكها إلى حيث يوجد ماريو.
بشكل عام، يُعتبر ‘ضربة السبرايت 0’ إجراءً حساساً للغاية، حيث أنه من السهل العبث بالتوقيتات (لا يتم مسح علم السبرايت 0 بعد استقطابه، مما يؤدي إلى ‘إيجابيات مزدوجة’ [27]). علاوة على ذلك، بما أن هذا الروتين يتكرر إلى ما لا نهاية، فإنه يمكن أن يكون مكلفًا جدًا (من حيث دورات وحدة المعالجة المركزية) للتنفيذ. ولكن من ناحية أخرى، تولى المربعات اللاحقة هذه الوظيفة باستخدام مقاطعات تلقائية تتسبب في التشغيل عندما تصطدم بسرورة مسح تعسفية [28] (وهي تقنية أكثر كفاءة بكثير)، مما حسن بشكل كبير القدرات البصرية لـ Super Mario Bros 3، على سبيل المثال.
النتيجة
بمجرد الانتهاء من الإطار، حان وقت الانتقال إلى الإطار التالي!
ومع ذلك، لا يمكن لوحدة المعالجة المركزية تعديل أي جدول يتم استخدامه حاليًا بواسطة PPU، وإلا، قد تظهر قطع أثرية على الشاشة. لذلك، عند اكتمال جميع خطوط المسح، تتسبب PPU في حدوث مقاطعة إيقاف العمودي (V-Blank) على وحدة المعالجة المركزية [29]. هذا يخطر اللعبة أنها يمكن أن تبدأ في تحديث الجداول دون تمزيق الصورة المعروضة حاليًا. في تلك اللحظة، يشير شعاع CRT إلى ما تحت المنطقة المرئية للشاشة، في العرض الزائد (أو منطقة الحدود السفلية).
يمكن تحديث مجموعة محدودة فقط من سجلات PPU خارج نافذة V-Blank [30]، وهو ما يفسر القدرة على تمرير طبقة الخلفية في منتصف الإطار.
الأسرار و القيود
إذا كنت تفكر في أن نظام التخزين المؤقت للإطار مع الذاكرة المخصصة لتخزين الإطار الكامل كان سيكون مفضلًا: كانت تكاليف ذاكرة الوصول العشوائي مرتفعة جدًا، وكان هدف وحدة التحكم هو أن تكون ميسورة التكلفة. دعني الآن أريك لماذا أثبت التصميم أنه فعال ومرن للغاية.
التمرير المتعدد
بعض الألعاب تتطلب من الشخصية الرئيسية التحرك عموديًا - وبالتالي سيتم إعداد Nametable مع الانعكاس الأفقي. تحتاج الألعاب الأخرى إلى تحريك شخصيتها إلى اليسار واليمين، وبالتالي تستخدم الانعكاس العمودي بدلاً من ذلك.
سيسمح أي نوع من الانعكاس لـ PPU بتحديث بلاطات الخلفية دون أن يلاحظ المستخدم: هناك مساحة كافية للتمرير أثناء رسم بلاطات جديدة على مسافة.
لكن ماذا لو أرادت الشخصية التحرك بشكل قطري؟ يمكن لـ PPU التمرير في أي اتجاه، ولكن بدون ذاكرة VRAM إضافية، يجب أن تشترك الحواف في نفس لوحة الألوان (تذكر أن البلاط ينظم في كتل).
هذا هو السبب في أن بعض الألعاب مثل Super Mario Bros. 3 تظهر رسومًا غريبة على الحافة اليمنى للشاشة بينما يتحرك ماريو (تم إعداد اللعبة للتمرير العمودي) [31]. من الممكن أنهم احتاجوا إلى تقليل تكلفة الأجهزة لكل خرطوشة (نظرًا لأن هذه اللعبة تحتوي بالفعل على قارئ قوي).
كنوع ممتع من الإصلاح: سمحت PPU للمطورين بتطبيق قناع عمودي على البلاط، مما يخفي بشكل فعال جزءًا من المنطقة المعطلة.
تبادل البلاط
ميزة أخرى لـ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]:
النبض
القناتان الأوليان تُنتجان موجات النبض [40]. عندما تُسمع، فإنها تعرض صوت بيب متميز للغاية والذي يُستخدم أساسًا لللحن أو تأثيرات صوتية. يمكن للمُركِب المُزَامِن المعني أن يولد ثلاثة أنواع من موجات النبض، عن طريق تغيير عرض النبض (المعروف أيضًا بـ دورة الواجب). الدارات مرتبطة أيضاً بـ وحدة المسح (مما يسمح بثني النغمة) و
تستخدم معظم الألعاب قناة نبضة واحدة للحن والأخرى للمرافقة. ستجد غالبًا أنه عندما تحتاج اللعبة إلى تشغيل تأثير صوتي، يتم تحويل قناة المرافقة لتشغيل التأثير ثم تعود للمرافقة. هذا يتجنب قطع اللحن أثناء اللعب.
أعتقد أنه من العدل أن نقول إن الموجات النبضية هي أحد رموز هذا الجيل من الأجهزة. أفترض أن اعتماده تم فقط لأسباب جديرة بالتكلفة: لا يمكن لوحدة المعالجة المركزية (CPU) (المحدودة) معالجة الكثير من البيانات في وقت واحد، وموجات النبض مثالية من حيث أنها لا تتطلب العديد من المعلمات لتشغيل الألحان البسيطة (مما يساهم في تحرير دورات وحدة المعالجة المركزية لعمليات أخرى).
مثلث
إحدى ميزات APU الخاصة، عند مقارنته بالمنافسة، هي القدرة على إنتاج موجات ثلاثية. غالبًا ما تُستخدم هذه الموجات كـ خط صوتي للصوت الرئيسي. علاوة على ذلك، من خلال تعديل الأصوات بشكل كبير، يمكن أيضًا استخدامها لـ القرع.
لدى APU قناة واحدة مخصصة لهذا النوع من الموجات. خلف الكواليس، يستغرق جهاز التتابع المخصص 32 دورة لإنتاج إشارة ثلاثية [41]، هذا القيد يجعل الموجة الثلاثية الناتجة تأخذ شكل سلم.
من جانب آخر، لا يوفر الدائرة الكهربائية المقابلة تحكمًا في مستوى الصوت. على أي حال، وجدت بعض الألعاب وسائل أخرى عن طريق التلاعب في تحكم مستوى الصوت في الميكسر.
الضجيج
يرجع مفهوم ‘الضوضاء’ إلى سلسلة من الموجات التي لا تتبع أي نمط أو ترتيب. بدورها، تفسر آذاننا ذلك على أنه تموج أبيض. بعد قولي هذا، يخصص APU قناة واحدة تستطيع تشغيل أنواع مختلفة من الضوضاء.
خلف الكواليس، يعتمد مولد الضوضاء على مولد مغلف (مماثل لقناة الدفعة) ويتم إسكاتها عشوائيًا بواسطة بوابة OR [42]. يعتمد شرط الإسكاة على قيمة مسجل إزاحة مكون من 15 بت متصل بدائرة تغذية راجعة. عمومًا، يجعل هذا الدائرة تعمل بشكل شبه غير متوقع، وبالتالي تُحدث ضوضاء.
من حيث التحكم، تقوم 4 بتات بتغيير فترة مولد المغلف وبتة واحدة تغير ‘الوضع’ لمسجل الإزاحة. يترك ذلك 32 إعداداً مسبقاً للضوضاء متاحة. نصف هذه الإعدادات المسبقة (16) تنتج تموج نظيف، والنصف الآخر ينتج تموج ميكانيكي.
عمومًا، تستخدم الألعاب قناة الضوضاء للقرع أو التأثيرات المحيطية.
عينة
العينات هي قطع مسجلة من الموسيقى يمكن إعادة تشغيلها. كما ترى، العينات ليست مقيدة بنوع موجة واحدة، لكنها تستهلك مساحة أكبر بكثير.
لدى APU قناة واحدة مخصصة للعينات. هنا، العينات محدودة بدقة 7 بت (مشفره بقيمه من 0
إلى 127
) و بمعدل أخذ عينات ~15.74 كيلو هرتز [43]. لبرمجة هذه القناة، يمكن للألعاب أن تبث قيم 7 بت (والتي تستهلك الكثير من الدورات والتخزين) أو تستخدم تعديل دلتا لترميز الاختلاف فقط بين العينة التالية والسابقة.
تنفيذ تعديل دلتا في APU يستقبل فقط قيم 1 بت، هذا يعني أن الألعاب يمكنها فقط معرفة ما إذا كانت العينة تزداد أو تنقص بمقدار 1
في كل مرة يدخل فيها العداد. لذا، على حساب الوفاء، يمكن لتعديل دلتا أن يوفر على الألعاب الحاجة إلى بث قيم مستمرة إلى APU.
نظرًا لأن برمجة هذه القناة تستغرق مساحة أطول ودورات معالجة، عادةً ما تخزن الألعاب قطعاً صغيرة (مثل عينات الطبول) يمكن تشغيلها بشكل متكرر. كما هو الحال، وخلال فترة حياة NES، توصل العديد من المطورين إلى استخدامات ذكية لهذه القناة.
الأسرار و القيود
بينما لم يكن APU قابلاً للمقارنة بجودة الفينيل أو الكاسيت أو الأقراص المدمجة، وجد المبرمجون طرقًا لتوسيع قدراته، بفضل البنية التماثلية لـ NES.
القنوات الإضافية
هل تتذكر أن Famicom وفرت دبابيس خرطوشة حصرية متاحة لتوسيع الصوت؟ حسنًا، الألعاب مثل Castlevania 3 استفادت من هذا وضمت شريحة إضافية تدعى Konami VRC6، والتي أضافت موجتين دفعتين إضافيتين وموجة سن منشار إلى الخليط.
ألقِ نظرة على المثالين اللذين يوضحان الفرق بين النسختين اليابانية والأمريكية من اللعبة (الأخيرة تعمل على نوع NES، الذي لم يوفر قدرات توسيع الصوت).
ترموللو
بدلاً من زيادة تكاليف الخرطوشة، أولت بعض الألعاب الأولوية للإبداع على التكنولوجيا لإضافة قنوات أكثر.
في هذا المثال، جاء Final Fantasy III بفكرة استخدام تأثيرات التريمولو لإعطاء الشعور بالقنوات الإضافية.
ملاحظة أكثر دقة
الآن بعد أن حصلت على لمحة عن قدرات APU، دعني أريك طريقة بديلة لمراقبة صوتها. هذا لن يكمل ما تعرفه بالفعل عن APU فحسب، بل سيوفر أيضًا فحصًا أكثر موضوعية، خاصةً لأنه لا يعتمد على آذانك بعد الآن.
أولاً، لنبدأ بمقدمة سريعة لنظرية الصوت.
بفضل مبادئ تحليل فورييه، يمكننا تفكيك كل صوت نسمعه إلى مجموع موجات جيبية بترددات وسعات مختلفة [44]. الموجة الجيبية الأكثر بُعداً (ذات التردد الأدنى) تُسمى الأساسية والباقي يُسمى التوافقيات. إذا قمت بإضافة الموجة الأساسية وتوافقياتها، ستحصل على الصوت الأصلي. بعد قولي هذا، مع الأصوات التي تحتوي على نغمة معترف بها، ستجد أن معظم (إن لم يكن كل) التوافقيات لها ترددات مضاعفة لتردد الأساسي. لذلك، تُسمى هذه التوافقيات بـالتوافقيات [45].
ستصبح التوافقيات موضوعاً متكرراً في هذا القسم، حيث أن أشكال الموجات مثل النبضات والمثلثات والمشرومبات تتبع صيغة تحدد التوافقيات التي تحتويها. بخلاف ذلك، قد تنحرف هذه الأشكال الموجية عن شكلها ‘المثالي’.
مقدمة إلى المخططات الطيفية
نظرًا لأن الموجات الجيبية تُعد الآن المكون الرئيسي الذي يمكن أن يشكل أي صوت، يمكننا الآن تحليل الأصوات التي نسمعها بواسطة موجاتها الجيبية. الآن، لأي نوع من تحليل البيانات، لا يوجد شيء أكثر ملاءمة من رسم بياني لتنظيم كميات ضخمة من المعلومات. حسنًا، في حالة تحليل الصوت، لدينا الطيف الصوتي. تشفّر هذه الرسوم البيانية جميع معلومات عينة الصوت في رسم بياني واحد. يمثل محور X الزمن (بالثواني)، ويمثل محور Y الترددات (بالهرتز) للموجات الجيبية التي تم إنتاجها خلال ذلك الوقت، ويمثل المحور Z (سطوع الألوان لكل نقطة) القدرة/الجهارة (بالديسيبيل) لكل تردد.
كما يمكنك أن تلاحظ من هذا المثال، كل خط أفقي (يُعرف أيضاً باسم تسلسل النقاط) يتوافق مع موجة جيبية (أقلها هو الأساسي، بينما الباقي هي التوافقيات) ويدل سطوعها على السعة. وبهذا الاعتبار، يمكننا استخراج المعلومات التالية:
- بمرور الوقت، تميل الخطوط الأفقية إلى التغيير بشكل كبير. ذلك هو تغير نغمة قناة النبضة.
- بداية كل نغمة عالية (النقاط ساطعة) يليها زوال سريع. هذا هو تحكم الغلاف في وحدة معالجة الصوت يعمل.
- علاوة على ذلك، في نهاية فترة التلاشي، تظهر خط عمودي ساطع. إنه قصير جداً لذلك فهو غير مسموع بسهولة ولكن، على أي حال، هذا ضوضاء (صوت طقطقة قصير) وأشك في أنها نتيجة لعيب في وحدة معالجة الصوت.
- حفظ نغمة لأكثر من 0.25 ثانية يُظهر فيبراتو (تقلبات مستمرة في المحور Y). لست متأكدًا مما إذا كان ذلك مقصودًا (باستخدام وظيفة المسح) أو تأثيرًا سلبيًا لوحدة معالجة الصوت.
لاحظ كيف أن معظم هذه الملاحظات ليس من السهل استنتاجها بمجرد سماع عينة صوت، هذا هو السبب في كتابة هذا القسم.
رسم وحدة معالجة الصوت
لدراسة وحدة معالجة الصوت NES’، قمت بتجميع خمس طيفات صوتية، كل منها يتوافق مع قناة من وحدة معالجة الصوت باستخدام الأمثلة السابقة. بالإضافة إليها، ستجد محاولتي لكشف ما تعرضه البيانات.
قبل أن نبدأ، يجب أن أعترف أنه لكي أتمكن من جمع البيانات بدون تحريفات (مثل الضجيج الإضافي)، كان هناك بعض التنازلات. تم الحصول على التسجيلات باستخدام برنامج Windows يسمى ‘towave’، والذي يستخدم التوليف المحدود النطاق لحل مشكلة أساسية مع محاكاة رقائق الصوت القائمة على PSG. ببساطة، النبضات والمثلثات والمشرومبات مكونة من توافقيات لا نهائية. ومع ذلك، هذا لا يتوافق جيدًا مع بطاقات الصوت الحديثة المحدودة بـ 44.1 كيلوهيرتز للعينة. لذلك، تُستخدم تقنية تسمى ‘التوليف المحدود النطاق’ لاختيار التوافقيات الصحيحة ضمن حدود بطاقة الصوت. بشكل عام، توفر هذه التقنية توازنًا ممكنًا بين الأداء والدقة ومنع الناتج المشوّه. ومع ذلك، قد لا تكون البيانات متطابقة بنسبة 100% مع نظيرها التماثلي (الذي، بالمقابل، سيقدم أيضًا مشكلات أخرى، مثل الضوضاء من معدات التسجيل)، لكنني أعتقد أنها مقبولة إلى درجة معقولة، والأهم من ذلك، أنها تؤدي الوظيفة المطلوبة لهذا القسم من المقال.
وقيل ذلك، دعونا نبدأ التحليل.
النبض
تقول النظرية أن نغمة النبضة تحتوي فقط على توافقيات فردية. بمعنى آخر، يتم دمج الأساسي مع توافقه الثالث والخامس وما إلى ذلك. علاوة على ذلك، تقل سعة كل توافق مع ابتعادها عن الأساسي. صيغة السعة هي السعة = 1 ÷ رقم التوافق
[46].
لذا، لاحظ كيف أن سطوع كل توافق في الطيف يخف كلما ارتفعت في محور Y. ومع ذلك، يبدو أن موجات نبض وحدة معالجة الصوت تعرض أيضًا تأثير التوافق المذكور سابقاً والذي يزداد مع كل رقم توافق. علاوة على ذلك، تحتوي مناطق في مخطط الطيف التي من المفترض أن تكون خالية من أي صوت على ترددات خافتة (ربما نتيجة الضجيج وعيوب أخرى).
مثلث
الموجة المثلثة تتكون أيضاً من توافقيات فردية ولكن مع انخفاض أسرع في سعتها (حيث السعة = 1 ÷ رقم التوافق²
[47]).
ومع ذلك، هذا ليس ما يظهر هنا، فالمثلث على شكل سلم الذي تنتجه وحدة معالجة الصوت يؤدي إلى توافقيات إضافية وزيادة في السعات.
الضجيج
بطبيعة الحال، لا تلتزم الضوضاء بقواعد التوافقيات وقد تملأ الفضاء الترددي بالكامل عشوائيًا، وبالتالي الافتقار إلى درجة يمكن التعرف عليها بسهولة.
على الرغم من ذلك، من خلال متابعة الجدول الزمني يمكنك التمييز بين مختلف الإعدادات المسبقة للضوضاء التي توفرها وحدة APU، وكل منها يعرض مجموعة مميزة من التوافقيات.
عينة
على عكس القنوات السالفة، تشغل قناة العينة فقط أي تسجيل منخفض الدقة يقودها المطور إلى وحدة APU. باعتبار المثال الذي يلعب مجموعة الطبول، لا أستطيع رؤية أي ميزات قابلة للتحديد على المخطط الطيفي (باستثناء أوجه التشابه مع الضوضاء البيضاء).
سن منشار
كمكافأة، دعونا نتحقق أيضًا من قناة المنشار من توسعة VRC6. في البداية، يتم تكوين موجة سن المنشار المثالية من جميع التوافقيات وكل واحدة منها تظهر مع انخفاض في السعة (حيث السعة = 1 ÷ رقم التوافقي
[48]).
هذا مطلب كبير بالنسبة للمعدات الرقمية وهو مكلف بطبيعة الحال على خرطوشة الألعاب (قد لا يحتاج ذلك إلى مثل هذا الكمال!). لذلك، وبالمثل لموجات المثلث في وحدة APU، تسلسل VRC6 موجات المنشار في 7 دورات (وبالتالي ينتج عن ذلك تأثيرات سلمية مشابهة).
وبالتالي، فإن المخطط الطيفي المقابل فوضوي جدًا، تملأ تقنيات التقريب في VRC6 الموجة بتوافقيات إضافية في العديد من الأماكن.
الخاتمة
حسناً، يبدو أن الأشكال الموجية الاصطناعية لنظام NES لا تتطابق بأي حال مع ما تمليه النظرية. هل يعني ذلك أن وحدة APU بها عيوب؟ لا! انتهى تصميم وحدة APU بمنح هذه الوحدة أصواتًا فريدة ويمكن التعرف عليها - وهذه الخصائص، سواء كانت مقصودة أم لا، جعلت المخططات الطيفية تعرض نتائج غير اعتيادية.
كملاحظة جانبية، قد تكون الجغرافيا المثالية ممتعة للنظر بأعيننا، لكن الفضول يكاد يوصل إلى نتيجة أن آذاننا ليست مولعة بشكل خاص بالموجات ذات الحواف المثالية! (قد تبدأ في سماع ضوضاء النقر).
بالنظر إلى المستقبل، سيكون تحليل الصوت باستخدام المخططات الطيفية مفيدًا في مقالات أخرى، سواء كان ذلك لتحليل بسيط أو لإجراء مقارنات مع أنظمة أخرى. يرجى ملاحظة أن هذه الرسوم البيانية ليست الأداة الشاملة بأي حال من الأحوال، خاصة مع العينات الصوتية التي تم خلطها بالعديد من القنوات/الأدوات (مما يصعب تفكيكها بشكل كبير). لكنني أعتقد أنها ستوفر بداية قوية لأي نوع من الدراسات الموضوعية.
الألعاب
تم كتابة ألعاب NES بشكل أساسي بلغة التجميع 6502 وتقع في ذاكرة البرنامج ROM، بينما يتم تخزين رسومات اللعبة (البلاطات) في ذاكرة الأحرف.
علاوة على ذلك، كانت الألعاب تباع (أو تؤجر) في متاجر التجزئة بموافقة نينتندو.
الوسط البديل
على الرغم من أنه تم إصدارها فقط في اليابان، اعتقدت أن هذه ستكون فرصة جيدة لتقديم ملحق قصير العمر ولكنه غريب، وعلى غرار الأجهزة المحمولة، أضاف مزايا إضافية إلى هذه الوحدة. تمت تسمية هذا الجهاز الطرفي Famicom Disk System (FDS) وتم شحنه في عام 1986 (~3 سنوات بعد فاميكوم). كان له شكل قارئ قرص مرن خارجي وجاء مع خرطوشة بشكل غريب تسمى ‘محول RAM’.
أضاف نظام قرص فاميكون الخدمات التالية إلى فاميكون:
- وسيلة جديدة لتوزيع الألعاب تسمى قرص فامي كوم [49]. بناءً على ‘القرص السريع’ من ميتسومي، يوفر ~64 كيلوبايت من البيانات لكل جانب وهو قابل لإعادة الكتابة.
- قناة صوتية إضافية تستخدم موجة الجدول [50].
نظرًا لأن القرص المرن هو وسيط واحد (على عكس الخراطيش متعددة الشرائح)، يجب تكثيف جميع بيانات اللعبة بداخله، مع الحفاظ على تنظيمها باستخدام نظام ملفات المملوك.
ومع ذلك، يتطلب Famicom/NES بفصل صارم بين ذاكرة البرامج وذاكرة الأحرف لتعمل، لذا فإن وظيفة ‘محول RAM’ هي فرز البيانات. يحتوي هذا المكون على 32 كيلوبايت من ذاكرة البرنامج RAM و 8 كيلوبايت من ذاكرة الأحرف RAM لتخزين بيانات اللعبة المقروءة من القرص المرن، وبذلك يمكّن وحدة التحكم من قراءته كما لو كانت لعبة تستند إلى خراطيش.
لتشغيل المحرك، يضم محول RAM ROM إضافية بسعة 8 كيلوبايت لتخزين نظام BIOS [51]. يقوم هذا البرنامج بأداء المهام التالية:
- يحمّل رسماً متحركاً للإظهار.
- يُشغل اللعبة من القرص المرن. في الخلفية، يحتوي BIOS على روتينات لنسخ محتويات القرص المرن إلى شريحة الذاكرة المعنية، حتى يتمكن الجهاز من قراءته.
- يوفر واجهات برمجية لإدخال/إخراج البيانات يمكن للألعاب استخدامها، مثل تصفح نظام ملفات الأقراص.
خلال تلك الحقبة، نشرت نينتندو بعض ‘الكشك’ في متاجر البيع بالتجزئة حتى يتمكن المستخدمون من إحضار أقراصهم ونسخ لعبة جديدة بسعر منخفض.
لسوء الحظ، بعد بضع سنوات من عمر النظام، تم إيقاف نظام أقراص فاميكوم وعادت ألعاب لاحقة إلى الوسائط الكرتوشية. على الجانب المشرق، كانت هناك دوائر جديدة متاحة بقدرات مشابهة (أو أفضل) مقارنة بوظائف FDS.
مكافحة القرصنة وقفل المنطقة
تمكنت نينتندو من منع النشر غير المصرح به بفضل تضمين شريحة خاصة للتحكم في الوصول تسمى التحقق من الدائرة المتكاملة (CIC) [52]. يقع في وحدة التحكم وهو متصل بإشارة إعادة الضبط (وبالتالي لا يمكن إزالته بسهولة).
تقوم هذه الشريحة بتشغيل 10NES، وهو برنامج داخلي يتحقق من وجود شريحة قفل أخرى في خرطوشة اللعبة. إذا فشل هذا الفحص، يتم إرسال وحدة التحكم إلى إعادة ضبط لا نهائية.
تكون رقائق القفل في تواصل مستمر خلال وقت عمل وحدة التحكم. يمكن تهزيم هذا النظام عن طريق قطع واحد من دبابيس قفل وحدة التحكم، مما يترك الشريحة في حالة خاملة. بدلاً من ذلك، يمكن تجميده عن طريق إرسال إشارة -5V.
يترسخ نظام CIC نتيجة للخوف الناجم عن انهيار سوق ألعاب الفيديو عام 1983. قرر رئيس نينتندو في ذلك الوقت، هيروشي ياموتشي، أنه لتنفيذ ألعاب ذات جودة جيدة، ينبغي أن يكونوا مسؤولين عن الموافقة على كل واحدة منها [53].
ستلاحظ أن الطراز الياباني من وحدة التحكم، فاميكم، تم إصداره قبل انهيار 1983. هذا هو السبب في أن كل من خراطيش الألعاب ووحدة التحكم لا تحتوي على دائرة CIC [54]؛ بدلاً من ذلك، تُستخدم الدبابيس لتوسيع الصوت اختياريًا.