النواة

KERNAL [1] هو اسم Commodore لنظام التشغيل الأساسي المقيم في ROM في أجهزة الكمبيوتر المنزلية ذات 8 بتات ؛ من PET الأصلي لعام 1977، متبوعًا بالإصدارات الموسعة ولكن ذات الصلة المستخدمة في خلفائها: VIC-20 ، Commodore 64 ، Plus/4 ، Commodore 16 ، و Commodore 128 .

وصف

تتكون ذاكرة KERNAL في أجهزة Commodore ذات الثماني بتات من روتينات نظام التشغيل منخفضة المستوى والقريبة من الأجهزة والتي تعادل تقريبًا BIOS في أجهزة IBM PC المتوافقة (على النقيض من روتينات مفسر BASIC ، الموجودة أيضًا في ذاكرة القراءة فقط) بالإضافة إلى وظائف الإدخال/الإخراج عالية المستوى والمستقلة عن الجهاز. يمكن للمستخدم استدعاؤها عبر جدول انتقال في ذاكرة الوصول العشوائي (RAM) حيث يظل الجزء المركزي (الأقدم)، لأسباب تتعلق بالتوافق مع الإصدارات السابقة ، [2] متطابقًا إلى حد كبير في جميع أنحاء سلسلة الثماني بتات. تشغل ذاكرة القراءة فقط KERNAL آخر 8 كيلوبايت من مساحة عنوان وحدة المعالجة المركزية ذات الثماني بتات والتي تبلغ 64 كيلوبايت ($E000–$FFFF).

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

تعتبر ألعاب Adventure International المنشورة لجهاز VIC-20 على الخرطوشة مثالاً على البرامج التي تستخدم KERNAL. ولأنها تستخدم فقط جدول القفز، يمكن تفريغ الألعاب من الذاكرة إلى القرص وتحميلها إلى Commodore 64 وتشغيلها دون تعديل. [4]

تم كتابة KERNAL في البداية لجهاز Commodore PET بواسطة John Feagans، الذي قدم فكرة فصل روتينات BASIC عن نظام التشغيل. تم تطويره لاحقًا بواسطة العديد من الأشخاص، ولا سيما Robert Russell، الذي أضاف العديد من الميزات لجهاز VIC-20 وC64.

مثال

يتم تقديم مثال بسيط، ولكنه مميز، لاستخدام KERNAL بواسطة البرنامج الفرعي للغة التجميع 6502 التالي [5] (مكتوب بتنسيق/بنية تجميع ca65 ):

   CHROUT = $ffd2؛ CHROUT هو عنوان روتين إخراج الأحرف
   CR = $0d ؛ رمز PETSCII لإرجاع العربة 
   ؛
   مرحبًا:
           ldx #0؛ ابدأ بالحرف 0 عن طريق تحميل 0 في سجل الفهرس x
   التالي:
           lda message,x؛ تحميل البايت من عنوان message+x إلى المجمع
           تم الانتهاء من beq؛ إذا كان المراكم يحمل صفرًا، فقد انتهينا ونريد التفرع خارج الحلقة
           jsr CHROUT ؛ استدعاء CHROUT لإخراج char إلى جهاز الإخراج الحالي (الافتراضي هو الشاشة)
           inx؛ قم بزيادة x للانتقال إلى الحرف التالي
           bne next؛ حلقة رجوع للخلف بينما الحرف الأخير ليس صفرًا (الحد الأقصى لطول السلسلة 255 بايت)
   منتهي:
           rts؛ العودة من البرنامج الفرعي
   ؛
   رسالة:
           .byte " مرحبا بالعالم! "
           .byte CR، 0؛ إرجاع العربة والصفر يمثلان نهاية السلسلة

يستخدم هذا الجزء من التعليمات البرمجية CHROUTالروتين، الذي يوجد عنوانه في العنوان $FFD2(65490)، لإرسال سلسلة نصية إلى جهاز الإخراج الافتراضي (على سبيل المثال، شاشة العرض).

الاسم

كانت KERNAL تُعرف باسم kernel [6] داخل Commodore منذ أيام PET، ولكن في عام 1980 أخطأ روبرت راسل في كتابة الكلمة kernal في دفاتر ملاحظاته. وعندما جمع كاتبا التقنية في Commodore نيل هاريس وآندي فينكل ملاحظات راسل واستخدماها كأساس لدليل مبرمج VIC-20، تبعهما الخطأ الإملائي وظلا على حالهما. [7]

وفقًا لأسطورة كومودور المبكرة، والتي ذكرها الكاتب/المبرمج جيم باترفيلد من بين آخرين، فإن "كلمة" KERNAL هي اختصار (أو على الأرجح، اختصار خلفي ) يرمز إلى لوحة المفاتيح ، والقراءة ، والشبكة ، والحبر ، وهو أمر منطقي في الواقع بالنظر إلى دورها. استخدمتها شركة Berkeley Softworks لاحقًا عند تسمية الروتينات الأساسية لنظام التشغيل GUI لأجهزة الكمبيوتر المنزلية ذات 8 بت: GEOS KERNAL .

