المضلعات عالم آخر: أميغا 500

هذا المقال جزء من سلسلة حول منافذ لعبة عالم آخر. سوف نتحدث عن الحيل عند العمل مع Amiga 500 . يوصى بقراءة المقال السابق أولاً .


تبدأ قصة Amiga في منتصف عام 1982 بدعوة من لاري كابلان إلى Jay Miner. ثم عمل كلاهما في أتاري في السبعينيات. كلاهما قرر مغادرة الشركة. كابلان بسبب عدم الاعتراف والتعدين بسبب فرض حظر على القيادة على استخدام معالج Motorola 68000 الرائع والمكلف.


ترك Atari ، أسس كابلان Activision. بعد أن طلب منه المستثمرون تطوير منصة ألعاب جديدة ، اتصل بأكثر الناس ذكاءً الذين عرفهم. تولى مينر أجهزة القضية في شركة Hi-Toro المشكلة حديثًا. تلقى النظام اسم الكود "لورين".


بحلول نهاية عام 1983 ، تم تجميع نموذج أولي. أثار الجهاز إعجاب زوار معرض الإلكترونيات الاستهلاكية (CES) في يناير عام 1984 ، وذلك بفضل عرض Boing Ball ، حيث تحركت العفاريت الضخمة بمعدل إطارات يبلغ 60 إطارًا في الثانية. تم الإعلان عن الجهاز في عام 1985 تحت اسم "Amiga from Commodore" ، وتمت إعادة تسميته لاحقًا باسم Amiga 1000.




ملاحظة: تعذر تشغيل Amiga 1000 من تلقاء نفسه ، ولم يكن الجهاز يحتوي على ذاكرة قراءة فقط. كان محمل الإقلاع على قرص مرن ، وسيكون من الأفضل إذا قمت بتخزينه كتفاحة لعينيك!


سلسلة من المقالات


  1. المضلعات عالم آخر .
  2. المضلعات عالم آخر: أميغا 500.
  3. المضلعات عالم آخر: Atari ST .

A500


بحلول عام 1985 ، بعد سلسلة من الأخطاء ، كان العميد البحري في وضع ينذر بالخطر على وشك الإفلاس. توماس راتيجان ، ثم مدير العمليات ، قام بتغيير جذري. بالإضافة إلى خطة طموحة تغطي جميع أقسام الشركة تقريبًا ، قام بتقسيم Amiga 1000 إلى منتجين: إصدار جديد متطور تم تصميمه للسوق الإبداعي المسمى Amiga 2000 ونسخة غير مكلفة لـ Commodore 64 تسمى Amiga 500.


تم إطلاق Amiga 500 ، المعروفة أيضًا باسم A500 ، في عام 1987. تحت غطاء محرك السيارة من موتورولا 68000 ، كان الجهاز يعمل على 7.16 ميغاهرتز وكان 512 كيلو بايت من ذاكرة الوصول العشوائي. أصبح الجهاز ناجحًا للغاية ، واكتسب شعبية بين اللاعبين والمبرمجين ، ولا سيما الأشخاص من المشهد التجريبي. كان المنتج الأكثر مبيعًا في كومودور (تم بيع ما يقرب من 6 ملايين وحدة من 1987 إلى 1991 [1] ).



كان لدى A500 ذاكرة قراءة فقط ، ولكن لم يكن هناك سوى ذاكرة كافية لاستيعاب أداة تحميل التشغيل تسمى Kickstart. بعد تهيئة الجهاز ، يطالب Kickstart المستخدم بإدخال قرص مرن يحتوي إما على برنامج أو Workbench OS. يجب أن يظل القرص المرن في محرك الأقراص أثناء تشغيل الجهاز. كانت للطرز اللاحقة ، مثل A1200 (المعروف أيضًا باسم أكبر آلة صنعت على الإطلاق) ، مساحة على محرك أقراص ثابت بحجم 2.5 بوصة وتم تحريرها من استخدام الأقراص المرنة.


هندسة معمارية


