في مارس ومايو من هذا العام ، قضيت عدة أسابيع (في المساء وعطلات نهاية الأسبوع) في نقل لعبة Lode Runner من BK-0010 إلى UKSC.لقطة شاشة القائمة المنقولة:
شاشة اللعبة للنسخة المنقولة:
BK-0010 هو جهاز كمبيوتر منزلي في أواخر الثمانينيات وأوائل التسعينات ، وجزئيًا كمبيوتر مدرسي (فئات KUVT-86). UKSC هو كمبيوتر مدرسي في التسعينات. BC و UKSC متوافقان جزئيًا في الهندسة المعمارية ونظام الأوامر - يعود كلا جهازي الكمبيوتر إلى عائلة PDP-11.اختيار اللعبة
حتى هذا العام ، لم أكتب أي شيء خطير بموجب UKSC ، لكن كان عليّ فهم رمز الآلة. كانت هناك رغبة في كتابة شيء ما ، ولكن عادة ما أعاني من مشاكل كبيرة في وقت الفراغ ، لذلك بالكاد تعمل من الصفر. وبالنسبة للمبتدئين ، من الأفضل أن تأخذ المهمة بشكل أسهل. عند النقل ، عادة ما يكون مقدار العمل أقل بكثير مما هو عليه عند الكتابة من البداية - فأنت تواجه بشكل أساسي مشاكل عدم التوافق بين النظامين.في منتدى zx.pk.ru (أحد الأماكن التي يقضي فيها المشجعون على إعادة المعالجة بشكل عام والأجهزة المتوافقة مع PDP-11 على وجه الخصوص) ، أشاد مشارك hobot بتنفيذ Lode Runner على BC - كان هذا في الواقع السبب ، بداية حاولت "النظر" إلى رمز اللعبة ، حسنا ، تورط.قائمة الإصدار الأصلي:
شاشة اللعبة للنسخة الأصلية (على شاشة ملونة):
الهندسة العكسية
أمضيت بضعة أسابيع في المساء وعطلات نهاية الأسبوع وقتًا في التحليل والتفكيك. في المحاكي ، أضاف BKBTL القدرة على جمع التتبع - أي يتم تفكيك كل تعليمة وحفظها في ملف نصي.أقوم بتشغيل الجزء الذي يثير اهتمامي بتسجيل التتبع ، ثم أقوم بتخطي التتبع (الفرز & uniq) - أحصل على أجزاء من المنطق. أضفت تعليقات على هذا ، أحصل تدريجياً على ملف مشترك.يبدو الأمر بسيطًا ، ولكنه في الواقع عمل معقد إلى حد ما يعتمد على التخمينات وتأكيدها أو دحضها. على سبيل المثال ، نرى أن العنوان 001756 قبل بداية اللعبة يحصل على القيمة 10 ، ثم يتم إنقاصه ، عندما يصل إلى 0 ، تنتهي اللعبة - على ما يبدو ، هذا هو عدد الأرواح. نجد تأكيدًا لذلك ، ونضع تعليقات على النص حيث يحدث هذا العنوان. هذا مثال بسيط إلى حد ما ، في الحالات الأكثر تعقيدًا ، قضيت الكثير من الوقت في معرفة ما كان يحدث.عندما أصبح الحجم المستلم كبيرًا جدًا (أكثر من 40 كيلوبايت من النص ، أكثر من 1500 سطر) ووجدت على الأقل بشكل عام ما كان يحدث ، وكيف تم تخزينه وعرضه - بدأت أفكر في كيفية ترجمته إلى UKSC.هنا يمكنك إلقاء نظرة على القائمة النهائية الناتجة عن التفكيك:github.com/nzeemin/uknc-loderunner/blob/master/original/loderunner.lstمتاهة
كل متاهة تتكون من 20 سطرًا من 30 كتلة ، ما مجموعه 600 كتلة.يتم ترميز نوع الكتلة برقم من 0 إلى 7 - ثلاث بتات ، ثلاثية. للحصول على كلمة واحدة من 16 بت ، يتم الحصول على 5 توائم كاملة.عند العمل مع آلات مثل PDP-11 ، يتم استخدام نظام 8 عشري على نطاق واسع ، وبالتالي فمن الملائم تمامًا استخدام ثلاثة توائم.ونتيجة لذلك ، تتناسب كل متاهة مع 240 بايت.أنواع الكتل:; 0
; 1
; 2
; 3
; 4
; 5
; 6
; 7
يتم ترتيب نقوش هذه الكائنات بترتيب ترقيم أنواع الكتل. عندما يتم فك متاهة ، في نفس الوقت يتم إنشاء "صورة متاهة" في الذاكرة (بايت لكل كتلة) ، ويتم رسم الحالة الأولية للمتاهة على الشاشة.تنظيم الشاشة
على BC ، يتم تناول الشاشة مباشرة عن طريق الوصول إلى الذاكرة ، وتنتقل الخطوط واحدة تلو الأخرى ، في الواقع إنها "Framebuffer" ، وأود أن أقول أنها جيدة - إنها مريحة جدًا لبرمجة الرسومات. الخط BC - 256 بكسل ملون ، 64 بايت لكل سطر. لكن عدد وحدات البكسل المتتالية يعتمد على كيفية توصيل الشاشة:إذا كانت باللونين الأبيض والأسود ، فهي 512 b / w بكسل متتالي (1 بت لكل بكسل ، 8 بكسل لكل بايت) ،وإذا كانت لإخراج اللون ، فهذا هو 256 بكسل لون لكل سطر (2 بت لكل بكسل ، 4 بكسل لكل بايت).في UKSC ، يختلف تنظيم الشاشة تمامًا ، وأكثر تعقيدًا. تقع الشاشة في ثلاث كتل من الذاكرة ، ثلاث "خطط". وكل بكسل هو ثلاثة بتات ، قليلاً في كل مستوى - نحصل على 8 ألوان. في UKSC لدينا العديد من أوضاع الفيديو - 640 × 288 ، 320 × 288 ، 160 × 288 ، بتعبير أدق ، لدينا دائمًا 288 سطرًا تمامًا ويمكنك تطبيق المقسم الخاص بك على كل خط فردي ، والحصول على درجات دقة أفقية مختلفة. بالنسبة لوحدة المعالجة المركزية (CPU) ، لا يمكن الوصول إلى خطط الشاشة مباشرة ، إلا من خلال الوصول إلى المنافذ. علاوة على ذلك ، تتوفر خطتان فقط من أصل ثلاث خطط لوحدة المعالجة المركزية.في هذه الحالة ، يناسبني وضع 320 × 288 جيدًا - يتم الحصول على الخط في 320 لون بكسل 80 بايت في كل من الخطط الثلاثة. إذا كنت تستخدم خطتين ، فإن وحدات البكسل هي أيضًا أربعة ألوان - تقريبًا مثل BC.نتيجة الجمع بين الطريحة والنقيضة
بدأ في كتابة أمثلة في مجمع UKSC وكان مكتئبًا بعض الشيء - لأن الدورة "المجمعة - المرتبطة - التي تم إطلاقها" بطيئة نوعًا ما. المشكلة في الأدوات. يوجد MACRO11 المجمع عبر ، على الرغم من أنه عربات التي تجرها الدواب إلى حد ما. ولكن لا يوجد رابط متقاطع. ولكن لحسن الحظ ، منذ وقت ليس ببعيد نشر Patron وحدة التحكم RT-11: zx-pk.ru/showthread.php؟t=24755 - في الواقع هو محاكي لجهاز متوافق مع PDP11 يتفاعل مع سطر أوامر نظام التشغيل كما هو الحال مع محطة طرفية. وبالتالي ، أصبح من الممكن تجميع وربط الوسائل الأصلية لـ RT-11. هذا أعتبره اختراقة حقيقية ، وسرع العمل بشكل كبير.بعد ذلك ، سارت الأمور على ما يرام ، وقمت برسم إطار ملعب اللعب ، وعرض النقوش المتحركة ، واكتشفت كيفية خلط البتات في النقوش المتحركة (كتبت برنامجًا في C # لخلطها) ، ثم في الكتل بدأت في نقل الرمز من الملف المشترك مع disasma إلى المصادر الجديدة. أخذت تفريغ ذاكرة من BC ، خصصت كتلة حيث تكون المستويات ، جعل الأداة المساعدة RT11 DUMP كتابًا للمستويات.أولاً ، قمت بنقل كتلة من التعليمات البرمجية التي تعرض المستوى ، وعلى هذا قمت بتصحيح ناتج العفاريت. ثم بدأ في نقل منطق اللعبة. أولئك. بشكل عام ، يكون النقل تقريبًا واحدًا لواحد ، باستثناء الأماكن التي تذهب إليها الشاشة. لذلك ، هناك أماكن في المنطق لا أفهم كيف تعمل (نفس جحيم الذكاء الاصطناعي) ، ولكن لا يهم - الشيء الرئيسي هو أنها تعمل.ونتيجة لذلك ، بحلول بداية مايو (عندما امتصني العمل الرئيسي مرة أخرى) ، تم الحصول على خيار عمل ، على الرغم من عدم وجود صوت.صورة لعبة عمل على آلة حقيقية (بفضل hobot):
المراجع