حاسوب توجيه أبولو

كان **حاسوب توجيه أبولو**  كمبيوتر رقمي تم إنتاجه لبرنامج Apollo والذي تم تثبيته على متن كل وحدة الخدمة Apollo (CM) ووحدة Apollo Lunar (LM). قدم الحاسوب الحسابات والواجهات الإلكترونية للتوجيه والملاحة والتحكم في المركبة الفضائية. كان حاسوب توجيه أبولو  أول كمبيوتر يعتمد على دوائر السيليكون المتكاملة . كان أداء الكمبيوتر مشابهًا للجيل الأول من أجهزة الكمبيوتر المنزلية من أواخر السبعينيات ، مثل Apple II وTRS-80 و Commodore PET .

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

تواصل رواد الفضاء مع الحاسوب AGC باستخدام شاشة رقمية ولوحة مفاتيح تسمى DSKY (بالنسبة إلى "الشاشة ولوحة المفاتيح" ، وتُنطق "DIS-kee"). تم تطوير AGC وواجهة مستخدم DSKY الخاصة به في أوائل الستينيات من القرن الماضي لبرنامج Apollo بواسطة مختبر MIT Instrumentation ، وقد طار لأول مرة في عام 1966.

## التشغيل
طار رواد الفضاء يدويًا خلال  مشروع جيميني باستخدام عصي التحكم ، لكن أجهزة الكمبيوتر AGC  وجهت  معظم مشروع أبولو باستثناء فترة وجيزة أثناء الهبوط على سطح القمر. حملت كل رحلة قمرية اثنين من الكمبيوتر AGC ، واحدة في وحدة القيادة ووحدة أبولو القمرية ، باستثناء أبولو 8 التي لم تكن بحاجة إلى وحدة قمرية لمهمتها في مدار القمر. كان الحاسوب AGC في وحدة القيادة هو مركز نظام التوجيه والملاحة والتحكم (GNC). أدار حاسوب توجيه أبولو في الوحدة القمرية Apollo PGNCS (نظام التوجيه والملاحة والتحكم الأساسي) ، مع نطق الاختصار  *pings* .
يمين|تصغير| واجهة الشاشة ولوحة المفاتيح (DSKY) لجهاز Apollo Guidance Computer مثبتة على لوحة التحكم في وحدة القيادة ، مع مؤشر موقف مدير الطيران (FDAI) أعلاه
يمين|تصغير| قائمة جزئية من الرموز الرقمية للأفعال والأسماء في حاسوب توجيه أبولو  مطبوعة كمرجع سريع على لوحة جانبية.
كان لكل مهمة قمرية جهازي كمبيوتر إضافيين:

* الكمبيوتر الرقمي لمركبة الإطلاق (LVDC) على حلقة أجهزة التعزيز Saturn V.
* نظام توجيه الإنقطاع (AGS ، *ags* الواضح) للوحدة القمرية ، ليتم استخدامه في حالة فشل LM PGNCS. يمكن استخدام  حاسوب AGS للإقلاع من القمر ، والالتقاء بوحدة القيادة ، ولكن ليس للهبوط..

## التصميم
يسار|تصغير|300x300بك| صورة لشريحة بوابة NOR المزدوجة المستخدمة في بناء Block II Apollo Guidance Computer. الوصلات (في اتجاه عقارب الساعة من المركز العلوي) الأرض ، المدخلات (3) ، الإخراج ، الطاقة ، الإخراج ، المدخلات (3).
تصغير|AGC مزدوج بوابة NOR ثلاثية المدخلات
[يسار|تصغير|186x186بك| [دارة متكاملة|دوائر متكاملة من السيليكون Flatpack في كمبيوتر توجيه أبولو ]]
تم تصميم AGC في مختبر MIT للأجهزة تحت إشراف Charles Stark Draper ، مع تصميم الأجهزة تحت إشراف  إلدون سي هول . جاءت الأعمال البنائية ة المبكرة من جيه إتش لانينج جونيور وألبرت هوبكنز وريتشارد باتين ورامون ألونسو  وهيو بلير سميث. تم تصنيع معدات الطيران بواسطة شركة Raytheon ، والتي كان Herb Thaler  أيضًا عضوًا في فريق  البنية.

### أجهزة حساب المنطق
بعد استخدام شرائح الدوائر المتكاملة  في منصة المراقبة بين الكواكب  في عام 1963 ، تم اعتماد تقنية IC لاحقًا للكمبيوتر AGC. كان كمبيوتر رحلة أبولو هو أول كمبيوتر يستخدم رقائق السيليكون .

بينما استخدمت نسخة Block I  عدد  4100 وحدة IC متكاملة   ، تحتوي كل منها على بوابة NOR واحدة ثلاثية المدخلات ، استخدم الإصدار الأخير من Block II (المستخدم في الرحلات المأهولة) حوالي 2800 وحدة متكاملة ، معظمها بوابات NOR مزدوجة ثلاثية المدخلات وأعداد أصغر من الموسعات والاستشعار والمكبرات الإلكترونية. تم تنفيذ الدوائر المتكاملة ، من Fairchild Semiconductor ، باستخدام منطق الترانزستور المقاوم (RTL) في حزمة مسطحة . تم توصيلهم عن طريق لف الأسلاك ، ثم تم دمج الأسلاك في بلاستيك الايبوكسي المصبوب. 