على جهاز الإدخال/الإخراج المستقل

من المثير للدهشة أن KERNAL نفذت واجهة برمجة تطبيقات مستقلة عن الجهاز لإدخال/إخراج لا تختلف تمامًا عن واجهة برمجة تطبيقات Unix أو Plan-9 ، والتي لم يستغلها أحد بالفعل، على حد علم الجمهور. وبينما يمكن للمرء أن يزعم بشكل معقول أن "كل شيء عبارة عن ملف" في هذه الأنظمة الأخيرة، يمكن للآخرين بسهولة أن يزعموا أن "كل شيء عبارة عن جهاز GPIB " في الأول.

بسبب القيود المفروضة على بنية 6502 في ذلك الوقت، يتطلب فتح قناة إدخال/إخراج ثلاث مكالمات نظامSETNAM . تحدد المكالمة الأولى عادةً اسم الملف المنطقي من خلال مكالمة النظام. تحدد المكالمة الثانية، ، عنوان "الجهاز" SETLFSGPIB/ IEEE-488OPEN للتواصل معه. أخيرًا يتم استدعاؤها لإجراء المعاملة الفعلية. ثم يستخدم التطبيق مكالمات النظام CHKINو CHKOUTلتعيين قنوات الإدخال والإخراج الحالية للتطبيق على التوالي. قد يكون للتطبيقات أي عدد من الملفات المفتوحة في وقت واحد (حتى حد معين يعتمد على النظام؛ على سبيل المثال، يسمح C64 بفتح عشرة ملفات في وقت واحد). بعد ذلك، CHRINوتثبت CHROUTأنها مفيدة لإجراء الإدخال والإخراج فعليًا على التوالي. CLOSEثم تغلق القناة.

لاحظ أنه لا توجد نداءات نظام "لإنشاء" قناة إدخال/إخراج، لأن الأجهزة لا يمكن إنشاؤها أو تدميرها ديناميكيًا في ظل الظروف العادية. وعلى نحو مماثل، لا توجد وسيلة للبحث، أو لأداء وظائف "التحكم في الإدخال/الإخراج" مثل ioctl () في يونكس. والواقع أن KERNAL يثبت هنا أنه أقرب كثيرًا إلى فلسفة Plan-9، حيث يفتح التطبيق قناة "أمر" خاصة للجهاز المشار إليه لإجراء مثل هذه المعاملات "الفوقية" أو "خارج النطاق". على سبيل المثال، لحذف ("خدش") ملف من قرص، سيقوم المستخدم عادةً "بفتح" المورد الذي تم استدعاؤه S0:THE-FILE-TO-RMVعلى الجهاز 8 أو 9، القناة 15. وفقًا للاتفاقية المعمول بها في عالم Commodore 8-bit، تمثل القناة 15 "قناة الأوامر" للأجهزة الطرفية، بالاعتماد على تقنيات تمرير الرسائل للتواصل مع الأوامر والنتائج، بما في ذلك الحالات الاستثنائية. على سبيل المثال، في Commodore BASIC ، قد يجدون برامج لا تختلف عن البرامج التالية:

    70 ... 80 سجلات تدوير REM مفتوحة حاليًا على القناة المنطقية رقم 1. 90 إغلاق 1 100 فتح 15 ، 8 ، 15 ، "R0:ERROR.1=0:ERROR.0" : REM إعادة تسمية الملف ERROR.0 إلى ERROR.1 110 رقم الإدخال 15 ، A ، B$ ، C ، D : REM قراءة قناة الخطأ 120 إغلاق 15 130 إذا كانت A = 0 فانتقل إلى 200 140 طباعة "خطأ في إعادة تسمية ملف السجل:" 150 طباعة "الرمز:" + A 160 طباعة "الرسالة:" + B$ 170 نهاية 200 REM متابعة المعالجة هنا، وإنشاء ملف سجل جديد أثناء تقدمنا... 210 فتح 1 ، 8 ، 1 ، "0:ERROR.0,S,W" 220 ... 
     
      
      
      
      
         
      
      
      
     
     
      
     

