מחשב ההנחיה של החללית אפולו
תכנון > תוכנה

תוכנת ה-AGC נכתבה בשפת האסמבלי של ה-AGC ונשמרה בזיכרון ליבה שזור. חלק הארי של התוכנה נשמר בזיכרון זה – זיכרון לקריאה בלבד – ולכן לא ניתן היה לשנות אותו בעת פעולת המחשב, אך חלקים מרכזיים של התוכנה אוחסנו בזיכרון הליבה המגנטית, אותם יכלו האסטרונאוטים לשנות אותם באמצעות ממשק ה-DSKY, כפי שנעשה במשימת אפולו 14.
עקרונות התכנון שפותחו עבור ה-AGC ב-MIT אינסטרומנטיישן לברטורי, בהנחייתו של צ'ארלס דרייפר בסוף שנות ה-60, הפכו לבסיס להנדסת תוכנה בימינו, במיוחד בשל תכנון מערכות אמינות המבוססות על תוכנה אסינכרונית, תזמון עדיפות, בדיקות ויכולת החלטה אנושית בלולאה (Human-in-the-loop). כאשר הוגדרו דרישות התכנון של ה-AGC, לא היו קיימות תוכנות וטכניקות תכנות נחוצות ולכן היה צריך לתכנן אותו מאפס.
ל-AGC הייתה מערכת הפעלה בזמן אמת פשוטה פרי תכנונו של ג'. הלקום ליינינג (אנ'), הכוללת מנהל עיבוד אצוות ("Exec") בשיטת ריבוי משימות שיתופי וזַמנן (scheduler) מונחה פסיקות הפועל בשיטת ריבוי משימות מוסדר – "רשימת המתנה" (Waitlist). רשימת ההמתנה יכלה לתזמן מספר משימות (tasks) מונחות טיימר. ב־AGC, משימות הן תהליכונים קצרים שיכולות לתזמן הפעלה נוספת של עצמם באמצעות רשימת ההמתנה, או להתחיל פעולה ארוכה יותר על ידי התחלת "עבודה" (job) באמצעות המנהל. מחשב ההנחיה של החללית אפולו כונה "האסטרונאוט הרביעי" בשל תפקידו הקריטי בסיוע לשלושת האסטרונאוטים שסמכו עליו.
ל-AGC היה גם מפרש תוכנה מתוחכם שפותח ב-MIT אינסטרומנטיישן לברטורי. המפרש מימש מכונה וירטואלית הכוללת פקודות מורכבות ומתקדמות הרבה יותר מפקודות ה-AGC המקוריות. פקודות אלו פִשטו מאוד את תוכניות הניווט; באמצעות פקודות המפרש היה ניתן לחשב חישובי אריתמטיקה טריגונומטרית, סקלרית ווקטורית בדַיק כפול (מספרים בני 16 ו-24 סיביות), ואפילו פקודת MXV (כפל מטריצה בווקטור), ולשלבן עם קוד AGC מקורי. אף על פי שזמן הביצוע של הפקודות המדומות ארוך מהפקודות המקוריות (עקב הצורך לפרש פקודות אלו בזמן ריצת התוכנה), המפרש סיפק פקודות רבות שה-AGC לא הכיל באופן טבעי, ודרישות הזיכרון שלו היו נמוכות בהרבה מאשר אילו היה צריך להוסיף פקודות אלו לשפת האסמבלי המקורית של ה-AGC, ובאותה תקופה הזיכרון היה יקר מאוד. זמן הריצה של פקודה מדומה היה כ-24 אלפיות השנייה בממוצע. האסמבלר, YUL, אכף מעבר תקין בין קוד מקורי לקוד מפורש.
התוכנה הכילה קבוצה של שגרות ממשק משתמש מונחות פסיקות בשם "פינבול" (Pinball), שסיפקה שירותי מקלדת וצג עבור העבודות והמשימות הפועלות ב-AGC. קבוצה עשירה של שגרות נגישות אפשרה למפעיל – האסטרונאוט – להציג את תוכן מיקומי זיכרון שונים בבסיס אוקטלי או עשרוני, בקבוצות של 1, 2 או 3 אוגרים בכל פעם. שגרות מוניטור אפשרו למפעיל ליזום משימה כדי להציג מדי פעם את תוכן מיקומי זיכרון מסוימים. ניתן היה ליזום עבודות באמצעות שגרות אלו. שגרות "פינבול" ביצעו את המקבילה הגולמית מאוד של מעטפת Unix (Unix shell).
רבים מאלגוריתמי המסלול וההנחיה ששימשו את ה-AGC, התבססו על עבודה מוקדמת יותר של ריצ'רד באטין (Richard Battin). חבילת תוכנה בשם קורונה (Corona), שאת פיתוחה הוביל אלכס קוסמלה (Alex Kosmala), פעלה בטיסת תא הפיקוד והשירות הראשונה (AS-202 (אנ')).
משימות אל הירח השתמשו בחבילת התוכנות "קולוסוס" (Colossus) עבור תא הפיקוד, שאת פיתוחה הוביל פרדריק מרטין (Frederic Martin), וב"לומינרי" (Luminary) עבור רכב הנחיתה הירחי, שפותחה בראשותו של ג'ורג' צ'רי (George Cherry). צוות בניהולה של מרגרט המילטון מימש את פִרטי תוכנות אלה. המילטון התעניינה מאוד כיצד האסטרונאוטים יתַקשרו עם התוכנה וחזתה את סוגי הטעויות שעלולות להתרחש עקב טעות אנוש. בסך הכל, פיתוח התוכנה בפרויקט כלל 1,400 שנות אדם של מאמץ, עם שיא כוח עבודה של 350 אנשים. בשנת 2016 קיבלה המילטון את מדליית החירות הנשיאותית על תפקידה בכתיבת תוכנת הטיסה.
תוכנת מחשב ההנחיה של החללית אפולו השפיעה על תכנון מערכות תחנת החלל סקיילאב, מעבורות החלל ומטוסי קרב שונים. בשנת 2003, החל רון בורקי לנסות לשחזר את קוד המקור שהפעיל את ה-AGC ולבנות אימולטור המסוגל להריץ אותו – VirtualAGC. חלק מהכמות הגדולה של קוד המקור שחולץ במאמץ זה, הועלה על ידי מתמחה לשעבר של נאס"א לאתר GitHub ב-7 ביולי 2016, ומשך תשומת לב תקשורתית משמעותית.