Loading AI tools
מחשב מוויקיפדיה, האנציקלופדיה החופשית
מחשב ההנחיה של החללית אפולו (באנגלית: Apollo Guidance Computer, בראשי תיבות:AGC) הוא מחשב דיגיטלי שיוצר עבור תוכנית אפולו והותקן בכל תא פיקוד (CM) ובכל רכב נחיתה ירחי (LM). ה-AGC סיפק מחשוב וממשקים אלקטרוניים עבור הנחיה, ניווט ובקרה של חלליות אלו.[1]
מחשב ההנחיה של החללית אפולו (משמאל) וה־DSKY | |
פיתוח | MIT אינסטרומנטיישן לברטורי (מעבדת צ'ארלס סטארק דרייפר) |
---|---|
יצרן | ריית'יאון |
הוצג לראשונה | אוגוסט 1966 |
יציאה משימוש | יולי 1975 |
סוג | מחשב אוויוניקה |
מעבד | שבבי סיליקון משולבים (מבוססי RTL) |
תדר שעון | 2.048 מגה־הרץ |
זיכרון |
RAM: 2,048 מילים של זיכרון ליבה מגנטית ROM: 36,864 מילים של זיכרון ליבה שזור |
כניסות ויציאות | DSKY, IMU, בקר יד, מכ"ם נחיתה, מכ"ם מפגש, מקלט טלמטריה, פיקוד המנוע, מערכת בקרת הגישה |
הספק | 55 וואט |
שפת תכנות | שפת האסמבלי של ה־AGC |
מסה | 32 ק"ג |
ממדים | 61 ס"מ × 32 ס"מ × 17 ס"מ |
אורך המילה של ה-AGC הוא 16 סיביות – 15 סיביות נתונים וסיבית זוגיות אחת. רוב התוכנה ב-AGC מאוחסנת בזיכרון מיוחד לקריאה בלבד המכונה זיכרון ליבה שזור (Core rope memory), שנוצר על ידי אריגה של חוטים דרך ליבות מגנטיות וסביבן. ל־AGC יש גם כמות קטנה של זיכרון ליבה מגנטית לקריאה וכתיבה.
אסטרונאוטים תקשרו עם ה-AGC באמצעות צג ומקלדת בשם DSKY. את ה-AGC ואת ממשק המשתמש שלו, ה־DSKY, פיתחה MIT אינסטרומנטיישן לברטורי (אנ') בתחילת שנות ה-60 עבור תוכנית אפולו. הם הוטסו לראשונה בשנת 1966.[2] ה-AGC היה המחשב הראשון המבוסס על מעגלים משולבים מסיליקון. ביצועי המחשב היו דומים לביצועי הדור הראשון של המחשבים הביתיים מסוף שנות ה-70, כמו אפל II, TRS-80 וקומודור PET.[3]
את משימות תוכנית ג'מיני, הטיסו אסטרונאוטים ידנית באמצעות מוטות בקרה; לעומת זאת, את רוב תוכנית אפולו, למעט זמן קצר במהלך הנחיתות על הירח, הטיסו מחשבים. בכל טיסה אל הירח היו שני AGC, אחד בתא הפיקוד ואחד ברכב הנחיתה הירחי, למעט משימת אפולו 8 שלא כללה נחיתה על הירח. ה-AGC היה מרכז מערכת ההנחיה, הניווט והבקרה (GNC) של תא הפיקוד. ברכב הנחיתה הירחי, הפעיל ה-AGC את ה־PGNCS (מערכת הנחיה, ניווט ובקרה ראשית, קרי: "פינגס").
בכל משימה אל הירח היו שני מחשבים נוספים, מלבד ה־AGC:
ה-AGC תוכנן במעבדת צ'ארלס סטארק דרייפר על ידי צ'ארלס סטארק דרייפר. את תכנון החומרה הוביל אלדון סי הול (Eldon C. Hall).[4]
את ארכיטקטורת המחשב תכננו בהתחלה ג'יי האלקום לנינג (J. Halcombe Laning), אלברט הופקינס (Albert Hopkins), ריצ'רד באטין (Richard Battin), רמון אלונסו (Ramon Alonso),[5][6] ויו בלייר-סמית' (Hugh Blair-Smith).[7] את חומרת הטיסה ייצרו ריית'יאון. הרב תלר[8] היה גם הוא בצוות האדריכלים.
בעקבות השימוש בשבבי מעגלים משולבים בפלטפורמת הניטור הבין-פלנטרית (חלק מתוכנית אקספלורר) בשנת 1963, אומצה טכנולוגיית זו מאוחר יותר עבור ה-AGC.[9] מחשב הטיסה של החללית אפולו היה המחשב הראשון שהשתמש בשבבי מעגלים משולבים העשויים סיליקון.[10]
בגרסת בלוק I היו 4,100 מעגלים משולבים, שכל אחד מהם הכיל שער NOR יחיד בעל שלוש כניסות. בגרסה המאוחרת יותר, בלוק II (שבה השתמשו בטיסות המאוישות), היו כ-2,800 מעגלים משולבים, בעיקר שערי NOR כפולים עם שלוש כניסות בכל אחד ומספר קטן יותר של מַרחֵבים (expanders) ומגברי חישה.[11] המעגלים המשולבים, מבית פיירצ'יילד סמיקונדקטור (Fairchild Semiconductor), יושמו בלוגיקת נגד-טרנזיסטור (RTL) במארז שטוח (אנ'). הם חוברו באמצעות עיטוף חוטים. לאחר מכן, קובע החיווט באמצעות פלסטיק אפוקסי יצוק.[11] השימוש בסוג יחיד של מעגלים משולבים (שער NOR כפול בעל 3 כניסות) בכל ה-AGC, מנע בעיות בתכנון שנוצרו במחשבים מוקדמים אחרים, כמו מחשב ההנחיה של הטיל הבליסטי מיניטמן II (D-37C), ששילב לוגיקת דיודה-טרנזיסטור (DTL) ושערי לוגיקת דיודות (Diode logic).[דרוש מקור] בניית כל המחשב מסוג מעגל משולב יחיד התאפשר משום ששערי NOR הם שערים לוגיים אוניברסליים שמהם ניתן ליצור כל שער אחר (מערכת פעולות שלמה), אם כי במחיר של שימוש בשערים נוספים.[12]
למחשב היה זיכרון ליבה מגנטי מחיק בגודל של 2,048 מילים וזיכרון ליבה שזור (Core rope memory) לקריאה בלבד בגודל של 36,864 מילים.[11] לשניהם היו זמני מחזור של 11.72 מיקרו שניות.[11] אורך כל מילה בזיכרון היה 16 סיביות: 15 סיביות נתונים וסיבית זוגיות אחת. חלוקת הסיביות במילים בתוך המעבד הייתה 14 סיביות נתונים, סיבית גלישה אחת וסיבית סימן אחת (בייצוג המשלים ל-1).[11]
ל-AGC היה ממשק משתמש בשם DSKY (ראשי תיבות של display and keyboard – צג ומקלדת, מבוטא "דיסקי"). הוא נבנה ממערך נורות לחיווי, צגים ספרתיים ומקלדת הדומה ללוח מקשים של מחשבון. הפקודות הוזנו כמספרים דו ספרתיים. מספרים אלו כונו "פועל" ו"שם עצם". ה"פועל" תיאר את סוג הפעולה שיש לבצע ו"שם עצם" ציין אלו נתונים יושפעו מהפעולה שצוינה בפקודת ה"פועל".
כל ספרה הוצגה בצבע ירוק (530 ננומטר[13]) בתצוגת שבעה מקטעים (Seven-segment display) של אלקטרולומינציה במתח גבוה; אלה הופעלו על ידי ממסרים אלקטרומכניים שהגבילו את קצב עדכון הספרות. ניתן היה להציג ב-DSKY שלושה מספרים באורך של חמש ספרות, בבסיס אוקטלי או עשרוני, והם הציגו בדרך כלל וקטורים כגון כיוון החללית או שינוי המהירות הנדרש (ΔV). אף על פי שהנתונים אוחסנו בזיכרון המחשב ביחידות מטריות, הם הוצגו ביחידות המקובלות בארצות הברית. ממשק זה, הדומה בסגנונו למחשבון, היה הראשון מסוגו.
בתא הפיקוד היו שני ממשקי DSKY המחוברים ל-AGC; אחד בלוח הבקרה הראשי והשני באגף הציוד התחתון, ליד הסקסטנט ששימש לכיול מערכת ההנחיה האינרציאלית. ברכב הנחיתה הירחי היה DSKY יחיד. מחוון גישת מנחה טיסה (FDAI), בו שלט ה-AGC, מוקם מעל ה-DSKY בלוח הבקרה של המפקד וברכב הנחיתה הירחי.
התייחסות התזמון של AGC הגיעה משעון קריסטל בתדר של 2.048 מגה-הרץ. תדר השעון חולק בשניים כדי לייצר אות שעון ארבע פאזי בתדר של 1.024 מגה-הרץ שבו השתמש ה-AGC לביצוע פעולות פנימיות. גם תדר שעון זה חולק בשניים כדי לייצר אות של 512 קילו-הרץ הנקרא תדר אב; אות זה שימש לסנכרון מערכות חיצוניות של החללית אפולו.
תדר האב חולק עוד יותר באמצעות סקלר (scaler), תחילה בחמישה באמצעות מונה טבעתי (Ring counter) להפקת אות של 102.4 קילו-הרץ. אות זה חולק בשניים עוד 17 פעמים. כל התדרים שנגזרו מהאות של 102.4 קילו-הרץ נקראו בשמות F1 (51.2 קילו-הרץ) עד F17 (0.78125 הרץ). שלב F10 (100 הרץ) הוזן בחזרה ל-AGC כדי להגדיל את שעון הזמן האמת ומונים אוטומטיים אחרים באמצעות PINC
(ראו בהמשך). שלב ה-F17 שימש להפעלת ה-AGC לסירוגין כאשר הוא פעל במצב המתנה.
ל-AGC היו ארבעה אוגרים ראשיים, כל אחד מהם בגודל של 16 סיביות, ששימשו לחישובים כלליים:
TC
MP
)בנוסף, היו ארבע כתובות בזיכרון הליבה, כתובות 20–23, שכונו מיקומי עריכה משום שכל מידע שהיה מאוחסן בהן היה מוזז או מסובב במיקום סיביות אחד, למעט כתובת 23 שהמידע שנכתב אליה הוזז ימינה בשבע מיקומי סיביות.[14] דבר זה היה משותף לבלוק I ולבלוק II.
מבד האוגרים הראשיים, היו ל-AGC אוגרים נוספים:
סט הפקודות כלל 3 סיביות עבור קוד הפעולה ו-12 סיביות עבור הכתובת. לפי מבנה זה, יש לכל היותר 8 פקודות, שכל אחת מהן יכולה לפעול על כל מקום בזיכרון (בהנחה שהזיכרון מורכב מ-4,096 מילים). עם זאת, מכיוון שמספר הפקודות הנדרשות עלה, הוצג קידוד מורכב יותר לפקודות, והוצגו כמה סוגי קידוד חדשים: פקודות הפועלות רק על זיכרון מחיק (כמו כתיבה לזיכרון או החלפה) יכולות להשתמש במרחב כתובות של 10 סיביות בלבד, לפיכך ניתן לקודד פקודות כאלו ב-5 סיביות. שתי הסיביות הנוספות כונו "קוד רבעון" או "QC".
לבלוק II היו 34 פקודות: TC
, CCS
, TCF
, DAS
, LXCH
, INCR
, ADS
, CA
, CS
, INDEX
, DXCH
, TS
, XCH
, AD
ו-MASK
(פקודות בסיסיות), ו-READ
, WRITE
, RAND
, WAND
, ROR
, WOR
, RXOR
, EDRUPT
, DV
, BZF
, MSU
, QXCH
, AUG
, DIM
, DCA
, DCS
, SU
, BZMF
ו-MP
(פקודות מורחבות). חמש עשרה הפקודות הבסיסיות הופעלו ישירות על ידי קוד הפעולה. תשע עשרה הפקודות המורחבות הופעלו על ידי ביצוע פקודת EXTEND
(שקודדה כפקודת TC
מיוחדת – TC 6
) לפני הפקודה.
הפקודות של בלוק II כללו את הפקודות הבאות:
TC
(העבר שליטה)TC
לקריאה לתת-שגרות.CCS
(ספור, השווה ודלג)CCS
הוא דילוג לאחת מארבע אפשרויות בהתאם למספר שאוחזר מהזיכרון. אם המספר היה גדול מ-0, CCS
מדלג לפקודה שנמצאת בזיכרון מיד לאחר ה-CCS
. אם המספר הוא פלוס אפס, CCS
מדלג לפקודה השנייה שאחרי ה-CCS
. מספר קטן מאפס גורם לדילוג לפקודה השלישית שאחרי ה-CCS
, ומינוס אפס גורם לדילוג לפקודה הרביעית אחרי CCS
.TC
ולהסתיים בפקודת CCS
(מקביל ל-BCT
ב-IBM 360).INDEX
INDEX
כדי להוסיף או להחסיר ערך אינדקס מכתובת בסיס שמציין אופרנד הפקודה שאחרי פקודת ה-INDEX
. שיטה זו משמשת לחיפוש במערכים ובטבלאות. מכיוון שההוספה חלה על שתי מילים שלמות, פקודה זו שימשה גם לשינוי קוד הפעולה בפקודה הבאה (פקודות מורחבות).RESUME
INDEX
(INDEX 17
). פקודה זו מחזירה את המחשב לתוכנית הראשית, מהמקום בו היא הופסקה לאחר פסיקה.XCH
(החלף)CS
(נקה וחסר)TS
(העבר לאחסון)TS
גם מזהה ומתקן גלישות. אם דגל הגלישה מונף, אוגר A מאוחסן בזיכרון וסיבית הסימן בזיכרון מועתקת מהסיבית השמאלית ביותר של אוגר A. לאחר מכן אוגר A משתנה ל-+1 או -1 בהתאם לסוג הגלישה (גלישה כתוצאה מחיבור או מחיסור, בהתאמה), והתוכנה מדלגת על הפקודה הבאה.TS
פקודת TC
(קריאה לתת-שגרה) לקוד המטפל בנתונים ללא גלישה. כאשר זוהי אפשרות שכיחה (כמו בחיבור וחיסור בדיוק גבוה), נכתבה לאחר ה-TS
פקודת CAF 0
להשלמת היווצרות הנשא (+1, 0 או -1) לתוך המילה הבאה. זוויות נשמרו בדַיִק יחיד; מרחקים ומהירויות בדיק כפול; וזמן בדיק שָלוּש.AD
(חיבור)AD
, דבר המורה על גלישה.MASK
CA
(נקה והוסף)TCF
(העבר שליטה לזיכרון הקבוע)DAS
(חיבור כפול ושמירה בזיכרון)LXCH
(החלף את אוגר L)XCH
רק שמחליפה את תוכן אוגר L עם תוכן כתובת הזיכרון.INCR
(הגדל)ADS
DXCH
(החלפה בדיק כפול)MP
(כפל)DV
(חילוק)SU
(חיסור)READ
WRITE
RAND
WAND
ROR
WOR
RXOR
EDRUPT
BZF
(אם 0, קפוץ לזיכרון הקבוע)MSU
(חיסור מודולרי)QXCH
XCH
רק שמחליפה את תוכן אוגר Q עם תוכן כתובת הזיכרון.AUG
DIM
DCA
DCS
BZMF
(קפוץ אם 0 או שלילי לזיכרון הקבוע)הפקודות בוצעו בקבוצות של 12 שלבים, הנקראים פעימות תזמון (TP1 עד TP12). כל קבוצה של 12 פעימות תזמון נקראה רצף משנה (subsequence) של הפקודה. פקודות פשוטות, כגון TC
, מבוצעות ברצף בודד של 12 פעימות. פקודות מורכבות יותר דורשות מספר רצפי משנה. פקודת כפל (MP
), לדוגמה, אורכת 3 רצפי משנה: רצף משנה ראשוני שנקרא MP0
, ואחריו רצף משנה MP1
, ולאחר מכן רצף משנה MP3
שסיים את הפקודה. בבלוק I פקודה זו ארכה 8 רצפי משנה.
כל פעימת תזמון ברצף המשנה יכולה להפעיל עד 5 פעימות בקרה. פעימות הבקרה הן האותות שיוצרות את הפקודה בפועל, כגון קריאת תוכן אוגר לתוך אפיק הנתונים או כתיבת נתונים מהאפיק לתוך אוגר.
זיכרון בלוק I היה מאורגן בבנקים של קילו-מילים. הבנק הנמוך ביותר (בנק 0) היה זיכרון מחיק (RAM). כל הבנקים הבאים היו בנקי זיכרון קבוע (ROM). לכל פקודה של ה-AGC היה שדה כתובת באורך של 12 סיביות. הסיביות התחתונות (1–10) התייחסו לזיכרון שבתוך כל בנק. סיביות 11 ו-12 קבעו איזה בנק יבחר: 00 עבור בנק הזיכרון המחיק; 01 עבור הבנק הנמוך ביותר (בנק 1) של הזיכרון הקבוע; 10 עבור הבנק הבא (בנק 2); ו-11 עבור אוגר הבנקים, שניתן להשתמש בו כדי לבחור כל בנק מעל בנק 2. בנקים 1 ו-2 נקראו זיכרון קבוע-קבוע, מכיוון שהם היו זמינים תמיד, ללא קשר לתוכן אוגר הבנקים. בנקים 3 ומעלה נקראו זיכרון קבוע הניתן להחלפה מכיוון שהבנק הנבחר נקבע על ידי תוכן אוגר הבנקים.
בבלוק II הורחב מרחב הכתובות על ידי בחירת בנק באמצעות אוגרים: Fbank (לזיכרון הקבוע) ו-Ebank (לזיכרון המחיק). הזיכרון היחיד מכל סוג שניתן היה לגישה בכל זמן נתון היה הבנק הנוכחי (על פי תוכן האוגרים), בתוספת זיכרון קבוע וזיכרון מחיק שהיה ניתן לגשת אליהם תמיד, בלי קשר לתוכן האוגרים. בנוסף, האוגר Fbank היה יכול לגשת ל-32 קילו-מילים לכל היותר, כך שנדרש אוגר נוסף – Sbank ("סופר-בנק") – כדי לגשת ל-4 קילו-מילים האחרונים.
בתחילה היו בבלוק I 12 קילו-מילים של זיכרון קבוע, אך מאוחר יותר הוגדל הזיכרון ל-24 קילו-מילים. בבלוק II היו 36 קילו-מילים של זיכרון קבוע ו-2 קילו-מילים של זיכרון מחיק.
ה-AGC העביר נתונים אל הזיכרון וממנו דרך אוגר G בתהליך שנקרא מחזור זיכרון. מחזור הזיכרון ארך 12 פעימות תזמון (11.72 מיקרו-שניות). המחזור מתחיל בפעימת תזמון 8 של רצף המשנה הקודם, כאשר ה-AGC טוען לאוגר S את כתובת הזיכרון הקבוע שממנה יש להביא את הנתונים. אם צריך להביא נתונים גם מהזיכרון המחיק, הכתובת עבורם נטענת לאוגר S בפעימת תזמון 1. חומרת הזיכרון שולפת את מילת הנתונים מהזיכרון בכתובת שציין אוגר S; נתונים שהגיעו מהאוגרים המרכזיים נשמרו באוגר G בפעימת תזמון 2; נתונים מהזיכרון המחיק נשמרו באוגר G בפעימת תזמון 4; ונתונים מהזיכרון הקבוע נשמרו באוגר G בפעימת תזמון 6. מילת הזיכרון שאוחזרה מהזיכרון הייתה זמינה באוגר G במהלך פעימות תזמון 7 עד 10. לאחר פעימת תזמון 10, הנתונים באוגר G נכתבו בחזרה לזיכרון.
מחזור הזיכרון של ה-AGC התרחש ברציפות לאורך כל פעילות ה-AGC. בפקודות הזקוקות לנתונים מהזיכרון, המחשב ניגש לאוגר G במהלך פעימות תזמון 7–10. אם ה-AGC שינה את מילת הזיכרון שבאוגר G, המילה שהשתנתה נכתבה בחזרה לזיכרון לאחר פעימת תזמון 10. בדרך זו, מילות נתונים עברו מהזיכרון לאוגר G ובחזרה לזיכרון.
15 הסיביות התחתונות של כל מילת זיכרון הכילו פקודות או נתונים, כאשר על כל מילה מכילה סיבית נוספת שמוודאת שהמילה נקראה כמו שצריך מהזיכרון – סיבית זוגיות. ערכה של סיביות זו, 0 או 1, נקבע כך שמספר ה-1 בכל מילת זיכרון יהיה תמיד מספר אי-זוגי (כולל סיבית הזוגיות). מעגל בדיקת זוגיות בדק את סיבית הזוגיות במהלך כל מחזור זיכרון; אם הביט לא תאם את הערך הצפוי, המחשב הבין שמילת הזיכרון פגומה ונורית אזעקת זוגיות נדלקה.
ל-AGC היו חמישה סוגי פסיקות:
Dsrupt
– הופעלה במרווחי זמן קבועים כדי לעדכן את תצוגת המשתמש, ה־DSKY.Erupt
– נוצרה כתוצאה מכשלי חומרה או מאזעקות שונות.Keyrupt
– הורתה על לחיצה על מקש בלוח המקשים של ה־DSKY.T3Rrupt
– נוצרה במרווחי זמן קבועים על פי טיימר בחומרת המחשב כדי לעדכן את שעון הזמן אמת של ה-AGC.Uprupt
– נוצרה בכל פעם שנטענה מילה של 16 סיביות של נתוני כינוס (uplink data) לתוך ה-AGC.ה-AGC הגיב לכל פסיקה על ידי הפסקה זמנית של התוכנית הנוכחית, ביצוע שגרת שירות קצרה עבור הפסיקה, וחידוש התוכנית שהופסקה.
ל-AGC היו גם 20 מונים אוטומטיים, כלומר מונים שהוגדלו או הוקטנו, אך לא לפי קוד התוכנה, אלא כתוצאה מאותות חיצוניים למחשב. מונים אלו היו מיקומי זיכרון שמנו כלפי מעלה או מטה, או אוגרי זיזה. המונים גדלו, קטנו או הוזזו בתגובה לאותות פנימיים. פעולות הגדלה (PINC
), הפחתה (MINC
) או הזזה (SHINC
) טופלו על ידי רצף מיקרו־פקודות יחיד שהיה יכול לפעול בין כל שתי פקודות רגילות.
פסיקות עלולות להיות מופעלות כאשר המונים עלו על גדותיהם. הפסיקות T3rupt
ו-Dsrupt
נוצרו כאשר המונים שלהם, המופעלים על ידי שעון בתדר של 100 הרץ, גלשו לאחר ביצוע רצפי משנה רבים של PINC
. הפסיקה Uprupt
הופעלה לאחר שהמונה שלה, המבצע את הרצף SHINC
, העביר 16 סיביות של נתוני כינוס לתוך ה-AGC.
ל-AGC היה מצב חיסכון בחשמל שנשלט על ידי מתג אַפשר המתנה. מצב זה כיבה את החשמל ל-AGC, למעט שעון ה-2.048 מגה-הרץ והסקלר (scaler). אות F17 מהסקלר הפעיל את החשמל ל-AGC ואת ה-AGC מחדש במרווחים של 1.28 שניות. במצב זה, ה-AGC ביצע פונקציות חיוניות, בדק את המתג אפשר המתנה, ואם הוא היה עדיין מופעל, כיבה את החשמל וחזר למצב שינה עד לאות F17 הבא.
במצב המתנה, ה-AGC ישן רוב הזמן; לכן הוא לא היה ער כדי לבצע את פקודת PINC
הדרושה כדי לעדכן את שעון הזמן אמת של ה-AGC במרווחים של 10 מילי־שניות. כדי לפצות, אחת הפונקציות שביצע ה-AGC בכל פעם שהוא התעורר במצב המתנה הייתה לעדכן את שעון הזמן אמת ב-1.28 שניות.
מצב המתנה תוכנן להפחית את ההספק ב-5 עד 10W (מ-70W) במהלך טיסה באמצע המסלול כאשר לא היה צורך ב-AGC. עם זאת, בפועל, ה-AGC נותר דולק במהלך כל שלבי המשימה והתכונה הזו מעולם לא הייתה בשימוש.
ל-AGC היו אפיקי קריאה וכתיבה של 16 סיביות. המחשב היה יכול להעביר נתונים מאוגרים מרכזיים (A, Q, Z או L) או מאוגרים פנימיים אחרים לאפיק הקריאה באמצעות אות בקרה. אפיק הקריאה חובר ישירות לאפיק הכתיבה, כך שכל הנתונים המופיעים באפיק הקריאה הופיעו בו זמנית גם באפיק הכתיבה. אותות בקרה אחרים יכולים להעתיק נתונים מאפיק הכתיבה בחזרה לאוגרים וכדומה.
העברות נתונים פעלו כך: לדוגמה, כדי להעביר את כתובת הפקודה הבאה מאוגר B לאוגר S, ניתן אות הבקרה RB (קרא את אוגר B); אות זה גרם לכתובת לעבור מאוגר B לאפיק הקריאה, ולאחר מכן לאפיק הכתיבה. אות בקרה WS (כתוב באוגר S) העתיק את הכתובת מאפיק הכתיבה אל אוגר S.
ניתן היה לקרוא את תוכנם של מספר אוגרים לתוך אפיק הקריאה בו זמנית. כאשר דבר זה התרחש, בוצעה פעולת OR לוגי על הנתונים מהאוגרים. תכונת OR זו שימשה ליישום פקודת MASK
– פקודת AND לוגי. ל-AGC אין יכולת מקורית לבצע AND לוגי, אבל הוא יכול לבצע OR לוגי דרך אפיק הכתיבה ולהפוך את הנתונים דרך אוגר C, וכך, על ידי משפט דה מורגן, ניתן לבצע AND לוגי – הופכים את שני האופרנדים, מבצעים עליהם OR לוגי דרך אפיק הנתונים, ולאחר מכן הופכים את התוצאה.
תוכנת ה-AGC נכתבה בשפת האסמבלי של ה-AGC ונשמרה בזיכרון ליבה שזור. חלק הארי של התוכנה נשמר בזיכרון זה – זיכרון לקריאה בלבד – ולכן לא ניתן היה לשנות אותו בעת פעולת המחשב, אך חלקים מרכזיים של התוכנה אוחסנו בזיכרון הליבה המגנטית, אותם יכלו האסטרונאוטים לשנות אותם באמצעות ממשק ה-DSKY, כפי שנעשה במשימת אפולו 14.
עקרונות התכנון שפותחו עבור ה-AGC ב-MIT אינסטרומנטיישן לברטורי, בהנחייתו של צ'ארלס דרייפר בסוף שנות ה-60, הפכו לבסיס להנדסת תוכנה בימינו, במיוחד בשל תכנון מערכות אמינות המבוססות על תוכנה אסינכרונית, תזמון עדיפות, בדיקות ויכולת החלטה אנושית בלולאה (Human-in-the-loop).[16] כאשר הוגדרו דרישות התכנון של ה-AGC, לא היו קיימות תוכנות וטכניקות תכנות נחוצות ולכן היה צריך לתכנן אותו מאפס.
ל-AGC הייתה מערכת הפעלה בזמן אמת פשוטה פרי תכנונו של ג'. הלקום ליינינג (אנ'),[17] הכוללת מנהל עיבוד אצוות ("Exec") בשיטת ריבוי משימות שיתופי וזַמנן (scheduler) מונחה פסיקות הפועל בשיטת ריבוי משימות מוסדר – "רשימת המתנה" (Waitlist). רשימת ההמתנה יכלה לתזמן מספר משימות (tasks) מונחות טיימר. ב־AGC, משימות הן תהליכונים קצרים שיכולות לתזמן הפעלה נוספת של עצמם באמצעות רשימת ההמתנה, או להתחיל פעולה ארוכה יותר על ידי התחלת "עבודה" (job) באמצעות המנהל. מחשב ההנחיה של החללית אפולו כונה "האסטרונאוט הרביעי" בשל תפקידו הקריטי בסיוע לשלושת האסטרונאוטים שסמכו עליו.[18]
ל-AGC היה גם מפרש תוכנה מתוחכם שפותח ב-MIT אינסטרומנטיישן לברטורי. המפרש מימש מכונה וירטואלית הכוללת פקודות מורכבות ומתקדמות הרבה יותר מפקודות ה-AGC המקוריות. פקודות אלו פִשטו מאוד את תוכניות הניווט; באמצעות פקודות המפרש היה ניתן לחשב חישובי אריתמטיקה טריגונומטרית, סקלרית ווקטורית בדַיק כפול (מספרים בני 16 ו-24 סיביות), ואפילו פקודת MXV
(כפל מטריצה בווקטור), ולשלבן עם קוד AGC מקורי. אף על פי שזמן הביצוע של הפקודות המדומות ארוך מהפקודות המקוריות (עקב הצורך לפרש פקודות אלו בזמן ריצת התוכנה), המפרש סיפק פקודות רבות שה-AGC לא הכיל באופן טבעי, ודרישות הזיכרון שלו היו נמוכות בהרבה מאשר אילו היה צריך להוסיף פקודות אלו לשפת האסמבלי המקורית של ה-AGC, ובאותה תקופה הזיכרון היה יקר מאוד. זמן הריצה של פקודה מדומה היה כ-24 אלפיות השנייה בממוצע. האסמבלר, YUL, אכף מעבר תקין בין קוד מקורי לקוד מפורש.
התוכנה הכילה קבוצה של שגרות ממשק משתמש מונחות פסיקות בשם "פינבול" (Pinball), שסיפקה שירותי מקלדת וצג עבור העבודות והמשימות הפועלות ב-AGC. קבוצה עשירה של שגרות נגישות אפשרה למפעיל – האסטרונאוט – להציג את תוכן מיקומי זיכרון שונים בבסיס אוקטלי או עשרוני, בקבוצות של 1, 2 או 3 אוגרים בכל פעם. שגרות מוניטור אפשרו למפעיל ליזום משימה כדי להציג מדי פעם את תוכן מיקומי זיכרון מסוימים. ניתן היה ליזום עבודות באמצעות שגרות אלו. שגרות "פינבול" ביצעו את המקבילה הגולמית מאוד של מעטפת Unix (Unix shell).
רבים מאלגוריתמי המסלול וההנחיה ששימשו את ה-AGC, התבססו על עבודה מוקדמת יותר של ריצ'רד באטין (Richard Battin).[17] חבילת תוכנה בשם קורונה (Corona), שאת פיתוחה הוביל אלכס קוסמלה (Alex Kosmala), פעלה בטיסת תא הפיקוד והשירות הראשונה (AS-202 (אנ')).
משימות אל הירח השתמשו בחבילת התוכנות "קולוסוס" (Colossus) עבור תא הפיקוד, שאת פיתוחה הוביל פרדריק מרטין (Frederic Martin), וב"לומינרי" (Luminary) עבור רכב הנחיתה הירחי, שפותחה בראשותו של ג'ורג' צ'רי (George Cherry). צוות בניהולה של מרגרט המילטון מימש את פִרטי תוכנות אלה.[19] המילטון התעניינה מאוד כיצד האסטרונאוטים יתַקשרו עם התוכנה וחזתה את סוגי הטעויות שעלולות להתרחש עקב טעות אנוש.[19] בסך הכל, פיתוח התוכנה בפרויקט כלל 1,400 שנות אדם של מאמץ, עם שיא כוח עבודה של 350 אנשים.[17] בשנת 2016 קיבלה המילטון את מדליית החירות הנשיאותית על תפקידה בכתיבת תוכנת הטיסה.
תוכנת מחשב ההנחיה של החללית אפולו השפיעה על תכנון מערכות תחנת החלל סקיילאב, מעבורות החלל ומטוסי קרב שונים.[20][21] בשנת 2003, החל רון בורקי לנסות לשחזר את קוד המקור שהפעיל את ה-AGC ולבנות אימולטור המסוגל להריץ אותו – VirtualAGC.[22][23] חלק מהכמות הגדולה של קוד המקור שחולץ במאמץ זה, הועלה על ידי מתמחה לשעבר של נאס"א לאתר GitHub ב-7 ביולי 2016, ומשך תשומת לב תקשורתית משמעותית.[24][25]
גרסת בלוק II של ה-AGC תוכננה בשנת 1966. בבלוק II נשמרה הארכיטקטורה הבסיסית של בלוק I, אך כמות הזיכרון המחיק הוגדל מ-1,024 מילים ל-2,048 מילים (2 קילו-מילים). גם הזיכרון הקבוע הורחב – הוא הוגדל מ-24 קילו-מילים ל-36 קילו-מילים. מספר הפקודות עלה מ-11 ל-34 והוטמעו ערוצי קלט/פלט שהחליפו את אוגרי הקלט/פלט של בלוק I. גרסת בלוק II היא זו שהייתה בשימוש בפועל במשימות לירח. בלוק I שימש במהלך משימות אפולו 4 ו־6 הבלתי מאוישות, והיה על סיפונה של אפולו 1, שנשרפה.
היו השלכות תכנון מעניינות להחלטה להרחיב את הזיכרון ואת סט הפקודות עבור בלוק II, אך לשמור על ההגבלה של שלוש סיביות לקוד ו־12 סיביות עבור הכתובת; נעשה שימוש בתחבולות שונות כדי לסחוט פקודות נוספות, כגון כתובות זיכרון מיוחדות שיישמו פונקציה מסוימת כאשר ניגשו אליהן. לדוגמה, INDEX
לכתובת 17 (בבסיס אוקטלי) הפעיל את פקודת RESUME
שהורתה למעבד לחזור מעיבוד פסיקה אל התוכנית הראשית. באופן דומה, TC 4
ביצעה פקודת INHINT
(מניעת פסיקות), בעוד TC 3
אִפשר מחדש את קבלתן (RELINT
). לכל פעולה מסט הפקודות המורחב הוקדמה פקודת EXTEND
, גרסה מיוחדת של TC
(TC 6
).
בלוק II כולל גם את הפקודה EDRUPT
(קיצור של Ed's Interrupt, על שם אד סמלי, המתכנת שביקש אותה). על אף שמה, פקודה זו אינה יוצרת פסיקה, אלא מבצעת שתי פעולות המשותפות לעיבוד פסיקות; הפעולה הראשונה מונעת פסיקות נוספות (ודורשת פקודת RESUME
כדי לאפשר אותן שוב). הפעולה השנייה מורה לאוגר ZRUPT
לטעון לתוכו את הערך הנוכחי של מונה התוכנית (Z). פקודה זו שימשה רק פעם אחת בתוכנת ה־AGC, על מנת להפעיל את רצף סיום מחזור הטייס האוטומטי הדיגיטלי של רכב הנחיתה הירחי.[26]
קוד המקור המקורי של מחשב ההנחיה של משימת אפולו 11 נגיש משנת 2003[27] על ידי ה־Virtual AGC Project ומוזיאון MIT.[28] הוא תומלל ועבר דיגיטציה מרשימות קוד המקור המקוריות משנות ה-60. באמצע 2016, מתמחה לשעבר של נאס"א, כריס גארי, העלה את קוד המקור של AGC אל GitHub.[29][30]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.