تقتصر أرقام الأجهزة، وفقًا للوثائق المعمول بها، على النطاق [0,16]. ومع ذلك، جاء هذا القيد من التكيف المحدد لبروتوكول IEEE-488، وينطبق في الواقع فقط على الأجهزة الطرفية الخارجية. مع توجيه جميع نداءات نظام KERNAL ذات الصلة، يمكن للمبرمجين اعتراض نداءات النظام لتنفيذ أجهزة افتراضية بأي عنوان في نطاق [32,256]. ومن الممكن أن يقوم المرء بتحميل برنامج تشغيل جهاز ثنائي في الذاكرة، وتصحيح متجهات الإدخال/الإخراج KERNAL، ومن تلك اللحظة فصاعدًا، يمكن معالجة جهاز (افتراضي) جديد. حتى الآن، لم يتم الإعلان عن استخدام هذه القدرة علنًا، وربما لسببين: (1) لا يوفر KERNAL أي وسيلة لتخصيص معرفات الأجهزة ديناميكيًا، و(2) لا يوفر KERNAL أي وسيلة لتحميل صورة ثنائية قابلة لإعادة التوطين. وبالتالي، يقع عبء الاصطدامات في مساحة الإدخال/الإخراج وفي مساحة الذاكرة على المستخدم، بينما يقع توافق المنصة عبر مجموعة واسعة من الأجهزة على عاتق مؤلف البرنامج. ومع ذلك، يمكن بسهولة تنفيذ برامج الدعم لهذه الوظائف إذا رغبت في ذلك.

تعتمد تنسيقات أسماء الملفات المنطقية على الجهاز المحدد الذي يتم التعامل معه. الجهاز الأكثر شيوعًا بالطبع هو نظام القرص المرن، والذي يستخدم تنسيقًا مشابهًا لـ MD:NAME,ATTRS، حيث M هو نوع من العلم ($ لقائمة الدليل، @ للإشارة إلى الرغبة في الكتابة فوق ملف إذا كان موجودًا بالفعل، غير مستخدم بخلاف ذلك.)، D هو رقم وحدة القرص الفعلي (اختياري) (0: أو 1: لأنظمة محرك الأقراص المزدوج، فقط 0: لوحدات القرص الفردي مثل 1541، وما إلى ذلك، والذي يكون افتراضيًا 0: إذا ترك بدون تحديد)، NAMEهو اسم مورد يصل طوله إلى 16 حرفًا (معظم الأحرف مسموح بها باستثناء أحرف خاصة معينة)، وهو ATTRSقائمة اختيارية مفصولة بفواصل من السمات أو الأعلام. على سبيل المثال، إذا أراد المستخدم استبدال ملف برنامج يسمى PRGFILE، فقد يرى اسم ملف مثل @0:PRGFILE,Pالمستخدم بالتزامن مع الجهاز 8 أو 9. وفي الوقت نفسه، يتكون اسم الملف لبرنامج تشغيل RS-232 (الجهاز 2) ببساطة من أربعة أحرف، مشفرة بتنسيق ثنائي. [8]

لا تتطلب الأجهزة الأخرى، مثل لوحة المفاتيح (الجهاز 0)، والكاسيت (الجهاز 1)، وواجهة العرض (الجهاز 3)، والطابعة (الجهاز 4 و5)، أسماء ملفات للعمل، سواء بافتراض إعدادات افتراضية معقولة أو ببساطة عدم الحاجة إليها على الإطلاق.

ملحوظات

  1. ^ دليل مرجعي لمبرمجي Commodore 64. Commodore Business Machines, Inc.، 1982، ص 268
  2. ^ جدول الانتقال السريع لـ KERNAL، المستخدم للوصول إلى جميع البرامج الفرعية في KERNAL، عبارة عن مجموعة من تعليمات JMP (الانتقال السريع) المؤدية إلى البرامج الفرعية الفعلية. تضمن هذه الميزة التوافق مع البرامج المكتوبة بواسطة المستخدم في حالة الحاجة إلى نقل الكود داخل KERNAL ROM في إصدار لاحق.
  3. ^ "استكشاف VIC-20". يناير 1983.
  4. ^ كيفلسون، مورتون (يناير 1986). "مولدات الكلام لأجهزة كومودور / الجزء الثاني". أهوي! . ص. 32. تم الاسترجاع في 17 يوليو 2014 .
  5. ^ تم توجيه العديد من البرامج الفرعية KERNAL (على سبيل المثال، OPEN و CLOSE) عبر الصفحة الثالثة في ذاكرة الوصول العشوائي (RAM)، مما يسمح للمبرمج باعتراض مكالمات KERNAL المرتبطة بها وإضافة أو استبدال الوظائف الأصلية.
  6. ^ النواة هي الجزء الأكثر أهمية في البرنامج، وعادة ما يكون نظام التشغيل، والذي يتواجد في الذاكرة في جميع الأوقات ويوفر الخدمات الأساسية. إنه الجزء من نظام التشغيل الأقرب إلى الجهاز والذي قد يقوم بتنشيط الأجهزة مباشرة أو يتفاعل مع طبقة برمجية أخرى تعمل على تشغيل الأجهزة.
  7. ^ على الحافة: الصعود والسقوط المذهل لشركة كومودور ، صفحة 202.
  8. ^ دليل مرجعي لمبرمجي Commodore 128 ، Commodore Business Machines, Inc.، 1986، ص 382
  • كود المصدر الأصلي لبرنامج KERNAL لجميع أجهزة Commodore
  • تاريخ Commodore KERNAL
  • أداة مراقبة الإدخال/الإخراج KERNAL في Commodore 64
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=KERNAL&oldid=1224430826"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate