كومودور بيسك

لغة البرمجة Commodore BASIC ، والمعروفة أيضًا باسم PET BASIC أو CBM-BASIC ، هي لهجة من لغة البرمجة BASIC المستخدمة في سلسلة أجهزة الكمبيوتر المنزلية ذات 8 بت من شركة Commodore International ، والتي تمتد من PET (1977) إلى Commodore 128 (1985).

يعتمد النظام الأساسي على لغة مايكروسوفت بيسك 6502 ، ولذلك فهو يشترك في العديد من الخصائص مع لغات بيسك 6502 الأخرى في ذلك الوقت، مثل أبلسوفت بيسك . حصلت شركة كومودور على ترخيص بيسك من مايكروسوفت عام 1977 على أساس "الدفع لمرة واحدة، بدون رسوم ملكية " بعد أن رفض جاك تراميل عرض بيل غيتس برسوم قدرها 3 دولارات لكل وحدة، مصرحًا: "أنا متزوج بالفعل"، ولن يدفع أكثر من 25000 دولار مقابل ترخيص دائم. [ 1 ]

كانت النسخة الأصلية من برنامج PET مشابهة جدًا لتطبيق مايكروسوفت الأصلي مع بعض التعديلات الطفيفة. وكان برنامج BASIC 2.0 على جهاز C64 مشابهًا أيضًا، كما ظهر في أجهزة C128 (في وضع C64) وغيرها من الطرازات. أما أجهزة PET اللاحقة، فقد احتوت على برنامج BASIC 4.0، المشابه للنسخة الأصلية، ولكنه أضاف عددًا من الأوامر للعمل مع الأقراص المرنة .

كانت لغة BASIC 3.5 أول إصدار يشهد تطورًا ملحوظًا، حيث أضافت عددًا من الأوامر لدعم الرسومات والصوت، بالإضافة إلى مُجمِّع مصغر مُدمج في شاشة مراقبة لغة الآلة على جهازي C16 و Plus/4 . أُرفقت لغة BASIC 7.0 مع جهاز Commodore 128 ، وتضمنت أوامر برمجة مُهيكلة من BASIC 3.5 الخاص بجهاز Plus/4، بالإضافة إلى مُحرِّر للرسومات المتحركة وكلمات مفتاحية مُصممة خصيصًا للاستفادة من إمكانيات الجهاز الجديدة. أما الإصدار الأخير، BASIC 10.0، فكان جزءًا من جهاز Commodore 65 الذي لم يُطرح في الأسواق .

تاريخ

استخدمت شركة كومودور الشفرة المصدرية للغة BASIC ذات السعر الثابت، وطورتها داخليًا لجميع أجهزة الكمبيوتر المنزلية الأخرى ذات 8 بت. ولم يظهر إشعار حقوق الطبع والنشر الخاص بمايكروسوفت إلا مع جهاز كومودور 128 (بإصدار V7.0). مع ذلك، أضافت مايكروسوفت ميزة خفية في برنامجها لإثبات مصدره: سيظهر الأمر WAIT 6502,1على جهاز PET المزود بإصدار 2 أو "ترقية" BASIC MICROSOFT!في أعلى الشاشة. (كانت هذه الميزة الخفية مُشفرة جيدًا - لم تظهر الرسالة في أي تحليل لفك تشفير المفسر). [ 2 ]

جاء جهاز كومودور 64 الشهير مزودًا بلغة BASIC الإصدار 2.0 في ذاكرة القراءة فقط (ROM)، على الرغم من إصداره بعد سلسلة PET/CBM التي احتوت على الإصدار 4.0، وذلك لأن جهاز 64 كان مصممًا للاستخدام المنزلي، بينما استهدفت سلسلة PET/CBM الاستخدامات التجارية والتعليمية، حيث كان من المفترض أن تُستخدم لغة البرمجة المدمجة فيها بشكل أكبر. وقد ساهم ذلك في توفير تكاليف التصنيع، نظرًا لأن الإصدار 2 كان يُناسب ذاكرة القراءة فقط (ROM) الأصغر حجمًا.

التفاصيل الفنية

تحرير البرامج

من الميزات المفيدة لمترجم لغة BASIC المُثبّت في ذاكرة القراءة فقط (ROM ) ونواة نظام التشغيل (KERNAL) لأجهزة كومودور، محرر الشاشة الكاملة . [ 3 ] [ 4 ] على الرغم من أن لوحات مفاتيح كومودور كانت تحتوي على مفتاحين فقط لتحريك المؤشر، وكانا يعكسان اتجاههما عند الضغط على مفتاح Shift، إلا أن محرر الشاشة كان يسمح للمستخدمين بإدخال الأوامر مباشرةً أو إدخال أسطر البرنامج وتعديلها من أي مكان على الشاشة. إذا كان السطر مسبوقًا برقم، فإنه يُقسّم إلى رموز ويُخزّن في ذاكرة البرنامج. أما الأسطر التي لا تبدأ برقم، فكانت تُنفّذ بالضغط على المفتاح عندما يكون المؤشر على السطر. مثّل هذا تحسينًا كبيرًا في واجهات إدخال البرامج مقارنةً بلغات BASIC الشائعة الأخرى لأجهزة الكمبيوتر المنزلية في ذلك الوقت، والتي كانت تستخدم عادةً محررات الأسطر ، التي يتم استدعاؤها بأمر منفصل ، أو "مؤشر النسخ" الذي يقتطع السطر عند موضع المؤشر.RETURNEDIT