نظرًا لأنه تم إنشاء التقنية في الأصل بهدف اللعب [2] [3] ، لم يتم تصميم Amiga على معالج "حديد" مع إمكانية الصوت والفيديو ، مثل معظم أجهزة الكمبيوتر في ذلك الوقت. يعمل الطراز 32/16 بت 68000 جنبًا إلى جنب مع مجموعة الشرائح ، التي تضم ثلاث شرائح قوية: Paula (صوت) ، و Denise (فيديو) ، و Agnus (معالجة البيانات وتزامنها).



ساهم تصميم مشابه مع نظام ذاكرة لا يوفر فقط عنونة مسطحة ، ولكن أيضًا ذاكرة الوصول العشوائي الشائعة المتوفرة لكل من المعالج والشرائح ، في زيادة شعبية أميغا بين المطورين. للمقارنة ، لم يكن لدى Sega Genesis ولا Nintendo SNES ، وهما نظامان قويان تم إصدارهما بعد سنوات (على التوالي ، في يناير 1989 ونوفمبر 1990) ، ذاكرة مشتركة.


يحتوي ناقل الشرائح على نظام أولوية معقد حيث 68000 غير نشط في الدورات الزوجية. تحاول مجموعة شرائح DMA (الوصول المباشر للذاكرة) استخدام دورات فردية فقط لتضاعف الوصول إلى ناقل الحافلة بشكل تدريجي دون التأثير على المعالج. ولكن ليس كل شيء كان دائما على نحو سلس. على وجه الخصوص ، واجه Agnus جيدًا حيث كان 68000 يتضورون جوعًا [4] .


لحل هذه المشكلة ، يمكن للعملاء شراء امتداد "ذاكرة الوصول العشوائي السريع" باستخدام "ناقل وحدة المعالجة المركزية" المخصص لـ 68000. مع التعليمات الموجودة هناك ، 68000 [5] وحدة المعالجة المركزية لم تشعر بالجوع عندما كانت قناة DMA الخاصة بـ blitter [15] نشطة. هذا تضاعف سرعة التنفيذ من 68000.


نظام الفيديو


يتم التحكم في نظام الفيديو بالكامل بواسطة Denise ، حيث يقدم ما مجموعه 20 وضع رسوم بيانية [6] . كانت الدقة الأكثر شعبية 320 × 200 مع نسبة عرض إلى الارتفاع تبلغ 1.6 ، والتي لا تتوافق مع أجهزة العرض في ذلك الوقت (4/3 = 1.3). تؤدي نسبة العرض إلى الارتفاع إلى التشويه عند إرسال المخزن المؤقت للإطار إلى شاشة CRT.



لا يتم تخزين Framebuffer بشكل مستمر ، ولكن في مناطق منفصلة من الذاكرة تسمى طائرات البت. يمكن تخصيص ما يصل إلى خمسة مستويات [7] بت من 8 كيلوبايت ، مما يعطي 5 بت لكل بكسل ، مما يتيح لك الحصول على 32 فهارس ألوان. للوهلة الأولى ، يبدو هذا النهج محرجًا للغاية (خاصة بالنسبة للمطور الذي يتمتع بخبرة في مجال الكمبيوتر الشخصي) ، لكن Agnus وخصوصًا blitter ككل يوفر المزيد من الوضوح.


تعتمد اللوحة على مساحة ألوان RGB 4 بت لكل قناة. يسمح لك 12 بت لكل لون بتحديد ما يصل إلى 4096 لونًا مختلفًا ، والذي كان أكثر بكثير من المعتاد على أجهزة الكمبيوتر من نفس الحقبة.


سمحت لنا العديد من الحيل بعرض المزيد من الألوان. مثل النحاس ، مما يسمح لك بتغيير اللوحة إلى HSYNC.


تمثل الصورتان التاليتان وجهان متعاكسان لمساحة ألوان RGB. باللون الأسود عند الإحداثيات (0x0 ، 0x0 ، 0x0) ، والأحمر عند (0xF ، 0x0 ، 0x0) ، والأخضر عند (0x0 ، 0xF ، 0x0) الأزرق عند (0x0 ، 0x0 ، 0xF) والأبيض عند (0xF ، 0xF) 0xF) . توضح هذه الصور الملونة بشكل جيد الحرية الإبداعية الممنوحة لمطوري الرسوم.




