أتاري بيسك

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

تم توزيع لغة البرمجة على شكل خرطوشة ذاكرة قراءة فقط (ROM) بسعة 8 كيلوبايت لاستخدامها مع حاسوبي أتاري 400 و800 الصادرين عام 1979. ابتداءً من حاسوبي 600XL و800XL عام 1983، أصبحت لغة BASIC مدمجة في النظام. توجد ثلاثة إصدارات من البرنامج: الإصدار الأصلي "A" المُثبّت على الخرطوشة، والإصدار "B" المدمج في حاسوبي 600XL/800XL، والإصدار "C" النهائي في طرازات XL المتأخرة وسلسلة XE. يختلف كل إصدار عن الآخر في مستوى الاستقرار، حيث يُصلح الإصدار "C" الأخطاء الموجودة في الإصدارين السابقين. 

على الرغم من أن أجهزة الكمبيوتر أتاري ذات 8 بت كانت تعمل بسرعة أعلى من معظم الأجهزة المعاصرة لها، إلا أن العديد من القرارات التقنية وضعت لغة أتاري بيسك في أسفل قائمة معايير الأداء.

تطوير

طُوّرت الأجهزة التي ستصبح فيما بعد حواسيب أتاري ذات 8 بت في الأصل كجيل ثانٍ من منصات ألعاب الفيديو، وكان الهدف منها استبدال أتاري VCS . قرر راي كاسار ، الرئيس الجديد لشركة أتاري، منافسة شركة أبل من خلال بناء حاسوب منزلي بدلاً من ذلك. [ 2 ]

هذا يعني أن التصاميم كان لا بد أن تتضمن لغة البرمجة BASIC ، وهي اللغة القياسية لأجهزة الكمبيوتر المنزلية. في أوائل عام 1978، رخصت شركة أتاري شفرة المصدر لإصدار MOS 6502 من Microsoft BASIC . [ 3 ] وقد عُرضت بنسختين: إحداهما تستخدم تنسيق الفاصلة العائمة 32 بت، ويبلغ حجمها حوالي 7800  بايت عند تجميعها، والأخرى تستخدم تنسيقًا موسعًا 40 بت، ويبلغ حجمها حوالي 9  كيلوبايت. [ 4 ]

حتى النسخة ذات 32 بت بالكاد تتسع في حجم خرطوشة ذاكرة القراءة فقط (ROM)  للجهاز، والذي يبلغ 8 كيلوبايت . كما شعرت أتاري بالحاجة إلى توسيع اللغة لدعم ميزات أجهزة الكمبيوتر الخاصة بها، على غرار ما فعلته آبل مع لغة Applesoft BASIC . أدى ذلك إلى زيادة حجم نسخة أتاري إلى حوالي 11 كيلوبايت؛ بينما يبلغ حجم Applesoft BASIC على جهاز Apple II+ 10240 بايت. [ أ ] بعد ستة أشهر، تم تقليص حجم الكود ليناسب تقريبًا ذاكرة قراءة فقط (ROM) بحجم 8 كيلوبايت، [ 3 ] ولكن كان لدى أتاري موعد نهائي في يناير 1979 لمعرض الإلكترونيات الاستهلاكية (CES) حيث سيتم عرض الأجهزة. لذلك قرروا طلب المساعدة لإعداد نسخة من لغة BASIC في الوقت المناسب للمعرض. [ 3 ]  

شركة شيباردسون مايكروسيستمز

خرطوشة أتاري بيسك 8K

في سبتمبر 1978، فازت شركة شيباردسون مايكروسيستمز بعطاء إكمال لغة BASIC. [ 3 ] في ذلك الوقت، كانوا يُنهون تطوير لغة Cromemco 16K Structured BASIC لأجهزة Cromemco S-100 ذات ناقل Z80 . [ 5 ] [ 6 ] استلهم المطوران كاثلين أوبراين وبول لوتون لغة Data General Business Basic ، وهي لغة تعتمد على الأعداد الصحيحة فقط، لتطوير لغة BASIC الخاصة بهما، نظرًا لخبرة لوتون مع Data General في نظام المشاركة الزمنية . [ 1 ]

تتضمن لغة Cromemco BASIC تطبيقًا موسعًا للفاصلة العائمة باستخدام تنسيق ثنائي عشري مُشفّر (BCD) مكون من 14 رقمًا، وهو ما أصبح ممكنًا بفضل استخدام جميع سجلات معالج Zilog Z80 الستة عشر . ولأنها تُحوّل جميع البيانات إلى التنسيق الداخلي أثناء التحرير، فإن الثوابت الصغيرة مثل "1" تستهلك حوالي 8 بايتات من الذاكرة، وقد يُشكّل هذا مشكلةً خاصةً عند تخزين مصفوفات الأرقام. ولمعالجة هذه المشكلة، تدعم اللغة أيضًا تنسيق BCD أصغر مكون من 6 أرقام. [ 7 ]

حتى أصغر برامج BASIC على جهاز 6502 كانت تستخدم حوالي 10 كيلوبايت. على سبيل المثال، استخدمت لغة Commodore BASIC 9 كيلوبايت، لكنها تعتمد أيضًا على دعم من النواة ، [ ب ] بينما تبلغ لغة Applesoft BASIC 10780 بايت. [ ج ] ولتحقيق هدف التوافق مع ذاكرة ROM بسعة 8 كيلوبايت، ستتكون لغة BASIC الجديدة من جزأين: اللغة نفسها على الخرطوشة، ومكتبة فاصلة عائمة بسعة 2 كيلوبايت في ذاكرة ROM الخاصة بالنظام بسعة 10 كيلوبايت، تدعم فقط تنسيق الأرقام الستة. [ 10 ]

