5.1 مقدمة
يأتي نظام التشغيل للكمبيوتر Commodore-64 مزودًا بالكمبيوتر في ذاكرة القراءة فقط (ROM). يتراوح عدد مواقع بايت الذاكرة لجهاز Commodore-64 من 0000 دولار إلى FFFF دولار (أي 000016 إلى FFFF16 وهو من 010 إلى 65,53510). يتراوح نظام التشغيل من $E000 إلى $FFFF (أي 57,34410 إلى 65,53610).
لماذا دراسة نظام التشغيل Commodore-64
لماذا ندرس نظام التشغيل Commodore-64 اليوم بينما كان نظام تشغيل للكمبيوتر تم إصداره عام 1982؟ حسنًا، يستخدم كمبيوتر Commodore-64 وحدة المعالجة المركزية 6510 والتي تعد ترقية (وإن لم تكن ترقية كبيرة) لـ 6502 μP.
لا يزال يتم إنتاج 6502 ميكروP حتى اليوم بأعداد كبيرة. لم يعد مخصصًا لأجهزة الكمبيوتر المنزلية أو المكتبية بل للأجهزة الكهربائية والإلكترونية (الأجهزة). كما أن 6502 μP سهل الفهم والتشغيل مقارنة بالمعالجات الدقيقة الأخرى في أيامه. ونتيجة لذلك، فهو أحد أفضل المعالجات الدقيقة (إن لم يكن الأفضل) المستخدمة لتعليم لغة التجميع.
يحتوي المعالج 65C02 μP، الذي لا يزال ينتمي إلى فئة المعالجات الدقيقة 6502، على 66 تعليمات لغة التجميع، والتي يمكن تعلمها جميعًا عن ظهر قلب. تحتوي المعالجات الدقيقة الحديثة على العديد من تعليمات لغة التجميع ولا يمكن حفظها عن ظهر قلب. كل μP لديه لغة التجميع الخاصة به. أي نظام تشغيل، سواء كان جديدًا أو قديمًا، يعتمد على لغة التجميع. مع ذلك فإن لغة التجميع 6502 جيدة لاستخدامها في تعليم نظام التشغيل للمبتدئين. بعد تعلم نظام تشغيل، مثل نظام Commodore-64، يمكن بسهولة تعلم نظام تشغيل حديث باستخدام ذلك كأساس.
وهذا ليس مجرد رأي المؤلف (نفسي). إنه اتجاه متزايد في العالم. تتم كتابة المزيد والمزيد من المقالات على الإنترنت لتحسين نظام التشغيل Commodore-64 لجعله يبدو وكأنه نظام تشغيل حديث. يتم شرح أنظمة التشغيل الحديثة في الفصل الذي يلي الفصل التالي.
ملحوظة : لا يزال نظام التشغيل Commodore-64 OS (Kernal) يعمل بشكل جيد مع أجهزة الإدخال والإخراج الحديثة (ليس كلها).
كمبيوتر ثماني بت
في حاسوب صغير ذو ثمانية بتات مثل كومودور 64، يتم تخزين المعلومات ونقلها ومعالجتها في شكل رموز ثنائية ذات ثمانية بتات.
خريطة الذاكرة
خريطة الذاكرة عبارة عن مقياس يقسم النطاق الكامل للذاكرة إلى نطاقات أصغر بأحجام مختلفة ويوضح ما (الروتين الفرعي و/أو المتغير) الذي ينتمي إلى أي نطاق. المتغير هو تسمية تتوافق مع عنوان ذاكرة معين له قيمة. تُستخدم التسميات أيضًا لتحديد بداية الإجراءات الفرعية. لكن في هذه الحالة، تُعرف باسم أسماء الإجراءات الفرعية. يمكن ببساطة الإشارة إلى الروتين الفرعي على أنه روتين.
خريطة الذاكرة (التخطيط) في الفصل السابق ليست مفصلة بما فيه الكفاية. انها بسيطة جدا. يمكن عرض خريطة الذاكرة الخاصة بالكمبيوتر Commodore-64 بثلاثة مستويات من التفاصيل. عند عرضه في المستوى المتوسط، يحتوي كمبيوتر Commodore-64 على خرائط ذاكرة مختلفة. خريطة الذاكرة الافتراضية لحاسوب Commodore-64 في المستوى المتوسط هي:
الشكل 5.11 خريطة الذاكرة كومودور-64
في تلك الأيام، كانت هناك لغة كمبيوتر شائعة تسمى BASIC. يحتاج العديد من مستخدمي الكمبيوتر إلى معرفة الحد الأدنى من أوامر اللغة الأساسية مثل تحميل برنامج من القرص المرن إلى الذاكرة، وتشغيل (تنفيذ) برنامج في الذاكرة، والخروج (إغلاق) برنامج. عند تشغيل برنامج BASIC، يجب على المستخدم إدخال البيانات سطرًا تلو الآخر. ليس الأمر كما هو الحال اليوم عندما تتم كتابة تطبيق (عدد من البرامج يشكل تطبيقًا) بلغة عالية المستوى باستخدام نظام التشغيل Windows، وعلى المستخدم فقط احتواء البيانات المختلفة في أماكن متخصصة في النافذة. في بعض الحالات، نستخدم الماوس لتحديد البيانات المطلوبة مسبقًا. كانت لغة BASIC لغة عالية المستوى في ذلك الوقت، ولكنها قريبة جدًا من لغة التجميع.
لاحظ أن معظم الذاكرة يتم تناولها بواسطة BASIC في خريطة الذاكرة الافتراضية. لدى BASIC أوامر (تعليمات) يتم تنفيذها بواسطة ما يعرف بالمترجم BASIC. في الواقع، يوجد مترجم BASIC في ROM من موقع $A000 إلى $BFFF (شاملاً) والذي من المفترض أن يكون منطقة RAM. هذا هو 8 كيلو بايت وهو كبير جدًا في ذلك الوقت! إنه موجود بالفعل في ذاكرة القراءة فقط (ROM) في ذلك المكان من الذاكرة بأكملها. له نفس حجم نظام التشغيل من $E000 إلى $FFFF (شاملاً). يتم أيضًا وضع البرامج المكتوبة بلغة BASIC في حدود 0200 دولار إلى BFFF.
تتراوح ذاكرة الوصول العشوائي لبرنامج لغة تجميع المستخدم من $C000 إلى $CFFF، أي 4 كيلو بايت فقط من أصل 64 كيلو بايت. فلماذا نستخدم أو نتعلم لغة التجميع؟ أنظمة التشغيل الجديدة والقديمة هي من لغات التجميع. نظام التشغيل الخاص بـ Commodore-64 موجود في ROM، بدءًا من $E000 إلى $FFFF. وهو مكتوب بلغة التجميع 65C02 μP (6510 μP). وهو يتألف من الإجراءات الفرعية. يحتاج برنامج المستخدم بلغة التجميع إلى استدعاء هذه الإجراءات الفرعية من أجل التفاعل مع الأجهزة الطرفية (أجهزة الإدخال والإخراج). إن فهم نظام التشغيل Commodore-64 بلغة التجميع يمكّن الطالب من فهم أنظمة التشغيل بسرعة وبطريقة أقل مملة بكثير. مرة أخرى، في تلك الأيام، تمت كتابة العديد من برامج المستخدم لـ Commodore-64 بلغة BASIC وليس بلغة التجميع. تم استخدام لغات التجميع في تلك الأيام بشكل أكبر من قبل المبرمجين أنفسهم للأغراض التقنية.
Kernal، مكتوب كـ K-e-r-n-a-l، هو نظام تشغيل Commodore-64. يأتي مع جهاز الكمبيوتر Commodore-64 في ذاكرة القراءة فقط (ROM) وليس في قرص (أو قرص مرن). يتكون Kernal من الإجراءات الفرعية. من أجل الوصول إلى الأجهزة الطرفية، يجب على برنامج المستخدم بلغة التجميع (لغة الآلة) استخدام هذه الإجراءات الفرعية. لا ينبغي الخلط بين Kernal وkernel الذي يتم تهجئته كـ K-e-r-n-e-l في أنظمة التشغيل الحديثة، على الرغم من أنهما نفس الشيء تقريبًا.
منطقة الذاكرة من $C000 (49,15210) إلى $CFFF (6324810) بقيمة 4 كيلو بايت 10 من الذاكرة هي إما ذاكرة الوصول العشوائي (RAM) أو ذاكرة القراءة فقط (ROM). عندما تكون ذاكرة الوصول العشوائي (RAM)، يتم استخدامها للوصول إلى الأجهزة الطرفية. عندما يكون ROM، يتم استخدامه لطباعة الأحرف على الشاشة (الشاشة). وهذا يعني أنه تتم طباعة الأحرف على الشاشة أو أنه يتم الوصول إلى الأجهزة الطرفية عن طريق استخدام هذا الجزء من الذاكرة. يوجد بنك من ROM (ROM للأحرف) في وحدة النظام (اللوحة الأم) والتي يتم تشغيلها داخل وخارج مساحة الذاكرة بأكملها لتحقيق ذلك. قد لا يلاحظ المستخدم التبديل.
مساحة الذاكرة من 0100 دولار (256 10 ) إلى 01FF (511 10 ) هو المكدس. يتم استخدامه من قبل كل من نظام التشغيل وبرامج المستخدم. تم شرح دور المكدس في الفصل السابق من هذه الدورة المهنية عبر الإنترنت. مساحة الذاكرة من 0000 دولار (0 10 ) إلى 00FF (255 10 ) يستخدمه نظام التشغيل. يتم تعيين العديد من المؤشرات هناك.
جدول الانتقال Kernal
يحتوي Kernal على إجراءات يتم استدعاؤها بواسطة برنامج المستخدم. مع ظهور إصدارات جديدة من نظام التشغيل، تغيرت عناوين هذه الإجراءات. وهذا يعني أن برامج المستخدم لم تعد قادرة على العمل مع إصدارات نظام التشغيل الجديدة. لم يحدث هذا لأن Commodore-64 قدم طاولة قفز. جدول الانتقال عبارة عن قائمة مكونة من 39 إدخالاً. يحتوي كل إدخال في الجدول على ثلاثة عناوين (باستثناء آخر 6 بايت) لم تتغير أبدًا حتى مع تغيير إصدار نظام التشغيل.
يحتوي العنوان الأول للإدخال على تعليمات JSR. يتكون العنوانان التاليان من مؤشر ثنائي البايت. هذا المؤشر ثنائي البايت هو العنوان (أو العنوان الجديد) للروتين الفعلي الذي لا يزال موجودًا في نظام التشغيل ROM. يمكن أن يتغير محتوى المؤشر مع إصدارات نظام التشغيل الجديدة، لكن العناوين الثلاثة لكل إدخال في جدول الانتقال لا تتغير أبدًا. على سبيل المثال، ضع في اعتبارك العناوين $FF81 و$FF82 و$FF83. هذه العناوين الثلاثة مخصصة لروتين تهيئة دوائر الشاشة ولوحة المفاتيح (السجلات) الخاصة باللوحة الأم. يحتوي عنوان $FF81 دائمًا على رمز التشغيل (بايت واحد) الخاص بـ JSR. يحتوي عنوانا $FF82 و$FF83 على العنوان القديم أو الجديد للروتين الفرعي (الذي لا يزال موجودًا في نظام التشغيل ROM) للقيام بالتهيئة. في وقت ما، كان عنوانا $FF82 و$FF83 يحتويان على محتوى (عنوان) $FF5B والذي يمكن أن يتغير مع إصدار نظام التشغيل التالي. ومع ذلك، فإن عناوين $FF81 و$FF82 و$FF83 الخاصة بجدول الانتقال لا تتغير أبدًا.
لكل إدخال من ثلاثة عناوين، يحتوي العنوان الأول مع JSR على تسمية (اسم). التسمية لـ $FF81 هي PCINT. PCINT لا يتغير أبدًا. لذلك، لتهيئة سجلات الشاشة ولوحة المفاتيح، يمكن للمبرمج ببساطة كتابة 'JSR PCINT' الذي يعمل مع جميع إصدارات نظام التشغيل Commodore-64. يمكن أن يتغير الموقع (عنوان البدء) للروتين الفرعي الفعلي، على سبيل المثال، $FF5B، بمرور الوقت مع أنظمة تشغيل مختلفة. نعم، هناك على الأقل تعليمات JSR مضمنة في برنامج المستخدم الذي يستخدم نظام التشغيل ROM. يوجد في برنامج المستخدم تعليمات JSR تنتقل إلى الإدخال في جدول الانتقال. باستثناء العناوين الستة الأخيرة في جدول الانتقال، فإن العنوان الأول للإدخال في جدول الانتقال يحتوي على تعليمات JSR. في Kernal، يمكن لبعض الإجراءات الفرعية استدعاء الإجراءات الفرعية الأخرى.
يبدأ جدول الانتقال Kernal من $FF81 (شاملاً) ويتجه لأعلى في مجموعات من ثلاثات، باستثناء البايتات الستة الأخيرة وهي عبارة عن ثلاثة مؤشرات ذات عناوين بايت أقل: $FFFA، $FFFC، و$FFFE. كافة إجراءات نظام التشغيل ROM هي رموز قابلة لإعادة الاستخدام. لذلك، لا يتعين على المستخدم إعادة كتابتها.
رسم تخطيطي لوحدة نظام Commodore-64
الرسم البياني التالي أكثر تفصيلاً من الرسم الموجود في الفصل السابق:
الشكل 5.12 مخطط كتلة لوحدة نظام Commodore_64
يتم عرض ذاكرة الوصول العشوائي (ROM) وذاكرة الوصول العشوائي (RAM) ككتلة واحدة هنا. تظهر هنا شريحة واجهة الفيديو (IC) لمعالجة المعلومات على الشاشة، والتي لم يتم عرضها في الفصل السابق. يتم عرض الكتلة الفردية لأجهزة الإدخال/الإخراج، والتي تم عرضها في الفصل السابق، هنا على شكل كتلتين: CIA #1 وCIA #2. يعنيCIA محول الواجهة المعقدة. يحتوي كل منفذ على منفذين متوازيين بثمانية بتات (يجب عدم الخلط بينه وبين المنافذ الخارجية الموجودة على سطح رأسي لوحدة النظام) يُطلق عليهما المنفذ A والمنفذ B. وتتصل وكالة المخابرات المركزية بخمسة أجهزة خارجية في هذه الحالة. الأجهزة هي لوحة المفاتيح وعصا التحكم ومحرك الأقراص/الطابعة والمودم. الطابعة متصلة بالجزء الخلفي من محرك الأقراص. توجد أيضًا دائرة جهاز واجهة الصوت ودائرة مصفوفة منطقية قابلة للبرمجة غير معروضة.
ومع ذلك، لا يزال هناك ROM خاص بالأحرف يمكن تبديله مع كل من CIAs عند إرسال حرف إلى الشاشة ولا يظهر في المخطط التفصيلي.
تحتوي عناوين ذاكرة الوصول العشوائي (RAM) من $D000 إلى $DFFF لدوائر الإدخال/الإخراج في حالة عدم وجود حرف ROM على خريطة الذاكرة التفصيلية التالية:
الجدول 5.11 خريطة ذاكرة مفصلة من $D000 إلى $DFFF |
||
---|---|---|
نطاق العنوان الفرعي | دائرة كهربائية | الحجم (بايت) |
D000 - D3FF | VIC (وحدة تحكم واجهة الفيديو (الشريحة)) | 1 ك |
D400 – D7FF | SID (دائرة الصوت) | 1 ك |
D800 - دبف | ذاكرة الوصول العشوائي الملونة | 1K يقضم |
DC00 - DCFF | CIA #1 (لوحة المفاتيح، عصا التحكم) | 256 |
DD00 – DDFF | CIA #2 (الحافلة التسلسلية، منفذ المستخدم/RS-232) | 256 |
DE00 – مدافع | افتح فتحة الإدخال/الإخراج رقم 1 | 256 |
DF00 – DFFF | افتح فتحة الإدخال/الإخراج رقم 2 | 256 |
5.2 محولي الواجهة المعقدين
توجد دائرتان متكاملتان (ICs) في وحدة نظام Commodore-64، ويطلق على كل منهما اسم Complex Interface Adaptor. يتم استخدام هاتين الرقاقتين لربط لوحة المفاتيح والأجهزة الطرفية الأخرى بالمعالج الدقيق. باستثناء VIC والشاشة، تمر جميع إشارات الإدخال/الإخراج بين المعالج الدقيق والأجهزة الطرفية عبر هاتين المرحلتين. مع جهاز Commodore-64، لا يوجد اتصال مباشر بين الذاكرة وأي جهاز طرفي. يمر الاتصال بين الذاكرة وأي جهاز طرفي عبر مجمع المعالجات الدقيقة، وأحد هذه المحولات هو محولات CIA (ICs). يشار إلى الدوائر المتكاملة باسم CIA #1 و CIA #2. يعنيCIA محول الواجهة المعقدة.
كل وكالة المخابرات المركزية لديها 16 سجلات. باستثناء سجلات المؤقت/العداد في CIA، يبلغ عرض كل سجل 8 بت وله عنوان ذاكرة. عناوين تسجيل الذاكرة لـ CIA #1 هي من $DC00 (56320 10 ) إلى $DC0F (56335 10 ). عناوين تسجيل الذاكرة لـ CIA #2 هي من $DD00 (56576 10 ) إلى $DD0F (56591 10 ). على الرغم من أن هذه السجلات ليست في ذاكرة الدوائر المتكاملة، إلا أنها جزء من الذاكرة. في خريطة الذاكرة المتوسطة، تتضمن منطقة الإدخال/الإخراج من $D000 إلى $DFFF عناوين CIA من $DC00 إلى $DC0F ومن $DD00 إلى $DD0F. يمكن تبديل معظم مساحة ذاكرة الإدخال/الإخراج من ذاكرة الوصول العشوائي (RAM) من $D000 إلى $DFFF مع بنك الذاكرة الخاص بأحرف ROM لأحرف الشاشة. ولهذا السبب عندما يتم إرسال الأحرف إلى الشاشة، لا يمكن للأجهزة الطرفية أن تعمل؛ على الرغم من أن المستخدم قد لا يلاحظ ذلك نظرًا لأن التبديل ذهابًا وإيابًا يكون سريعًا.
يوجد سجلان في CIA #1 يسمى المنفذ A والمنفذ B. عنوانهما هو $DC00 و$DC01، على التوالي. يوجد أيضًا سجلان في CIA #2 يُطلق عليهما Port A وPort B. وبطبيعة الحال، عناوينهما مختلفة؛ وهما $DD00 و$DD01 على التوالي.
المنفذ A أو المنفذ B في أي من CIA هو منفذ متوازي. وهذا يعني أنه يمكنه إرسال البيانات إلى الأجهزة الطرفية في ثماني بتات في وقت واحد أو استقبال البيانات من المعالج الدقيق في ثماني بتات في وقت واحد.
يرتبط بالمنفذ A أو المنفذ B سجل اتجاه البيانات (DDR). سجل اتجاه البيانات للمنفذ A من CIA #1 (DDRA1) موجود في موقع بايت الذاكرة $DC02. سجل اتجاه البيانات للمنفذ B لـ CIA #1 (DDRB1) موجود في موقع بايت الذاكرة $DC03. سجل اتجاه البيانات للمنفذ A من CIA # 2 (DDRA2) موجود في موقع بايت الذاكرة $DD02. سجل اتجاه البيانات للمنفذ B لـ CIA #2 (DDRB2) موجود في موقع بايت الذاكرة $DD03.
الآن، يمكن تعيين كل بت للمنفذ A أو المنفذ B بواسطة سجل اتجاه البيانات المقابل ليكون الإدخال أو الإخراج. يعني الإدخال أن المعلومات تنتقل من الأجهزة الطرفية إلى المعالج الدقيق من خلال وكالة المخابرات المركزية. يعني الإخراج أن المعلومات تنتقل من المعالج الدقيق إلى الأجهزة الطرفية عبر وكالة المخابرات المركزية.
إذا كان سيتم إدخال خلية منفذ (تسجيل)، فإن البتة المقابلة في سجل اتجاه البيانات هي 0. إذا كان سيتم إخراج خلية منفذ (تسجيل)، فإن البتة المقابلة في سجل اتجاه البيانات هي 1. في معظم الحالات، تتم برمجة جميع البتات الثمانية للمنفذ لتكون إما مدخلاً أو مخرجًا. عند تشغيل الكمبيوتر، تتم برمجة المنفذ A للإخراج والمنفذ B للإدخال. التعليمة البرمجية التالية تجعل منفذ CIA #1 A كمخرج ومنفذ CIA #1 B كمدخل:
LDA #$FF
ستا DDRA1؛ يتم توجيه $DC00 بواسطة $DC02
LDA # 00 دولار
ستا DDRB1 ; يتم توجيه $DC01 بواسطة $DC03
DDRA1 هي التسمية (الاسم المتغير) لموقع بايت الذاكرة لـ $DC02، وDDRB1 هي التسمية (الاسم المتغير) لموقع بايت الذاكرة لـ $DC03. تقوم التعليمة الأولى بتحميل 11111111 إلى مجمع μP. تقوم التعليمات الثانية بنسخ هذا إلى سجل اتجاه البيانات للمنفذ A من CIA no. 1. تقوم التعليمة الثالثة بتحميل 00000000 إلى مجمع μP. تقوم التعليمات الرابعة بنسخ هذا إلى سجل اتجاه البيانات للمنفذ B الخاص بـ CIA no. 1. هذا الرمز موجود في أحد الإجراءات الفرعية في نظام التشغيل الذي يقوم بهذه التهيئة عند تشغيل الكمبيوتر.
لدى كل CIA خط طلب خدمة المقاطعة للمعالج الدقيق. الواحد من وكالة المخابرات المركزية رقم 1 يذهب إلى IRQ دبوس μP. الواحد من وكالة المخابرات المركزية رقم 2 يذهب إلى نمي دبوس μP. تذكر ذلك نمي له أولوية أعلى من IRQ .
5.3 برمجة لغة تجميع لوحة المفاتيح
لا يوجد سوى ثلاث مقاطعات محتملة للكومودور-64: IRQ ، برك، و نمي . مؤشر جدول القفز لـ IRQ موجود في عنواني $FFFE و$FFFF في ROM (نظام التشغيل) والذي يتوافق مع روتين فرعي لا يزال موجودًا في نظام التشغيل (ROM). يوجد مؤشر جدول الانتقال لـ BRK على عنواني $FFFC و$FFFD في نظام التشغيل والذي يتوافق مع روتين فرعي لا يزال موجودًا في نظام التشغيل (ROM). مؤشر جدول القفز لـ نمي موجود على عنواني $FFFA و$FFFB في نظام التشغيل والذي يتوافق مع روتين فرعي لا يزال موجودًا في نظام التشغيل (ROM). ل IRQ ، يوجد في الواقع روتينان فرعيان. لذا، فإن مقاطعة برنامج BRK (التعليمات) لها مؤشر جدول القفز الخاص بها. مؤشر جدول القفز لـ IRQ يؤدي إلى الكود الذي يقرر ما إذا كانت مقاطعة الأجهزة أم مقاطعة البرنامج هي التي يتم تشغيلها. إذا كانت مقاطعة الأجهزة، فإن الروتين الخاص بـ IRQ يسمى. إذا كانت مقاطعة البرنامج (BRK)، فسيتم استدعاء روتين BRK. في أحد إصدارات نظام التشغيل، يكون الروتين الفرعي لـ IRQ بسعر EA31 دولارًا أمريكيًا والروتين الفرعي لـ BRK بسعر FE66 دولارًا أمريكيًا. هذه العناوين أقل من $FF81، لذا فهي ليست إدخالات جدول انتقال ويمكن أن تتغير مع إصدار نظام التشغيل. هناك ثلاثة إجراءات مثيرة للاهتمام في هذا الموضوع: الإجراء الذي يتحقق مما إذا كان المفتاح مضغوطًا أم BRK، الإجراء الذي يبلغ سعره FE43 دولارًا، والذي قد يتغير أيضًا مع إصدار نظام التشغيل.
يشبه الكمبيوتر Commodore-64 كاتبًا ضخمًا (أعلى) في المظهر بدون قسم الطباعة (الرأس والورق). لوحة المفاتيح متصلة بـ CIA #1. يقوم CIA #1 بمسح لوحة المفاتيح كل 1/60 من الثانية بمفردها دون أي تدخل في البرمجة، بشكل افتراضي. لذلك، كل 1/60 من الثانية، ترسل وكالة المخابرات المركزية رقم 1 رسالة IRQ إلى μP. هناك واحد فقط IRQ دبوس في μP الذي يأتي فقط من CIA # 1. دبوس الإدخال واحد من نمي من μP، والذي يختلف عن IRQ ، يأتي فقط من CIA #2 (راجع الرسم التوضيحي التالي). BRK هو في الواقع تعليمات لغة التجميع التي تم ترميزها في برنامج المستخدم.
لذلك، كل 1/60 ثانية، IRQ يتم استدعاء الروتين الذي تتم الإشارة إليه بواسطة $FFFE و$FFFF. يتحقق الروتين مما إذا كان قد تم الضغط على المفتاح أو تمت مواجهة تعليمات BRK. إذا تم الضغط على مفتاح، يتم استدعاء روتين التعامل مع الضغط على المفتاح. إذا كانت تعليمات BRK، فسيتم استدعاء الإجراء الروتيني للتعامل مع BRK. إذا لم يكن الأمر كذلك، فلن يحدث شيء. قد لا يحدث أي منهما، لكن وكالة المخابرات المركزية رقم 1 ترسل IRQ إلى μP كل 1/60 ثانية.
قائمة انتظار لوحة المفاتيح، والمعروفة أيضًا باسم المخزن المؤقت للوحة المفاتيح، عبارة عن مجموعة من مواقع بايت ذاكرة الوصول العشوائي (RAM) تتراوح من 0277 دولارًا إلى 0280 دولارًا، بما في ذلك؛ 1010 بايت في الكل. هذا هو المخزن المؤقت First-IN-First-Out. وهذا يعني أن الشخصية الأولى القادمة هي أول من يغادر. حرف أوروبا الغربية يأخذ بايت واحد.
لذلك، في حين أن البرنامج لا يستهلك أي حرف عند الضغط على المفتاح، فإن رمز المفتاح يذهب إلى هذا المخزن المؤقت (قائمة الانتظار). يستمر امتلاء المخزن المؤقت حتى يكون هناك عشرة أحرف. لا يتم تسجيل أي حرف يتم الضغط عليه بعد الحرف العاشر. يتم تجاهله حتى يتم الحصول على (استهلاك) حرف واحد على الأقل من قائمة الانتظار. يحتوي جدول الانتقال على إدخال للروتين الفرعي الذي ينقل الحرف الأول من قائمة الانتظار إلى المعالج الدقيق. وهذا يعني أنه يأخذ الحرف الأول الذي يدخل في قائمة الانتظار ويضعه في مجمع μP. يُطلق على الروتين الفرعي لجدول الانتقال للقيام بذلك اسم GETIN (للدخول). تتم تسمية البايت الأول للإدخال ثلاثي البايت في جدول الانتقال باسم GETIN (العنوان $FFE4). البايتتان التاليتان هما المؤشر (العنوان) الذي يشير إلى الروتين الفعلي في ROM (OS). تقع على عاتق المبرمج مسؤولية استدعاء هذا الروتين. وبخلاف ذلك، سيظل المخزن المؤقت للوحة المفاتيح ممتلئًا وسيتم تجاهل كافة المفاتيح التي تم الضغط عليها مؤخرًا. القيمة التي تدخل في المجمع هي قيمة ASCII للمفتاح المقابل.
كيف تدخل رموز المفاتيح إلى قائمة الانتظار في المقام الأول؟ يوجد روتين جدول انتقال يسمى SCNKEY (لمفتاح الفحص). يمكن استدعاء هذا الروتين بواسطة كل من البرامج والأجهزة. وفي هذه الحالة يتم استدعاء دائرة إلكترونية (فيزياء) في المعالج الدقيق عند صدور الإشارة الكهربائية IRQ منخفض. لم يتم تناول كيفية القيام بذلك بالضبط في هذه الدورة المهنية عبر الإنترنت.
رمز الحصول على رمز المفتاح الأول من المخزن المؤقت للوحة المفاتيح إلى المجمع A هو سطر واحد فقط:
أدخل
إذا كان المخزن المؤقت للوحة المفاتيح فارغًا، فسيتم وضع $00 في المجمع. تذكر أن رمز ASCII للصفر ليس $00؛ هو 30 دولارا. 00 دولار يعني فارغة. في أحد البرامج، قد تكون هناك نقطة يتعين على البرنامج فيها انتظار الضغط على المفتاح. الكود الخاص بهذا هو:
انتظر الحصول على JSR
CMP # 00 دولار
انتظر الضفدع
في السطر الأول، 'WAIT' عبارة عن ملصق يحدد عنوان ذاكرة الوصول العشوائي (RAM) حيث يتم وضع (كتابة) تعليمات JSR. GETIN هو أيضًا عنوان. إنه عنوان أول البايتات الثلاثة المقابلة في جدول الانتقال. يتكون إدخال GETIN، بالإضافة إلى كافة الإدخالات الموجودة في جدول الانتقال (باستثناء الإدخالات الثلاثة الأخيرة)، من ثلاث بايتات. البايت الأول من الإدخال هو تعليمات JSR. البايتتان التاليتان هما عنوان نص روتين GETIN الفعلي الذي لا يزال موجودًا في ROM (نظام التشغيل) ولكن أسفل جدول الانتقال. لذلك، يشير الإدخال إلى الانتقال إلى الإجراء الفرعي GETIN. إذا لم تكن قائمة انتظار لوحة المفاتيح فارغة، فإن GETIN يضع رمز مفتاح ASCII الخاص بقائمة انتظار First-In-First-Out في المجمع. إذا كانت قائمة الانتظار فارغة، فسيتم وضع Null ($00) في المجمع.
التعليمة الثانية تقارن قيمة التراكم بـ 00 دولار. إذا كانت قيمتها 00 دولار، فهذا يعني أن قائمة انتظار لوحة المفاتيح فارغة، وأن تعليمات CMP ترسل 1 إلى العلامة Z الخاصة بسجل حالة المعالج (يسمى ببساطة سجل الحالة). إذا كانت القيمة في A ليست $00، فإن تعليمات CMP ترسل 0 إلى العلامة Z الخاصة بسجل الحالة.
تقوم التعليمة الثالثة وهي 'BEQ WAIT' بإرسال البرنامج مرة أخرى إلى التعليمة الأولى إذا كانت علامة Z الخاصة بسجل الحالة هي 1. ويتم تنفيذ التعليمات الأولى والثانية والثالثة بشكل متكرر بالترتيب حتى يتم الضغط على مفتاح على لوحة المفاتيح . إذا لم يتم الضغط على أي مفتاح مطلقًا، تتكرر الدورة إلى أجل غير مسمى. عادةً ما تتم كتابة مقطع التعليمات البرمجية مثل هذا باستخدام مقطع رمز التوقيت الذي ينهي الحلقة بعد مرور بعض الوقت إذا لم يتم الضغط على المفتاح مطلقًا (راجع المناقشة التالية).
ملحوظة : لوحة المفاتيح هي جهاز الإدخال الافتراضي والشاشة هي جهاز الإخراج الافتراضي.
5.4 القناة ورقم الجهاز ورقم الملف المنطقي
الأجهزة الطرفية التي يستخدمها هذا الفصل لشرح نظام التشغيل Commodore-64 هي لوحة المفاتيح، والشاشة (جهاز العرض)، ومحرك الأقراص المزود بقرص مرن، والطابعة، والمودم الذي يتصل عبر واجهة RS-232C. لكي يتم الاتصال بين هذه الأجهزة ووحدة النظام (المعالج الدقيق والذاكرة)، يجب إنشاء قناة.
تتكون القناة من مخزن مؤقت ورقم الجهاز ورقم الملف المنطقي وعنوان ثانوي اختياريًا. وتفسير هذه المصطلحات هو كما يلي:
منطقة عازلة
لاحظ من القسم السابق أنه عند الضغط على مفتاح، يجب أن ينتقل الكود الخاص به إلى موقع البايت في ذاكرة الوصول العشوائي (RAM) لسلسلة من عشرة مواقع متتالية. هذه السلسلة المكونة من عشرة مواقع هي المخزن المؤقت للوحة المفاتيح. يحتوي كل جهاز إدخال أو إخراج (طرفي) على سلسلة من المواقع المتتالية في ذاكرة الوصول العشوائي (RAM) تسمى المخزن المؤقت.
رقم الجهاز
مع جهاز Commodore-64، يتم تزويد أي جهاز طرفي برقم الجهاز. والجدول التالي يوضح الأجهزة المختلفة وارقامها:
الجدول 5.41 أرقام أجهزة كومودور 64 وأجهزتها |
|
---|---|
رقم | جهاز |
0 | لوحة المفاتيح |
1 | محرك الشريط |
2 | واجهة RS 232C على سبيل المثال. مودم |
3 | شاشة |
4 | الطابعة رقم 1 |
5 | الطابعة رقم 2 |
6 | الراسمة رقم 1 |
7 | الراسمة رقم 2 |
8 | محرك الأقراص |
9 ¦ ¦ ¦ 30 |
من 8 (شاملة) إلى 22 جهاز تخزين إضافي |
هناك نوعان من المنافذ للكمبيوتر. نوع واحد خارجي، على السطح الرأسي لوحدة النظام. والنوع الآخر داخلي. هذا المنفذ الداخلي عبارة عن سجل. يحتوي Commodore-64 على أربعة منافذ داخلية: المنفذ A والمنفذ B لـ CIA 1 والمنفذ A والمنفذ B لـ CIA 2. يوجد منفذ خارجي واحد لـ Commodore-64 يسمى المنفذ التسلسلي. الأجهزة ذات الرقم 3 لأعلى متصلة بالمنفذ التسلسلي. وهي متصلة بطريقة سلسلة ديزي (واحدة متصلة خلف الأخرى)، ويمكن التعرف على كل منها من خلال رقم الجهاز الخاص بها. الأجهزة التي تحمل الرقم 8 فما فوق هي عمومًا أجهزة التخزين.
ملحوظة : جهاز الإدخال الافتراضي هو لوحة المفاتيح برقم الجهاز 0. جهاز الإخراج الافتراضي هو الشاشة برقم الجهاز 3.
رقم الملف المنطقي
رقم الملف المنطقي هو رقم يُعطى للجهاز (الطرفي) بالترتيب الذي يتم به فتحه للوصول إليه. وهي تتراوح من 010 إلى 255 10 .
العنوان الثانوي
تخيل أنه تم فتح ملفين (أو أكثر من ملف) في القرص. للتمييز بين هذين الملفين، يتم استخدام العناوين الثانوية. العناوين الثانوية هي أرقام تختلف من جهاز لآخر. يختلف معنى 3 كعنوان ثانوي للطابعة عن معنى 3 كعنوان ثانوي لمحرك الأقراص. يعتمد المعنى على ميزات مثل عند فتح ملف للقراءة أو عند فتح ملف للكتابة. الأرقام الثانوية المحتملة هي من 0 10 إلى 15 10 لكل جهاز. بالنسبة للعديد من الأجهزة، يتم استخدام الرقم 15 لإرسال الأوامر.
ملحوظة : يُعرف رقم الجهاز أيضًا باسم عنوان الجهاز ويُعرف الرقم الثانوي أيضًا بالعنوان الثانوي.
تحديد الهدف المحيطي
بالنسبة لخريطة ذاكرة Commodore الافتراضية، يتم استخدام عناوين الذاكرة من $0200 إلى $02FF (صفحة 2) فقط بواسطة نظام التشغيل في ROM (Kernal) وليس بواسطة نظام التشغيل بالإضافة إلى اللغة الأساسية. على الرغم من أن BASIC لا يزال بإمكانه استخدام المواقع من خلال نظام التشغيل ROM.
يعد المودم والطابعة هدفين طرفيين مختلفين. إذا تم فتح ملفين من القرص، فهذان هدفان مختلفان. باستخدام خريطة الذاكرة الافتراضية، توجد ثلاثة جداول (قوائم) متتالية يمكن اعتبارها جدولًا واحدًا كبيرًا. تحتوي هذه الجداول الثلاثة على العلاقة بين أرقام الملفات المنطقية وأرقام الأجهزة والعناوين الثانوية. وبذلك، يصبح من الممكن تحديد قناة معينة أو هدف الإدخال/الإخراج. تسمى الجداول الثلاثة جداول الملفات. عناوين ذاكرة الوصول العشوائي (RAM) وما تحتوي عليه هي:
0259 دولارًا أمريكيًا — 0262 دولارًا أمريكيًا: جدول ذو تسمية LAT، يضم ما يصل إلى عشرة أرقام ملفات منطقية نشطة.
0263 دولارًا أمريكيًا - 026 دولارًا أمريكيًا: جدول به ملصق، FAT، لما يصل إلى عشرة أرقام أجهزة مقابلة.
026D دولارًا أمريكيًا — 0276 دولارًا أمريكيًا: جدول يحمل التسمية، SAT، لعشرة عناوين ثانوية مقابلة.
هنا، '-' تعني 'إلى'، ويأخذ الرقم بايتًا واحدًا.
قد يتساءل القارئ: 'لماذا لا يتم تضمين المخزن المؤقت لكل جهاز في تحديد القناة؟' حسنًا، الإجابة هي أنه مع جهاز Commodore-64، يحتوي كل جهاز خارجي (طرفي) على سلسلة ثابتة من البايتات في ذاكرة الوصول العشوائي (خريطة الذاكرة). وبدون أي قناة مفتوحة، تظل مواقعهم موجودة في الذاكرة. على سبيل المثال، تم إصلاح المخزن المؤقت للوحة المفاتيح من 0277 دولارًا إلى 0280 دولارًا (شاملاً) لخريطة الذاكرة الافتراضية.
روتينات Kernal SETLFS وSETNAM الفرعية
SETLFS وSETNAM هما إجراءات Kernal. يمكن رؤية القناة كملف منطقي. لكي يتم فتح قناة، يجب إنتاج رقم الملف المنطقي ورقم الجهاز والعنوان الثانوي الاختياري. قد تكون هناك حاجة أيضًا إلى اسم ملف اختياري (نص). يقوم روتين SETLFS بإعداد رقم الملف المنطقي ورقم الجهاز وعنوان ثانوي اختياري. وتوضع هذه الأرقام في الجداول الخاصة بها. يقوم روتين SETNAM بإعداد اسم سلسلة للملف والذي قد يكون إلزاميًا لقناة واحدة واختياريًا لقناة أخرى. يتكون هذا من مؤشر (عنوان ثنائي البايت) في الذاكرة. يشير المؤشر إلى بداية السلسلة (الاسم) التي قد تكون في مكان آخر في الذاكرة. يبدأ اسم السلسلة بالبايت الذي يبلغ طول السلسلة، متبوعًا بالنص (الاسم). يبلغ الحد الأقصى للاسم ستة عشر بايت (طويل).
لاستدعاء روتين SETLFS، يجب على برنامج المستخدم الانتقال (JSR) إلى عنوان $FFBA الخاص بجدول الانتقال لنظام التشغيل في ROM لخريطة الذاكرة الافتراضية. تذكر أنه باستثناء البايتات الستة الأخيرة من جدول الانتقال، يتكون كل إدخال من ثلاث بايتات. البايت الأول هو تعليمات JSR، والتي تنتقل بعد ذلك إلى الروتين الفرعي، وتبدأ عند العنوان الموجود في البايتتين التاليتين. لاستدعاء روتين SETNAM، يجب على برنامج المستخدم الانتقال (JSR) إلى عنوان $FFBD الخاص بجدول الانتقال لنظام التشغيل في ROM. يتم عرض استخدام هذين الروتينين في المناقشة التالية.
5.5 فتح قناة، وفتح ملف منطقي، وإغلاق ملف منطقي، وإغلاق جميع قنوات الإدخال/الإخراج
تتكون القناة من مخزن مؤقت للذاكرة ورقم ملف منطقي ورقم الجهاز (عنوان الجهاز) وعنوان ثانوي اختياري (رقم). يمكن أن يشير الملف المنطقي (التجريدي) الذي يتم تحديده بواسطة رقم ملف منطقي إلى جهاز طرفي مثل الطابعة، والمودم، ومحرك الأقراص، وما إلى ذلك. ويجب أن يكون لكل جهاز من هذه الأجهزة المختلفة أرقام ملفات منطقية مختلفة. هناك العديد من الملفات في القرص. يمكن أن يشير الملف المنطقي أيضًا إلى ملف معين في القرص. يحتوي هذا الملف المعين أيضًا على رقم ملف منطقي يختلف عن أرقام الأجهزة الطرفية مثل الطابعة أو المودم. يتم إعطاء رقم الملف المنطقي من قبل المبرمج. يمكن أن يكون أي رقم من 010 ($00) إلى 25510 ($FF).
روتين OS SETLFS
يقوم OS SETLFS Routine الذي يتم الوصول إليه عن طريق القفز (JSR) إلى جدول القفز OS ROM عند $FFBA بإعداد القناة. يحتاج إلى وضع رقم الملف المنطقي في جدول الملفات وهو LAT (0259 دولارًا - 0262 دولارًا). يحتاج إلى وضع رقم الجهاز المقابل في جدول الملفات وهو FAT (0263 دولارًا - 026 دولارًا أمريكيًا). إذا كان الوصول إلى الملف (الجهاز) يحتاج إلى رقم ثانوي، فيجب وضع العنوان الثانوي المقابل (الرقم) في جدول الملفات وهو SAT ($026D — $0276).
من أجل التشغيل، يحتاج الروتين الفرعي SETLFS إلى الحصول على رقم الملف المنطقي من مجمع μP؛ فإنه يحتاج إلى الحصول على رقم الجهاز من سجل μP X. إذا احتاجت القناة ذلك، فإنها تحتاج إلى الحصول على العنوان الثانوي من سجل μP Y.
يتم تحديد رقم الملف المنطقي بواسطة المبرمج. تختلف أرقام الملفات المنطقية التي تشير إلى أجهزة مختلفة. الآن، قبل استدعاء روتين SETLFS، يجب على المبرمج وضع رقم الملف المنطقي في مجمع μP. تتم قراءة رقم الجهاز من جدول (مستند) كما في الجدول 5.41. يجب على المبرمج أيضًا وضع رقم الجهاز في سجل μP X. يوفر مورد جهاز مثل الطابعة ومحرك الأقراص وما إلى ذلك العناوين الثانوية المحتملة ومعانيها للجهاز. إذا كانت القناة بحاجة إلى عنوان ثانوي، يحتاج المبرمج إلى الحصول عليه من المستند المرفق مع الجهاز (الطرفي). إذا كان العنوان الثانوي (الرقم) ضروريًا، فيجب على المبرمج وضعه في سجل μP Y قبل استدعاء الروتين الفرعي SETLFS. إذا لم تكن هناك حاجة لعنوان ثانوي، فيجب على المبرمج وضع رقم $FF في سجل μP Y قبل استدعاء الروتين الفرعي SETLFS.
يتم استدعاء الروتين الفرعي SETLFS بدون أية وسيطة. حججها موجودة بالفعل في السجلات الثلاثة لـ 6502 μP. بعد وضع الأرقام المناسبة في السجلات، يتم استدعاء الروتين في البرنامج ببساطة مع ما يلي في سطر منفصل:
JSR سيتلفس
يضع الروتين الأرقام المختلفة بشكل مناسب في جداول الملفات الخاصة بهم.
روتين OS SETNAM
يتم الوصول إلى روتين OS SETNAM عن طريق القفز (JSR) إلى جدول القفز OS ROM عند $FFBD. ليست كل الوجهات لها أسماء ملفات. بالنسبة لتلك التي لها وجهات (مثل الملفات الموجودة على القرص)، يجب إعداد اسم الملف. افترض أن اسم الملف هو 'mydocum' والذي يتكون من 7 بايت بدون علامتي الاقتباس. افترض أن هذا الاسم موجود في مواقع $C101 إلى $C107 (ضمناً) وأن طول $07 موجود في موقع $C100. عنوان البداية لأحرف السلسلة هو $C101. البايت الأدنى لعنوان البداية هو $01 والبايت الأعلى هو $C1.
قبل استدعاء روتين SETNAM، يجب على المبرمج وضع الرقم $07 (طول السلسلة) في مجمع μP. يتم وضع البايت الأدنى لعنوان بداية السلسلة $01 في سجل μP X. يتم وضع البايت الأعلى لعنوان بداية السلسلة $C1 في سجل μP Y. يتم استدعاء الروتين الفرعي ببساطة بما يلي:
جي إس آر سيتنام
يقوم روتين SETNAM بربط القيم من السجلات الثلاثة بالقناة. لا يلزم أن تظل القيم في السجلات بعد ذلك. إذا كانت القناة لا تحتاج إلى اسم ملف، فيجب على المبرمج وضع $00 في مجمع μP. في هذه الحالة، يتم تجاهل القيم الموجودة في تسجيلات X وY.
روتين نظام التشغيل المفتوح
يتم الوصول إلى نظام التشغيل OS OPEN Routine عن طريق القفز (JSR) إلى جدول القفز OS ROM عند $FFC0. يستخدم هذا الروتين رقم الملف المنطقي، ورقم الجهاز (والمخزن المؤقت)، وعنوانًا ثانويًا محتملاً، واسم ملف محتمل، لتوفير اتصال بين كمبيوتر commodore والملف الموجود في الجهاز الخارجي أو الجهاز الخارجي نفسه.
هذا الروتين، مثل جميع إجراءات ROM الأخرى لنظام التشغيل Commodore، لا يأخذ أي حجة. على الرغم من أنه يستخدم سجلات μP، إلا أنه لم يكن من الضروري تحميل أي من السجلات مسبقًا بوسائط (قيم) لها. لترميزه، فقط اكتب ما يلي بعد استدعاء SETLFS وSETNAM:
مفتوح
قد تحدث أخطاء مع روتين OPEN. على سبيل المثال، قد لا يتم العثور على الملف للقراءة. عند حدوث خطأ، يفشل الروتين ويضع رقم الخطأ المقابل في مجمع μP، ويعين إشارة الحمل (إلى 1) لسجل حالة μP. يوضح الجدول التالي أرقام الأخطاء ومعانيها:
الجدول 5.51 أرقام أخطاء Kernal ومعانيها لروتين OS ROM OPEN |
||
---|---|---|
رقم خاطئ | وصف | مثال |
1 | ملفات كثيرة جدًا | OPEN عندما تكون عشرة ملفات مفتوحة بالفعل |
2 | فتح الملف | مفتوح 1,3: مفتوح 1,4 |
3 | الملف غير مفتوح | اطبع رقم 5 بدون فتح |
4 | لم يتم العثور على الملف | تحميل 'غير موجود'،8 |
5 | الجهاز غير موجود | فتح 11،11: الطباعة رقم 11 |
6 | ليس ملف الإدخال | افتح 'SEQ,S,W': احصل على #8,X$ |
7 | ليس ملف الإخراج | فتح 1,0: الطباعة رقم 1 |
8 | اسم الملف مفقود | تحميل ''،8 |
9 | رقم الجهاز غير القانوني | تحميل 'البرنامج'،3 |
يتم تقديم هذا الجدول بطريقة من المحتمل أن يراها القارئ في العديد من الأماكن الأخرى.
روتين OS CHKIN
يتم الوصول إلى OS CHKIN Routine عن طريق القفز (JSR) إلى جدول القفز OS ROM عند $FFC6. بعد فتح ملف (ملف منطقي)، يجب تحديد ما إذا كان الفتح مخصصًا للإدخال أو الإخراج. روتين CHKIN يجعل فتح قناة الإدخال. يحتاج هذا الروتين إلى قراءة رقم الملف المنطقي من سجل μP X. لذلك، يجب على المبرمج وضع رقم الملف المنطقي في سجل X قبل استدعاء هذا الروتين. يطلق عليه ببساطة كما يلي:
JSR CHKIN
روتين OS CHKOUT
يتم الوصول إلى OS CHKOUT Routine عن طريق القفز (JSR) إلى جدول القفز OS ROM بسعر FFC9. بعد فتح ملف (ملف منطقي)، يجب تحديد ما إذا كان الفتح مخصصًا للإدخال أو الإخراج. روتين CHKOUT يجعل فتح قناة الإخراج. يحتاج هذا الروتين إلى قراءة رقم الملف المنطقي من سجل μP X. لذلك، يجب على المبرمج وضع رقم الملف المنطقي في سجل X قبل استدعاء هذا الروتين. يطلق عليه ببساطة كما يلي:
JSR تشكوت
روتين إغلاق نظام التشغيل
يتم الوصول إلى روتين إغلاق نظام التشغيل عن طريق الانتقال (JSR) إلى جدول الانتقال إلى نظام التشغيل ROM عند $FFC3. بعد فتح ملف منطقي وإرسال البايتات، يجب إغلاق الملف المنطقي. يؤدي إغلاق الملف المنطقي إلى تحرير المخزن المؤقت في وحدة النظام لاستخدامه بواسطة ملف منطقي آخر لا يزال يتعين فتحه. يتم أيضًا حذف المعلمات المقابلة في جداول الملفات الثلاثة. يتم تقليل موقع ذاكرة الوصول العشوائي (RAM) لعدد الملفات المفتوحة بمقدار 1.
عند تشغيل الطاقة للكمبيوتر، تتم إعادة ضبط الأجهزة للمعالج الدقيق والرقائق الرئيسية الأخرى (الدوائر المتكاملة) على اللوحة الأم. ويتبع ذلك تهيئة بعض مواقع ذاكرة الوصول العشوائي (RAM) وبعض السجلات في بعض الشرائح الموجودة على اللوحة الأم. في عملية التهيئة، يتم تحديد موقع ذاكرة البايت للعنوان 0098 دولارًا في الصفحة صفر باستخدام علامة NFILES أو LDTND، اعتمادًا على إصدار نظام التشغيل. أثناء تشغيل الكمبيوتر، يحتفظ هذا الموقع المكون من بايت واحد والمكون من 8 بتات بعدد الملفات المنطقية المفتوحة وفهرس عنوان البداية لجداول الملفات الثلاثة المتتالية. بمعنى آخر، يحتوي هذا البايت على عدد الملفات المفتوحة والذي يتناقص بمقدار 1 عند إغلاق الملف المنطقي. عند إغلاق الملف المنطقي، لن يكون الوصول إلى الجهاز الطرفي (الوجهة) أو الملف الفعلي الموجود على القرص ممكنًا.
من أجل إغلاق ملف منطقي، يجب على المبرمج وضع رقم الملف المنطقي في المجمع μP. وهذا هو نفس رقم الملف المنطقي المستخدم في فتح الملف. يحتاج روتين CLOSE إليه لإغلاق هذا الملف المعين. مثل إجراءات نظام التشغيل ROM الأخرى، لا يأخذ روتين CLOSE وسيطة، على الرغم من أن القيمة المستخدمة من المجمع هي وسيطة إلى حد ما. سطر تعليمات لغة التجميع هو ببساطة:
إغلاق JSR
لا تأخذ الإجراءات الفرعية (الإجراءات الروتينية) المخصصة أو المحددة مسبقًا للغة التجميع 6502 وسيطات. ومع ذلك، تأتي الوسائط بشكل غير رسمي عن طريق وضع القيم التي سيستخدمها الروتين الفرعي في سجلات المعالجات الدقيقة.
روتين CLRCHN
يتم الوصول إلى OS CLRCHN Routine عن طريق القفز (JSR) إلى جدول القفز OS ROM عند $FFCC. CLRCHN لتقف علي CLeaR CHanneL. عند إغلاق ملف منطقي، يتم حذف معلماته الخاصة برقم الملف المنطقي ورقم الجهاز والعنوان الثانوي المحتمل. لذلك، يتم مسح قناة الملف المنطقي.
يقول الدليل أن روتين OS CLRCHN يمسح جميع القنوات المفتوحة ويستعيد أرقام الأجهزة الافتراضية والإعدادات الافتراضية الأخرى. هل هذا يعني أنه يمكن تغيير رقم الجهاز الطرفي؟ كذلك ليس تماما. أثناء تهيئة نظام التشغيل، يتم توفير موقع البايت للعنوان 0099 دولارًا مع علامة DFLTI للاحتفاظ برقم جهاز الإدخال الحالي عندما يكون الكمبيوتر قيد التشغيل. يمكن لـ Commodore-64 الوصول إلى جهاز طرفي واحد فقط في كل مرة. أثناء تهيئة نظام التشغيل، يتم تحديد موقع البايت للعنوان $009A مع ملصق DFLTO للاحتفاظ برقم جهاز الإخراج الحالي عندما يكون الكمبيوتر قيد التشغيل.
عندما يتم استدعاء الروتين الفرعي CLRCHN، فإنه يقوم بتعيين متغير DFLTI إلى 0 ($00) وهو رقم جهاز الإدخال الافتراضي (لوحة المفاتيح). يقوم بتعيين متغير DFLTO على 3 ($03) وهو رقم جهاز الإخراج الافتراضي (الشاشة). تتم إعادة تعيين متغيرات رقم الجهاز الأخرى بالمثل. هذا هو معنى إعادة ضبط (أو استعادة) أجهزة الإدخال/الإخراج إلى وضعها الطبيعي (القيم الافتراضية).
يقول دليل Commodore-64 أنه بعد استدعاء روتين CLRCHN، تظل الملفات المنطقية المفتوحة مفتوحة ولا يزال بإمكانها نقل البايتات (البيانات). وهذا يعني أن روتين CLRCHN لا يحذف الإدخالات المقابلة في جداول الملفات. اسم CLRCHN غامض إلى حد ما بالنسبة لمعناه.
5.6 إرسال الشخصية إلى الشاشة
تسمى الدائرة المتكاملة الرئيسية (IC) للتعامل مع عرض الأحرف والرسومات على الشاشة وحدة تحكم واجهة الفيديو (الرقاقة) والتي يتم اختصارها باسم VIC في Commodore-64 (في الواقع VIC II لـ VIC الإصدار 2). لكي تنتقل المعلومات (القيم) إلى الشاشة، يجب أن تمر عبر VIC II قبل الوصول إلى الشاشة.
تتكون الشاشة من 25 صفًا و40 عمودًا من الخلايا المميزة. وهذا يجعل 40 × 25 = 1000 حرفًا يمكن عرضها على الشاشة. يقرأ VIC II مواقع البايت المتتالية لذاكرة الوصول العشوائي (RAM) ذات 1000 ذاكرة للأحرف. تُعرف هذه المواقع الـ 1000 معًا بذاكرة الشاشة. ما يدخل في هذه المواقع الـ 1000 هو رموز الأحرف. بالنسبة لـ Commodore-64، تختلف رموز الأحرف عن رموز ASCII.
رمز الحرف ليس نمطًا للأحرف. هناك أيضًا ما يُعرف باسم حرف ROM. يتكون ROM الخاص بالأحرف من كافة أنواع أنماط الأحرف، والتي يتوافق بعضها مع أنماط الأحرف الموجودة على لوحة المفاتيح. يختلف حرف ROM عن ذاكرة الشاشة. عندما يتم عرض حرف ما على الشاشة، يتم إرسال رمز الحرف إلى موضع من بين 1000 موضع في ذاكرة الشاشة. ومن هناك، يتم تحديد النمط المقابل من ذاكرة القراءة فقط (ROM) للشخصية التي سيتم عرضها على الشاشة. يتم اختيار النمط الصحيح في ذاكرة القراءة فقط (ROM) الخاصة بالحرف من رمز الحرف بواسطة VIC II (الجهاز).
العديد من مواقع الذاكرة بين $D000 و$DFFF لها غرضان: يتم استخدامها للتعامل مع عمليات الإدخال/الإخراج بخلاف الشاشة أو يتم استخدامها كذاكرة قراءة فقط (ROM) للأحرف على الشاشة. يتعلق الأمر بمجموعتين من الذاكرة. أحدهما هو ذاكرة الوصول العشوائي (RAM) والآخر هو ROM (ROM) للشخصية ROM. يتم تبديل البنوك للتعامل مع الإدخال/الإخراج أو أنماط الأحرف (ROM للأحرف) عن طريق البرنامج (روتين نظام التشغيل في ROM من $F000 إلى $FFFF).
ملحوظة : يحتوي مركز VIC على سجلات يتم تناولها بعناوين مساحة الذاكرة ضمن النطاق $D000 و$DFFF.
روتين كروت
يتم الوصول إلى روتين OS CHROUT عن طريق القفز (JSR) إلى جدول القفز OS ROM عند $FFD2. هذا الروتين، عند استدعائه، يأخذ البايت الذي وضعه المبرمج في مجمع μP ويطبع على الشاشة حيث يوجد المؤشر. مقطع التعليمات البرمجية لطباعة الحرف 'E'، على سبيل المثال، هو:
LDA # 05 دولارًا
كروت
0516 ليس رمز ASCII لـ 'E'. يحتوي جهاز Commodore-64 على رموز أحرف خاصة به للشاشة حيث يعني $05 'E'. يتم وضع الرقم #$05 في ذاكرة الشاشة قبل أن يرسله مركز VIC إلى الشاشة. يجب أن يأتي سطرا التشفير هذين بعد إعداد القناة، وفتح الملف المنطقي، واستدعاء روتين CHKOUT للإخراج. الكود الكامل هو:
; قناة الإعداد
LDA # 40 دولارًا ؛ رقم الملف المنطقي
إل دي إكس #$03؛ رقم الجهاز للشاشة هو 03 دولار
لدي #$فف؛ لا يوجد عنوان ثانوي
جي إس آر سيتلفس؛ قناة الإعداد الصحيحة
; لا يوجد SETNAM لأن الشاشة لا تحتاج إلى اسم
;
; فتح الملف المنطقي
مفتوح
; تعيين قناة للإخراج
إل دي إكس #٤٠ دولارًا؛ رقم الملف المنطقي
JSR تشكوت
;
; حرف الإخراج إلى الشاشة
LDA # 05 دولارًا
JSR كروت
; إغلاق الملف المنطقي
LDA # 40 دولارًا
إغلاق JSR
يجب إغلاق الفتحة قبل تشغيل برنامج آخر. افترض أن مستخدم الكمبيوتر يكتب حرفًا على لوحة المفاتيح عندما يكون ذلك متوقعًا. يقوم البرنامج التالي بطباعة حرف من لوحة المفاتيح إلى الشاشة:
; قناة الإعداد
LDA # 40 دولارًا ؛ رقم الملف المنطقي
إل دي إكس #$03؛ رقم الجهاز للشاشة هو 03 دولار
لدي #$فف؛ لا يوجد عنوان ثانوي
جي إس آر سيتلفس؛ قناة الإعداد الصحيحة
; لا يوجد SETNAM لأن الشاشة لا تحتاج إلى اسم
;
; فتح الملف المنطقي
مفتوح
; تعيين قناة للإخراج
إل دي إكس #٤٠ دولارًا؛ رقم الملف المنطقي
JSR تشكوت
;
; حرف الإدخال من لوحة المفاتيح
انتظر الحصول على JSR ؛ يضع $00 في A إذا كانت قائمة انتظار لوحة المفاتيح فارغة
CMP #$00؛ إذا ذهب $00 إلى A، فإن Z هي 1 مع المقارنة
انتظر بيك؛ GETIN من قائمة الانتظار مرة أخرى إذا ذهب 0 إلى المجمع
بي إن إي بيرنس سيرن؛ انتقل إلى PRNSCRN إذا كانت Z تساوي 0، لأن A لم يعد لديه 00 دولار
; حرف الإخراج إلى الشاشة
PRNSCRN JSR كروت؛ أرسل الحرف الموجود في A إلى الشاشة
; إغلاق الملف المنطقي
LDA # 40 دولارًا
إغلاق JSR
ملحوظة : WAIT وPRNSCRN هما التسميتان اللتان تحددان العناوين. البايت من لوحة المفاتيح الذي يصل إلى مجمع μP هو رمز ASCII. يجب أن يكون الرمز المقابل الذي سيتم إرساله إلى الشاشة بواسطة Commodore-64 مختلفًا. وهذا لم يؤخذ بعين الاعتبار في البرنامج السابق من باب التبسيط.
5.7 إرسال واستقبال وحدات البايت لمحرك الأقراص
يوجد محولان للواجهة المعقدة في وحدة النظام (اللوحة الأم) لجهاز Commodore-64 يُسمى VIA #1 وCIA #2. يحتوي كل CIA على منفذين متوازيين يطلق عليهما اسم المنفذ A والمنفذ B. ويوجد منفذ خارجي على السطح الرأسي في الجزء الخلفي من وحدة نظام Commodre-64 والذي يسمى بالمنفذ التسلسلي. يحتوي هذا المنفذ على 6 أطراف، أحدها مخصص للبيانات. تدخل البيانات أو تخرج من وحدة النظام بشكل متسلسل، بمعدل بت واحد في كل مرة.
على سبيل المثال، يمكن لثمانية بتات متوازية من المنفذ الداخلي A لـ CIA رقم 2 الخروج من وحدة النظام عبر المنفذ التسلسلي الخارجي بعد تحويلها إلى البيانات التسلسلية عن طريق سجل التحول في CIA. يمكن أن تنتقل البيانات التسلسلية ذات ثمانية بتات من المنفذ التسلسلي الخارجي إلى المنفذ الداخلي A لـ CIA #2 بعد تحويلها إلى بيانات متوازية بواسطة سجل التحول في CIA.
تستخدم وحدة النظام Commodore-64 (الوحدة الأساسية) محرك أقراص خارجي مزود بقرص مرن. يمكن توصيل الطابعة بمحرك الأقراص هذا بطريقة السلسلة التعاقبية (توصيل الأجهزة على التوالي كسلسلة). يتم توصيل كابل البيانات الخاص بمحرك الأقراص بالمنفذ التسلسلي الخارجي لوحدة النظام Commodore-64. وهذا يعني أن الطابعة المتسلسلة متصلة أيضًا بنفس المنفذ التسلسلي. يتم تعريف هذين الجهازين برقمين مختلفين للجهاز (عادةً 8 و4 على التوالي).
يتبع إرسال أو استقبال البيانات الخاصة بمحرك الأقراص نفس الإجراء الموضح سابقًا. إنه:
- تعيين اسم الملف المنطقي (الرقم) وهو نفس اسم ملف القرص الفعلي باستخدام روتين SETNAM.
- فتح الملف المنطقي باستخدام روتين OPEN.
- تحديد ما إذا كان الإدخال أو الإخراج باستخدام روتين CHKOUT أو CHKIN.
- إرسال أو استقبال البيانات باستخدام تعليمات STA و/أو LDA.
- إغلاق الملف المنطقي باستخدام روتين CLOSE.
يجب إغلاق الملف المنطقي. يؤدي إغلاق الملف المنطقي إلى إغلاق تلك القناة المحددة بشكل فعال. عند إعداد القناة لمحرك الأقراص، يتم تحديد رقم الملف المنطقي بواسطة المبرمج. وهو رقم يتراوح بين $00 و$FF (شاملاً). ولا ينبغي أن يكون رقمًا تم اختياره بالفعل لأي جهاز آخر (أو ملف فعلي). رقم الجهاز هو 8 إذا كان هناك محرك أقراص واحد فقط. يتم الحصول على العنوان الثانوي (الرقم) من دليل محرك الأقراص. يستخدم البرنامج التالي 2. يكتب البرنامج الحرف 'E' (ASCII) إلى ملف موجود في القرص يسمى 'mydoc.doc'. من المفترض أن يبدأ هذا الاسم عند عنوان الذاكرة $C101. لذلك، يجب أن يكون البايت الأدنى $01 موجودًا في السجل X والبايت الأعلى $C1 يجب أن يكون موجودًا في السجل Y قبل استدعاء روتين SETNAM. يجب أن يحتوي السجل A أيضًا على الرقم $09 قبل استدعاء روتين SETNAM.
; قناة الإعداد
LDA # 40 دولارًا ؛ رقم الملف المنطقي
إل دي إكس #$08؛ رقم الجهاز لمحرك الأقراص الأول
لدي #$02؛ العنوان الثانوي
جي إس آر سيتلفس؛ قناة الإعداد الصحيحة
;
; الملف الموجود في محرك الأقراص يحتاج إلى اسم (موجود بالفعل في الذاكرة)
LDA # 09 دولارًا
إل دي إكس #$01
LDY #$C1
جي إس آر سيتنام
; فتح الملف المنطقي
مفتوح
; تعيين قناة للإخراج
إل دي إكس #٤٠ دولارًا؛ رقم الملف المنطقي
JSR CHKOUT للكتابة
;
; حرف الإخراج إلى القرص
LDA # 45 دولارًا
JSR كروت
; إغلاق الملف المنطقي
LDA # 40 دولارًا
إغلاق JSR
من أجل قراءة بايت من القرص إلى سجل μP Y، كرر البرنامج السابق مع التغييرات التالية: بدلاً من 'JSR CHKOUT ; للكتابة'، استخدم 'JSR CHKIN؛ للقراءة'. استبدل مقطع التعليمات البرمجية بـ '; 'إخراج الحرف إلى القرص' بما يلي:
; حرف الإدخال من القرص
جي إس آر كريس
يتم الوصول إلى روتين OS CHRIN عن طريق القفز (JSR) إلى جدول القفز OS ROM عند $FFFCF. عند استدعاء هذا الروتين، يحصل على بايت من قناة تم إعدادها بالفعل كقناة إدخال ويضعها في سجل μP A. يمكن أيضًا استخدام روتين GETIN ROM OS بدلاً من CHRIN.
إرسال بايت إلى الطابعة
يتم إرسال البايت إلى الطابعة بطريقة مشابهة لإرسال البايت إلى ملف موجود على القرص.
5.8 روتين حفظ نظام التشغيل
يتم الوصول إلى OS SAVE Routine عن طريق القفز (JSR) إلى جدول القفز OS ROM بسعر FFD8. يقوم روتين OS SAVE في ROM بحفظ (تفريغ) قسم من الذاكرة إلى القرص كملف (باسم). يجب معرفة عنوان بداية القسم الموجود في الذاكرة. يجب أيضًا معرفة عنوان نهاية القسم. يتم وضع البايت السفلي لعنوان البداية في الصفحة صفر في ذاكرة الوصول العشوائي (RAM) عند العنوان 002B دولار. يتم وضع البايت الأعلى لعنوان البداية في موقع ذاكرة البايت التالي عند العنوان $002C. في الصفحة صفر، تشير تسمية TXTTAB إلى هذين العنوانين، على الرغم من أن TXTTAB تعني في الواقع العنوان 002B دولار. يتم وضع البايت السفلي لعنوان النهاية في سجل μP X. يتم وضع البايت الأعلى لعنوان النهاية بالإضافة إلى 1 في سجل μP Y. يأخذ سجل μP A قيمة 2 مليار دولار أمريكي لـ TXTTAB (002 مليار دولار أمريكي). وبذلك يمكن استدعاء روتين SAVE بما يلي:
حفظ JSR
يمكن أن يكون قسم الذاكرة المراد حفظه عبارة عن برنامج لغة تجميع أو مستند. مثال على الوثيقة يمكن أن يكون خطابا أو مقالا. لاستخدام روتين الحفظ، يجب اتباع الإجراء التالي:
- قم بإعداد القناة باستخدام روتين SETLFS.
- قم بتعيين اسم الملف المنطقي (الرقم) وهو نفس اسم ملف القرص الفعلي باستخدام روتين SETNAM.
- افتح الملف المنطقي باستخدام روتين OPEN.
- اجعله ملفًا للإخراج باستخدام CHKOUT.
- رمز حفظ الملف موجود هنا وينتهي بـ 'JSR SAVE'.
- قم بإغلاق الملف المنطقي باستخدام روتين CLOSE.
يحفظ البرنامج التالي ملفًا يبدأ من مواقع الذاكرة من $C101 إلى $C200:
; قناة الإعداد
LDA # 40 دولارًا ؛ رقم الملف المنطقي
إل دي إكس #$08؛ رقم الجهاز لمحرك الأقراص الأول
لدي #$02؛ العنوان الثانوي
جي إس آر سيتلفس؛ قناة الإعداد الصحيحة
;
; اسم الملف الموجود في محرك الأقراص (موجود بالفعل في الذاكرة بسعر C301 دولارًا)
LDA#09$؛ طول اسم الملف
إل دي إكس #$01
LDY #$C3
جي إس آر سيتنام
; فتح الملف المنطقي
مفتوح
; تعيين قناة للإخراج
إل دي إكس #٤٠ دولارًا؛ رقم الملف المنطقي
جي إس آر تشكوت؛ للكتابة
;
; ملف الإخراج إلى القرص
إل دي إيه #$01
STA 2 مليار دولار ؛ TXTTAB
LDA#$C1
ستا 2 دولار أمريكي
LDX # 00 دولار
LDY #$C2
LDA #$2B
حفظ JSR
; إغلاق الملف المنطقي
LDA # 40 دولارًا
إغلاق JSR
لاحظ أن هذا برنامج يقوم بحفظ قسم آخر من الذاكرة (وليس قسم البرنامج) في القرص (قرص مرن لـ Commodore-64).
5.9 روتين تحميل نظام التشغيل
يتم الوصول إلى روتين تحميل نظام التشغيل عن طريق القفز (JSR) إلى جدول الانتقال إلى نظام التشغيل ROM بسعر FFD5 دولار. عندما يتم حفظ قسم (مساحة كبيرة) من الذاكرة على القرص، يتم حفظه برأس يحتوي على عنوان بداية القسم الموجود في الذاكرة. يقوم الروتين الفرعي OS LOAD بتحميل بايتات الملف إلى الذاكرة. مع عملية التحميل هذه، يجب أن تكون قيمة المركم 010 ($00). لكي تقوم عملية التحميل بقراءة عنوان البداية في رأس الملف في القرص ووضع بايتات الملف في ذاكرة الوصول العشوائي بدءًا من ذلك العنوان، يجب أن يكون العنوان الثانوي للقناة 1 أو 2 (يستخدم البرنامج التالي 2). يقوم هذا الروتين بإرجاع العنوان بالإضافة إلى 1 لموقع ذاكرة الوصول العشوائي الأعلى الذي تم تحميله. وهذا يعني أن البايت المنخفض للعنوان الأخير للملف في ذاكرة الوصول العشوائي زائد 1 يتم وضعه في سجل μP X، ويتم وضع البايت العالي للعنوان الأخير للملف في ذاكرة الوصول العشوائي زائد 1 في سجل μP Y.
إذا لم ينجح التحميل، فإن سجل μP A يحمل رقم الخطأ (ربما 4، 5، 8 أو 9). تم أيضًا تعيين علامة C الخاصة بسجل حالة المعالج الدقيق (صنع 1). إذا نجح التحميل، فإن القيمة الأخيرة للسجل A ليست مهمة.
الآن، في الفصل السابق من هذه الدورة التدريبية عبر الإنترنت، التعليمات الأولى لبرنامج لغة التجميع موجودة على العنوان الموجود في ذاكرة الوصول العشوائي (RAM) حيث بدأ البرنامج. لا يجب أن يكون الأمر هكذا. وهذا يعني أن التعليمات الأولى للبرنامج لا يجب أن تكون في بداية البرنامج في ذاكرة الوصول العشوائي (RAM). يمكن أن تكون تعليمات بدء البرنامج في أي مكان داخل الملف الموجود في ذاكرة الوصول العشوائي (RAM). يُنصح المبرمج بتسمية بداية تعليمات لغة التجميع بـ START. وبذلك، بعد تحميل البرنامج، يتم إعادة تشغيله (تنفيذه) باستخدام تعليمات لغة التجميع التالية:
بداية JSR
'JSR START' موجود في برنامج لغة التجميع الذي يقوم بتحميل البرنامج المراد تشغيله. لغة التجميع التي تقوم بتحميل ملف لغة تجميع آخر وتقوم بتشغيل الملف المحمل لها إجراء التعليمات البرمجية التالي:
- قم بتعيين القناة باستخدام روتين SETLFS.
- قم بتعيين اسم الملف المنطقي (الرقم) وهو نفس اسم ملف القرص الفعلي باستخدام روتين SETNAM.
- افتح الملف المنطقي باستخدام روتين OPEN.
- اجعله الملف للإدخال باستخدام CHKIN.
- رمز تحميل الملف موجود هنا وينتهي بـ 'JSR LOAD'.
- قم بإغلاق الملف المنطقي باستخدام روتين CLOSE.
يقوم البرنامج التالي بتحميل ملف من القرص وتشغيله:
; قناة الإعداد
LDA # 40 دولارًا ؛ رقم الملف المنطقي
إل دي إكس #$08؛ رقم الجهاز لمحرك الأقراص الأول
لدي #$02؛ العنوان الثانوي
جي إس آر سيتلفس؛ قناة الإعداد الصحيحة
;
; اسم الملف الموجود في محرك الأقراص (موجود بالفعل في الذاكرة بسعر C301 دولارًا)
LDA#09$؛ طول اسم الملف
إل دي إكس #$01
LDY #$C3
جي إس آر سيتنام
; فتح الملف المنطقي
مفتوح
; تعيين قناة للإدخال
إل دي إكس #٤٠ دولارًا؛ رقم الملف المنطقي
جي إس آر تشكين؛ للقراءة
;
; ملف الإدخال من القرص
LDA # 00 دولار
تحميل JSR
; إغلاق الملف المنطقي
LDA # 40 دولارًا
إغلاق JSR
; بدء تحميل البرنامج
بداية JSR
5.10 المودم ومعيار RS-232
المودم هو جهاز (طرفي) يقوم بتحويل البتات من الكمبيوتر إلى الإشارات الصوتية الكهربائية المقابلة ليتم نقلها عبر خط الهاتف. في الطرف المتلقي، يوجد مودم قبل جهاز الكمبيوتر المتلقي. يقوم هذا المودم الثاني بتحويل الإشارات الصوتية الكهربائية إلى بتات للكمبيوتر المستقبل.
يجب توصيل المودم بالكمبيوتر عبر منفذ خارجي (على السطح الرأسي للكمبيوتر). يشير معيار RS-232 إلى نوع معين من الموصلات التي تربط المودم بالكمبيوتر (في الماضي). بمعنى آخر، كان لدى العديد من أجهزة الكمبيوتر في الماضي منفذ خارجي كان عبارة عن موصل RS-232 أو موصل متوافق مع RS-232.
تحتوي وحدة النظام Commodore-64 (الكمبيوتر) على منفذ خارجي على سطحها الرأسي الخلفي يسمى منفذ المستخدم. منفذ المستخدم هذا متوافق مع RS-232. يمكن توصيل جهاز مودم هناك. يتصل Commodore-64 بالمودم من خلال منفذ المستخدم هذا. يحتوي نظام التشغيل ROM الخاص بـ Commodore-64 على إجراءات فرعية للتواصل مع مودم يسمى إجراءات RS-232. تحتوي هذه الإجراءات على إدخالات في جدول الانتقال.
معدل الباود
يتم تحويل البايت ذو الثمانية بتات من الكمبيوتر إلى سلسلة من ثمانية بتات قبل إرسالها إلى المودم. ويتم العكس من المودم إلى الكمبيوتر. معدل الباود هو عدد البتات التي يتم إرسالها في الثانية على التوالي.
أسفل الذاكرة
لا يشير المصطلح 'أسفل الذاكرة' إلى موقع بايت الذاكرة لعنوان 0000 دولار. يشير إلى أقل موقع لذاكرة الوصول العشوائي (RAM) حيث يمكن للمستخدم البدء في وضع بياناته وبرامجه. بشكل افتراضي، هو 0800 دولار. تذكر من المناقشة السابقة أن الكثير من المواقع التي تتراوح بين $0800 و$BFFF يتم استخدامها بواسطة لغة الكمبيوتر BASIC ومبرمجيها (المستخدمين). يتم ترك مواقع عناوين $C000 إلى $CFFF فقط للاستخدام في برامج وبيانات لغة التجميع؛ هذا هو 4 كيلو بايت من أصل 64 كيلو بايت من الذاكرة.
قمة الذاكرة
في تلك الأيام، عندما اشترى العملاء أجهزة الكمبيوتر Commodore-64، لم يكن البعض منهم يأتي مع جميع مواقع الذاكرة. تحتوي أجهزة الكمبيوتر هذه على ذاكرة قراءة فقط (ROM) مع نظام التشغيل الخاص بها من $E000 إلى $FFFF. كان لديهم ذاكرة الوصول العشوائي من 0000 دولار إلى الحد الأقصى، وهو ليس $DFFF، بجوار E000 دولار. كان الحد أقل من $DFFF ويسمى هذا الحد 'أعلى الذاكرة'. لذلك، لا يشير الجزء العلوي من الذاكرة إلى موقع $FFFF.
المخازن المؤقتة Commodore-64 لاتصالات RS-232
يحيل المخزن المؤقت
يأخذ المخزن المؤقت لإرسال RS-232 (الإخراج) 256 بايت من أعلى الذاكرة إلى الأسفل. تم تسمية المؤشر الخاص بمخزن الإرسال المؤقت هذا باسم ROBUF. يوجد هذا المؤشر في الصفحة صفر مع عناوين $00F9 متبوعة بـ $00FA. يحدد ROBUF فعليًا 00F9 دولارًا. لذلك، إذا كان عنوان بداية المخزن المؤقت هو $BE00، فإن البايت الأدنى $BE00، وهو $00، موجود في الموقع $00F9 والبايت الأعلى $BE00، وهو $BE، موجود في $00FA موقع.
تلقي المخزن المؤقت
يأخذ المخزن المؤقت لاستقبال بايت RS-232 (الإدخال) 256 بايت من أسفل المخزن المؤقت للإرسال. تم تسمية المؤشر الخاص بهذا المخزن المؤقت المتلقي باسم RIBUF. يوجد هذا المؤشر في الصفحة صفر مع عناوين $00F7 متبوعة بـ $00F8. يحدد RIBUF فعليًا 00F7 دولارًا. لذا، إذا كان عنوان بداية المخزن المؤقت هو $BF00، فإن البايت الأدنى لـ $BF00، وهو $00، موجود في الموقع $00F7 والبايت الأعلى $BF00، وهو $BF، موجود في $00F8 موقع. لذلك، يتم استخدام 512 بايت من أعلى الذاكرة كمخزن مؤقت إجمالي لذاكرة الوصول العشوائي RS-232.
قناة RS-232
عند توصيل مودم بمنفذ المستخدم (الخارجي)، يكون الاتصال بالمودم مجرد اتصال RS-232. إن الإجراء الخاص بالحصول على قناة RS-232 كاملة هو نفسه تقريبًا كما في المناقشة السابقة، ولكن مع اختلاف واحد مهم: اسم الملف عبارة عن رمز وليس سلسلة في الذاكرة. يعد الرمز $0610 خيارًا جيدًا. ويعني معدل باود قدره 300 بت/ثانية وبعض المعلمات التقنية الأخرى. كما أنه لا يوجد عنوان ثانوي. لاحظ أن رقم الجهاز هو 2. الإجراء الخاص بإعداد قناة RS-232 كاملة هو:
- ضبط القناة باستخدام روتين SETLFS.
- تحديد اسم الملف المنطقي، $0610.
- فتح الملف المنطقي باستخدام روتين OPEN.
- جعله ملفًا للإخراج باستخدام CHKOUT أو ملفًا للإدخال باستخدام CHKIN.
- إرسال البايتات المفردة باستخدام CHROUT أو استقبال البايتات المفردة باستخدام GETIN.
- إغلاق الملف المنطقي باستخدام روتين CLOSE.
يتم الوصول إلى روتين OS GETIN عن طريق القفز (JSR) إلى جدول القفز OS ROM عند $FFE4. عند استدعاء هذا الروتين، فإنه يأخذ البايت الذي تم إرساله إلى المخزن المؤقت لجهاز الاستقبال ويضعه (يعيده) إلى مجمع μP.
يرسل البرنامج التالي البايت 'E' (ASCII) إلى المودم المتصل بمنفذ المستخدم المتوافق مع RS-232:
; قناة الإعداد
LDA # 40 دولارًا ؛ رقم الملف المنطقي
إل دي إكس #$02؛ رقم الجهاز لRS-232
لدي #$فف؛ لا يوجد عنوان ثانوي
جي إس آر سيتلفس؛ قناة الإعداد الصحيحة
;
; اسم RS-232 هو رمز على سبيل المثال. 0610 دولار
LDA#$02; طول الكود 2 بايت
ال دي اكس #10 دولار
LDY #$06
جي إس آر سيتنام
;
; فتح الملف المنطقي
مفتوح
; تعيين قناة للإخراج
إل دي إكس #٤٠ دولارًا؛ رقم الملف المنطقي
JSR تشكوت
;
; حرف الإخراج إلى RS-232 على سبيل المثال. مودم
LDA # 45 دولارًا
JSR كروت
; إغلاق الملف المنطقي
LDA # 40 دولارًا
إغلاق JSR
لتلقي بايت، يكون الرمز مشابهًا جدًا، باستثناء أنه يتم استبدال 'JSR CHKOUT' بـ 'JSR CHKIN' و:
LDA # 45 دولارًا
JSR كروت
يتم استبداله بـ 'JSR GETIN' مع وضع النتيجة في السجل A.
يتم إرسال أو استقبال البايتات بشكل مستمر عن طريق حلقة لإرسال أو استقبال مقطع التعليمات البرمجية، على التوالي.
لاحظ أن الإدخال والإخراج مع الكومودور متشابه في معظم حالاته باستثناء لوحة المفاتيح حيث أن بعض الإجراءات لا يتم استدعاؤها من قبل المبرمج، ولكن يتم استدعاؤها من قبل نظام التشغيل.
5.11 العد والتوقيت
النظر في تسلسل العد التنازلي وهو:
2، 1، 0
هذا هو العد التنازلي من 2 إلى 0. الآن، فكر في تسلسل العد التنازلي المتكرر:
2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0
هذا هو العد التنازلي المتكرر لنفس التسلسل. ويتكرر التسلسل أربع مرات. أربع مرات تعني أن التوقيت هو 4. ويتم العد ضمن تسلسل واحد. تكرار نفس التسلسل هو التوقيت.
يوجد نوعان من محولات الواجهة المعقدة في وحدة النظام الخاصة بـ Commodore-64. تحتوي كل CIA على دائرتين للعداد/المؤقت تسمى Timer A (TA) وTimer B (TB). دائرة العد لا تختلف عن دائرة التوقيت. يشير العداد أو المؤقت الموجود في جهاز Commodore-64 إلى نفس الشيء. في الواقع، يشير أي منهما بشكل أساسي إلى سجل واحد ذو 16 بت والذي يعد دائمًا تنازليًا إلى 0 في نبضات ساعة النظام. يمكن تعيين قيم مختلفة في سجل 16 بت. كلما كانت القيمة أكبر، كلما استغرق العد التنازلي إلى الصفر وقتًا أطول. في كل مرة يتجاوز أحد الموقتات الصفر، فإن IRQ يتم إرسال إشارة المقاطعة إلى المعالج الدقيق. عندما ينخفض العد إلى ما بعد الصفر، يطلق عليه اسم التدفق الناقص.
اعتمادًا على كيفية برمجة دائرة المؤقت، يمكن تشغيل المؤقت في وضع المرة الواحدة أو في الوضع المستمر. في الرسم التوضيحي السابق، يعني الوضع لمرة واحدة 'القيام بـ 2، 1، 0' والتوقف أثناء استمرار نبضات الساعة. الوضع المستمر يشبه '2، 1، 0، 2، 1، 0، 2، 1، 0، 2، 1، 0، إلخ.' الذي يستمر مع نبضات الساعة. وهذا يعني أنه عندما يتجاوز الصفر، إذا لم يتم إعطاء أي تعليمات، فإن تسلسل العد التنازلي يتكرر. عادة ما يكون الرقم الأكبر أكبر بكثير من 2.
يتم إنشاء المؤقت A (TA) الخاص بـ CIA #1 IRQ على فترات (فترات) منتظمة لخدمة لوحة المفاتيح. في الواقع، هذا يحدث كل 1/60 من الثانية بشكل افتراضي. IRQ يتم إرسالها إلى المعالج الدقيق كل 1/60 من الثانية. ما هو إلا عندما IRQ يتم إرسال أن البرنامج يمكنه قراءة قيمة مفتاح من قائمة انتظار لوحة المفاتيح (المخزن المؤقت). تذكر أن المعالج الدقيق يحتوي على طرف واحد فقط للمعالج IRQ الإشارة. يحتوي المعالج الدقيق أيضًا على طرف واحد فقط للمعالج نمي الإشارة. تأتي إشارة ¯NMI إلى المعالج الدقيق دائمًا من CIA #2.
يحتوي سجل المؤقت ذو 16 بت على عنوانين للذاكرة: أحدهما للبايت الأقل والآخر للبايت الأعلى. تحتوي كل وكالة المخابرات المركزية على دائرتين للمؤقت. وكالة المخابرات المركزية اثنين متطابقة. بالنسبة لـ CIA #1، فإن عناوين جهازي ضبط الوقت هي: DC04 وDC05 لـ TA وDC06 وDC07 لـ TB. بالنسبة لـ CIA #2، فإن عناوين جهازي ضبط الوقت هي: DD04 وDD05 لـ TA وDD06 وDD07 لـ TB.
افترض أنه سيتم إرسال الرقم 25510 إلى مؤقت TA الخاص بـ CIA #2 للعد التنازلي. 25510 = 00000000111111112 مكون من ستة عشر بت. 00000000111111112 = $000FFF بالنظام الست عشري. في هذه الحالة، يتم إرسال $FF إلى السجل على عنوان $DD04، ويتم إرسال $00 إلى السجل على عنوان $DD05 - القليل من النهاية. يرسل مقطع التعليمات البرمجية التالي الرقم إلى السجل:
LDA #$FF
الدولة $DD04
LDA # 00 دولار
الدولة $DD05
على الرغم من أن السجلات الموجودة في CIA تحتوي على عناوين RAM، إلا أنها موجودة فعليًا في CIA وCIA عبارة عن IC منفصل عن ذاكرة الوصول العشوائي (RAM) أو ذاكرة القراءة فقط (ROM).
هذا ليس كل شيء! عندما يتم إعطاء المؤقت رقمًا للعد التنازلي، كما هو الحال مع الكود السابق، لا يبدأ العد التنازلي. يبدأ العد التنازلي عندما يتم إرسال بايت ذو ثمانية بتات إلى سجل التحكم المقابل للمؤقت. يشير البت الأول من هذا البايت لسجل التحكم إلى ما إذا كان يجب أن يبدأ العد التنازلي أم لا. القيمة 0 لهذا البت الأول تعني التوقف عن العد التنازلي، بينما القيمة 1 تعني بدء العد التنازلي. أيضًا، يجب أن تشير البايتة إلى ما إذا كان العد التنازلي في وضع طلقة واحدة (مرة واحدة) أو في وضع التشغيل الحر (الوضع المستمر). يقوم وضع اللقطة الواحدة بالعد التنازلي ويتوقف عندما تصبح قيمة سجل المؤقت صفرًا. في وضع التشغيل الحر، يتكرر العد التنازلي بعد الوصول إلى 0. تشير البتة الرابعة (الفهرس 3) من البايت التي يتم إرسالها إلى سجل التحكم إلى الوضع: 0 يعني وضع التشغيل الحر و1 يعني وضع اللقطة الواحدة.
الرقم المناسب لبدء العد في وضع اللقطة الواحدة هو 000010012 = 09 دولارًا بالنظام الست عشري. الرقم المناسب لبدء العد في وضع التشغيل الحر هو 000000012 = $01 بالنظام الست عشري. كل سجل توقيت لديه سجل التحكم الخاص به. في CIA #1، يحتوي سجل التحكم الخاص بالمؤقت A على عنوان ذاكرة الوصول العشوائي (RAM) الخاص بـ DC0E16، كما يحتوي سجل التحكم الخاص بالمؤقت B على عنوان ذاكرة الوصول العشوائي (RAM) DC0F16. في CIA #2، يحتوي سجل التحكم الخاص بالمؤقت A على عنوان ذاكرة الوصول العشوائي (RAM) وهو DD0E16، كما يحتوي سجل التحكم الخاص بالمؤقت B على عنوان ذاكرة الوصول العشوائي (RAM) وهو DD0F16. لبدء العد التنازلي للرقم المكون من ستة عشر بت في TA الخاص بـ CIA #2، في وضع اللقطة الواحدة، استخدم الكود التالي:
LDA # 09 دولارًا
ستا $DD0E
لبدء العد التنازلي للرقم المكون من ستة عشر بت في TA الخاص بـ CIA #2، في وضع التشغيل الحر، استخدم الكود التالي:
إل دي إيه #$01
ستا $DD0E
5.12 و IRQ و نمي الطلبات
يحتوي المعالج الدقيق 6502 على IRQ و نمي خطوط (دبابيس). يحتوي كل من CIA #1 وCIA #2 على IRQ دبوس للمعالج الدقيق. ال IRQ دبوس CIA رقم 2 متصل بـ نمي دبوس μP. ال IRQ دبوس CIA رقم 1 متصل بـ IRQ دبوس μP. هذان هما خطا المقاطعة الوحيدان اللذان يربطان المعالج الدقيق. لذلك IRQ دبوس CIA رقم 2 هو نمي المصدر ويمكن أيضًا رؤيته على أنه خط ¯NMI.
لدى وكالة المخابرات المركزية رقم 1 خمسة مصادر مباشرة محتملة لتوليد IRQ إشارة لـ μP. CIA رقم 2 هو نفس هيكل CIA رقم 1. لذا، فإن CIA #2 لديه نفس المصادر الخمسة المباشرة المحتملة لتوليد إشارة المقاطعة هذه المرة وهي نمي الإشارة. تذكر أنه عندما يستقبل μP نمي إشارة، إذا كان التعامل مع IRQ الطلب، فإنه يعلق ذلك ويتعامل مع نمي طلب. عندما تنتهي من التعامل مع نمي الطلب، ثم يستأنف التعامل مع الملف IRQ طلب.
عادةً ما يتم توصيل CIA #1 خارجيًا بلوحة المفاتيح وجهاز الألعاب مثل عصا التحكم. تستخدم لوحة المفاتيح قدرًا أكبر من المنفذ A لـ CIA #1 مقارنة بالمنفذ B. يستخدم جهاز اللعبة منفذ CIA #1 B أكثر من المنفذ A. وعادةً ما يتم توصيل CIA #2 خارجيًا بمحرك الأقراص (متصل بالطابعة). والمودم. يستخدم محرك الأقراص المزيد من المنفذ A من CIA # 2 (من خلال المنفذ التسلسلي الخارجي) أكثر من المنفذ B. يستخدم المودم (RS-232) منفذ CIA #2 B أكثر من المنفذ A.
مع كل ذلك، كيف يمكن لوحدة النظام معرفة أسباب المشكلة IRQ أو نمي يقاطع؟ لدى CIA #1 وCIA #2 خمسة مصادر مباشرة للمقاطعة. إذا كانت إشارة المقاطعة إلى μP نمي ، المصدر هو أحد المصادر الخمسة المباشرة من وكالة المخابرات المركزية رقم 2. إذا كانت إشارة المقاطعة إلى μP IRQ ، المصدر هو أحد المصادر الخمسة المباشرة من وكالة المخابرات المركزية رقم 1.
والسؤال التالي هو: 'كيف تفرق وحدة النظام بين المصادر الخمسة المباشرة لكل وكالة المخابرات المركزية؟' يحتوي كل CIA على سجل مكون من ثمانية بتات يسمى سجل التحكم في المقاطعة (ICR). يخدم ICR كلا المنافذ التابعة لوكالة المخابرات المركزية. يوضح الجدول التالي معاني البتات الثمانية لسجل التحكم في المقاطعة، بدءًا من البتة 0:
الجدول 5.13 سجل التحكم بالمقاطعة |
|
---|---|
مؤشر البت | معنى |
0 | ضبط (صنع 1) من خلال التدفق السفلي للمؤقت A |
1 | تم ضبطه بواسطة التدفق السفلي للمؤقت B |
2 | اضبط عندما تتساوى ساعة 'الوقت من اليوم' مع المنبه |
3 | يتم ضبطه عند امتلاء المنفذ التسلسلي |
4 | يتم ضبطه بواسطة جهاز خارجي |
5 | غير مستخدم (صنع 0) |
6 | غير مستخدم (صنع 0) |
7 | يتم تعيينه عند ضبط أي من البتات الخمس الأولى |
وكما يتبين من الجدول، يتم تمثيل كل مصدر من المصادر المباشرة بواحدة من البتات الخمس الأولى. لذلك، عند استقبال إشارة المقاطعة عند μP، يجب تنفيذ التعليمات البرمجية لقراءة محتوى سجل التحكم في المقاطعة لمعرفة المصدر الدقيق للمقاطعة. عنوان ذاكرة الوصول العشوائي (RAM) لـ ICR الخاص بـ CIA #1 هو DC0D16. عنوان ذاكرة الوصول العشوائي (RAM) لـ ICR الخاص بـ CIA #2 هو DD0D16. لقراءة (إرجاع) محتوى ICR الخاص بـ CIA #1 إلى مجمع μP، اكتب التعليمات التالية:
LDA$DC0D
لقراءة (إرجاع) محتوى ICR الخاص بـ CIA #2 إلى مجمع μP، اكتب التعليمات التالية:
LDA $DD0D
5.13 برنامج الخلفية مدفوعة المقاطعة
تقوم لوحة المفاتيح عادةً بمقاطعة المعالج الدقيق كل 1/60 من الثانية. تخيل أن أحد البرامج قيد التشغيل ووصل إلى وضع يسمح له بانتظار المفتاح من لوحة المفاتيح قبل أن يتمكن من الاستمرار في أجزاء التعليمات البرمجية أدناه. افترض أنه إذا لم يتم الضغط على أي مفتاح من لوحة المفاتيح، فسيقوم البرنامج فقط بإجراء حلقة صغيرة، في انتظار المفتاح. تخيل أن البرنامج قيد التشغيل ويتوقع فقط ظهور مفتاح من لوحة المفاتيح بعد إصدار مقاطعة لوحة المفاتيح مباشرة. عند هذه النقطة، يتوقف الكمبيوتر بأكمله بشكل غير مباشر ولا يفعل أي شيء سوى تكرار حلقة الانتظار. تخيل أنه تم الضغط على مفتاح لوحة المفاتيح قبل الإصدار التالي من مقاطعة لوحة المفاتيح التالية مباشرةً. وهذا يعني أن الكمبيوتر لم يفعل شيئًا لمدة ستين من الثانية تقريبًا! وهذا وقت طويل لا يستطيع فيه الكمبيوتر فعل أي شيء، حتى في أيام الكومودور 64. من الممكن أن يكون الكمبيوتر يفعل شيئًا آخر في ذلك الوقت (المدة). هناك العديد من هذه الفترات في البرنامج.
يمكن كتابة برنامج ثانٍ ليعمل في فترات 'الخمول' هذه. يقال أن مثل هذا البرنامج يعمل في خلفية البرنامج الرئيسي (أو الأول). إحدى الطرق السهلة للقيام بذلك هي فرض معالجة مقاطعة BRK المعدلة عند توقع وجود مفتاح من لوحة المفاتيح.
مؤشر لتعليمات BRK
في المواقع المتعاقبة لذاكرة الوصول العشوائي (RAM) للعناوين 0316 دولارًا و0317 دولارًا، يوجد المؤشر (المتجه) لروتين تعليمات BRK الفعلي. يتم وضع المؤشر الافتراضي هناك عندما يتم تشغيل الكمبيوتر بواسطة نظام التشغيل في ذاكرة القراءة فقط (ROM). هذا المؤشر الافتراضي هو عنوان لا يزال يشير إلى معالج تعليمات BRK الافتراضي في ذاكرة القراءة فقط (ROM) لنظام التشغيل. المؤشر هو عنوان 16 بت. يتم وضع البايت السفلي للمؤشر في موقع البايت للعنوان 0306 دولارًا، ويتم وضع البايت الأعلى للمؤشر في موقع البايت 0317 دولارًا.
يمكن كتابة برنامج ثانٍ بحيث عندما يكون النظام 'خاملاً'، يتم تنفيذ بعض أكواد البرنامج الثاني بواسطة النظام. وهذا يعني أن البرنامج الثاني يجب أن يتكون من إجراءات فرعية. عندما يكون النظام في وضع الخمول وينتظر الحصول على مفتاح من لوحة المفاتيح، يتم تنفيذ الروتين الفرعي التالي للبرنامج الثاني. التفاعل البشري مع الكمبيوتر بطيء مقارنة بتشغيل وحدة النظام.
من السهل حل هذه المشكلة: في كل مرة يتعين على الكمبيوتر انتظار مفتاح من لوحة المفاتيح، أدخل تعليمات BRK في الكود واستبدل المؤشر عند 0316 دولارًا (و 0317 دولارًا) بمؤشر الروتين الفرعي التالي للثاني ( مخصص) البرنامج. وبهذه الطريقة، سيتم تشغيل كلا البرنامجين لمدة لا تزيد كثيرًا عن مدة تشغيل البرنامج الرئيسي بمفرده.
5.14 التجميع والتجميع
يستبدل المجمّع كافة التسميات بالعناوين. عادةً ما تتم كتابة برنامج لغة التجميع للبدء عند عنوان معين. تسمى النتيجة من المجمع (بعد التجميع) 'رمز الكائن' مع كل شيء في النظام الثنائي. هذه النتيجة هي الملف القابل للتنفيذ إذا كان الملف برنامجًا وليس مستندًا. المستند غير قابل للتنفيذ.
يتكون التطبيق من أكثر من برنامج (لغة التجميع). عادة ما يكون هناك برنامج رئيسي. لا ينبغي الخلط بين الوضع هنا وبين الوضع الخاص ببرامج الخلفية التي تعتمد على المقاطعة. جميع البرامج هنا هي برامج المقدمة، ولكن هناك برنامج أول أو رئيسي.
هناك حاجة إلى مترجم بدلاً من المجمع عندما يكون هناك أكثر من برنامج أمامي. يقوم المترجم بتجميع كل برنامج في رمز كائن. ومع ذلك، ستكون هناك مشكلة: ستتداخل بعض أجزاء التعليمات البرمجية لأن البرامج ربما تكون مكتوبة بواسطة أشخاص مختلفين. الحل عن طريق المترجم هو نقل كافة البرامج المتداخلة ما عدا الأول على مساحة الذاكرة، حتى لا تتداخل البرامج. الآن، عندما يتعلق الأمر بتخزين المتغيرات، ستظل بعض عناوين المتغيرات متداخلة. الحل هنا هو استبدال العناوين المتداخلة بالعناوين الجديدة (عدا البرنامج الأول) بحيث لا تعود متداخلة. بهذه الطريقة، ستتناسب البرامج المختلفة مع الأجزاء (المناطق) المختلفة من الذاكرة.
مع كل ذلك، من الممكن أن يستدعي روتين في برنامج ما روتينًا في برنامج آخر. لذلك، يقوم المترجم بالربط. يشير الارتباط إلى الحصول على عنوان بدء روتين فرعي في أحد البرامج ثم الاتصال به في برنامج آخر؛ وكلاهما جزء من التطبيق. يحتاج كلا البرنامجين إلى استخدام نفس العنوان لهذا الغرض. والنتيجة النهائية هي رمز كائن كبير يحتوي على كل شيء في شكل ثنائي (بت).
5.15 حفظ البرنامج وتحميله وتشغيله
تتم كتابة لغة التجميع عادةً في بعض برامج التحرير (والتي قد يتم توفيرها مع برنامج التجميع). يشير برنامج المحرر إلى مكان بدء البرنامج وانتهاءه في الذاكرة (RAM). يمكن لروتين Kernal SAVE الخاص بنظام التشغيل ROM الخاص بـ Commodore-64 حفظ برنامج في الذاكرة على القرص. إنه يقوم فقط بتفريغ القسم (الكتلة) من الذاكرة الذي قد يحتوي على استدعاء التعليمات الخاص به إلى القرص. من المستحسن أن تكون تعليمات الاستدعاء للحفظ منفصلة عن البرنامج الذي يتم حفظه، بحيث أنه عندما يتم تحميل البرنامج إلى الذاكرة من القرص، فإنه لن يحفظ نفسه مرة أخرى عند تشغيله. يعد تحميل برنامج لغة التجميع من القرص تحديًا مختلفًا لأن البرنامج لا يمكنه تحميل نفسه.
لا يمكن للبرنامج تحميل نفسه من القرص إلى حيث يبدأ وينتهي في ذاكرة الوصول العشوائي (RAM). تم تزويد جهاز Commodore-64 في تلك الأيام عادةً بمترجم BASIC لتشغيل برامج لغة BASIC. عندما يتم تشغيل الجهاز (الكمبيوتر)، فإنه يستقر مع موجه الأوامر: جاهز. ومن هناك، يمكن كتابة الأوامر أو التعليمات الأساسية بالضغط على مفتاح 'Enter' بعد الكتابة. الأمر الأساسي (التعليمات) لتحميل ملف هو:
تحميل 'اسم الملف'، 8،1
يبدأ الأمر بالكلمة المحجوزة الأساسية وهي LOAD. ويتبع ذلك مسافة ثم اسم الملف بين علامتي اقتباس مزدوجتين. رقم الجهاز 8 متبوعًا بفاصلة. العنوان الثانوي للقرص وهو 1 متبوعًا بفاصلة. مع مثل هذا الملف، يكون عنوان البداية لبرنامج لغة التجميع موجودًا في رأس الملف الموجود على القرص. عندما ينتهي BASIC من تحميل البرنامج، يتم إرجاع آخر عنوان لذاكرة الوصول العشوائي (RAM) بالإضافة إلى 1 للبرنامج. كلمة 'تم إرجاعها' هنا تعني أن البايت الأدنى للعنوان الأخير بالإضافة إلى 1 يتم وضعه في سجل μP X، ويتم وضع البايت الأعلى للعنوان الأخير بالإضافة إلى 1 في سجل μP Y.
بعد تحميل البرنامج، يجب تشغيله (تنفيذه). يجب على مستخدم البرنامج معرفة عنوان البداية للتنفيذ في الذاكرة. مرة أخرى، هناك حاجة إلى برنامج BASIC آخر هنا. إنه أمر SYS. بعد تنفيذ أمر SYS، سيتم تشغيل (ويتوقف) برنامج لغة التجميع. أثناء التشغيل، إذا كانت هناك حاجة إلى أي إدخال من لوحة المفاتيح، فيجب أن يشير برنامج لغة التجميع إلى ذلك للمستخدم. بعد قيام المستخدم بكتابة البيانات الموجودة على لوحة المفاتيح والضغط على مفتاح 'Enter'، سيستمر برنامج لغة التجميع في العمل باستخدام إدخال لوحة المفاتيح دون تدخل من مترجم BASIC.
بافتراض أن بداية عنوان ذاكرة الوصول العشوائي (RAM) للتنفيذ (الجاري) لبرنامج لغة التجميع هو C12316، يتم تحويل C123 إلى الأساس العشرة قبل استخدامه مع أمر SYS. تحويل C12316 إلى الأساس العاشر هو كما يلي:
لذلك، الأمر BASIC SYS هو:
نظام 49443
5.16 التمهيد للكومودور-64
يتكون تشغيل جهاز Commodore-64 من مرحلتين: مرحلة إعادة ضبط الأجهزة ومرحلة تهيئة نظام التشغيل. نظام التشغيل هو Kernal الموجود في ذاكرة القراءة فقط (وليس في القرص). هناك خط إعادة تعيين (في الواقع الدقة ) الذي يتصل بدبوس عند 6502 μP، وبنفس اسم الدبوس في جميع السفن الخاصة مثل CIA 1 وCIA 2 وVIC II. في مرحلة إعادة التعيين، وبسبب هذا الخط، تتم إعادة تعيين جميع السجلات في μP وفي الرقائق الخاصة إلى 0 (يتم جعلها صفرًا لكل بت). بعد ذلك، من خلال أجهزة المعالج الدقيق، يتم إعطاء مؤشر المكدس وسجل حالة المعالج بقيمهما الأولية في المعالج الدقيق. يتم بعد ذلك إعطاء عداد البرنامج بالقيمة (العنوان) في موقعي $FFFC و$FFFD. تذكر أن عداد البرنامج يحمل عنوان التعليمة التالية. المحتوى (العنوان) الموجود هنا مخصص للروتين الفرعي الذي يبدأ تهيئة البرنامج. كل شيء حتى الآن يتم بواسطة أجهزة المعالجات الدقيقة. لا يتم لمس الذاكرة بأكملها في هذه المرحلة. ثم تبدأ المرحلة التالية من التهيئة.
تتم التهيئة من خلال بعض الإجراءات في نظام التشغيل ROM. التهيئة تعني إعطاء القيم الأولية أو الافتراضية لبعض السجلات في الشرائح الخاصة. تبدأ التهيئة بإعطاء القيم الأولية أو الافتراضية لبعض السجلات في الشرائح الخاصة. IRQ على سبيل المثال، يجب أن يبدأ الإصدار كل 1/60 من الثانية. لذلك، يجب ضبط المؤقت المقابل له في CIA #1 على قيمته الافتراضية.
بعد ذلك، يقوم Kernal بإجراء اختبار ذاكرة الوصول العشوائي (RAM). يقوم باختبار كل موقع عن طريق إرسال بايت إلى الموقع وقراءته مرة أخرى. إذا كان هناك فرق، على الأقل هذا الموقع سيء. يحدد Kernal أيضًا الجزء العلوي من الذاكرة وأسفلها ويقوم بتعيين المؤشرات المقابلة في الصفحة 2. إذا كان الجزء العلوي من الذاكرة هو $DFFF، فسيتم وضع $FF في موقع $0283 ويتم وضع $DF في موقع بايت 0284 $. يحمل كل من 0283 دولارًا و0284 دولارًا علامة HIRAM. إذا كان الجزء السفلي من الذاكرة هو 0800 $، فسيتم وضع $00 في الموقع 0281 $ ويتم وضع $08 في الموقع 0282 $. كل من 0281 دولارًا و0282 دولارًا لهما علامة LORAM. يبدأ اختبار ذاكرة الوصول العشوائي فعليًا من 0300 دولار إلى الجزء العلوي من الذاكرة (RAM).
وأخيرًا، يتم تعيين متجهات الإدخال/الإخراج (المؤشرات) على قيمها الافتراضية. يبدأ اختبار ذاكرة الوصول العشوائي فعليًا من 0300 دولار إلى الجزء العلوي من الذاكرة (RAM). وهذا يعني أنه تمت تهيئة الصفحة 0 والصفحة 1 والصفحة 2. تحتوي الصفحة 0، على وجه الخصوص، على الكثير من مؤشرات نظام التشغيل ROM، بينما تحتوي الصفحة 2 على الكثير من المؤشرات الأساسية. يشار إلى هذه المؤشرات بالمتغيرات. تذكر أن الصفحة 1 هي المكدس. تتم الإشارة إلى المؤشرات على أنها متغيرات لأنها تحتوي على أسماء (تسميات). في هذه المرحلة، يتم مسح ذاكرة الشاشة للشاشة (جهاز العرض). وهذا يعني إرسال رمز بقيمة 20 دولارًا للمساحة (والذي يصادف أنه نفس رمز ASCII 20 دولارًا) إلى مواقع شاشة ذاكرة الوصول العشوائي (RAM) التي تبلغ سعتها 1000. وأخيرًا، يقوم Kernal بتشغيل مترجم BASIC لعرض موجه الأوامر BASIC وهو جاهز في الجزء العلوي من الشاشة (الشاشة).
5.17 المشاكل
يُنصح القارئ بحل جميع المشكلات الموجودة في الفصل قبل الانتقال إلى الفصل التالي.
- اكتب رمز لغة التجميع الذي يجعل كافة أجزاء منفذ CIA #2 A كمخرج ومنفذ CIA #2 B كمدخل.
- اكتب رمز لغة التجميع 6502 الذي ينتظر مفتاح لوحة المفاتيح حتى يتم الضغط عليه.
- اكتب برنامج لغة التجميع 6502 الذي يرسل الحرف 'E' إلى شاشة Commodore-64.
- اكتب برنامج لغة تجميعي 6502 يأخذ حرفًا من لوحة المفاتيح ويرسله إلى شاشة Commodore-64، متجاهلاً رمز المفتاح والتوقيت.
- اكتب برنامج لغة التجميع 6502 الذي يستقبل بايت من القرص المرن Commodore-64.
- اكتب برنامج لغة التجميع 6502 الذي يحفظ الملف على القرص المرن Commodore-64.
- اكتب برنامج لغة التجميع 6502 الذي يقوم بتحميل ملف البرنامج من القرص المرن Commodore-64 وتشغيله.
- اكتب برنامج لغة التجميع 6502 الذي يرسل البايت 'E' (ASCII) إلى المودم المتصل بمنفذ المستخدم المتوافق مع RS-232 الخاص بـ Commodore-64.
- شرح كيفية إجراء العد والتوقيت في جهاز الكمبيوتر Commodore-64.
- اشرح كيف يمكن لوحدة النظام Commodore-64 تحديد 10 مصادر مختلفة لطلبات المقاطعة الفورية بما في ذلك طلبات المقاطعة غير القابلة للإخفاء.
- شرح كيفية تشغيل برنامج الخلفية مع برنامج المقدمة في جهاز الكمبيوتر Commodore-64.
- اشرح بإيجاز كيف يمكن تجميع برامج لغة التجميع في تطبيق واحد للكمبيوتر Commodore-64.
- شرح مختصر لعملية الإقلاع للكمبيوتر Commodore-64.