كما تميزت بقدرتها على حفظ الملفات المسماة على أي جهاز، بما في ذلك شريط الكاسيت - وهو جهاز تخزين شائع في زمن جهاز PET، وظل مستخدمًا طوال فترة أجهزة كومودور ذات 8 بت كوسيلة تخزين جماعية منخفضة التكلفة. كانت معظم الأنظمة تدعم أسماء الملفات على الأقراص المرنة فقط ، مما جعل حفظ ملفات متعددة على أجهزة أخرى أكثر صعوبة. كان على مستخدم أحد هذه الأنظمة الأخرى تدوين عداد جهاز التسجيل عند موقع الملف، لكن هذه الطريقة كانت غير دقيقة وعرضة للخطأ. مع جهاز PET (وبرنامج BASIC 2.0)، أصبح بالإمكان طلب الملفات من أشرطة الكاسيت بالاسم. كان الجهاز يبحث عن اسم الملف بقراءة البيانات بالتسلسل، متجاهلاً أي أسماء ملفات غير متطابقة. كما كان نظام الملفات مدعومًا ببنية سجلات قوية يمكن تحميلها أو حفظها في ملفات. تم تسجيل بيانات أشرطة الكاسيت من كومودور رقميًا، بدلاً من الطرق التناظرية الأقل تكلفة (والأقل موثوقية) التي استخدمتها الشركات المصنعة الأخرى. لذلك، كان جهاز Datasette المتخصص مطلوبًا بدلاً من مسجل الأشرطة القياسي. كانت هناك محولات متاحة تستخدم محولًا تناظريًا إلى رقمي للسماح باستخدام مسجل قياسي، لكن تكلفتها كانت أقل بقليل من تكلفة جهاز Datasette.

يمكن استخدام الأمر LOAD مع المعامل الاختياري , والذي يقوم بتحميل البرنامج إلى عنوان الذاكرة الموجود في أول بايتين من الملف (يتم تجاهل هذين البايتين ولا يتم الاحتفاظ بهما في الذاكرة). في حال عدم استخدام المعامل ,1 ، سيتم تحميل البرنامج في بداية منطقة برنامج BASIC، والتي تختلف اختلافًا كبيرًا بين الأجهزة. وقد وفرت بعض إصدارات Commodore BASIC أوامر تعمل بشكل مشابه لنظيراتها في Applesoft BASIC ، لتحميل أو حفظ الصور النقطية من مواقع ذاكرة محددة.BLOADBSAVE

لا يدعم جهاز PET البرامج القابلة للنقل، ويقوم أمر التحميل دائمًا بتحميل أول بايتين من ملف البرنامج. وقد تسبب هذا في مشكلة عند محاولة تحميل برامج BASIC المحفوظة على أجهزة Commodore أخرى، حيث يتم تحميلها عند عنوان أعلى من العنوان الذي يتوقعه برنامج BASIC الخاص بجهاز PET. ولحل هذه المشكلة، وُجدت حلول بديلة لنقل البرامج إلى الموقع الصحيح. إذا كان البرنامج محفوظًا على جهاز CBM-II ، فإن الطريقة الوحيدة لتحميله على جهاز PET هي تعديل أول بايتين باستخدام محرر قطاعات القرص، لأن منطقة برنامج BASIC في سلسلة CBM-II تقع عند $0، مما يؤدي إلى محاولة جهاز PET التحميل من الصفحة الصفرية وتوقفه عن العمل.

يمكن اختصار كلمات BASIC الرئيسية في لغة Commodore بإدخال ضغطة مفتاح غير مُزاحة أولاً، ثم ضغطة مفتاح مُزاحة للحرف التالي. يؤدي هذا إلى ضبط البت الأعلى ، مما يجعل المُفسِّر يتوقف عن القراءة ويبدأ بتحليل العبارة وفقًا لجدول بحث. هذا يعني أن العبارة حتى موضع ضبط البت الأعلى تُقبل كبديل عن كتابة الأمر كاملاً. مع ذلك، ولأن جميع كلمات BASIC الرئيسية تُخزَّن في الذاكرة كرموز أحادية البايت، كان هذا بمثابة تسهيل لإدخال العبارات وليس تحسينًا للأداء.

في مجموعة الأحرف الافتراضية التي تقتصر على الأحرف الكبيرة، تظهر الأحرف المُزاحة كرمز رسومي؛ على سبيل المثال، GOTOيمكن اختصار الأمر `<br>` إلى `<br> G{Shift-O}` (والذي يشبه `<br> ` على الشاشة). تتكون معظم هذه الأوامر من حرفين، ولكن في بعض الحالات تكون أطول. في مثل هذه الحالات، يكون هناك غموض، لذا يلزم استخدام المزيد من الأحرف غير المُزاحة من الأمر، مثل الحاجة إلى `( )` للأمر `<br>`. بعض الأوامر ليس لها شكل مختصر، إما بسبب قصرها أو غموضها مع أوامر أخرى. على سبيل المثال، الأمر `<br>` ليس له اختصار لأن تهجئته تتعارض مع الكلمة المفتاحية المنفصلة، ​​والتي تقع بالقرب من بداية جدول البحث عن الكلمات المفتاحية . الأمر `<br>` المستخدم بكثرة له اختصار واحد ، كما هو شائع في معظم لهجات Microsoft BASIC. اختصار الأوامر التي تحتوي على أحرف مُزاحة خاص بلغة Commodore BASIC.GΓGO{Shift-S}GO♥GOSUBINPUTINPUT#PRINT?

كانت طريقة تجزئة الكود هذه تعاني من خللٍ يتمثل في أنه إذا أُضيفَت REMعبارة (BASIC لإضافة تعليق إلى الكود) متبوعةً بفاصلة {Shift-L}، فعند محاولة عرض قائمة البرنامج، كان مُفسِّر لغة BASIC يُنهي العرض فورًا، ويعرض فاصلة، ?SYNTAX ERRORثم يعود إلى READY.موجه الأوامر. وقد استغلّ المبرمجون هذا الخلل إلى حدٍّ ما لحماية أعمالهم، على الرغم من سهولة تجاوزه.