وافقت أتاري على الاقتراح، وعندما تمّ وضع المواصفات النهائية في أكتوبر 1978، بدأ لوتون وأوبراين العمل على اللغة الجديدة. [ 3 ] نصّ العقد على تاريخ التسليم في موعد أقصاه 6 أبريل 1979، وشمل ذلك أيضًا نظام إدارة الملفات (المعروف لاحقًا باسم DOS 1.0). [ 10 ] كانت خطط أتاري هي عرض نسخة مبكرة من مايكروسوفت بيسك بحجم 8 كيلوبايت في معرض الإلكترونيات الاستهلاكية (CES) عام 1979، ثم التحوّل إلى أتاري بيسك للإنتاج. سار التطوير بسرعة، بفضل بند المكافأة في العقد، مما أدى إلى تسليم النسخة الأولية في أكتوبر. عرضت أتاري نسخة خرطوشة بحجم 8 كيلوبايت في معرض الإلكترونيات الاستهلاكية بدلًا من نسخة مايكروسوفت. [ 11 ] أصبح أتاري مايكروسوفت بيسك لاحقًا منتجًا منفصلًا. [ 12 ]

الإصدارات

لم تكن النسخة التي قدمها شيباردسون لشركة أتاري لعرضها في معرض الإلكترونيات الاستهلاكية (CES) نهائية، واستمر شيباردسون في إصلاح الأخطاء. [ 11 ] وبدون علم شيباردسون، كانت أتاري قد أرسلت نسخة معرض الإلكترونيات الاستهلاكية إلى قسم التصنيع. [ 13 ] تُعرف هذه النسخة باسم المراجعة أ . تحتوي على خطأ برمجي جسيم في روتين نسخ الذاكرة: حذف أسطر من التعليمات البرمجية بطول 256 بايت بالضبط يتسبب في توقف النظام بعد إدخال الأمر التالي. Resetولا يُصلح المفتاح هذا الخطأ. [ 14 ]

تم توزيع لغة البرمجة على شكل خرطوشة بحجم 8 كيلوبايت لاستخدامها مع أجهزة الكمبيوتر أتاري 400 و800 لعام 1979، وتضمنت دليل أتاري بيسك المرجعي الذي كتبه كارول شو وكيث بريستر. [ 15 ] [ 16 ] [ 17 ] 

سعت النسخة B إلى إصلاح الأخطاء الرئيسية في النسخة A، وصدرت عام 1983 كذاكرة قراءة فقط مدمجة في طرازي 600XL و800XL. أثناء إصلاح خطأ نسخ الذاكرة، لاحظ المبرمج نمطًا مشابهًا في قسم إدراج الأسطر، فطبّق نفس الإصلاح. لكن هذا أدخل الخطأ الأصلي في هذا الكود. إدراج أسطر جديدة أكثر شيوعًا من حذف الأسطر القديمة، لذا زاد هذا التغيير بشكل كبير من عدد حالات التعطل. [ 14 ] كما تضيف النسخة B ستة عشر بايتًا إلى البرنامج في كل مرة يُحذف فيها SAVE، LOADمما يؤدي في النهاية إلى نفاد ذاكرة الجهاز حتى لأصغر البرامج. [ 18 ] [ 19 ] وصف كتاب "Mapping the Atari " هذه الأخطاء بأنها "أخطاء فادحة"، ونصح مالكي النسخة B قائلًا: "لا تضيعوا وقتكم؛ احصلوا على ذاكرة القراءة فقط الجديدة، المتوفرة على خرطوشة" من أتاري. [ 19 ] يوفر الكتاب برنامجًا يُدخل يدويًا لتحديث النسخة B إلى النسخة C لمن لا يملكون الخرطوشة. [ 20 ]

يُعالج الإصدار C مشكلة تسرب الذاكرة الموجودة في الإصدار B. [ 19 ] وهو مُدمج في الإصدارات اللاحقة من جهاز 800XL [ 18 ] وجميع طرازات XE بما في ذلك XEGS. كما كان الإصدار C متوفرًا كخرطوشة. [ 19 ]

يمكن تحديد الإصدار عن طريق الكتابة عند ظهور موجه READY. والنتيجة هي للإصدار A، وللإصدار B، وللإصدار C. [ 21 ]PRINTPEEK(43234)16296234

تم نشر الكود المصدري الكامل والمُشروح ومواصفات التصميم الخاصة بـ Atari BASIC تحت عنوان The Atari BASIC Source Book في عام 1983. [ 22 ]

وصف

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

يتم الإبلاغ عن أخطاء بناء الجملة فور إدخال السطر.

تعتمد لغة أتاري بيسك بشكل أساسي على محرر الأسطر . يمكن أن يصل طول سطر البرنامج إلى ثلاثة أسطر فعلية على الشاشة، كل سطر منها يتكون من 40 حرفًا، أي ما مجموعه 120 حرفًا. يمكن تحريك المؤشر بحرية، حيث يتتبع المحرر تلقائيًا سطر برنامج بيسك الذي ينتمي إليه سطر الشاشة الحالي. على سبيل المثال، إذا كان المؤشر موجودًا حاليًا في السطر 30، وقام المستخدم بتحريك المؤشر لأعلى إلى السطر 20، فسيتم تنفيذ أي تعديل من تلك النقطة على السطر 20.