أدى استخدام نوع واحد من IC (NOR3 المزدوج) في جميع أنحاء AGC إلى تجنب المشكلات التي ابتليت بتصميم كمبيوتر IC آخر مبكرًا  ، وهو كمبيوتر التوجيه Minuteman II ، والذي استخدم مزيجًا من منطق الصمام الثنائي والترانزستور والبوابات المنطقية للديود .  بوابات NOR هي بوابات منطقية عالمية يمكن من خلالها إنشاء أي بوابة أخرى ، وإن كان ذلك على حساب استخدام المزيد من البوابات.

### الذاكرة
كان الكمبيوتر يحتوي على 2048 كلمة من ذاكرة النواة المغناطيسية القابلة للمسح و 36864 كلمة من ذاكرة الحبل الأساسية للقراءة فقط . كلاهما كان له وقت دورة 11.72&nbsp;ميكرو ثانية. كان طول كلمة الذاكرة 16 بت: 15 بت من البيانات وبت واحدًا متماثلًا. كان تنسيق كلمة وحدة المعالجة المركزية الداخلية 16 بت 14 بتًا من البيانات ، وبت تجاوز واحد ، وبت تسجيل واحد (تمثيل مكمل واحد ). 

### واجهة DSKY
تصغير|250x250بك| وحدة واجهة مستخدم كمبيوتر Apollo DSKY
يسار|تصغير|250x250بك| مخطط واجهة LM DSKY
كانت واجهة المستخدم الخاصة بـ AGC هي *DSKY* ، وهي تعني *الشاشة ولوحة المفاتيح* وعادة ما تُنطق *"DIS-kee".* يحتوي على مجموعة من أضواء المؤشرات ، وشاشات رقمية ، ولوحة مفاتيح بنمط الآلة الحاسبة . تم إدخال الأوامر عدديًا ، كأرقام مكونة من رقمين: فعل ، وإسم  . وصف *الفعل* نوع الإجراء الذي يتعين القيام به وحدد *الاسم* البيانات التي تأثرت بالإجراء المحدد بواسطة أمر الفعل (التفعيل).

تم عرض كل رقم عبر اللون الأخضر (المحدد كـ 530&nbsp;نانومتر  ) عرض سبعة أجزاء ذات توهج كهربائي عالي الجهد ؛ هذه كانت مدفوعة بالمرحلات الكهرو ميكانيكية ، مما يحد من معدل التحديث. يمكن أيضًا عرض ثلاثة أرقام موقعة من خمسة أرقام في نظامي  ثماني أو عشري ، وعادة ما تستخدم لعرض متجهات مثل ارتفاع  المركبة الفضائية أو تغيير السرعة المطلوب ( صاروخ دلتا- V ). على الرغم من تخزين البيانات داخليًا في هيئة وحدات مترية ، فقد تم عرضها كوحدات مألوفة للولايات المتحدة . كانت هذه الواجهة التي تشبه الآلة الحاسبة هي الأولى من نوعها.

تحتوي وحدة القيادة على اثنين من DSKYs متصلان بـ AGC: أحدهما موجود على لوحة العدادات الرئيسية والثاني يقع في حجرة المعدات السفلية بالقرب من آلة السدس المستخدمة لمحاذاة منصة التوجيه بالقصور الذاتي . تحتوي الوحدة القمرية على DSKY واحد من أجل AGC الخاص بها. تم وضع مؤشر موقف مدير الرحلة (FDAI) ، الذي يتحكم فيه AGC ، فوق DSKY على وحدة تحكم القائد وعلى LM.

### التوقيت
جاء مرجع توقيت  الحاسوب AGC من 2.048&nbsp;MHz (ميغاهرتز) لساعة كريستال . تم تقسيم الساعة على اثنين لإنتاج 1.024 من أربع مراحل&nbsp;للساعة التي يستخدمها AGC لأداء العمليات الداخلية. 1.024 ميغاهرتز تم تقسيم ساعة بالميغاهرتز  أيضًا على اثنين لإنتاج إشارة  512&nbsp; كيلوهرتز kHz  تسمى *التردد الرئيسي* ؛ وتم استخدام هذه الإشارة لمزامنة أنظمة مركبة الفضاء الخارجية أبولو.

كما تم تقسيم التردد الرئيسي من خلال  مقاسات *[[مقسمات التردد|رتبية]]*  ، أولاً بخمسة باستخدام عداد حلقي لإنتاج إشارة  102.4&nbsp; كيلو هرتز. ثم تم تقسيم هذا على مرحلتين إلى 17 مرحلة متتالية تسمى F1 (51.2&nbsp;كيلو هرتز) حتى F17 (0.78125&nbsp;هرتز). مرحلة F10 ( 100 هرتز) إلى AGC لزيادة ساعة الوقت الحقيقي والعدادات اللاإرادية الأخرى باستخدام نظام  Pinc (تمت مناقشته أدناه). وتم استخدام المرحلة F17 لتشغيل AGC بشكل متقطع عندما كان يعمل في وضع *الاستعداد*.

### السجلات المركزية
كان لدى AGC أربعة سجلات 16 بت للاستخدام الحسابي العام ، تسمى *السجلات المركزية* :

* **ج** : المجمع للحساب العام
* **Z** : عداد البرنامج - عنوان التعليمات التالية التي سيتم تنفيذها
* **Q** : المتبقي من تعليمات `DV` وعنوان المرسل بعد تعليمات `TC`
* **LP** : المنتج السفلي بعد تعليمات `MP`

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

### سجلات أخرى
[تصغير| نماذج DSKY و AGC معروضة في [متحف تاريخ الحاسوب|متحف تاريخ الكمبيوتر . تم فتح حاسوب AGC ، مع عرض وحداته المنطقية.]]
تصغير|وحدة منطق النموذج الأولي من Block I للحاسوب
تصغير|الوحدة المنطقية Block II ، مع سجل حزمة مسطحة
كان لدى  حاسوب AGC سجلات إضافية تم استخدامها داخليًا أثناء التشغيل:

* **S** : سجل عنوان ذاكرة 12 بت ، الجزء السفلي من عنوان الذاكرة
* **Bank / Fbank** : سجل مصرفي ذو ذاكرة قراءة فقط 4 بت ، لتحديد 1&nbsp;بنك ROM بالألف كلمة (كيلوورد) عند العنونة في الوضع الثابت القابل للتحويل
* **Ebank** : سجل بنك ذاكرة الوصول العشوائي 3 بت ، لتحديد بنك ذاكرة الوصول العشوائي المكون من 256 كلمة عند العنونة في الوضع القابل للمسح القابل للتحويل
* **Sbank** (سوبر بانك): تمديد 1 بت إلى Fbank ، مطلوب لأن آخر 4&nbsp;لم يكن بالإمكان الوصول إلى كيلوغرامات من ذاكرة القراءة فقط التي تبلغ 36 كيلو كلمة (أي 36 ألف كلمة)  باستخدام Fbank وحده
* **SQ** : سجل تسلسل 4 بت ؛ التعليمات الحالية
* **G** : سجل ذاكرة تخزين مؤقت 16 بت ، للاحتفاظ بكلمات البيانات التي تنتقل من الذاكرة وإليها
* **X** : إدخال 'x' إلى *adder* (تم استخدام adder لإجراء العمليات الحسابية التكميلية ) أو الزيادة في عداد البرنامج ( **Z** Register)
* **Y** : الإدخال الآخر ("y") إلى adder
* **U** : ليس سجلاً حقًا ، ولكن ناتج adder (المجموع التكميلي للفرد لمحتويات التسجيلات **X** و **Y** )
* **B** : سجل المخزن المؤقت للأغراض العامة ، يُستخدم أيضًا في الجلب المسبق للتعليمات التالية. في بداية التعليمات التالية ، تم نسخ البتات العلوية من **B** (التي تحتوي على كود المرجع التالي) إلى **SQ** ، وتم نسخ البتات السفلية (العنوان) إلى **S.**
* **C** : ليس سجلاً منفصلاً ، ولكنه مكمل للسجل **B**
* **IN** : أربعة سجلات إدخال 16 بت
* **OUT** : خمسة سجلات إخراج 16 بت

### مجموعة التعليمات
استخدم تنسيق التعليمات 3 بتات لرمز التشغيل و 12 بتًا للعنوان. يحتوي Block I على 11 تعليمات: `TC` و `CCS` و `INDEX` و `XCH` و `CS` و `TS` و `AD` و `MASK` (أساسي) و `SU` و `MP` و `DV` (إضافي). أول ثمانية ، تسمى *التعليمات الأساسية* ، تم الوصول إليها مباشرة من  المرجع 3 بت. الشفرة. وتم الإشارة إلى الثلاثة الأخيرة على أنها *إرشادات extracode* لأنه تم الوصول إليها عن طريق تنفيذ نوع خاص من تعليمات `TC`   مباشرة .

تتكون تعليمات Block I AGC مما يلي:

; `TC` (التحكم في النقل)
: فرع غير مشروط على العنوان المحدد بالتعليمات. تم تخزين عنوان المرسل تلقائيًا في سجل Q ، لذلك يمكن استخدام تعليمات `TC` لإجراء مكالمات روتين فرعي.
; `CCS` (العد والمقارنة والتخطي)
: تعليمات فرع شرطي معقد. تم تحميل السجل A بالبيانات المسترجعة من العنوان المحدد بواسطة التعليمات. (نظرًا لأن AGC يستخدم تدوينًا مكملًا للآحاد ، فهناك تمثيلان للصفر. عندما يتم ضبط جميع البتات على الصفر ، يسمى هذا *زائد صفر* . إذا تم ضبط كل البتات على واحد ، فإن هذا يسمى *ناقص صفر* . ) تم بعد ذلك حساب *القيمة المطلقة المتناقصة* (DABS) للبيانات وتخزينها في السجل A. إذا كان الرقم أكبر من الصفر ، فإن DABS يقلل القيمة بمقدار 1 ؛ إذا كان الرقم سالبًا ، يتم استكماله قبل تطبيق الإنقاص - هذه هي القيمة المطلقة. ناقص يعني " *تناقص* ولكن ليس تحت الصفر". لذلك ، عندما يؤدي AGC وظيفة DABS ، فإن الأرقام الموجبة ستتجه نحو زائد الصفر ، وكذلك الأرقام السالبة ولكنها تكشف أولاً عن سلبيتها من خلال التخطي رباعي الاتجاهات أدناه. الخطوة الأخيرة في `CCS` هي تخطي رباعي ، اعتمادًا على البيانات الموجودة في السجل A قبل DABS. إذا كان السجل A أكبر من 0 ، فإن `CCS` يتخطى التعليمات الأولى مباشرة بعد `CCS` . إذا احتوى السجل A على صفر ، فإن `CCS` يتخطى التعليمات الثانية بعد `CCS` . يؤدي أقل من صفر إلى التخطي إلى التعليمات الثالثة بعد `CCS` ، وينتقل سالب صفر إلى التعليمة الرابعة بعد `CCS` . كان الغرض الأساسي من العد هو السماح لحلقة عادية ، يتحكم فيها عداد موجب ، بأن تنتهي في `CCS` و `TC` إلى بداية الحلقة ، وهو ما يعادل `BCT` الخاص بـ IBM 360 . اعتبرت دالة القيمة المطلقة مهمة بدرجة كافية ليتم تضمينها في هذه التعليمات ؛ عند استخدامه لهذا الغرض فقط ، كان التسلسل بعد `CCS` هو `TC` * + 2 ، `TC` * + 2 ، `AD` ONE. كان التأثير الجانبي الغريب هو إنشاء واستخدام *ثقوب <code>CCS</code>* عندما كان من المعروف أن القيمة التي يتم اختبارها لم تكن إيجابية أبدًا ، والتي حدثت في كثير من الأحيان أكثر مما قد يفترضه المرء. ترك هذا كلمتين كاملتين غير مشغولتين ، وكانت لجنة خاصة مسؤولة عن تعيين ثوابت البيانات لهذه الثغرات.
; `INDEX`
: يضيف البيانات المسترجعة على العنوان المحدد في التعليمات إلى التعليمات التالية. يمكن استخدام `INDEX` لإضافة أو طرح قيمة فهرس إلى العنوان الأساسي المحدد بواسطة معامل التعليمات التي تلي `INDEX` . تُستخدم هذه الطريقة لتنفيذ عمليات البحث عن المصفوفات والجداول ؛ نظرًا لأن الإضافة تم إجراؤها على كلتا الكلمتين بالكامل ، فقد تم استخدامها أيضًا لتعديل المرجع. التعليمات البرمجية في التعليمات التالية (extracode) ، وفي حالات نادرة تعمل كلتا الوظيفتين في وقت واحد.
; `RESUME`
: معناها ( تابع أو استمر) مثيل خاص لـ `INDEX` ( `INDEX` 25). هذه هي التعليمات المستخدمة للعودة من المقاطعات. يتسبب في استئناف التنفيذ في الموقع المنقطع.
; `XCH` (صرف)
: تبادل محتويات الذاكرة مع محتويات السجل A. إذا كان عنوان الذاكرة المحدد موجودًا في ذاكرة ثابتة ROM (للقراءة فقط) ، فلن تتأثر محتويات الذاكرة ، وتقوم هذه التعليمات ببساطة بتحميل السجل A. إذا كان في ذاكرة قابلة للمسح RAM (ذاكرة الوصول العشوائي) ، يتم تحقيق "تصحيح" تجاوز السعة من خلال تخزين أقصى اليسار من 16 بتات في A باعتبارها بتة الإشارة في الذاكرة ، لكن لا يوجد سلوك استثنائي مثل سلوك `TS` .
; `CS` (مسح وطرح)
: تحميل السجل A مع تكملة المتمم أحادي one's complement للبيانات المشار إليها بواسطة عنوان الذاكرة المحدد.
; `TS` (نقل إلى التخزين)
: قم بتخزين السجل A على عنوان الذاكرة المحدد. يكتشف `TS` أيضًا ، ويصحح ، الفائض بطريقة لنشر حمل للجمع / الطرح متعدد الدقة. إذا لم يكن للنتيجة تجاوز (أقصى اليسار 2 بت من A متماثل) ، فلن يحدث شيء مميز ؛ إذا كان هناك تجاوز (تختلف هاتان البتتان) ، فإن الجزء الموجود في أقصى اليسار يذهب إلى الذاكرة باعتباره بت الإشارة ، ويتم تغيير السجل A إلى +1 أو 1 وفقًا لذلك ، ويتخطى التحكم إلى التعليمات الثانية التي تلي `TS` . عندما يكون الفائض حدثًا ممكنًا ولكنه غير طبيعي ، فإن `TS` يتبعه `TC` إلى منطق no-overflow ؛ عندما يكون الاحتمال الطبيعي (كما هو الحال في الجمع / الطرح متعدد الدقة) ، يتبع `TS` بـ `CAF` ZERO ( `CAF` = `XCH` إلى الذاكرة الثابتة) لإكمال تشكيل الحمل (+1 ، 0 ، أو 1) في الكلمة التالية عالية الدقة. تم الاحتفاظ بالزوايا بدقة واحدة ، والمسافات والسرعات بدقة مزدوجة ، والوقت المنقضي بدقة ثلاثية.
; `AD` (إضافة)
: أضف محتويات الذاكرة لتسجيل A وقم بتخزين النتيجة في A. قد تختلف البتتان الموجودتان في أقصى اليسار من A (حالة الفائض) قبل `AD` و / أو بعده. حقيقة أن الفائض هو حالة وليست حدثًا يغفر نطاقات محدودة من الفائض عند إضافة أكثر من رقمين ، طالما لم يتجاوز أي من المجاميع المتوسطة ضعف سعة الكلمة.
; `MASK`
: قم بإجراء القليل (منطقي) *والذاكرة* مع السجل A وقم بتخزين النتيجة في السجل A.
; `MP` (مضاعفة)
: قم بضرب محتويات السجل A بالبيانات الموجودة على عنوان الذاكرة المشار إليه وقم بتخزين المنتج عالي الجودة في السجل A والمنتج ذي الترتيب المنخفض في السجل LP. توافق أجزاء المنتج في التوقيع.
; `DV` (قسمة)
: قسّم محتويات السجل أ على البيانات الموجودة على عنوان الذاكرة المشار إليه. قم بتخزين حاصل القسمة في السجل A والقيمة المطلقة للباقي في السجل Q. على عكس الآلات الحديثة ، تم التعامل مع الأرقام ذات النقاط الثابتة ككسور (فاصلة عشرية افتراضية على يمين بت الإشارة فقط) ، لذلك يمكنك إنتاج القمامة إذا كان المقسوم عليه لم يكن أكبر من العائد. لم تكن هناك حماية ضد هذا الوضع. في Block II AGC ، بدأ توزيع مزدوج الدقة في A و L (Block II LP) ، وتم تسليم الباقي الموقّع بشكل صحيح في L. مما أدى إلى تبسيط الإجراء الفرعي لتقسيم الدقة المزدوجة إلى حد كبير.
; `SU` (طرح)
: اطرح (تكملة الشخص) البيانات الموجودة في عنوان الذاكرة المشار إليه من محتويات السجل A وقم بتخزين النتيجة في A.