بفضل اختصار الكلمات المفتاحية، أمكن وضع المزيد من التعليمات البرمجية في سطر برنامج واحد (والذي قد يشغل سطرين على شاشات العرض ذات 40 عمودًا - مثل C64 أو PET، أو أربعة أسطر على شاشة VIC-20 ذات 22 عمودًا). ​​سمح هذا بتوفير طفيف في المساحة الإضافية اللازمة لتخزين أسطر البرنامج الإضافية، لا أكثر. كانت جميع أوامر BASIC تُجزأ إلى رموز وتشغل بايتًا واحدًا (أو اثنين، في حالة عدة أوامر من BASIC 7 أو BASIC 10) في الذاكرة بغض النظر عن طريقة إدخالها. كانت هذه الأسطر الطويلة مزعجة عند التحرير. كان الأمر LISTيعرض الكلمة المفتاحية كاملةً، مما يمدد سطر البرنامج إلى ما بعد سطري الشاشة أو الأربعة التي يمكن إدخالها في ذاكرة البرنامج.

أداء

على غرار مترجم لغة مايكروسوفت بيسك الأصلي ، فإن لغة كومودور بيسك أبطأ من لغة الآلة الأصلية ، وذلك بسبب عبء الترجمة أثناء التشغيل. وقد أظهرت نتائج الاختبارات أن نسخ 16 كيلوبايت من ذاكرة القراءة فقط (ROM) إلى ذاكرة الوصول العشوائي ( RAM) يستغرق أقل من ثانية واحدة بلغة الآلة، مقارنةً بأكثر من دقيقة في لغة بيسك. ولتسريع التنفيذ، بدأ المبرمجون باستخدام تقنيات مختلفة. إحدى هذه التقنيات هي تخزين قيم الفاصلة العائمة شائعة الاستخدام في متغيرات بدلاً من استخدام القيم الحرفية، لأن ترجمة اسم المتغير أسرع من ترجمة رقم حرفي. وبما أن الفاصلة العائمة هي النوع الافتراضي لجميع الأوامر، فإن استخدام أرقام الفاصلة العائمة كوسائط أسرع من استخدام الأعداد الصحيحة. وعندما كانت السرعة مهمة، قام بعض المبرمجين بتحويل أجزاء من برامج بيسك إلى لغة التجميع 6502 أو 6510 ، والتي يتم تحميلها بشكل منفصل من ملف أو إدخالها إلى الذاكرة باستخدام عبارات DATA في نهاية برنامج بيسك، ثم يتم تنفيذها من بيسك باستخدام الأمر SYS ، إما من الوضع المباشر أو من البرنامج نفسه . عندما كانت سرعة تنفيذ لغة الآلة كبيرة جدًا، كما هو الحال في الألعاب أو عند انتظار إدخال المستخدم، كان بإمكان المبرمجين الاستقصاء عن طريق قراءة مواقع الذاكرة المحددة (مثل $C6 [ 5 ] للـ 64، أو $D0 [ 6 ] للـ 128، مما يشير إلى حجم قائمة انتظار لوحة المفاتيح) لتأخير التنفيذ أو إيقافه.

من السمات الفريدة للغة كومودور بيسك استخدام رموز التحكم لتنفيذ مهام مثل مسح الشاشة أو تحريك المؤشر داخل البرنامج؛ ويمكن استدعاء هذه الرموز إما بإصدار أمر حيث يمثل X رمز التحكم المطلوب (على سبيل المثال، رمز التحكم لمسح الشاشة) أو بالضغط على المفتاح المطلوب بين علامتي اقتباس، وبالتالي فإن الضغط على + بعد علامة الاقتباس سيؤدي إلى عرض بيسك للتمثيل المرئي لرمز التحكم (في هذه الحالة، قلب مقلوب) والذي يتم تنفيذه عند تشغيل البرنامج (طباعة رموز التحكم مباشرةً تستهلك ذاكرة أقل وتُنفذ بشكل أسرع من استدعاء دالة CHR$ ). هذا بالمقارنة مع تطبيقات بيسك الأخرى التي عادةً ما تحتوي على أوامر مخصصة لمسح الشاشة أو تحريك المؤشر.PRINTCHR$(X)PRINTCHR$(147)⇧ ShiftCLR HOME

تحتوي لغة BASIC 3.5 والإصدارات الأحدث على أوامر مناسبة لمسح الشاشة وتحريك المؤشر.

لا تتطلب أسطر البرامج في لغة كومودور بيسك مسافات في أي مكان (لكن الأمر LIST سيعرض دائمًا مسافة واحدة بين رقم السطر والتعليمات)، على سبيل المثال، وكان من الشائع كتابة البرامج بدون مسافات. أُضيفت هذه الميزة لتوفير الذاكرة، حيث لا يُزيل المُجزئ أي مسافة مُدرجة بين الكلمات المفتاحية: وجود المسافات يُؤدي إلى إضافة 0x20 بايت في البرنامج المُجزأ، والتي يتم تخطيها أثناء التنفيذ. أما المسافات بين رقم السطر وتعليمات البرنامج، فيُزيلها المُجزئ.100IFA=5THENPRINT"YES":GOTO160

يمكن أن يصل طول سطر البرنامج إلى 80 حرفًا في معظم الأجهزة، ولكن في الأجهزة ذات 40 عمودًا للنص، كان السطر يلتف إلى السطر التالي على الشاشة. أما في جهاز VIC-20، الذي كان مزودًا بشاشة عرض من 22 عمودًا، فقد كان بإمكان سطر البرنامج أن يشغل أربعة أعمدة. وقد زاد إصدار BASIC 7.0 على جهاز Commodore 128 الحد الأقصى لسطر البرنامج إلى 160 حرفًا (أربعة أسطر من 40 عمودًا أو سطرين من 80 عمودًا). ​​وباستخدام اختصارات مثل ?بدلًا من PRINT، يُمكن وضع المزيد من الأحرف في السطر الواحد. يعرض BASIC 7.0?السلسلة طويلة جدًايُظهر البرنامج خطأً إذا أدخل المستخدم سطرًا برمجيًا يزيد طوله عن 160 حرفًا. أما الإصدارات السابقة، فلا تُظهر خطأً، بل تعرض رسالة "جاهز" بعد سطرين في حال تجاوز طول السطر الحد المسموح به. يُحتسب رقم السطر ضمن عدد الأحرف في السطر البرمجي، لذا فإن رقم السطر المكون من خمسة أرقام سيؤدي إلى عدد أحرف أقل بأربعة أحرف من رقم السطر المكون من رقم واحد.

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