يكتشف محرر لغة أتاري بيسك العديد من الأخطاء التي يتم تجاهلها في الإصدارات المشتقة من مايكروسوفت. عند اكتشاف خطأ، يعيد المحرر عرض السطر، مع تمييز النص المجاور للخطأ في فيديو معكوس . تُعرض الأخطاء كرموز رقمية، مع وجود وصف لها في الدليل. [ 23 ] بفضل آلية عمل محرر الأسطر، يمكن للمستخدم إصلاح الخطأ فورًا. في المثال الموضح أعلاه (مع PRUNT)، يمكن إصلاح الخطأ بتحريك المؤشر فوق U، وكتابة (يحتوي المحرر على وضع الكتابة فوق النص فقط)، ثم الضغط على .IRETURN

يُدرج سطرٌ يبدأ برقمٍ من 0 إلى 32767 [ 24 ] في البرنامج الحالي أو يستبدل سطرًا موجودًا. إذا لم يُحدد رقم سطر، يُعيّن له المفسر الرقم -1 (8000 دولار) وتُنفّذ الأوامر فورًا في "الوضع الفوري". RUNيُنفّذ الأمر البرنامج المخزن بدءًا من أدنى رقم سطر. تسمح لغة أتاري بيسك بتنفيذ جميع الأوامر في كلا الوضعين. على سبيل المثال، LISTيمكن استخدام الأمر داخل برنامج، بينما في العديد من المفسرات الأخرى، يكون هذا متاحًا في الوضع الفوري فقط.

أثناء الإدخال، يمكن اختصار الكلمات الرئيسية باستخدام النمط المحدد في لغة Palo Alto Tiny BASIC ، وذلك بكتابة نقطة في أي موضع من الكلمة. على سبيل المثال ، L.تُوسّع الكلمة إلى LIST، كما تُوسّع إلى LI.. يكفي كتابة عدد كافٍ من الأحرف لجعل الاختصار فريدًا، لذا PLOTيتطلب ذلك نقطة PL.لأن الحرف P وحده ليس فريدًا. لتوسيع اختصار، يبحث المُجزئ في قائمة الكلمات المحجوزة للعثور على أول كلمة تُطابق الجزء المُدخل. تظهر الأوامر الأكثر استخدامًا أولًا في قائمة الكلمات المحجوزة، مع وجود REMفي البداية (يمكن كتابتها كـ .). عند تحرير البرنامج لاحقًا LIST، سيكتب دائمًا الكلمات كاملةً باستثناء ثلاثة: PRINTله مرادف، ?؛ GOTOله مرادف، GO TO؛ LETوله مرادف وهو السلسلة الفارغة (لذا و تعنيان الشيء نفسه). هذه رموز منفصلة، ​​وستبقى كذلك في قائمة البرنامج. كما سمحت MS BASICs كشكل مختصر لـ ، ولكن هذا استخدم نفس الرمز المميز لذلك توسع إلى الوراء إلى عندما ed ، مع معاملته كاختصار وليس مرادفًا.10LETA=1010A=10?PRINTPRINTLIST

مُجزئ الكلمات