عالم آخر على أميغا


عالم آخر على أميغا ، في الواقع ، ليس ميناء. منذ استخدام A500 للتطوير ، هذه هي النسخة الأصلية التي تم إنشاؤها بين عامي 1989 و 1991 من قبل إريك شاي البالغ من العمر 21 عامًا ، والذي كان يعمل بمفرده في غرفة نومه.



سببين جعلا Amiga آلة التطوير المثالية. أولا ، يسمح GenLock rotoscoping. ثانياً ، والأهم من ذلك ، أن Amiga Agnus سهَّلت بشكل كبير عملية تقديم المضلعات.


blitter


نشأت فكرة إنشاء لعبة تعتمد فقط على المضلعات بسبب الافتراض الخاطئ بأن "Dragon's Lair، Escape from Singe's Castle" على Amiga استخدمها [8] . وكان اريك لتنفيذ هذا بطريقة أو بأخرى مع معدل الإطار معقول. في هذه المرحلة من البحث والتطوير ، لعبت أميغا بلايت دورًا رئيسيًا.


مضلع الرسم


تشير وثائق blitter إلى ميزة تسمى "وضع ملء المساحة". نحن لا نتحدث عن الإسقاط ثلاثي الأبعاد الهائل أو التركيب. يعمل Blitter في مساحة الشاشة على سلاسل البت مع خيار "ملء الفراغ". يعتمد العمل على المسح من اليسار إلى اليمين. طالما يرى blitter 0 ، لا يحدث شيء. حالما يتم تمرير أول 1 ، سوف تملأ الخفة الخط بوحدات حتى 1 التالي. يوضح الشكل من الوثائق العمل بشكل جيد. لاحظ أنه يمكن عرض مضلع مقعر بشكل صحيح باستخدام هذه الطريقة.


      مجموعة قليلا قبل مجموعة قليلا بعد
   ______________________ ______________________
  |  |  |  |
  |  |  |  |
  |  |  |  |
  |  1 1 1 1 |  |  11111 11111 |
  |  1 1 1 1 |  |  1111 1111 |
  |  1 1 1 1 |  |  111 111 |
  |  11 11 |  |  11 11 |
  |  1 1 1 1 |  |  111 111 |
  |  1 1 1 1 |  |  1111 1111 |
  |  1 1 1 1 |  |  11111 11111 |
  |  |  |  |
  |  |  |  |
  | ______________________ |  | ______________________ |

    

يؤدي هذا الحل إلى المشكلة الثانية - كيفية رسم "حدود" المضلع. إذا نظرت بعناية إلى الشكل أعلاه ، سترى أن هذه خوارزمية Bresenham غير قياسية [9] ، حيث يجب تخطي الخطوط الأفقية. لحسن الحظ ، قدم المصمم Amigi وضع رسم الخط إلى blitter [10] .


لم ننته بعد. لا تزال هناك مشاكل. أولاً ، يجب أن يتم "رسم الخطوط ثم ملء المنطقة" أربع مرات (مرة واحدة لكل طائرة بت) ، والتي تبدو مكلفة للغاية. ثانياً ، يجب أن يعرض المحرك مئات المضلعات. يحتاج Blitter إلى مخزن مؤقت نظيف مليء بالأصفار وحدود الوحدة الجيدة للعمل معه. بعد عدة مضلعات ، قد يبدو المخزن المؤقت للإطار كحساء من البتات. أخيرًا ، يطبع blitter 1s فقط ، لكننا نحتاج إلى القدرة على إخراج 0 في بعض الطائرات الأربعة بت من أجل توليد اللون الصحيح 4 بت.


الحل لهذه المشاكل هو تكوين مدخلات من blitter A و B و C [11] . يتم شرح هذه العملية بشكل أفضل بواسطة Blogger Scali في مدونته [12] .