يمكن أن تتراوح أرقام الأسطر من 0 إلى 65520، وتستهلك خمسة بايتات للتخزين بغض النظر عن عدد الأرقام في رقم السطر، مع العلم أن التنفيذ يكون أسرع كلما قل عدد الأرقام. وضع عدة تعليمات في سطر واحد يقلل من استهلاك الذاكرة ويسرع التنفيذ.

ستبحث عبارات GOTO و GOSUB نزولاً من السطر الحالي للعثور على رقم السطر في حالة القفز للأمام، أما في حالة القفز للخلف، فستعود إلى بداية البرنامج لبدء البحث. هذا يُبطئ البرامج الكبيرة، لذا يُفضل وضع الإجراءات الفرعية شائعة الاستخدام بالقرب من بداية البرنامج.

أسماء المتغيرات مهمة فقط لحرفين؛ وبالتالي فإن أسماء المتغيرات VARIABLE1 و VARIABLE2 و VA تشير جميعها إلى نفس المتغير.

يدعم برنامج Commodore BASIC أيضًا عوامل التشغيل الثنائية (ثنائية البايت، ذات الإشارة، بنظام المتمم الثنائي ) - وهي NOT و AND و OR . على الرغم من أن هذه الميزة كانت جزءًا من كود Microsoft 6502 BASIC الأساسي، إلا أنها كانت تُحذف عادةً في تطبيقات أخرى مثل Applesoft BASIC .

كان تنسيق الأرقام الأصلي في لغة كومودور بيسك، كما هو الحال في لغتها الأم إم إس بيسك ، هو نظام الفاصلة العائمة . استخدمت معظم تطبيقات بيسك المعاصرة بايتًا واحدًا للخاصية ( الأس ) وثلاثة بايتات للكسر العشري . تبلغ دقة عدد الفاصلة العائمة باستخدام كسر عشري من ثلاثة بايتات حوالي 6.5 خانات عشرية فقط، وكثرة أخطاء التقريب . استخدمت تطبيقات مايكروسوفت بيسك 6502 حسابات الفاصلة العائمة ذات 40 بت، مما يعني أن المتغيرات كانت تشغل خمسة بايتات للتخزين (أربعة بايتات للكسر العشري وبايت واحد للأس)، على عكس الفاصلة العائمة ذات 32 بت الموجودة في بيسك-80.

بينما كانت تطبيقات 8080/Z80 من Microsoft BASIC تدعم متغيرات الدقة الصحيحة والمزدوجة، كانت تطبيقات 6502 تعتمد على الفاصلة العائمة فقط.

على الرغم من أن لغة Commodore BASIC تدعم متغيرات الأعداد الصحيحة الموقعة (المشار إليها بعلامة النسبة المئوية) في النطاق من -32768 إلى 32767، إلا أنها تُستخدم عمليًا فقط لمتغيرات المصفوفات، وتتمثل وظيفتها في توفير الذاكرة عن طريق تحديد حجم كل عنصر من عناصر المصفوفة ببايتين (ستشغل مصفوفة من 2000 عنصر 10000 بايت إذا تم تعريفها كمصفوفة أعداد عشرية، ولكنها ستشغل 4000 بايت فقط إذا تم تعريفها كمصفوفة أعداد صحيحة). إن تعريف أي متغير كعدد صحيح يؤدي ببساطة إلى قيام BASIC بتحويله مرة أخرى إلى عدد عشري، مما يبطئ تنفيذ البرنامج ويهدر الذاكرة حيث أن كل علامة نسبة مئوية تستهلك بايتًا إضافيًا للتخزين (بما أن هذا ينطبق أيضًا على مصفوفات الأعداد الصحيحة، يجب على المبرمج تجنب استخدامها إلا في حالة استخدام مصفوفات كبيرة جدًا تتجاوز الذاكرة المتاحة إذا تم تخزينها كعدد عشري). كذلك، لا يمكن الوصول إلى مواقع الذاكرة التي تزيد عن 32767 باستخدام أوامر POKE أو PEEK مع تعريف العنوان كعدد صحيح موقع.

يمكن استخدام النقطة (.) بدلاً من الرقم 0 (وبالتالي بدلاً من أو بدلاً من )، وهذا سيؤدي إلى تنفيذ أسرع قليلاً.10A=.10A=010FORA=.TO10010FORA=0to100

أُضيفت عبارة SYS، المستخدمة لبدء برامج لغة الآلة، بواسطة كومودور، ولم تكن موجودة في كود مايكروسوفت بيسك الأصلي، الذي كان يحتوي فقط على دالة USR لاستدعاء إجراءات لغة الآلة. تقوم هذه العبارة تلقائيًا بتحميل سجلات وحدة المعالجة المركزية بالقيم الموجودة في النطاق $30C-$30F (في كومودور 64، وتختلف في الأجهزة الأخرى) - ويمكن استخدام ذلك لتمرير البيانات إلى إجراءات لغة الآلة أو كوسيلة لاستدعاء دوال النواة من بيسك (على سبيل المثال، مسح الشاشة).POKE780,147:SYS65490

بما أن أجهزة كومودور ذات 8 بت، باستثناء C128، لا تستطيع تشغيل برامج القرص تلقائيًا، فإن الأسلوب المعتاد هو تضمين جزء برمجي صغير بلغة BASIC لبدء تنفيذ البرنامج. من الممكن تشغيل البرنامج تلقائيًا بعد تحميله دون الحاجة إلى كتابة المستخدم أمر RUN ، ويتم ذلك من خلال جزء من التعليمات البرمجية التي تربط متجه "جاهزية" BASIC عند نقطة معينة .10SYS2048$0302

كما هو الحال في معظم إصدارات Microsoft BASIC الأخرى ، إذا لم يتم تعريف مصفوفة باستخدام عبارة DIM ، فسيتم تعيينها تلقائيًا إلى عشرة عناصر (عمليًا 11 عنصرًا لأن عدّ عناصر المصفوفة يبدأ من الصفر). يجب تعريف المصفوفات الأكبر حجمًا، وإلا سيعرض BASIC خطأً عند تشغيل البرنامج، ولا يمكن تغيير أبعاد المصفوفة في البرنامج إلا بعد مسح جميع المتغيرات باستخدام عبارة CLR. تُملأ المصفوفات الرقمية تلقائيًا بالأصفار عند إنشائها، وقد يحدث تأخير مؤقت في تنفيذ البرنامج إذا تم تحديد أبعاد مصفوفة كبيرة.

تُمثَّل متغيرات السلاسل النصية بوضع علامة الدولار بجانب اسم المتغير. لذا، تُفهم المتغيرات AA$ و AA و AA% على أنها متغيرات منفصلة. كما تُعتبر متغيرات المصفوفات منفصلة عن المتغيرات البسيطة، وبالتالي فإن A و A(1) لا تشيران إلى المتغير نفسه. يشير حجم مصفوفة السلاسل النصية إلى عدد السلاسل المخزنة فيها فقط، وليس إلى حجم كل عنصر، والذي يُخصَّص ديناميكيًا. على عكس بعض تطبيقات Microsoft BASIC الأخرى، لا يتطلب Commodore BASIC حجز مساحة للسلاسل النصية عند بدء تشغيل البرنامج.

على عكس أجهزة 8 بت الأخرى مثل Apple II، تحتوي جميع أجهزة Commodore على ساعة مدمجة تُهيأ إلى الصفر عند التشغيل وتُحدَّث مع كل نبضة من مؤقت PIA/VIA/TED/CIA، أي 60 مرة في الثانية. يُخصص لها متغيران في لغة BASIC، هما TI و TI$ ، وكلاهما يحتوي على الوقت الحالي. المتغير TI للقراءة فقط ولا يمكن تعديله؛ فمحاولة تعديله ستؤدي إلى ظهور رسالة خطأ في بناء الجملة. يمكن استخدام TI$ لضبط الوقت عبر سلسلة مكونة من ستة أرقام (يحدث خطأ عند استخدام سلسلة غير مكونة من ستة أرقام). لا تُعد الساعة طريقة موثوقة جدًا لحفظ الوقت، إذ تتوقف عند إيقاف المقاطعات (يتم ذلك بواسطة بعض إجراءات النواة)، كما أن الوصول إلى منفذ IEC (أو منفذ IEEE على PET) سيؤدي إلى إبطاء تحديث الساعة ببضع نبضات.

تستخدم دالة RND في لغة Commodore BASIC إشارة الساعة لتوليد أرقام عشوائية، إلا أن استخدامها محدود نسبيًا لأنها لا تُرجع إلا أرقامًا بين 0 و255. وبخلاف ذلك، تعمل دالة RND بنفس طريقة تطبيقات Microsoft BASIC الأخرى، حيث تُستخدم سلسلة شبه عشوائية عبر قيمة أولية ثابتة مكونة من 5 بايتات تُخزن عند تشغيل الجهاز في مواقع الذاكرة $8B-$8F على جهاز C64 (يختلف الموقع في الأجهزة الأخرى). عند استخدام قيمة RND أكبر من 0، يتم توليد رقم عشوائي مُدمج من القيمة المُضمنة في دالة RND والقيمة الأولية، والتي يتم تحديثها بمقدار 1 في كل مرة تُنفذ فيها دالة RND. أما عند استخدام قيمة RND سالبة، فتنتقل الدالة إلى نقطة في سلسلة القيمة الأولية الحالية المُحددة بالرقم.RND(0)

بما أن توليد الأرقام العشوائية الحقيقية مستحيل باستخدام عبارة RND ، فمن الشائع في C64 و C128 استخدام قناة الضوضاء البيضاء لشريحة SID للأرقام العشوائية.

اشتهرت لغة BASIC 2.0 ببطء عملية جمع البيانات المهملة للسلاسل النصية. يتم استدعاء هذه العملية تلقائيًا عند تنفيذ أي دالة FRE ، وإذا تم التعامل مع العديد من متغيرات السلاسل النصية والمصفوفات خلال البرنامج، فقد تستغرق عملية مسحها أكثر من ساعة في أسوأ الظروف. كما أنه من غير الممكن إيقاف عملية جمع البيانات المهملة لأن BASIC لا تفحص مفتاح التشغيل/الإيقاف أثناء تنفيذ هذه العملية. قدمت BASIC 4.0 نظامًا مُحسَّنًا لجمع البيانات المهملة باستخدام مؤشرات الرجوع، وتتضمن جميع الإصدارات اللاحقة من Commodore BASIC هذا النظام أيضًا.