عند ضغط المستخدم أثناء التحرير، تُنسخ السطر الحالي إلى مخزن إدخال BASIC في الذاكرة بين $0580 و $05FF . [ 24 ] يقوم مُجزئ Atari BASIC بمسح النص، محولًا كل كلمة مفتاحية إلى رمز أحادي البايت (على سبيل المثال، PRINT هو $20[ 25 ] وكل رقم إلى قيمة فاصلة عائمة من ستة بايتات، وكل اسم متغير إلى فهرس في جدول، وهكذا، حتى يتحول السطر بالكامل إلى تنسيق سهل الفهم. تُخزن النتيجة في مخزن إخراج يقع في أول 256 بايت من أقل مساحة ذاكرة حرة متاحة، ويشير إليه مؤشر LOMEM المخزن عند $80 ، $81 . [ 24 ] ثم يُعاد توجيه مخرجات المُجزئ. يُخزن البرنامج كشجرة تحليل . [ د ]RETURN

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

تشير مجموعة من المؤشرات (العناوين) إلى بيانات متنوعة: تُخزَّن أسماء المتغيرات في جدول أسماء المتغيرات (VNTP $82 ، $83 )، وتُخزَّن قيمها في جدول قيم المتغيرات (يُشار إليه في VVTP $86 ، $87 ). وبفضل هذا التوجيه غير المباشر لأسماء المتغيرات، لا يحتاج مرجع المتغير إلا إلى بايت واحد للوصول إلى مدخله في الجدول المناسب. للمتغيرات النصية مساحة خاصة بها (يُشار إليها في STARP $8C ، $8D )، وكذلك مكدس وقت التشغيل (يُشار إليه في RUNSTK $8E ، $8F ) المُستخدم لتخزين أرقام أسطر عبارات التكرار ( ) والإجراءات الفرعية ( ). وأخيرًا، يُشار إلى نهاية استخدام ذاكرة BASIC بواسطة عنوان مُخزَّن في مؤشر MEMTOP ( $90 ، $91 ).FOR...NEXTGOSUB...RETURN

الدوال الرياضية

تتضمن لغة أتاري بيسك ثلاث دوال مثلثية: الجيب، وجيب التمام، وظل الزاوية العكسي. DEGويُحدد RADما إذا كانت هذه الدوال تستخدم الراديان أو الدرجات، مع استخدام الراديان افتراضيًا. وتشمل ثماني دوال إضافية التقريب، واللوغاريتمات، والجذر التربيعي. أما الدالة العشوائية، RNDفتُولد عددًا بين 0 و1؛ ولا يُستخدم المعامل .

معالجة السلاسل النصية

استنسخت لغة أتاري بيسك نظام معالجة السلاسل النصية من لغة هيوليت-باكارد بيسك ، [ 27 ] حيث يكون نوع البيانات الأساسي حرفًا واحدًا، والسلاسل النصية عبارة عن مصفوفات من الأحرف. داخليًا، تُمثَّل السلسلة النصية بمؤشر إلى الحرف الأول فيها وطولها. لتهيئة سلسلة نصية، يجب تحديد أبعادها بأقصى طول لها. على سبيل المثال:

10 DIM A$ ( 20 ) 20 PRINT "أدخل الرسالة: " ; 30 INPUT A$ 40 PRINT A$

في هذا البرنامج، تم حجز سلسلة نصية بطول 20 حرفًا، وسيتم اقتطاع أي أحرف تتجاوز طول السلسلة. الحد الأقصى لطول السلسلة هو 32,768 حرفًا. لا يدعم البرنامج مصفوفات السلاسل النصية.

يتم الوصول إلى السلسلة النصية باستخدام دوال فهرسة المصفوفات، أو ما يُعرف بالتقطيع . A$(1,10)تُعيد هذه الدالة سلسلة نصية تتكون من أول 10 أحرف من السلسلة A$النصية. تبدأ فهرسة المصفوفات من 1، لذا فإن سلسلة نصية بطول 10 أحرف تبدأ من 1 وتنتهي عند 10. تقوم دوال التقطيع ببساطة بتعيين مؤشرات إلى نقطتي البداية والنهاية ضمن الذاكرة المخصصة الموجودة.

لا يتم تهيئة المصفوفات، لذا تحتوي المصفوفة الرقمية أو السلسلة النصية على البيانات الموجودة في الذاكرة عند تخصيصها. تتيح الحيلة التالية تهيئة سريعة للسلاسل النصية، وهي مفيدة أيضًا لتفريغ مساحات كبيرة من الذاكرة من البيانات غير المرغوب فيها. لا يمكن تفريغ المصفوفات الرقمية إلا باستخدام حلقة FOR...NEXT.

10 REM تهيئة A$ بـ 1000 حرف من X 20 DIM A$ ( 1000 ) 30 A$ = "X" : A$ ( 1000 ) = A$ : A$ ( 2 ) = A$

تعمل عملية دمج السلاسل النصية كما في المثال التالي. يجب أن تكون السلسلة النصية المستهدفة كبيرة بما يكفي لاستيعاب السلسلة المدمجة، وإلا سيحدث خطأ.

10 DIM A$ ( 12 ), B$ ( 6 ) 20 A$ = "Hello " : B$ = "there!" 30 A$ ( LEN ( A$ ) + 1 ) = B$ 40 PRINT A$

تُفصل القيم في عبارات DATA بفواصل، وهي غير مُحددة النوع. لذا، لا تُحاط السلاسل النصية في عبارات DATA عادةً بعلامات اقتباس. ونتيجةً لذلك، لا يمكن أن تحتوي عناصر البيانات على فاصلة، ولكن يمكن أن تحتوي على علامات اقتباس مزدوجة. تُقرأ القيم العددية في عبارات DATA كسلاسل نصية أو كأرقام، وذلك حسب نوع المتغير الذي تُقرأ فيه. لا يمكن استخدام عبارة READ مع متغيرات المصفوفات.

المدخلات/المخرجات

يتضمن نظام تشغيل أتاري نظامًا فرعيًا لإدخال/إخراج الأجهزة الطرفية يُعرف باسم CIO (الإدخال/الإخراج المركزي). يمكن كتابة معظم البرامج بشكل مستقل عن الجهاز المستخدم، نظرًا لالتزامها جميعًا بواجهة مشتركة؛ وهو أمر نادر في أجهزة الكمبيوتر المنزلية آنذاك. كان من السهل نسبيًا كتابة برامج تشغيل جديدة للأجهزة، والتي كانت متاحة تلقائيًا لبرنامج أتاري بيسك وأي برنامج آخر يستخدم نظام تشغيل أتاري، كما كان من الممكن استبدال برامج التشغيل الحالية أو تطويرها ببرامج جديدة. على سبيل المثال، يمكن استبدال القرص E: الموجود في ذاكرة القراءة فقط (ROM) لعرض 80 عمودًا، أو استخدامه لإنشاء مجموع اختباري عند إرجاع سطر (كما هو الحال عند التحقق من قائمة البرامج المدخلة).

يدعم نظام أتاري بيسك الوصول إلى واجهة الإدخال/الإخراج (CIO) باستخدام الكلمات المحجوزة التالية: OPEN #، CLOSE #، PRINT #، INPUT #، GET #، PUT #، NOTE #، POINT و XIO # . يحتوي النظام على إجراءات لوظائف رسم الرسومات البسيطة، ولكن ليست جميعها متاحة ككلمات مفتاحية خاصة بلغة بيسك. يدعم النظام الأمرَين PLOT و DRAWTO لرسم الخطوط، بينما لا يدعم الأمر الخاص بتعبئة المساحات للأشكال الهندسية الخطية الأولية. يمكن استخدام خاصية التعبئة من خلال نقطة دخول واجهة الإدخال/الإخراج العامة، والتي يتم استدعاؤها باستخدام الأمر XIO في لغة بيسك .         

تقوم عبارة BASIC OPEN # بتجهيز الجهاز للوصول إلى عمليات الإدخال/الإخراج: 

10 REM يفتح جهاز الكاسيت على القناة 1 للقراءة في BASIC 20 OPEN # 1 , 4 , 0 , "C:MYPROG.DAT"

هنا، تعني عبارة OPEN # التأكد من خلو القناة 1، ثم استدعاء برنامج تشغيل القرص C: لإعداد الجهاز (سيؤدي ذلك إلى شد بكرات شريط الكاسيت وتحريك رؤوس القراءة/الكتابة مع إبقاء مشغل شريط الكاسيت في وضع "الإيقاف المؤقت"). يشير الرقم 4 إلى "القراءة" (بينما يشير الرقم 8 إلى الكتابة، و 12 = 8 + 4 إلى "القراءة والكتابة"). الرقم الثالث هو معلومات إضافية، ويُضبط على 0 عند عدم الحاجة إليه. C:MYPROG.DAT هو اسم الجهاز واسم الملف؛ ويتم تجاهل اسم الملف بالنسبة لبرنامج تشغيل الكاسيت. يمكن أن تحتوي الأجهزة المادية على أرقام (خاصة الأقراص والطابعات والأجهزة التسلسلية)، لذا قد يكون " P1: " هو الراسمة و" P2: " هو طابعة العجلات، أو قد يكون " D1: " هو محرك أقراص واحد و" D2: " وهكذا. إذا لم يكن موجودًا، يُفترض أن قيمته 1. 

تقوم عبارة LPRINT بإرسال سلسلة نصية إلى الطابعة.

تُقرأ A بواسطة PEEK من مواقع الذاكرة التي يحتفظ بها برنامج تشغيل لوحة المفاتيح أو عن طريق فتحها كملف (على سبيل المثال ). ينتظر الأخير ضغطة مفتاح.OPEN1,4,0,"K:":GET#1,A$

يؤدي الكتابة DOSمن BASIC إلى الخروج إلى قائمة أوامر Atari DOS . تُفقد أي برامج غير محفوظة ما لم يتم تفعيل ميزة تبديل الملفات في الذاكرة على القرص الحالي. لا يوجد أمر لعرض دليل القرص من داخل BASIC؛ يجب القيام بذلك عن طريق الخروج إلى DOS.

الرسومات والصوت

تدعم لغة أتاري بيسك الصوت (عبر عبارة SOUND )، والرسومات ( GRAPHICS، SETCOLOR، COLOR، PLOT، DRAWTO )، وأجهزة التحكم ( STICK، STRIG، PADDLE، PTRIG ). [ 28 ] تقوم عبارة SOUND بتعيين إحدى قنوات الموجة المربعة الأربع للجهاز مع معلمات لمستوى الصوت، ودرجة الصوت، والتشويه.

لا يدعم برنامج BASIC الإمكانيات المتقدمة للجهاز، مثل دقة الصوت العالية، ومرشحات الترددات العالية، والصوت الرقمي، ورسومات اللاعب/القذيفة ( الرسوم المتحركة )، ومجموعات الأحرف المُعاد تعريفها، والتمرير، وأنماط الرسومات المخصصة؛ إذ يتطلب ذلك استخدام إجراءات لغة الآلة أو أوامر PEEK/POKE. بعض أنماط الأحرف/الرسومات الأساسية الستة عشر التي يدعمها الجهاز لا يمكن الوصول إليها بسهولة من BASIC على جهازي Atari 400/800، لأن ذاكرة القراءة فقط لنظام التشغيل لا تدعمها. تشمل هذه الأنماط بعض أنماط الأحرف متعددة الألوان (النمطان 4 و5 من ANTIC)، ونمط الأحرف الهابطة (النمط 3 من ANTIC)، وأعلى دقة للنمطين ثنائي ورباعي الألوان (النمطان C وE من ANTIC، بدقة 160 × 192 بكسل). الطريقة الوحيدة للوصول إليها هي عبر أوامر PEEK/POKE أو لغة الآلة، مع ضبط سجلات ANTIC وقائمة العرض يدويًا. أضافت ذاكرة القراءة فقط لنظام التشغيل على جهازي XL/XE دعمًا لهذه الأوضاع باستثناء الوضع ANTIC 3، الذي يتطلب إعادة تعريف مجموعة الأحرف في ذاكرة الوصول العشوائي ليعمل بشكل صحيح. [ 29 ]

في لغة BASIC، تُضبط أوضاع الصور النقطية عادةً بحيث تشغل نافذة نصية الصفوف الأربعة الأخيرة أسفل الشاشة، مما يسمح للمستخدم بعرض التعليمات وإدخال البيانات في البرنامج. إذا أُضيف الرقم 16 إلى رقم الوضع المُستدعى عبر عبارة GRAPHICS ، فستكون الشاشة بأكملها في وضع الصور النقطية (على سبيل المثال، `<bitmap> `). عند استدعاء وضع الصور النقطية في وضع ملء الشاشة، ستعود لغة Atari BASIC بسلاسة إلى وضع النص عند انتهاء تنفيذ البرنامج، متجنبةً ترك المستخدم أمام شاشة غير مستجيبة تتطلب منه كتابة أمر عشوائي أو إعادة تشغيل الكمبيوتر.GRAPHICS 8+16

تتراوح إحداثيات الصورة النقطية من 0 إلى أقصى صف/عمود ناقص واحد، وبالتالي في الوضع 6 (160 × 192)، يمكن أن تكون الإحداثيات القصوى للبكسل 159 و191. إذا حاول برنامج Atari BASIC الرسم خارج الإحداثيات المسموح بها لهذا الوضع، فسيحدث خطأ أثناء التشغيل.

تقنيات متقدمة

السلاسل كوسيلة للتلاعب بالذاكرة

تُخزَّن عناوين السلسلة النصية في جدول متغيرات. ويمكن إعادة توجيه عناوين السلاسل النصية لتشير إلى أي منطقة في ذاكرة الوصول العشوائي (RAM). يتيح ذلك تطبيق إجراءات نقل الذاكرة السريعة، التي تُعنى بتعيين السلاسل النصية والسلاسل الفرعية، من لغة BASIC إلى الذاكرة المستخدمة لعرض الشاشة أو رسومات اللاعب/الصاروخ. يُعدّ هذا مفيدًا بشكل خاص لتحقيق حركة رأسية سريعة لصور اللاعب/الصاروخ مباشرةً من Atari BASIC.

الوصول العشوائي عبر DATA/RESTORE

يمكن استخدام المتغيرات والتعبيرات الرقمية كمعامل للعبارة RESTORE، مما يسمح DATAبالوصول العشوائي إلى العبارات من خلال التعليمات البرمجية . ويمكن استخدام ذلك أيضًا لمحاكاة مصفوفات السلاسل النصية الثابتة .RESTOREROOMBASE+ROOMNUMBER:READDESCRIPTION$,TREASURE$,EXITSRESTORESTRBASE+INDEX:READA$:PRINTA$

معالجة الأخطاء باستخدام TRAP

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

يشمل

يقرأ الأمر ENTERشفرة المصدر من الجهاز ويدمجها في البرنامج الحالي، كما لو كان المستخدم قد كتبها. يتيح ذلك حفظ البرامج على شكل أجزاء LIST، ثم قراءتها باستخدام الأمر ENTERلدمج الشفرة الموجودة أو استبدالها. وباستخدام كتل من أرقام الأسطر غير المتداخلة، يستطيع المبرمجون إنشاء مكتبات من الإجراءات الفرعية ودمجها في برامج جديدة حسب الحاجة.

كود ذاتي التعديل

يمكن ضبط المحرر لقراءة المدخلات من الشاشة بشكل متكرر حتى الوصول إلى نهاية الملف (EOF). يسمح هذا للبرنامج بكتابة كود برمجي جديد متبوعًا بعبارة CONTعلى الشاشة، ثم، بوضع مؤشر الشاشة عند بداية الكود الجديد، STOPيقوم البرنامج قيد التشغيل بقراءة الكود الجديد ثم يتابع تنفيذه بواسطة CONTالعبارة.

لغة الآلة المضمنة

يستطيع برنامج أتاري بيسك استدعاء إجراءات فرعية من لغة الآلة مخزنة في سلاسل نصية أو POKEفي الذاكرة. وغالبًا ما تُستخدم منطقة الـ 256 بايت التي تبدأ من العنوان 1536 ( 0600$ ) لهذا الغرض.

يتم استدعاء رمز الآلة باستخدام USRالدالة. المعامل الأول هو عنوان الروتين الفرعي، والقيم التالية هي معاملات. إذا تم تخزين الرمز في سلسلة نصية باسم معين، ROUTINE$فيمكن استدعاؤه بمعاملين كما يلي ANSWER=USR(ADR(ROUTINE$),VAR1,VAR2):

تُضاف المعاملات إلى مكدس الأجهزة كأعداد صحيحة من 16 بت بالترتيب المحدد في الاستدعاء، USRبدءًا من البايت الأدنى ثم البايت الأعلى. ويُضاف بايت أخير يُشير إلى عدد الوسائط. يجب على كود لغة الآلة إزالة هذه القيم قبل العودة عبر RTSالتعليمة. يمكن إرجاع قيمة 16 بت إلى لغة BASIC بوضعها في العنوانين 212 و213 ( D4 و D5 ).

أداء

نظريًا، من المفترض أن يعمل برنامج أتاري بيسك أسرع من برامج بيسك المعاصرة المبنية على نمط MS. نظرًا لأن شفرة المصدر تُجزأ بالكامل عند إدخالها، فإن جميع خطوات التجزئة والتحليل تكون مكتملة بالفعل. حتى العمليات الحسابية المعقدة جاهزة للتنفيذ، حيث يتم تحويل أي ثوابت عددية إلى التنسيق الداخلي ذي 40 بت، ويتم البحث عن قيم المتغيرات عن طريق العنوان بدلًا من البحث عنها يدويًا. [ هـ ] على الرغم من هذه المزايا، إلا أن برنامج أتاري بيسك عمليًا أبطأ من معظم برامج بيسك الأخرى لأجهزة الكمبيوتر المنزلية ، وغالبًا بفارق كبير. [ 30 ]

في اختبارين معياريين شائعين في ذلك الوقت، وهما اختبار "منخل إراتوستينس" ​​لمجلة بايت واختبار "كرييتف كومبيوتينغ" المعياري الذي وضعه ديفيد هـ. أهل ، احتل جهاز أتاري مرتبة متأخرة من حيث الأداء، وكان أبطأ بكثير من جهازي أبل 2 و PET المعاصرين له ، [ 31 ] على الرغم من امتلاكه نفس وحدة المعالجة المركزية التي تعمل بسرعة مضاعفة تقريبًا. وقد جاء أداؤه خلف أجهزة أبطأ مثل ZX81 وحتى بعض الآلات الحاسبة القابلة للبرمجة. [ 32 ]

يعود معظم بطء اللغة إلى ثلاث مشاكل. [ 30 ]

أولًا، تعاني إجراءات العمليات الحسابية ذات الفاصلة العائمة من ضعف في التحسين. ففي اختبار Ahl المعياري، تُعزى معظم نتائج الجهاز الضعيفة إلى عملية أسية واحدة. [ 30 ] كما أن عملية التحويل بين الأعداد ذات الفاصلة العائمة والأعداد الصحيحة ذات 16 بت بطيئة للغاية. تُستخدم هذه الأعداد الصحيحة داخليًا لترقيم الأسطر وفهرسة المصفوفات، بالإضافة إلى بعض المهام الأخرى، ولكن تُخزَّن الأرقام في البرنامج المُجزَّأ بصيغة النظام العشري المُشفَّر ثنائيًا (BCD). [ 33 ] عند مصادفة أيٍّ من هذه الأرقام، مثل رقم السطر في [المثال] GOTO 100، يتم تحويل قيمة BCD إلى عدد صحيح، وهو ما قد يستغرق ما يصل إلى 3500  ميكروثانية. [ 34 ]

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

ثمة مشكلة أخرى ذات صلة وأكثر خطورة تتمثل في تنفيذ الحلقات FORالتكرارية NEXT. فعند FORتنفيذ عبارة ما، يسجل برنامج أتاري بيسك رقم سطرها. وفي كل مرة NEXTيتم الوصول إلى هذا السطر، يبحث البرنامج عنه في جميع أنحاء البرنامج، على الرغم من أنه في نفس الموقع كما في المرة السابقة. [ 30 ] أما برامج بيسك الأخرى، فتسجل موقع العبارة في الذاكرة FOR، ويمكنها العودة إليها مباشرةً دون الحاجة إلى البحث.

إن سبب هذا الأداء الضعيف يتضح بشكل أفضل من خلال اقتباس لأحد مؤلفيه الرئيسيين، بيل ويلكنسون؛ حيث صرح في عام 1982 بما يلي:

شخصياً، لم أكن يوماً متأكداً من ضرورة أن تكون لغة برمجة مُفسَّرة (مثل لغة BASIC) سريعة. فقد ادعى بعض المؤلفين أن لغة Atari BASIC هي أبطأ لغة برمجة على الإطلاق. وكان رد فعلي الأول هو: "ومن يهتم؟" ​​[ 36 ]

يمكن للمرء أن يقارن هذه الفلسفة بفلسفة ستيف وزنياك في لغة Apple BASIC لجهاز Apple I الأصلي ، والتي صُممت خصيصًا لتوفير الأداء المطلوب لكتابة الألعاب:

بعد تصميم ألعاب الأركيد للأجهزة، أدركت أن القدرة على برمجتها بلغة BASIC ستغير العالم. [ 37 ]

ظهرت العديد من لغات BASIC الخارجية على المنصة، والتي عالجت بعضًا من هذه المشكلات أو جميعها. وشمل ذلك لغة BASIC XL الخاصة بـ Wilkinson ، والتي قلّصت زمن اختبار Byte من 194 إلى 58 ثانية، [ 30 ] أي أسرع بثلاث مرات. في اختبار Ahl، استغرقت لغة Atari BASIC 405 ثوانٍ، بينما استغرق نفس الكود تمامًا في Turbo-BASIC XL 41.6 ثانية، أي بتحسن كبير. [ 38 ] كما أن لغتي BASIC A+ وBASIC XE من تطوير Wilkinson أيضًا.

الاختلافات عن لغة مايكروسوفت بيسك

  • يتم فحص بناء الجملة وتسليط الضوء على الأخطاء فور إدخال السطر.
  • يمكن أن تكون أسماء المتغيرات ذات طول عشوائي، وجميع الأحرف ذات أهمية.
  • يمكن استخدام أي كلمة مفتاحية كمتغير، إذا تم تعريفها باستخدام LET. [ 39 ]
  • الكلمات المفتاحية التالية غير موجودة في لغة أتاري بيسك: INKEY$, CLS, DEF FN, SPC, TAB, ELSE.
  • يجب تحديد أبعاد جميع المصفوفات قبل استخدامها، بينما يقوم برنامج Microsoft BASIC افتراضيًا بتعريف المصفوفة على أنها تحتوي على 10 عناصر إذا لم يتم تحديد أبعادها.
  • تُعامل متغيرات السلاسل النصية كمصفوفات أحرف، ويجب تحديد أبعادها قبل استخدامها. يخزن برنامج MS BASIC السلاسل النصية في الذاكرة الديناميكية (heap) ، ويتوقف أحيانًا مؤقتًا لجمع البيانات المهملة .
  • يتم استبدال الدوال LEFT$، MID$و ، و RIGHT$بفهرسة السلاسل النصية.
  • لا يوجد عامل لدمج السلاسل النصية.
  • لا توجد مصفوفات من السلاسل النصية.
  • لا يوجد دعم للمتغيرات العددية الصحيحة.
  • لا توجد عوامل تشغيل على مستوى البت.
  • INPUTلا يسمح بإدخال مطالبة.
  • PRINTقد يتم اختصارها كما ?في لغة مايكروسوفت بيسك، لكن لغة أتاري بيسك لا تقوم بتقسيمها إلى PRINT. وتبقى علامة استفهام.
  • GOTOيمكن أن يكون الهدف GOSUBمتغيرًا أو تعبيرًا.
  • RESTOREقد يأخذ ثابتًا رقميًا أو متغيرًا أو تعبيرًا كمعامل، مما يؤدي READإلى بدء التالي من رقم السطر المحدد.
  • FOR..NEXTيجب أن تحتوي الحلقات في لغة أتاري بيسك على اسم متغير تتم الإشارة إليه بواسطة NEXTالعبارة، بينما لا تتطلب لغة مايكروسوفت بيسك ذلك.
  • لا يُسمح باستخدام متغيرات متعددة مع NEXTالعبارات كما هو الحال في لغة مايكروسوفت بيسك (على سبيل المثال، NEXT X,Y).
  • LISTيستخدم الفاصلة لفصل النطاق بدلاً من علامة الطرح.

الكلمات المفتاحية

ملحوظات

  1. تشغل لغة AppleSoft BASIC مواقع الذاكرة من $D000 إلى $F7FF، بإجمالي 10240 بايت.
  2. يستخدم Commodore BASIC منطقتين رئيسيتين من الذاكرة، $A000 - $BFFF و $E000 - $E4D2 . [ 8 ]
  3. يستخدم برنامج Applesoft الذاكرة من $D000 إلى $F7FF ، بما في ذلك مكتبة FP. [ 9 ]
  4. على الرغم من أن شجرة التحليل يتم تنفيذها كمجموعة من الجداول، وهو في الواقع تفصيل تنفيذي.
  5. تحتوي لغة مايكروسوفت بيسك على حرفين مهمين فقط في أسماء المتغيرات، حيث يتم تخزينها في قائمة تحتوي على بايتين فقط من ASCII للاسم لتحسين وقت البحث.

مراجع

الاستشهاد

  1. 1 2 لورينزو، مارك (2017). الحلقة اللانهائية: تاريخ لغة برمجة BASIC . فيلادلفيا: SE Books. ص  106. ISBN 978-1974-27707-0.
  2. ^ ديكوير 1999 .
  3. 1 2 3 4 5 ويلكنسون 1982 ، ص. 9.
  4. ستيل، مايكل (20 أكتوبر 2008). "أنشئ نسختك الخاصة من لغة مايكروسوفت بيسك لجهاز 6502" . يتطلب بعض التجميع .
  5. ويلكنسون 1982 ، الصفحات iv–v.
  6. كروميمكو 1978 .
  7. Cromemco 1978 ، ص 2، 3.
  8. "خريطة الذاكرة" .
  9. "خريطة الذاكرة - جهاز Apple II مع تحميل Applesoft BASIC" .
  10. 1 2 ويلكنسون 1982 ، ص. الخامس.
  11. 1 2 ويلكنسون 1982 ، ص. س.
  12. تشيري، تشارلز (يونيو 1987). "مجموعة بونانزا الأساسية" . أنتيك .
  13. ويلكنسون 1982 ، ص. 6.
  14. 1 2 "أخطاء أتاري بيسك" . مجلة الحوسبة! يوليو 1986. ص 10. 
  15. "كتاب كومبيوت! الأول عن أتاري" . www.atariarchives.org . تاريخ الاسترجاع: 11 سبتمبر 2024. كارول شو، كيث بريستر. دليل مرجعي أساسي. مسودة، أتاري، إنك، صني فيل، كاليفورنيا (1979).
  16. إدواردز، بنج (12 أكتوبر 2011). "مقابلة VC&G: كارول شو، أول مطورة ألعاب فيديو في أتاري" . كان لديهم دليل استخدام لبرنامج أتاري بيسك [لجهاز أتاري 800]، وقد كتب أحدهم دليلًا لطيفًا نوعًا ما، كان من المفترض أن يكون فكاهيًا للغاية، لكنه احتوى على الكثير من الأخطاء التقنية. انتهى بي الأمر بإعادة كتابة الدليل . تم الاطلاع عليه بتاريخ 11 سبتمبر 2024 .
  17. "النساء في مجال التكنولوجيا: المسيرة المهنية الرائدة لكارول شو، رائدة ألعاب الفيديو" . blog.avast.com . تاريخ الاطلاع: 11 سبتمبر 2024 .
  18. 1 2 رادكليف، ماثيو (سبتمبر 1985). "محول المراجعة ج" . أنتيك . تم الاسترجاع في 2023-07-08 .
  19. 1 2 3 4 تشادويك 1985 ، ص 230.
  20. تشادويك 1985 ، ص 250-251.
  21. هاردي، بوب (فبراير 1993). "مستخرج رمز المفتاح" . كلاسيكيات أتاري . ص 18. 
  22. ويلكنسون، أوبراين ولوتون 1983 .
  23. الدليل 1980 ، الملحق ب.
  24. 1 2 3 كروفورد 1982 ، ص. 10.3.
  25. كروفورد 1982 ، ص. 10.6.
  26. ويلكنسون، أوبراين ولوتون 1983 ، ص 5.
  27. دليل مرجعي لبرنامج HP 2000/Access BASIC (ملف PDF) . شركة هيوليت باكارد. مايو 1976. الصفحات e. 
  28. الدليل 1980 ، ص 54.
  29. "ATR: الفصل 15: عرض القوائم" .
  30. 1 2 3 4 5 ويلكنسون 1985 ، ص 139.
  31. أهل، ديفيد (نوفمبر 1983). "اختبار مقارنة المعايير" . الحوسبة الإبداعية . ص 259-260 . 
  32. أهل، ديفيد (يناير 1984). "معيار الحوسبة الإبداعية" . الحوسبة الإبداعية . ص 12. 
  33. ويلكنسون، أوبراين ولوتون 1983 ، ص 17.
  34. كروفورد 1982 ، ص 8.45.
  35. وينر، لين (1982). "دي ري أتاري، الفصل 10: أتاري بيسك" . أتاري، إنك.
  36. ويلكنسون، بيل (سبتمبر 1982). "نظرة ثاقبة: أتاري" . مجلة كومبيوت!، ص 116. 
  37. ويليامز، جريج؛ مور، روب (ديسمبر 1984). "قصة أبل / الجزء 1: التاريخ المبكر" . بايت . ص. A71. 
  38. "معيار أهل؟" . 28 نوفمبر 2007.
  39. فيكتور، جون (1981). "أتاري بيسك الجزء الثاني" . كتاب كومبيوت! الأول عن أتاري . كتب كومبيوت!. ص 19. 

فهرس