تم تنفيذ التعليمات في مجموعات من 12 خطوة ، تسمى *نبضات التوقيت* . وتم تسمية نبضات التوقيت من TP1 إلى TP12. تم استدعاء كل مجموعة من 12 نبضة توقيت التعليمات *اللاحقة* . تعليمات بسيطة ، مثل TC ، يتم تنفيذها في تتابع واحد من 12 نبضة. تتطلب التعليمات الأكثر تعقيدًا العديد من التكرارات اللاحقة. استخدمت تعليمات المضاعفة ( `MP` ) 8 تكرارات: أولية تسمى `MP0` ، متبوعة بـ `MP1` تالية والتي تكررت 6 مرات ، ثم تنتهي بـ `MP3` . تم تقليل هذا إلى 3 تتابعات لاحقة في Block II.

يمكن أن تؤدي كل نبضة توقيت في تالية لاحقة إلى ما يصل إلى 5 *نبضات تحكم* . كانت نبضات التحكم هي الإشارات التي أدت العمل الفعلي للتعليمات ، مثل قراءة محتويات السجل على الحافلة ، أو كتابة البيانات من الحافلة في السجل.

### الذاكرة
تصغير|250x250بك| ذاكرة حبل أساسية AGC (ROM)
تم تنظيم ذاكرة Block I AGC في بنوك سعة 1100 كلمة. أدنى بنك (بنك 0) كان ذاكرة قابلة للمسح (RAM). جميع البنوك فوق البنك 0 كانت ذاكرة ثابتة (ROM). تحتوي كل تعليمات الحاسوب  AGC على حقل عنوان 12 بت. تناولت البتات السفلية (1-10) الذاكرة داخل كل بنك. حدد البتتان 11 و 12 البنك: 00 حدد بنك الذاكرة القابل للمسح ؛ 01 اختار أدنى بنك (بنك 1) من الذاكرة الثابتة ؛ 10 تم اختيار التالي (البنك 2) ؛ وقام 11 باختيار السجل *المصرفي* الذي يمكن استخدامه لتحديد أي بنك أعلاه 2. كان يطلق على البنوك 1 و 2 اسم الذاكرة *الثابتة* ، لأنها كانت متوفرة دائمًا ، بغض النظر عن محتويات سجل البنك. كانت البنوك 3 وما فوق تسمى *ثابتة للتحويل* لأن البنك المحدد تم تحديده من خلال السجل المصرفي.

كان لدى Block I AGC في البداية 12 ألف كلمة  في الذاكرة الثابتة ، ولكن تم زيادتها لاحقًا إلى 24 ألف. يحتوي Block II على 36 ألف كلمة  من الذاكرة الثابتة و 2000 كلمة   في  الذاكرة القابلة للمسح.

قام AGC بنقل البيانات من وإلى الذاكرة من خلال سجل G في عملية تسمى *دورة الذاكرة* . أخذت دورة الذاكرة 12 نبضة توقيت (11.72&nbsp;μs). بدأت الدورة عند توقيت النبض 1 (TP1) عندما قام AGC بتحميل عنوان الذاكرة ليتم جلبه في سجل S. استردت أجهزة الذاكرة كلمة البيانات من الذاكرة على العنوان المحدد بواسطة سجل S. تم إيداع الكلمات من الذاكرة القابلة للمسح في السجل G عن طريق توقيت النبض 6 (TP6) ؛ كانت الكلمات من الذاكرة الثابتة متاحة عن طريق توقيت النبض 7. كانت كلمة الذاكرة المسترجعة متاحة بعد ذلك في سجل G للوصول إلى AGC أثناء نبضات التوقيت من 7 إلى 10. بعد توقيت النبض 10 ، تمت إعادة كتابة البيانات الموجودة في سجل G إلى الذاكرة.

حدثت دورة ذاكرة AGC بشكل مستمر أثناء عملية AGC. كان على التعليمات التي تحتاج إلى بيانات الذاكرة الوصول إليها أثناء نبضات التوقيت 7-10. إذا قام AGC بتغيير كلمة الذاكرة في سجل G ، تتم إعادة كتابة الكلمة التي تم تغييرها إلى الذاكرة بعد توقيت النبض 10. بهذه الطريقة ، يتم تدوير كلمات البيانات بشكل مستمر من الذاكرة إلى السجل G ثم العودة مرة أخرى إلى الذاكرة.