عانت دالة FRE في لغة BASIC 2.0 من عيب تقني آخر، وهو عدم قدرتها على التعامل مع الأعداد الموقعة التي تزيد عن 32768. وبالتالي، عند استدعاء هذه الدالة على جهاز C64 (ذاكرة BASIC تبلغ 38 كيلوبايت)، سيظهر مقدار سالب من ذاكرة BASIC المتاحة (إضافة 65535 إلى الرقم المُبلغ عنه يُعطي المقدار الصحيح للذاكرة المتاحة). لم تتجاوز ذاكرة PET وVIC-20 الإجمالية المتاحة للغة BASIC 32 كيلوبايت، لذا لم يظهر هذا القيد إلا بعد تطوير جهاز C64. عالجت دالة FRE في BASIC 3.5 و7.0 هذه المشكلة، كما تم تقسيمها في BASIC 7.0 إلى دالتين، إحداهما لعرض ذاكرة نص برنامج BASIC المتاحة، والأخرى لعرض ذاكرة المتغيرات المتاحة.

البدائل

شاشة بدء تشغيل برنامج BASIC الخاص بـ The Simons

صدرت العديد من إضافات لغة BASIC لجهاز Commodore 64، نظرًا للإمكانيات المحدودة نسبيًا للغة BASIC 2.0 الأصلية. ومن أشهر هذه الإضافات إضافة DOS Wedge ، التي كانت مُضمنة في قرص الاختبار/العرض التوضيحي لجهاز Commodore 1541. أضافت هذه الإضافة، التي يبلغ حجمها 1 كيلوبايت، عددًا من الأوامر المتعلقة بالقرص، بما في ذلك إمكانية قراءة دليل القرص دون حذف البرنامج الموجود في الذاكرة. دُمجت ميزاتها لاحقًا في إضافات أخرى من جهات خارجية، مثل خرطوشة Epyx FastLoad الشهيرة . كما أضافت إضافات أخرى للغة BASIC كلمات مفتاحية إضافية لتسهيل برمجة الرسوميات المتحركة والصوت والرسومات عالية الدقة، مثل Simons' BASIC (1983) وVision BASIC (2022).

على الرغم من أن افتقار BASIC 2.0 إلى ميزات الصوت أو الرسومات كان محبطًا للعديد من المستخدمين، إلا أن بعض النقاد جادلوا بأنه كان مفيدًا في النهاية لأنه أجبر المستخدم على تعلم لغة الآلة.

أدت قيود لغة BASIC 2.0 على جهاز C64 إلى استخدام لغة الآلة ROM المدمجة في BASIC. لتحميل ملف إلى موقع ذاكرة محدد، يتم قراءة اسم الملف ومحرك الأقراص ورقم الجهاز عن طريق استدعاء الدالة التالية: [ 8 ] ، ويتم تحديد الموقع في سجلي X وY: [ 9 ] ، ثم يتم استدعاء روتين التحميل: [ 10 ] .SYS57812"filename",8POKE780,0:POKE781,0:POKE782,192SYS65493

كانت مجلة الأقراص الخاصة بجهاز C64، Loadstar ، بمثابة مكان للمبرمجين الهواة، الذين شاركوا مجموعات من الأوامر الأولية للغة BASIC، والتي يتم استدعاؤها باستخدام SYS address + offsetالأمر.

من وجهة نظر البرمجة الحديثة، احتوت الإصدارات الأولى من لغة كومودور بيسك على العديد من الأخطاء البرمجية. ولأن معظم هذه المشكلات كانت مشتقة من لغة مايكروسوفت بيسك ، فقد عانت جميع برامج بيسك المنزلية تقريبًا في ذلك الوقت من عيوب مماثلة. [ 11 ] كان المبرمج يُعيّن رقمًا لكل سطر في برنامج مايكروسوفت بيسك . وكان من الشائع زيادة الأرقام بمقدار معين (5 أو 10 أو 100) لتسهيل إدراج الأسطر أثناء تحرير البرنامج أو تصحيحه، ولكن سوء التخطيط كان يعني أن إدراج أقسام كبيرة في البرنامج غالبًا ما يتطلب إعادة هيكلة الكود بالكامل. ومن التقنيات الشائعة بدء البرنامج من رقم سطر منخفض باستخدام جدول قفز ON...GOSUB ، حيث يُقسّم البرنامج إلى أقسام تبدأ من رقم سطر مُحدد مثل 1000 و2000 وهكذا. وإذا لزم إضافة قسم كبير، يُمكن ببساطة تعيين رقم السطر الرئيسي التالي المتاح له وإدراجه في جدول القفز.

بالإضافة إلى ذلك، تُعامل جميع المتغيرات كمتغيرات عامة. يصعب إنشاء حلقات تكرارية محددة بوضوح تتجاوز بنية FOR...NEXT، مما يدفع المبرمج غالبًا إلى الاعتماد على أمر GOTO (تم تدارك هذا لاحقًا في BASIC 3.5 بإضافة أوامر DO وLOOP وWHILE وUNTIL و EXIT ). غالبًا ما كان من الضروري إنشاء متغيرات علامات لتنفيذ مهام معينة.

تضمنت الإصدارات اللاحقة من لغة BASIC على أجهزة Commodore وغيرها من المنصات أوامر DELETE و RENUMBER ، بالإضافة إلى أمر ترقيم الأسطر التلقائي الذي يقوم تلقائيًا بتحديد وإدراج أرقام الأسطر وفقًا لزيادة محددة. كما افتقرت إصدارات BASIC السابقة من Commodore إلى أوامر تصحيح الأخطاء، مما يجعل اكتشاف الأخطاء والمتغيرات غير المستخدمة أمرًا صعبًا. أُضيفت هياكل IF...THEN...ELSE ، وهي جزء أساسي من لغات Z80 Microsoft BASIC، إلى BASIC 3.5 بعد أن كانت غير متوفرة في الإصدارات السابقة من Commodore BASIC.

استخدم كواجهة مستخدم

