لغة البرمجة MBASIC
MBASIC هي تطبيق مايكروسوفت للغة BASIC لنظام التشغيل CP/M . وهي امتداد لمفسرات Altair BASIC الأصلية التي كانت من أوائل منتجات مايكروسوفت. كانت MBASIC إحدى نسختي BASIC المرفقتين مع جهاز Osborne 1. اسم "MBASIC" مشتق من اسم ملف القرص MBASIC.COM الخاص بمفسر BASIC. استُلهمت MBASIC، مثل عائلة مفسرات 8 بت السابقة لها Microsoft BASIC ، بشكل كبير من BASIC-PLUS الخاصة بجهاز PDP-10 من شركة Digital Equipment Corporation ، وإن كانت أبسط (أقل تنظيمًا) وأبطأ (لا تدعم الترجمة الجزئية).
بيئة

يتطلب الإصدار الخامس من MBASIC نظام CP/M يحتوي على ذاكرة وصول عشوائي (RAM) لا تقل عن 28 كيلوبايت ومحرك أقراص مرنة واحد على الأقل.
على عكس إصدارات مايكروسوفت بيسك-80 التي خصصها مصنّعو أجهزة الكمبيوتر المنزلية لاستخدام خصائص أجهزة الكمبيوتر الخاصة بهم، اعتمدت لغة MBASIC فقط على أوامر نظام التشغيل CP/M لجميع عمليات الإدخال والإخراج. وكانت وحدة تحكم CP/M (الشاشة ولوحة المفاتيح) وطابعة الخط وأجهزة القرص فقط هي المتاحة.
لم تكن لغة MBASIC في شكلها غير المُخصّص تحتوي على وظائف للرسومات ، أو الألوان، أو عصي التحكم، أو الفأرة، أو الاتصالات التسلسلية ، أو الشبكات ، أو الصوت، أو حتى وظيفة ساعة الوقت الحقيقي . كما لم تدعم MBASIC بشكل كامل ميزات نظام التشغيل CP/M المُضيف، فعلى سبيل المثال، لم تكن تدعم مساحات المستخدم الخاصة بنظام CP/M لتنظيم الملفات على القرص المرن. ولأن أنظمة CP/M كانت عادةً أحادية المستخدم ومستقلة، لم يكن هناك أي إمكانية لقفل الملفات أو السجلات، أو أي شكل من أشكال تعدد المهام . وبغض النظر عن هذه القيود، فقد اعتُبرت MBASIC في ذلك الوقت تطبيقًا قويًا ومفيدًا للغة BASIC.
سمات
نظام اللغة
لغة MBASIC هي مترجمة . يُخزَّن نص البرنامج المصدر في الذاكرة بصيغة مُجزَّأة، حيث تُستبدل كلمات BASIC الرئيسية برموز أحادية البايت، مما يوفر مساحة الذاكرة ويُسرِّع التنفيذ. أي سطر مسبوق برقم سطر يُخزَّن كنص البرنامج؛ أما عبارات BASIC غير المسبوقة برقم سطر فتُنفَّذ فورًا كأوامر. يمكن عرض البرامج على الشاشة لتحريرها، أو حفظها على القرص إما بصيغة ثنائية مضغوطة أو كنص ASCII عادي . يُعرَّف كل سطر مصدر برقم، يمكن استخدامه كهدف لنقل GOTO أو GOSUB . تتوفر أوامر تحرير الأسطر فقط. [ 1 ] غالبًا ما يكون من المفيد حفظ البرنامج كنص عادي وتحريره باستخدام محرر نصوص كامل الميزات.
كان على نص البرنامج والمتغيرات ومخازن القرص ونظام التشغيل CP/M نفسه أن يتشاركوا مساحة عناوين المعالج 8080 البالغة 64 كيلوبايت . عادةً، عند بدء تشغيل MBASIC لأول مرة، كانت الذاكرة المتاحة للبرامج والبيانات أقل من 32 كيلوبايت، حتى على جهاز مزود بذاكرة وصول عشوائي (RAM) كاملة بسعة 64 كيلوبايت. REM كان من الممكن وضع أسطر التعليقات، التي تبدأ بالكلمة المفتاحية أو الفاصلة العليا، في نص البرنامج، لكنها كانت تشغل مساحة ذاكرة قيّمة، مما ثبّط مستخدمي BASIC عن توثيق برامجهم بشكل كامل. للسماح بتشغيل برامج أكبر وأكثر تعقيدًا، دعمت الإصدارات اللاحقة من MBASIC وظائف تسمح بقراءة أجزاء من نص البرنامج وتنفيذها تحت سيطرة البرنامج (عبارات " CHAIN " و MERGE "). لم يكن هناك دعم لتنفيذ أوامر "shell"، على الرغم من أنه كان من الممكن تكرار هذه الوظيفة بواسطة مبرمج مُصِرّ.
من أبرز مزايا لغة MBASIC توفيرها رسائل خطأ نصية كاملة لأخطاء بناء الجملة وأخطاء وقت التشغيل. كما احتوت MBASIC على وظيفة "التتبع" التي تعرض أرقام الأسطر أثناء تنفيذها. ورغم أن هذا العرض كان يشغل نفس مساحة الشاشة التي يشغلها إخراج البرنامج العادي، إلا أنه كان مفيدًا في اكتشاف حالات مثل الحلقات اللانهائية .
الملفات والإدخال/الإخراج
يمكن قراءة البيانات وتخزينها على القرص إما كملفات متسلسلة (مفصولة باتفاقية CP/M باستخدام CR / LF في نهاية كل سطر) أو كملفات وصول عشوائي ذات طول سجل ثابت، والتي يمكن استخدامها، في حال توفر مبرمج ذي خبرة كافية، لإجراء عمليات معالجة سجلات شبيهة بقواعد البيانات. كان تنسيق مايكروسوفت الثنائي للأرقام العشرية خاصًا بالتطبيق، مما يعني أنه لا يمكن تبادل البيانات إلا مع البرامج الأخرى التي تستخدم تمثيل ASCII النصي أو تتطلب برمجة مكثفة لتحويل التنسيق الثنائي.
المتغيرات وأنواع البيانات
يدعم برنامج MBASIC أنواع البيانات التالية:
- بيانات حرفية 8 بت، في سلاسل يتراوح طولها من 0 إلى 255 حرفًا؛
- الأعداد الصحيحة ذات 16 بت ؛
- فاصلة عائمة 32 بت (دقة مفردة)، تعادل ستة أرقام عشرية، مع أس مكون من رقمين؛
- 64 بت نقطة عائمة (دقة مزدوجة)، تعادل ستة عشر رقمًا عشريًا، مع أس مكون من رقمين.
تضمنت عوامل تشغيل السلاسل النصية تحديد السلاسل الفرعية، والدمج، والتخصيص، واختبار المساواة.
كانت المصفوفات من الأنواع المذكورة أعلاه مسموحة حتى سبعة أبعاد، ولكن لم تكن هناك دوال أو عوامل تعمل على المصفوفات؛ على سبيل المثال، لم يكن هناك إمكانية لتعيين قيم المصفوفات. على عكس بعض تطبيقات لغة BASIC الأخرى في ذلك الوقت، لم تدعم MBASIC عمليات المصفوفات ، أو الأعداد المركبة ، أو نوع البيانات العشري (BCD) للحسابات المالية. كانت جميع عمليات الفاصلة العائمة تُنفذ برمجياً لأن أنظمة CP/M النموذجية لم تكن تحتوي على أجهزة فاصلة عائمة . أعطت الدوال الرياضية المدمجة ( الجيب، وجيب التمام ، والظل ، واللوغاريتم الطبيعي ، والأس ، والجذر التربيعي ) نتائج بدقة أحادية فقط. تم توفير مولد أرقام شبه عشوائي برمجي ؛ يعتمد هذا على إدخال المستخدم لرقم أولي للحصول على سلسلة من الأرقام المفيدة للألعاب وبعض عمليات المحاكاة. سمحت MBASIC باستخدام الكلمة المفتاحية `--` في عبارات التعيين، ولكنها لم تشترط ذلك. LET
اشتهرت الإصدارات الأولى من لغة BASIC على الحواسيب الصغيرة بأسماء متغيراتها القصيرة المكونة من حرف أو حرفين، مما جعل من الصعب تذكر معاني المتغيرات في البرامج المعقدة. أما الإصدار الخامس من MBASIC فقد سمح بأسماء متغيرات يصل طولها إلى 40 حرفًا، مما أتاح للمبرمجين إمكانية تسمية المتغيرات بأسماء سهلة القراءة.
التحكم في تدفق البرنامج
كان التحكم في تدفق البرنامج في لغة MBASIC يتم عبر IF...THEN...ELSE... الاختبارات الشرطية WHILE...WEND والحلقات GOTO والتعليمات GOSUB . لم CASE تكن هناك عبارات متاحة، على الرغم من أن عبارة ON...GOTO... GOTO المحسوبة كانت توفر تفرعات متعددة الاتجاهات. لم تكن للبرامج الفرعية أي معلمات، وكانت جميع المتغيرات عامة. لم تجعل MBASIC البرمجة الهيكلية إلزامية للمبرمجين، وكان من السهل كتابة كود معقد وغير منظم .
PEEKs و POKEs ووظائف المستخدم
كما هو الحال مع أجهزة الكمبيوتر الأخرى ذات 8 بت في أواخر السبعينيات وأوائل الثمانينيات، استُخدمت وظائف PEEK وPOKE للقراءة والكتابة المباشرة في الذاكرة. ولأن هذه الأنظمة لم تكن مزودة عادةً بحماية للذاكرة ، فقد أتاح ذلك للمبرمج الوصول إلى أجزاء من نظام التشغيل، أو وظائف لم تكن متاحة له لولا ذلك. كما أتاح هذا الأمر فرصًا لبرامج المستخدم لتعطيل النظام، غالبًا عن طريق الخطأ. على سبيل المثال، قد يستخدم مبرمج CP/M وظيفةً ما POKE للسماح للغة BASIC بتحويل جهاز وحدة التحكم إلى المنفذ التسلسلي، إذا كان نظام BIOSPEEK يدعم ذلك. أما بالنسبة للأجهزة المزودة بساعات الوقت الحقيقي، فقد استُخدمت مجموعة من التعليمات للوصول إلى الوقت.
لإجراء عمليات أكثر تعقيدًا، سمحت لغة MBASIC بتعريف دوال من قِبل المستخدم يمكن استدعاؤها من برنامج BASIC. وكانت هذه الدوال تُخزَّن عادةً في منطقة محجوزة من الذاكرة، أو تُخزَّن في ثوابت نصية، كسلسلة من رموز الآلة ( أو رموز العمليات ). كما وفرت MBASIC مكونات مادية INPوتعليمات OUTللقراءة والكتابة مباشرةً إلى منافذ الإدخال/الإخراج الخاصة بمعالج 8080. ويمكن استخدام ذلك للتحكم في الأجهزة الطرفية من برنامج BASIC إذا سمحت بذلك مكونات النظام المادية.
أي برامج MBASIC التي تستخدم PEEKو POKE، ووظائف المستخدم في لغة الآلة، لم تكن قابلة للنقل بين الأجهزة دون تعديلات.
خلفاء لغة MBASIC
إلى جانب لغة BASIC-80 من مايكروسوفت لنظام التشغيل CP/M، كان هناك أيضًا إصدار مختلف من لغة MBASIC متاحًا لنظام التشغيل ISIS-II .
تُعد MSX-BASIC أيضًا خليفة معروفة لـ MBASIC، وتتميز بالعديد من الإضافات الخاصة بأجهزة MSX .
كانت جميع وظائف لغة MBASIC الخاصة بنظام CP/M متوفرة في لغتي BASICA أو GWBASIC المُثبّتتين على أقراص IBM PC ، مما سهّل نقل البرامج من أنظمة CP/M إلى الأنظمة المتوافقة مع أجهزة الكمبيوتر الشخصية. ونظرًا لاختلاف الرموز المستخدمة لتمثيل الكلمات المفتاحية، كان لا بد من حفظ برامج CP/M بصيغة ASCII المصدرية. عادةً ما تُستبدل تسلسلات الهروب الخاصة بتنسيق الشاشة، المُضافة إلى إصدار CP/M، بأوامر تحديد موضع المؤشر الموجودة في إصدارات BASIC الخاصة بأجهزة الكمبيوتر الشخصية، وإلا فلن تكون هناك حاجة كبيرة لإعادة كتابة البرنامج.
باسكوم
باعت مايكروسوفت مُترجمًا للغة BASIC لنظام CP/M (يُعرف باسم BASCOM ) يستخدم لغة مصدرية مشابهة للغة MBASIC. ويمكن ترجمة برنامج تم تصحيحه باستخدام MBASIC إلى BASCOM. وبما أن نص البرنامج لم يعد موجودًا في الذاكرة، وكانت عناصر وقت التشغيل في المُترجم أصغر من تلك الموجودة في المُفسِّر، فقد توفرت مساحة أكبر من الذاكرة لبيانات المستخدم. وزادت سرعة تنفيذ البرنامج الفعلي بمقدار ثلاثة أضعاف تقريبًا.
رحّب المطورون بلغة BASCOM كبديلٍ للغة CBASIC الشهيرة، ولكنها بطيئة وغير عملية . على عكس CBASIC، لم تكن BASCOM بحاجة إلى معالج مسبق لشفرة MBASIC المصدرية، مما أتاح تصحيح الأخطاء بشكل تفاعلي. [ 2 ] وبينما أقرّ جيري بورنيل في ديسمبر 1980 بتفوق حلقة التحرير والترجمة والتشغيل والتصحيح في BASCOM مقارنةً بـ CBASIC، وأشار إلى أن الملفات التنفيذية تعمل بسرعة أكبر بكثير، فقد ندّد باشتراط مايكروسوفت نسبة 9% كرسوم ترخيص عن كل نسخة تنفيذية [ 3 ] و40 دولارًا أمريكيًا لمجموعات البرامج والأجهزة. كما احتفظت الشركة بحقها في تدقيق السجلات المالية للمطورين. ولأن معدلات رسوم الترخيص المعتادة للمؤلفين عن البرامج تتراوح بين 10% و25%، ذكرت مجلة InfoWorld في عام 1980 أن نسبة 9% الإضافية التي فرضتها BASCOM "قد تجعل تطوير البرامج غير مربح على الإطلاق"، وخلصت إلى أن "مايكروسوفت لديها الحل التقني [لعيوب CBASIC]، ولكن ليس الحل الاقتصادي". [ 2 ]
أهمية لغة MBASIC
كانت لغة MBASIC أداةً بالغة الأهمية خلال عصر حواسيب CP/M ذات 8 بت. إذ كان بإمكان المستخدمين المهرة كتابة برامج روتينية بلغة MBASIC لأتمتة المهام التي تُنفذ في الأنظمة الحديثة بواسطة أوامر برامج التطبيقات القوية أو لغات البرمجة النصية. وكان تبادل برامج MBASIC المفيدة وظيفةً شائعةً بين مجموعات مستخدمي الحاسوب . وكان إدخال قوائم BASIC الطويلة من مقال في مجلة إحدى طرق "تشغيل" البرامج على نظام CP/M جديد. وقد كُتب مُترجم واحد على الأقل للغات البرمجة عالية المستوى بلغة MBASIC، كما كُتبت العديد من الألعاب الصغيرة وبرامج الأدوات المساعدة التي تتراوح أطوالها من بضعة أسطر إلى بضعة آلاف من أسطر التعليمات البرمجية.
استخدامات أخرى
MBASIC هو أيضًا اسم مترجم لغة BASIC تجاري لعائلة المتحكمات الدقيقة PIC من شركة Microchip Technology، والذي طورته شركة Basic Micro, Inc.، وهو غير مرتبط بمترجم CP/M.
مراجع
- ↑ تتطلب منتجات CP/M التي توفر دعمًا لتحرير الشاشة الكاملة إجراءات تثبيت خاصة بها لتخصيص البرنامج لطرفية الكمبيوتر المحددة المستخدمة كوحدة تحكم النظام. لم يُقدم أي دعم ضمن CP/M لتوحيد إمكانيات الطرفية.
- 1 2 "افتتاحية" . إنفوورلد . 18-08-1980. ص 8.
- ↑ بورنيل، جيري (ديسمبر 1980). "لغة بيسك، لغات الحاسوب، ومغامرات الحاسوب" . بايت . ص 222. تم الاطلاع عليه بتاريخ 18 أكتوبر 2013 .
- توم هوجان ومايك إياناميكو، دليل المستخدم المرجعي لأوزبورن 1 ، (1982) شركة أوزبورن للحاسوب
- ديفيد أ. لين، دليل لغة BASIC ، الطبعة الثانية، موسوعة لغة BASIC الحاسوبية، (1981)، دار نشر كومبوسوفت
- دليل مرجعي للغة BASIC 80 ، شركة مايكروسوفت، بدون تاريخ
- برنامج CP/M
- تم إيقاف دعم Microsoft BASICs
- عائلة لغات البرمجة الأساسية
- لغات برمجة مايكروسوفت