تحتوي الأجزاء الخمسة عشر السفلية من كل كلمة ذاكرة على تعليمات أو بيانات AGC ، مع حماية كل كلمة بواسطة بتة تكافؤ فردية 16. تم ضبط هذا البت على 1 أو 0 بواسطة دارة مولد التكافؤ ، لذا فإن عدد 1s في كل كلمة ذاكرة سينتج دائمًا رقمًا فرديًا. قامت دائرة فحص التكافؤ باختبار بت التكافؤ خلال كل دورة ذاكرة ؛ إذا لم يتطابق البت مع القيمة المتوقعة ، يُفترض أن كلمة الذاكرة تالفة وأن ضوء لوحة *إنذار التكافؤ* مضاء.

### التقاطعات والعدادات اللاإرادية
كان لدى الحاسوب AGC خمس مقاطعات متجهة :

* تم تشغيل *Dsrupt* على فترات منتظمة لتحديث عرض المستخدم (DSKY).
* تم إنشاء *Erupt* من خلال العديد من أعطال الأجهزة أو الإنذارات.
* أشار *Keyrupt* إلى الضغط على مفتاح من لوحة مفاتيح المستخدم.
* تم إنشاء *T3Rrupt* على فترات منتظمة من جهاز توقيت لتحديث ساعة AGC في الوقت الحقيقي .
* تم إنشاء *Uprupt* في كل مرة تم تحميل كلمة 16 بت من بيانات الارتباط الصاعد في AGC.

استجاب الحاسوب AGC لكل مقاطعة من خلال تعليق البرنامج الساري مؤقتًا ، وتنفيذ روتين خدمة مقاطعة قصيرة  ثم استئناف البرنامج الذي حدث فيه  قطع.

كان لدى AGC أيضًا 20 عدادًا لا إراديًا . كانت هذه مواقع الذاكرة التي تعمل كعدادات لأعلى / لأسفل ، أو سجلات التحول. ستزداد العدادات أو تنقص أو تتحول استجابةً للمدخلات الداخلية. تم التعامل مع الزيادة ( *Pinc* ) ، أو التناقص ( *Minc* ) ، أو التحول ( *Shinc* ) من خلال أحد التعليمات الدقيقة التي تم إدخالها بين أي تعليمتين عاديتين.

يمكن تشغيل المقاطعات عندما تفيض العدادات. وتم إنتاج المقاطعات T3rupt و Dsrupt عندما كانت عداداتهم مدفوعة بـ 100&nbsp;هرتز لكل ساعة جهاز ، فاضت بعد تنفيذ العديد من عمليات Pinc اللاحقة. تم تشغيل مقاطعة Uprupt بعد أن تحول عدادها  الذي ينفذ Shinc اللاحقة  16&nbsp;بت من بيانات الإرسال في AGC.

### وضعيه الإستعداد
كان لدى AGC وضع توفير الطاقة يتم التحكم فيه بواسطة مفتاح *الاستعداد المسموح به* . قام هذا الوضع بإيقاف تشغيل طاقة AGC ، باستثناء 2.048&nbsp; MHz ومدرج التقسيم scaler . أعادت إشارة F17 من scaler  تغيير طاقة AGC و AGC مرة أخرى في فواصل زمنية مقدارها 1.28 ثانية. في هذا الوضع ، يقوم AGC بأداء الوظائف الأساسية ، وفحص مفتاح الاستعداد المسموح به ، وإذا كان لا يزال ممكّنًا ، فيقوم بإيقاف تشغيل الطاقة وإعادته إلى وضع السكون حتى إشارة F17 التالية.

في وضع الاستعداد  يظل  AGC ساكنا معظم الوقت ؛ لذلك لم يكن نشطا لتنفيذ تعليمات Pinc اللازمة لتحديث ساعة الوقت الحقيقي لـ AGC في الساعة على فترات  10 مللي ثانية. للتعويض ، كانت إحدى الوظائف التي يؤديها AGC في كل مرة ينشط فيها في وضع الاستعداد هي تحديث ساعة الوقت الحقيقي بمقدار 1.28 ثانية.

تم تصميم وضع الاستعداد لتقليل الطاقة بمقدار 5 إلى 10&nbsp;W (من 70&nbsp;W) أثناء رحلة منتصف المسار عندما لا تكون هناك حاجة إلى الحاسوب AGC. ومع ذلك ، فمن الناحية العملية ، تم ترك AGC قيد التشغيل خلال جميع مراحل المهمة ولم يتم استخدام هذه الميزة مطلقًا.

### حافلات البيانات
كان لدى AGC ناقل قراءة 16 بت وناقل كتابة 16 بت. البيانات من السجلات المركزية (A ، Q ، Z ، أو LP) ، أو غيرها من السجلات الداخلية يمكن وضعها في بوابة القراءة مع إشارة تحكم. ناقل القراءة متصل بناقل الكتابة من خلال مخزن مؤقت غير مقلوب ، لذا فإن أي بيانات تظهر على ناقل القراءة تظهر أيضًا في ناقل الكتابة. يمكن لإشارات التحكم الأخرى نسخ بيانات ناقل الكتابة إلى السجلات.