على غرار أجهزة الكمبيوتر المنزلية الأخرى ، كانت أجهزة كومودور تبدأ التشغيل مباشرةً بمفسر لغة بيسك. وكان بالإمكان إدخال أوامر ملفات بيسك وأوامر البرمجة في الوضع المباشر لتحميل البرامج وتنفيذها. وفي حال إيقاف تنفيذ البرنامج باستخدام مفتاح التشغيل/الإيقاف، تُحفظ قيم المتغيرات في ذاكرة الوصول العشوائي (RAM) ويمكن طباعتها لأغراض تصحيح الأخطاء. بل إن جهاز 128 خصص بنك الذاكرة الثاني بسعة 64 كيلوبايت لتخزين المتغيرات، مما يسمح ببقاء القيم حتى إصدار أمر إيقاف. هذا، بالإضافة إلى محرر الشاشة المتقدم NEWالمضمن في كومودور بيسك، منح بيئة البرمجة تجربة شبيهة ببيئة REPL ؛ حيث كان بإمكان المبرمجين إدراج أسطر البرنامج وتعديلها في أي مكان على الشاشة، وبناء البرنامج بشكل تفاعلي. [ 12 ] وهذا على عكس أنظمة التشغيل الموجهة للأعمال في ذلك الوقت مثل CP/M أو MS-DOS ، والتي كانت تبدأ التشغيل عادةً بواجهة سطر الأوامر . وإذا كانت لغة برمجة مطلوبة على هذه المنصات، كان لا بد من تحميلها بشكل منفصل.RUN

بينما تضمنت بعض إصدارات لغة كومودور بيسك أوامر خاصة بالأقراص DLOAD، افتقر DSAVEالإصدار المُدمج في كومودور 64 إليها، مما استلزم من المستخدم تحديد رقم جهاز محرك الأقراص (عادةً 8 ​​أو 9) للأمر القياسي LOAD، الذي كان يُشير افتراضيًا إلى الشريط. ومن بين أوجه القصور الأخرى في إصدار بيسك 2.0 الخاص بكومودور 64، غياب DIRECTORYأمر لعرض محتويات القرص دون مسح الذاكرة الرئيسية. في كومودور 64، كان عرض الملفات على القرص يتم عن طريق تحميل "برنامج" يُظهر عند عرضه الدليل كبرنامج بيسك مُحاكي، مع تحديد حجم كتلة الملف كرقم السطر. وكان لهذا تأثير الكتابة فوق البرنامج المُحمّل حاليًا. وقد تغلبت إضافات مثل DOS Wedge على هذه المشكلة من خلال عرض قائمة الدليل مباشرةً على ذاكرة الشاشة.

مثال على التعليمات البرمجية

10 rem cbm basic v2 example 20 rem comment with keywords: for, data 30 dim a$ ( 20 ) 35 rem the typical space efficient form of leave spaces out: 40 for t = 0 to 15 : poke 646 , t : print chr$ ( 18 ) " " ;: next : rem 18=revers on 45 rem in the "if" statement, "then" can omitted if goto or on goto used 47 rem checking chr$(0) will not wait for a keypress, using "" instead 50 get a$ : if a$ = "" goto 40 : rem no ":" allowed before the goto 55 rem it is legal to omit the closed " on line end 60 print chr$ ( 23 ): print "bye... 65 rem 23=white 70 rem end is not needed. الـ rem هو عنصر وهمي، لذا يتم إدخال السطر 70 كـ rem

[ 13 ]

الإصدارات والميزات

قائمة بإصدارات CBM BASIC مرتبة ترتيبًا زمنيًا، مع الميزات المضافة تباعًا:

الإصدارات المتاحة

  • الإصدار 1.0: جهاز PET 2001 مزود بلوحة مفاتيح ذات أزرار مسطحة وجهاز Datassette مدمج (جهاز PET الأصلي)
    • المصفوفات محدودة بـ 256 عنصرًا
    • تم تعطيل أمر PEEK بشكل صريح في مواقع BASIC ROM التي تقع فوق $C000
  • الإصدار 2.0: جهاز PET 2001 مزود بلوحة مفاتيح كاملة الحركة وذاكرة قراءة فقط قابلة للتحديث
    • إضافة دعم معيار IEEE-488
    • تم تحسين عملية جمع البيانات المهملة [ 14 ]
    • إصلاح خطأ في مصفوفة البيانات
    • بيضة عيد الفصح – إدخال شعار MICROSOFT! في الشاشات عددًا عشوائيًا من المراتWAIT6502, [number]
  • الإصدار 4.0: سلسلة PET/CBM 4000/8000 (والإصدار المتأخر PET 2001s)
    • عمليات القرص : DLOAD، DSAVE، COPY، SCRATCH، إلخ. (15 عملية إجمالاً)
    • متغيرات قناة خطأ القرص: DS، DS$
    • أداء جمع القمامة محسّن بشكل كبير [ 14 ]
  • الإصدار 2.1 (يظهر V2 عند بدء التشغيل، بينما الإصدار الداخلي هو 2.1): VIC-20
  • الإصدار 2.2 (يظهر V2 عند بدء التشغيل، ويتم ترقيمه داخليًا على أنه 2.2): C64 ، C64GS (1990)
  • V4+  : سلسلة CBM-II (المعروفة أيضًا باسم B، P range)
    • إدارة الذاكرة: بنك
    • عمليات إضافية على القرص : BLOAD ، BSAVE ، DCLEAR
    • الطباعة المنسقة: اطبع باستخدام، PUDEF
    • معالجة الأخطاء: التخلص من
    • التفرع البديل: وإلا
    • معالجة الأخطاء الديناميكية: TRAP، RESUME، ERR$()
    • قراءة البيانات المرنة :RESTORE [line number]
    • دالة البحث عن السلاسل النصية: INSTR
  • الإصدار 3.5: C16/116 ، زائد/4
  • الإصدار 7.0: C128
    • المزيد من أوامر الصوت والرسومات، بما في ذلك معالجة الصور المتحركة
    • محرر الصور المدمج: SPRDEF
    • كتل متعددة العبارات لهياكل IF THEN ELSE : BEGIN,BEND
    • مفتاح المجداف ، مدخل قلم الضوء : POT، PEN
    • حصري أو دالة: XOR
    • الحصول على عنوان المتغير: مؤشر
    • نافذة وضع النص: نافذة
    • تأخير زمني مُتحكم به: النوم
    • إدارة الذاكرة: التبديل، الجلب، التخزين المؤقت، التحرير (1)
    • استُخدمت خاصية تبديل البنوك في معالج 128 لتخزين كود البرنامج بشكل منفصل عن المتغيرات. وسيتم الاحتفاظ بقيم المتغيرات عبر عمليات تنفيذ البرنامج إذا تم تشغيل البرنامج باستخدام الأمر GOTO.
    • عمليات إضافية على القرص : التمهيد، التحقق من القرص
    • ضبط سرعة المعالج: سريع، بطيء (2 مقابل 1 ميجاهرتز) 
    • ادخل إلى وضع C64: GO64
    • غير موثق، يعمل: RREG (قراءة سجلات وحدة المعالجة المركزية بعد SYS )
    • الأوامر غير المُنفذة: إيقاف، خروج
    • بيضة عيد الفصح C128 – أدخلSYS 32800,123,45,6

