وسام البهنسي

مدونة مبرمج معماري

برمجة 16-بت مع بعض الحنين

السلام عليكم،

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

بدايتي مع البرمجة الحقيقية كانت في 1998 على لغة C. في ذلك الوقت كان ويندوز 98 قد ظهر، مبعداً المستخدمين أكثر وأكثر عن نظام التشغيل العتيق MS-DOS. وهكذا فإن أولى مغامراتي البرمجية كانت على ويندوز من خلال Visual C++ 5 والذي ينتج لك برامج تعمل على ويندوز بنمط 32-بت فقط. لذلك، لطالما كنت أحس أنني قد أضعت على نفسي خبرة برمجة الألعاب على نظام MS-DOS، حيث كانت الغالبية العظمى من الألعاب التي لعبتها في صغري وأحببتها وتعلقت بها. طبعاً برمجة الألعاب بحر واسع سواءً على نظام ويندوز أو غيره، وهكذا جرفني تيار الزمن بعيداً عن برمجة DOS لأركز على برمجة الألعاب وفقاً للمعايير المعاصرة.

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

بعد القراءة خلال ثلاثة أيام، فهمت خلالها كيفية عمل البرامج تحت هذه البيئة القديمة، واستطعتُ أن أفهم أخيراً سر كل تلك الحيل التي كنا نستخدمها لمحاولة تشغيل بعض الألعاب القديمة عن طريق إضافة سطور في ملف CONFIG.SYS لتحميل برامج التشغيل في "الذاكرة العالية" (Extended Memory) والإمكانيات التي قدمتها وظائف برنامج QEMM386 والسبب وراء انتشار ما يدعى DOS4GW، ومواضيع الرسوميات المتقدمة مثل وظائف VESA للحصول على دقة شاشة عالية (أنماط SVGA). الكثير والكثير من المعلومات الشيقة التي أقرؤها لأول مرة من منظور المبرمج.

وأخيراً، بعد أن تكونت لدي المعلومات الكافية، قررتُ أن أكتب بنفسي بريمجاً صغيراً يعمل على DOS ويقوم ببعض العمليات الرسومية البسيطة التي كانت شائعة آنذاك. وكنوع من العرفان بالجميل، قررت أن أخصص هذا البريمج لشركة Sierra On-line التي أتحفتنا بألعابها الرائعة في العقود الماضية قبل أن تغلق أبوابها. تشتهر ألعاب Sierra بافتتاحياتها المميزة التي يظهر بها اسم الشركة مع نغمة لطيفة تخبرك بأن ساعات من المتعة والاستكشاف تنتظرك ورائها. وهكذا، كتبت برنامجاً يظهر نفس الشعار مع الحركات اللونية والنغمة المصاحبة له. هذه النسخة من الشعار تستخدم أسلوب تحريك اللوح اللوني (palette animation) والذي كان سائداً في تلك الفترة كطريقة سريعة للحصول على مؤثرات جذابة (كالتموجات المائية أو الحواجز الليزرية).

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

من الجدير بالذكر أن برمجة الرسوميات في DOS بسيطة ومباشرة جداً طالما أنك تستخدم وظائف قياسية مدعومة من ال BIOS. ذاكرة كرت الشاشة متاحة دائماً في عنوان ثابت. كل ما عليك هو الكتابة هناك وانتهى الموضوع.

للأسف لا يمكننا قول نفس الشيء عن برمجة الصوت، حيث لا توجد أية معايير، وبالتالي ستضطر لكتابة كود خاص لدعم كل بطاقة صوت تودّ إتاحتها بنفسك. في هذه الحالة توجهتُ لبرنامج تشغيل موسيقى للدوس مفتوح المصدر (DOSMid) واستعرت بعضاً من وظائفه لتشغيل ملف MIDI في برنامجي على بطاقات صوت Creative SoundBlaster الواسعة الانتشار.

بهذه المكونات البسيطة استطعت مماثلة شعار Sierra بأمانة لا بأس بها. من الجدير بالذكر أنني كنت أكتب الكود في ويندوز 10 باستخدام فيجوال ستوديو 2017 لكنني أستخدم مترجم OpenWatcom من خلال DOSBox لترجمة البرنامج وتشغيله.

يمكنك رؤية البرنامج يعمل من خلال DOSBox في هذا الفيديو:

ويمكنك تحميله وتشغيله بنفسك من الروابط أدناه، وهو صغير تستطيع احتواؤه على قرص مرن 5.25" بسعة 360KB. ستجد أيضاً رابطاً للكود الخاص بالبرنامج إن وجدت في نفسك الفضول لمشاهدة كيف تبدو برمجة DOS:

SIERRA.zip (37.44 kb)
SIERRA_SRC.zip (255.10 kb)

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

 

أضف تعليقاً

Loading