يحتوي Block II AGC أيضًا على تعليمات `EDRUPT` (الاسم هو تقلص *Ed's Interrupt* ، بعد Ed Smally ، المبرمج الذي طلب ذلك). لا تؤدي هذه التعليمات إلى حدوث مقاطعة ، ولكنها تؤدي إجراءين شائعين لمقاطعة المعالجة. الإجراء الأول ، يمنع المزيد من المقاطعات (ويتطلب تعليمات `RESUME` لتمكينها مرة أخرى). في الإجراء الثاني ، يتم تحميل سجل `ZRUPT` بالقيمة الحالية لعداد البرنامج (Z). تم استخدامه مرة واحدة فقط في برنامج Apollo ، لإعداد تسلسل إنهاء دورة DAP في الطيار الآلي الرقمي للوحدة القمرية . يُعتقد أنه مسؤول عن مشاكل محاكاة برنامج LEM AGC Luminary .

## 1201 و 1202  برنامج تحذير
[تصغير| DSKY و [بز ألدرن|Buzz Aldrin على مركبة Apollo 11 Lunar Module Eagle في طريقهما إلى القمر]]
أصدرت PGNCS تحذيرات غير متوقعة أثناء هبوط أبولو 11 على سطح القمر ، حيث أظهر AGC *إنذار 1202* ("تجاوز تنفيذي - لا توجد مجموعات أساسية") ،  ثم *إنذار 1201* ("تجاوز تنفيذي - لا توجد مناطق هبوط VAC"). كانت استجابة AGC لأي من الإنذارين هي إعادة تشغيل بسيطة. كان السبب هو التدفق السريع والمستمر لدورات استقبال زائفة من رادار الالتقاء (تتبع وحدة القيادة الموجودة في المدار) ، وقد تركت عمدًا في وضع الاستعداد أثناء الهبوط في حالة الحاجة إليها لوقف عملية الهبوط.

خلال هذا الجزء من النهج ، يتم تحميل المعالج بنسبة 85٪ تقريبًا. تسببت  الدورة الإضافية البالغة 6400 من دورات التقييم في أضاعات   في ثانية ما يعادل 13٪ من الحمل ، مما يترك وقتًا كافيًا لتشغيل جميع المهام المجدولة حتى الاكتمال. بعد خمس دقائق من الهبوط ، أعطى Buzz Aldrin للكمبيوتر الأمر *1668* ، والذي أمره بحساب  الفرق DELTAH بشكل دوري (الفرق بين الارتفاع الذي يشعر به الرادار والارتفاع المحسوب).  أضاف الأمر *1668* 10٪ أخرى إلى عبء عمل المعالج ، مما تسبب في تجاوز تنفيذي وانطلاق الإنذار *1202* . وبعد حصوله على "GO" من هيوستن لمتابعة الهبوط ، أدخل ألدرين الأمر  *1668* مرة أخرى فحدث إنذار آخر *1202* . وعند الإبلاغ عن الإنذار الثاني ، أضاف ألدرين التعليق "يبدو أنه يظهر عندما يكون لدينا ارتفاعا في أداء الحاسوب" بسبب الأمر الإضافي *1668* الذي أضاف 10% من عبء الحاسوب. تم تصميم برنامج AGC مع جدولة الأولوية ، واستعادته تلقائيًا ، وحذف المهام ذات الأولوية المنخفضة بما في ذلك مهمة العرض *1668*  لإكمال مهام التوجيه والتحكم الحرجة. أصدر مراقب التوجيه ستيف باليس من هيوستن  وفريق الدعم الذي يضم "جاك جارمان" عدة مكالمات "GO" وكان الهبوط ناجحًا. لدوره ، حصل "باليس "على وسام الحرية الرئاسي الأمريكي نيابة عن فريق مركز التحكم بأكمله ورواد فضاء أبولو الثلاثة.

لم تكن المشكلة خطأ برمجي في AGC ، ولم تكن خطأ تجريبيًا. لقد كان خطأ في تصميم الأجهزة الطرفية كان معروفًا بالفعل ووثق من قبل مهندسي Apollo 5. ومع ذلك ، نظرًا لأن المشكلة حدثت مرة واحدة فقط أثناء الاختبار ، فقد خلصوا إلى أنه كان من الآمن الطيران باستخدام الأجهزة الموجودة التي اختبروها بالفعل ، بدلاً من الطيران باستخدام نظام رادار أحدث ولكن لم يتم اختباره إلى حد كبير. في الأجهزة الفعلية ، تم ترميز موضع رادار الالتقاء مع التزامن المتحمس بواسطة مصدر مختلف يبلغ 800&nbsp;هرتز AC من الذي يستخدمه الكمبيوتر كمرجع توقيت. الاثنان بتردد 800&nbsp; هرتز كانت مصادر مغلقة التردد ولكن لم يتم قفل الطور ، وجعلت اختلافات الطور العشوائية الصغيرة تبدو كما لو أن الهوائي "يتردد" بسرعة في موضعه ، على الرغم من أنه كان ثابتًا تمامًا. ولـّدت هذه الحركات الوهمية سلسلة سريعة من سرقات الدورة.

أنقذ البرنامج الذي ألفه Halcombe Laning وتصميم الكمبيوتر مهمة هبوط أبولو 11. لولا تصميم "لانينج" ، لكان الهبوط قد أُجهض لعدم وجود جهاز كمبيوتر توجيه مستقر.

## تطبيقات خارج أبولو
تصغير|يطير بواسطة سلك اختبار الطائرات. يمكن رؤية AGC DSKY في حجرة إلكترونيات الطيران
شكg الحاسوب  AGC أساس نظام تجريبي للطيران بالسلك (FBW) ؛ ثبت في الطائرة F-8 Crusader لإثبات التطبيق العملي للطيران بالسلك المدفوع بالكمبيوتر. وتم استبدالحاسوب AGC المستخدم في المرحلة الأولى من البرنامج بآلة أخرى في المرحلة الثانية ، وأدى البحث الذي تم إجراؤه على البرنامج إلى تطوير أنظمة الطيران بالسلك لمكوك الفضاء . كما أدى AGC - وإن كان بشكل غير مباشر - إلى تطوير أنظمة fly-by-wire لجيل المقاتلين التي تم تطويرها في ذلك الوقت.

تم استخدام الحاسوب AGC أيضًا لمركبة الإنقاذ الغاطسة العميقة التابعة للبحرية الأمريكية .

## إصدار كود المصدر
في عام 2003 ، بدأ Ron Burkey جهدًا لاستعادة الكود المصدري الذي يعمل على تشغيل حاسوب AGC وبناء محاكيا قادرا على تشغيله ، وهو VirtualAGC. تم تحميل جزء من الكمية الكبيرة من التعليمات البرمجية المصدر التي تم إنقاذها نتيجة لهذا الجهد بواسطة متدرب سابق في وكالة ناسا إلى GitHub في 7 يوليو 2016 ، مما جذب انتباه وسائل الإعلام بشكل كبير. تم توفير كود مصدر Apollo 11 Guidance Computer الأصلي في الأصل في عام 2003  من خلال مشروع Virtual AGC ومتحف MIT . تم نسخها ورقمتها من قوائم التعليمات البرمجية الأصلية ذات النسخ المطبوعة التي تم إجراؤها في الستينيات. في منتصف عام 2016 ، قام المتدرب السابق في وكالة ناسا ، كريس جاري ، بتحميل كود مصدر AGC على GitHub .

## انظر أيضا

* Apollo PGNCS - نظام التوجيه والملاحة الأساسي لأبولو.
* أجهزة كمبيوتر AP-101 (مشتقة من IBM S / 360) المستخدمة في مكوك الفضاء.
*  كمبيوتر توجيه جيمني.
* تاريخ أجهزة الكمبيوتر.
*سرقة دورة.
*حاسبة الطيران E6-B.

## ملحوظات

## المراجع

### مصادر

* 

## روابط خارجية

; توثيق على AGC وتطوره

* ''مذكرة AGC4 رقم 9 ، تعليمات Block II'' - المذكرة الشائنة التي كانت بمثابة توثيق رسمي فعلي لمجموعة التعليمات
* ''أجهزة الكمبيوتر في رحلات الفضاء: تجربة ناسا'' - بقلم جيمس تومايكو (الفصل 2 ، الجزء 5 ، *كمبيوتر توجيه أبولو: الأجهزة* )
* ''تأخذ أجهزة الكمبيوتر الرحلة'' - بقلم جيمس تومايكو
* ''كمبيوتر توجيه أبولو - عرض المستخدمين'' ( PDF ) - بقلم ديفيد سكوت ، رائد فضاء بعثة أبولو
* ''معالجة مدخلات تجميع وحدة التحكم في موقف الوحدة القمرية'' ( PDF ) - بقلم خوسيه بورتيلو لوغو ، تاريخ التكنولوجيا
* مشروع MIT AGC - مع أرشيف شامل للوثائق
** قائمة رمز مصدر البرنامج النجمي ، لجهاز الكمبيوتر التوجيهي للوحدة القمرية. (ملحوظة 622 ميغا بايت)
** قائمة التعليمات البرمجية المصدر لبرنامج Colossus ، لجهاز كمبيوتر توجيه وحدة الأوامر. (ملحوظة 83 ميغا بايت)
* المتحف الوطني للطيران والفضاء AGC Block I و Dsky
* شروح رحلة إلدون هول إلى القمر - يناقش مبرمج نظام AGC بعض التفاصيل الغامضة لتطوير AGC ، بما في ذلك تفاصيل Ed's Interrupt

; توثيق تصميم أجهزة AGC ، وخاصة استخدام الدوائر المتكاملة الجديدة بدلاً من الترانزستورات

* حزم الدوائر المتكاملة AGC
* الدوائر المتكاملة في كمبيوتر التوجيه أبولو
* Delco Electronics ، Apollo 15 - دليل لبرامج CSM و LEM AGC المستخدمة في مهمة Apollo 15 ، بما في ذلك إجراءات واجهة المستخدم التفصيلية ، وشرح العديد من الخوارزميات الأساسية ومعلومات الأجهزة المحدودة. لاحظ أن هذا المستند يحتوي على أكثر من 500 صفحة ويزيد حجمه عن 150 ميغا بايت.
* كود المصدر لكود وحدة الأوامر (Comanche054) ورمز الوحدة القمرية (Luminary099) كنص.
* GitHub Complete Source Code كود مصدر Apollo 11 Guidance Computer (AGC) للأوامر والوحدات القمرية.

تصنيف:انحلالات سنة 1975
تصنيف:معهد ماساتشوستس للتقانة
تصنيف:برمجيات مكتوبة بلغة التجميع
تصنيف:استحداثات متعلقة بالحواسيب في 1966
تصنيف:أجهزة برنامج أبولو