... يوجد حل لهذه المشكلة ، وهي ليست بهذه الصعوبة. يمكن أن يظهر Blitter في أي مكان في chipmem ، لذلك فمن السهل تعيين مخزن مؤقت مؤقت نظيف ، و "scratchpad" ، ورسم مضلع فيه. ثم انسخها إلى المساحة الفعلية للشاشة باستخدام القليل من الضوء على القناع [16] . في كثير من الأحيان تسمى هذه العملية أيضًا قطع ملف تعريف الارتباط. هذه هي العملية نفسها التي ستستخدمها مع الصور ثنائية الأبعاد عند تسجيل وحدات البكسل فقط عندما تكون مضبوطة في الصورة الأصلية ، وترك وحدات البكسل الهدف دون تغيير (العملية المنطقية أو العملية). سيؤدي هذا إلى دمج المضلعات على الشاشة بشكل صحيح.


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


= ( ) ( )


- Scali في OpenBlog



استنادًا إلى بيانات الإدخال الخاصة بـ blitter ، لدينا الآن صورة كاملة لما هو مطلوب لتقديم كل مضلع.


  1. حدد قطعة من المخزن المؤقت.
  2. صفر نظيفة مع blitter.
  3. ارسم حدود المضلع بوحدات في وضع خط الرسم.
  4. املأ المنطقة العازلة بوحدات في وضع "ملء المنطقة".
  5. مداهمات قطعة من المخزن المؤقت أربع مرات (مرة واحدة لكل طائرة بت).

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


نسخة framebuffer


وبغض النظر عن السرعة التي يمكن بها للخلاط أن يرسم المضلعات ، فإنه لم يكن سريعًا بدرجة كافية. يتكون كل إطار من آلاف المضلعات. بعض المضلعات صغيرة جدًا (1 × 1 ، تسمى البيجيجونات) بحيث لا تبرر الحمل. واحدة من الخلفيات الأولى في اللعبة (عندما يترك ليستر الماء) تتكون من 981 مضلّع.



كان الحل هو تخزين الخلفية مؤقتًا في مخزن BKGD خاص بنسخ بسيطة. لقد كانت هذه مهمة خاصة بالنسبة إلى blitter.


Blitter هو واحد من اثنين من coprocessors في Amiga. كجزء من شريحة Agnus ، يتم استخدامه لنسخ كتل الذاكرة المستطيلة ورسم الخطوط. عند نسخ الذاكرة ، تكون أسرع من 68000 تقريبًا وهي قادرة على نقل ما يقرب من أربعة ميغابايت في الثانية. يمكنه رسم خطوط بسرعة تقارب مليون بكسل في الثانية.


- Amiga Developer CD v2.1 (OS 3.5)



بسرعة 4000 بايت بالميلي ثانية ، يتطلب دمج مخزن مؤقت BKGD في بداية كل إطار جديد 8 مللي ثانية فقط.


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


Framebuffer ملء


على الرغم من أن المعالج 68000 يمكنه تسجيل 16 بت في المرة الواحدة ، إلا أنه من المحتمل أيضًا تنظيف المكياج المعدني باستخدام بلاطة. تحتوي وثائق Amiga على رمز "clearmem" [14] يستخدم blitter لتنظيف 128 كيلو بايت من ذاكرة الوصول العشوائي.


مراجع


  1. ويكيبيديا: أميغا 500 .
  2. العميد البحري: سنوات أميغا .
  3. العميد البحري: السنوات الأخيرة .
  4. أميغا رقاقة ذاكرة الوصول العشوائي .
  5. ويكيبيديا: أميغا الأجهزة .
  6. أوضاع شاشة Amiga .
  7. Amiga في الوقت الحقيقي 3D الرسومات .
  8. الكلاسيكية لعبة Postmortem - عالم آخر .
  9. خوارزمية بريزنهام .
  10. 6 Blitter Hardware / Area Fill Mode .
  11. 6 Blitter Hardware / DMA channel .
  12. فقط اجعلها حقيقية ، الجزء 3 .
  13. رمز العجلة .
  14. وثائق Amiga ، 'مثال: Clearmem' .
  15. Blitter .
  16. الشق قليلا .

Source: https://habr.com/ru/post/ar483140/


All Articles