نسخ غير منشورة

  • الإصدار 3.6  : شاشة كومودور LCD (نموذج أولي غير مُصدر). مطابق تقريبًا للإصدار 7.0، مع الاختلافات التالية: [ 15 ]
    • حجم بدلاً من حجم
    • استخدم كلمة EXIT بدلاً من QUIT
    • أوامر السرعة والبطء غير موجودة
    • أمر إضافي: النوافذ المنبثقة
  • V10  : كومودور 65 (نموذج أولي غير مُصدر)
    • أوامر الرسومات/الفيديو: PALETT، GENLOCK
    • إدخال الماوس : MOUSE,RMOUSE
    • أداة ملف نصي ( SEQ ): النوع
    • تحرير البرنامج: البحث والتغيير
    • إدارة الذاكرة: DMA، FRE(2)
    • الأوامر غير المُنفذة: PAINT، LOCATE، SCALE، WIDTH، SET، VIEWPORT، PASTE، CUT

حزم التوسعة البارزة

مراجع

  1. صرح بذلك جاك تراميل في احتفال الذكرى السنوية الخامسة والعشرين لجهاز كومودور 64 في متحف تاريخ الكمبيوتر في 10 ديسمبر 2007أُرشف بتاريخ 11 ديسمبر 2008 في أرشيف الإنترنت (Wayback Machine) .أُرشف بتاريخ 3 أكتوبر 2017 في أرشيف الإنترنت (Wayback Machine) ..
  2. "بيض عيد الفصح الشخصي لبيل غيتس بلغة 8 بت بيسك - pagetable.com" . www.pagetable.com . تاريخ الاطلاع: 8 أغسطس 2018 .
  3. "الكتابة على لوحة المفاتيح ومحرر الشاشة" . يوليو 1985.
  4. "بايت يوليو 1983" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 24 أغسطس 2017. تم الاطلاع عليه بتاريخ 1 مايو 2015 .
  5. ليمون، شيلدون (1987). رسم خرائط كومودور 64 و64 سي . منشورات كومبيوت!، ص 37. ISBN  9780874550825تم الاطلاع عليه بتاريخ 25-03-2018 .
  6. ↑ كوبر ، أوتيس ر. (1986). رسم خرائط كومودور 128. منشورات كومبيوت!. ص 66. ISBN  9780874550603.
  7. "رسم خريطة C64" . www.unusedino.de . تم الاطلاع عليه بتاريخ 21 أغسطس 2023 .
  8. ليمون، شيلدون (1987). رسم خرائط كومودور 64 و64 سي . منشورات كومبيوت!، ص 209. ISBN  9780874550825تم الاطلاع عليه بتاريخ 25-03-2018 .
  9. ليمون، شيلدون (1987). رسم خرائط كومودور 64 و64 سي . منشورات كومبيوت!، ص 71. ISBN  9780874550825تم الاطلاع عليه بتاريخ 25-03-2018 .
  10. ليمون، شيلدون (1987). رسم خرائط كومودور 64 و64 سي . منشورات كومبيوت!، ص 231. ISBN  9780874550825تم الاطلاع عليه بتاريخ 25-03-2018 .
  11. "كتاب كومبيوت! الأول عن أتاري" . www.atariarchives.org . تم الاطلاع عليه بتاريخ 21 أغسطس 2023 .
  12. سكريمشو، ن.ب. (11 نوفمبر 2013). مقدمة إلى كومودور 64: مغامرات في البرمجة . بيركهاوزر. ISBN 9781489967879.
  13. pygments/tests/examplefiles/cbmbas/cbmbas_example.bas على GitHub
  14. 1 2 "خريطة ذاكرة BASIC 4.0" . zimmers.net . تم الاطلاع عليه بتاريخ 21 أغسطس 2023 .
  15. "مايك نابيريزني - برنامج تشغيل شاشة LCD لجهاز كومودور" . mikenaberezny.com . تم الاطلاع عليه بتاريخ 8 أغسطس 2018 .

مصادر

لغة BASIC 2.0
  • أنجرهاوزن وآخرون (1983). تشريح كومودور 64 (للاطلاع على المرجع الكامل، انظر مقالة C64 ).
BASIC 3.5
  • جيرارد، بيتر؛ بيرجين، كيفن (1985). التفكيك الكامل لذاكرة القراءة فقط (ROM ) لجهاز كومودور 16. جيرالد داكوورث وشركاه المحدودة. ISBN 0-7156-2004-5.
BASIC 7.0
  • جارفيس، دينيس؛ سبرينغر، جيم د. (1987). أساسيات لغة BASIC 7.0 . غراند رابيدز، ميشيغان: شركة أباكوس للبرمجيات. ISBN 0-916439-71-2.
BASIC 10.0