Компьютер управления Apollo ( AGC ) был цифровым компьютером , созданным для программы Apollo , который устанавливался на борту каждого командного модуля Apollo (CM) и лунного модуля Apollo (LM). AGC обеспечивал вычисления и электронные интерфейсы для управления, навигации и контроля космического корабля. [3] AGC был первым компьютером на основе кремниевых интегральных схем . [ требуется ссылка ] Производительность компьютера была сопоставима с первым поколением домашних компьютеров конца 1970-х годов, таких как Apple II , TRS-80 и Commodore PET . [4]
Длина слова AGC составляет 16 бит , с 15 битами данных и одним битом четности . Большая часть программного обеспечения AGC хранится в специальной памяти, доступной только для чтения, известной как память на сердечниках , образованная путем переплетения проводов через и вокруг магнитных сердечников , хотя небольшое количество памяти на сердечниках для чтения/записи доступно.
Астронавты общались с AGC с помощью цифрового дисплея и клавиатуры, называемых DSKY (от «дисплей и клавиатура», произносится как «ДИС-ки»). AGC и его пользовательский интерфейс DSKY были разработаны в начале 1960-х годов для программы «Аполлон» Лабораторией приборостроения Массачусетского технологического института и впервые были запущены в 1966 году. [5]
Астронавты вручную управляли проектом Gemini с помощью ручек управления , но компьютеры управляли большей частью проекта Apollo, за исключением коротких периодов посадки на Луну. [6] Каждый полет на Луну нёс два AGC, по одному в командном модуле и лунном модуле Apollo , за исключением Apollo 7 , который был миссией на околоземной орбите, и Apollo 8 , которому не нужен был лунный модуль для его лунной орбитальной миссии. AGC в командном модуле был центром его системы наведения, навигации и управления (GNC). AGC в лунном модуле управлял его PGNCS (первичной системой наведения, навигации и управления) Apollo, с аббревиатурой, произносимой как pings .
Каждая лунная миссия имела два дополнительных компьютера:
AGC был разработан в Лаборатории приборостроения Массачусетского технологического института под руководством Чарльза Старка Дрейпера , а проектированием оборудования руководил Элдон С. Холл . [2] Ранние архитектурные работы были выполнены Дж. Х. Лэнингом-младшим , Альбертом Хопкинсом , Ричардом Баттином , Рамоном Алонсо [7] [8] и Хью Блэр-Смитом. [9] Аппаратное обеспечение для полета было изготовлено компанией Raytheon , чей Герб Талер [10] также входил в архитектурную группу.
По словам Куринека и др., чипы были приварены к платам, а не припаяны, как можно было бы ожидать. [11] Чертежи логического модуля бортового компьютера Apollo Guidance Computer указывают на контактную сварку. [12] [13]
После использования интегральных схем (ИС) на платформе межпланетного мониторинга (IMP) в 1963 году, технология ИС была позже принята для AGC. [14] Бортовой компьютер Apollo был первым компьютером, в котором использовались кремниевые ИС-чипы. [15]
В то время как версия Block I использовала 4100 ИС, каждая из которых содержала один трехвходовой вентиль NOR , более поздняя версия Block II (использовавшаяся в пилотируемых полетах) использовала около 2800 ИС, в основном двойные трехвходовые вентили NOR и меньшее количество расширителей и усилителей считывания. [16] : 27, 266 ИС от Fairchild Semiconductor были реализованы с использованием резисторно-транзисторной логики (RTL) в плоском корпусе . Они были соединены с помощью накрутки проводов , а затем проводка была залита в литой эпоксидный пластик. [16] : 129
Использование одного типа ИС (двойной NOR3) во всей AGC позволило избежать проблем, которые преследовали другую раннюю разработку компьютера на ИС, управляющий компьютер Minuteman II , в котором использовалась смесь диодно-транзисторной логики и диодных логических вентилей. [ необходима цитата ] Вентили NOR являются универсальными логическими вентилями, из которых можно сделать любой другой вентиль, хотя и за счет использования большего количества вентилей. [17]
Компьютер имел 2048 слов стираемой памяти на магнитном сердечнике и 36 864 слова памяти на сердечнике только для чтения . [16] : 27, 90–93 Оба имели время цикла 11,72 микросекунд. [16] : 27 Длина слова памяти составляла 16 бит: 15 бит данных и один бит проверки на нечетность . Внутренний 16-битный формат слова ЦП состоял из 14 бит данных, одного бита переполнения и одного знакового бита ( представление в виде дополнения к единице ). [16] : 35–37
Пользовательским интерфейсом AGC был DSKY , что означает дисплей и клавиатура и обычно произносится как «ДИС-ки». Он имеет ряд индикаторных ламп, цифровых дисплеев и клавиатуру в стиле калькулятора . Команды вводились в числовом виде, как двузначные числа: Глагол и Существительное . Глагол описывал тип действия, которое должно было быть выполнено, а Существительное указывало, на какие данные повлияло действие, указанное командой Глагол.
Каждая цифра отображалась с помощью зеленого (указано как 530 нм [18] ) высоковольтного электролюминесцентного семисегментного дисплея ; они управлялись электромеханическими реле , ограничивающими скорость обновления. Три пятизначных знаковых числа также могли отображаться в восьмеричном или десятичном виде и обычно использовались для отображения векторов, таких как положение космического корабля или требуемое изменение скорости ( дельта-V ). Хотя данные хранились внутри в метрических единицах , они отображались в общепринятых единицах США . Этот интерфейс в стиле калькулятора был первым в своем роде.
Командный модуль имеет два DSKY, подключенных к его AGC: один расположен на главной панели приборов, а второй — в нижнем отсеке оборудования около секстанта , используемого для выравнивания платформы инерциального наведения . Лунный модуль имел один DSKY для своего AGC. Указатель ориентации пилотажного директора (FDAI), управляемый AGC, был расположен над DSKY на пульте командира и на LM.
Опорный сигнал синхронизации AGC исходил от кварцевого генератора 2,048 МГц . Часы делились на два для получения четырехфазных часов 1,024 МГц , которые AGC использовал для выполнения внутренних операций. Часы 1,024 МГц также делились на два для получения сигнала 512 кГц, называемого главной частотой ; этот сигнал использовался для синхронизации внешних систем космического корабля Apollo.
Основная частота далее делилась через масштабирующее устройство , сначала на пять с использованием кольцевого счетчика для получения сигнала 102,4 кГц. Затем он делился на два через 17 последовательных этапов, называемых F1 (51,2 кГц) через F17 (0,78125 Гц). Этап F10 (100 Гц) подавался обратно в AGC для увеличения часов реального времени и других непроизвольных счетчиков с использованием Pinc (обсуждается ниже). Этап F17 использовался для периодического запуска AGC, когда он работал в режиме ожидания .
AGC имел четыре 16-битных регистра для общего вычислительного использования, называемых центральными регистрами :
DV
и обратный адрес после TC
инструкцииMP
инструкцийТакже было четыре места в основной памяти, по адресам 20–23, названные местами редактирования, поскольку все, что там хранилось, появлялось сдвинутым или повернутым на одну битовую позицию, за исключением одного, которое сдвигало вправо семь битовых позиций, чтобы извлечь один из семибитных интерпретирующих кодов операции, которые были упакованы по два в слово. Это было общим для AGC блока I и блока II.
В AGC имелись дополнительные регистры, которые использовались внутри в ходе работы:
Формат инструкции использовал 3 бита для кода операции и 12 бит для адреса. Блок I имел 11 инструкций: TC
, CCS
, INDEX
, XCH
, CS
, TS
, AD
, и MASK
(базовые), и SU
, MP
, и DV
(дополнительные). Первые восемь, называемые базовыми инструкциями , были напрямую доступны 3-битному коду операции. Последние три были обозначены как инструкции extracode , потому что доступ к ним осуществлялся путем выполнения специального типа TC
инструкции (называемой EXTEND
) непосредственно перед инструкцией.
Инструкции AGC блока I состояли из следующего:
TC
(передача управления)TC
инструкцию можно было использовать для вызовов подпрограмм.CCS
(посчитать, сравнить и пропустить)CCS
— четырехсторонний пропуск, в зависимости от данных в регистре A перед DABS. Если регистр A был больше 0, CCS
переходит к первой инструкции сразу после CCS
. Если регистр A содержал плюс ноль, CCS
переходит ко второй инструкции после CCS
. Меньше нуля вызывает переход к третьей инструкции после CCS
, а минус ноль переходит к четвертой инструкции после CCS
. Основной целью подсчета было позволить обычному циклу, управляемому положительным счетчиком, закончиться на a CCS
и a TC
к началу цикла, что эквивалентно IBM 360 's BCT
. Функция абсолютного значения была сочтена достаточно важной, чтобы быть встроенной в эту инструкцию; при использовании только для этой цели последовательность после CCS
была TC
*+2, TC
*+2, AD
ONE. Любопытным побочным эффектом было создание и использование -дыр CCS
, когда было известно, что проверяемое значение никогда не бывает положительным, что происходило чаще, чем можно было бы предположить. Это оставило два целых слова незанятыми, и специальный комитет был ответственен за назначение констант данных этим дырам.INDEX
INDEX
может использоваться для добавления или вычитания значения индекса из базового адреса , указанного операндом следующей инструкции INDEX
. Этот метод используется для реализации массивов и табличных поисков; поскольку добавление выполнялось для обоих целых слов, он также использовался для изменения кода операции в следующей (extracode) инструкции, а в редких случаях — для обеих функций одновременно.RESUME
INDEX
( INDEX
25). Это инструкция, используемая для возврата из прерываний. Она заставляет выполнение возобновиться с прерванного места.XCH
(обмен)TS
.CS
(очистить и вычесть)TS
(передача на хранение)TS
также обнаруживает и исправляет переполнения таким образом, чтобы распространить перенос для сложения/вычитания с множественной точностью. Если результат не имеет переполнения (крайние левые 2 бита A одинаковы), ничего особенного не происходит; если есть переполнение (эти 2 бита различаются), крайний левый бит отправляется в память как знаковый бит, регистр A изменяется на +1 или −1 соответственно, и управление переходит ко второй инструкции, следующей за TS
. Всякий раз, когда переполнение является возможным, но ненормальным событием, TS
за следует a TC
к логике отсутствия переполнения; когда это нормальная возможность (как в сложении/вычитании с множественной точностью), за TS
следует CAF
ZERO ( CAF
= XCH
в фиксированную память) для завершения формирования переноса (+1, 0 или −1) в следующее слово с более высокой точностью. Углы сохранялись с одинарной точностью , расстояния и скорости с двойной точностью , а прошедшее время с тройной точностью.AD
(добавлять)AD
. Тот факт, что переполнение является состоянием, а не событием, допускает ограниченные степени переполнения при сложении более двух чисел, пока ни одна из промежуточных сумм не превышает удвоенную емкость слова.MASK
MP
(умножить)DV
(разделять)SU
(вычесть)Инструкции были реализованы в группах по 12 шагов, называемых тактовыми импульсами . Тактовые импульсы были названы от TP1 до TP12. Каждый набор из 12 тактовых импульсов назывался подпоследовательностью инструкций . Простые инструкции, такие как TC, выполнялись в одной подпоследовательности из 12 импульсов. Более сложные инструкции требовали нескольких подпоследовательностей. Инструкция умножения ( MP
) использовала 8 подпоследовательностей: начальную, называемую MP0
, за которой следовала MP1
подпоследовательность, которая повторялась 6 раз, а затем завершалась подпоследовательностью MP3
. Это было сокращено до 3 подпоследовательностей в блоке II.
Каждый тактовый импульс в подпоследовательности мог запускать до 5 управляющих импульсов . Управляющие импульсы были сигналами, которые выполняли фактическую работу инструкции, например, считывали содержимое регистра на шину или записывали данные с шины в регистр.
Память AGC блока I была организована в банки по 1 килослову. Самый нижний банк (банк 0) был стираемой памятью (RAM). Все банки выше банка 0 были фиксированной памятью (ROM). Каждая инструкция AGC имела 12-битное адресное поле. Нижние биты (1-10) адресуют память внутри каждого банка. Биты 11 и 12 выбирают банк: 00 выбирает стираемый банк памяти; 01 выбирает самый нижний банк (банк 1) фиксированной памяти; 10 выбирает следующий (банк 2); и 11 выбирает регистр банка , который может быть использован для выбора любого банка выше 2. Банки 1 и 2 назывались фиксированно-фиксированной памятью, потому что они всегда были доступны, независимо от содержимого регистра банка. Банки 3 и выше назывались фиксированно-переключаемыми , потому что выбранный банк определялся регистром банка.
Первоначально AGC блока I имел 12 килослов постоянной памяти, но позже этот объем был увеличен до 24 килослов. Блок II имел 36 килослов постоянной памяти и 2 килослова стираемой памяти.
AGC передавало данные в память и из памяти через регистр G в процессе, называемом циклом памяти . Цикл памяти занимал 12 тактовых импульсов (11,72 мкс). Цикл начинался с тактового импульса 1 (TP1), когда AGC загружал адрес памяти для выборки в регистр S. Аппаратное обеспечение памяти извлекало слово данных из памяти по адресу, указанному регистром S. Слова из стираемой памяти помещались в регистр G тактовым импульсом 6 (TP6); слова из фиксированной памяти были доступны тактовым импульсом 7. Извлеченное слово памяти затем было доступно в регистре G для доступа AGC во время тактовых импульсов 7–10. После тактового импульса 10 данные в регистре G записывались обратно в память.
Цикл памяти AGC происходил непрерывно во время работы AGC. Инструкции, которым требовались данные памяти, должны были обращаться к ним во время тактовых импульсов 7–10. Если AGC изменял слово памяти в регистре G, измененное слово записывалось обратно в память после тактового импульса 10. Таким образом, слова данных непрерывно циклически перемещались из памяти в регистр G, а затем обратно в память.
Нижние 15 бит каждого слова памяти содержали инструкции или данные AGC, причем каждое слово было защищено 16-м нечетным битом четности. Этот бит устанавливался в 1 или 0 схемой генератора четности, поэтому подсчет единиц в каждом слове памяти всегда давал нечетное число. Схема проверки четности проверяла бит четности во время каждого цикла памяти; если бит не соответствовал ожидаемому значению, слово памяти считалось поврежденным, и на панели загорался индикатор четности .
AGC имел пять векторных прерываний :
AGC реагировал на каждое прерывание, временно приостанавливая текущую программу, выполняя короткую процедуру обслуживания прерывания, а затем возобновляя прерванную программу.
AGC также имел 20 непроизвольных счетчиков . Это были ячейки памяти, которые функционировали как счетчики вверх/вниз или регистры сдвига. Счетчики увеличивались, уменьшались или сдвигались в ответ на внутренние входы. Увеличение ( Pinc ), уменьшение ( Minc ) или сдвиг ( Shinc ) обрабатывались одной подпоследовательностью микроинструкций, вставленных между любыми двумя обычными инструкциями.
Прерывания могли быть вызваны переполнением счетчиков. Прерывания T3rupt и Dsrupt были вызваны, когда их счетчики, управляемые аппаратными часами с частотой 100 Гц, переполнялись после выполнения многих подпоследовательностей Pinc. Прерывание Uprupt было вызвано после того, как его счетчик, выполняя подпоследовательность Shinc, сдвинул 16 бит данных восходящей линии связи в AGC.
AGC имел режим энергосбережения, управляемый переключателем разрешения режима ожидания . Этот режим отключал питание AGC, за исключением тактовой частоты 2,048 МГц и масштабатора. Сигнал F17 от масштабатора снова включал питание AGC и AGC с интервалом 1,28 секунды. В этом режиме AGC выполнял основные функции, проверял переключатель разрешения режима ожидания и, если он был включен, отключал питание и возвращался в спящий режим до следующего сигнала F17.
В режиме ожидания AGC спал большую часть времени; поэтому он не был активен для выполнения инструкции Pinc, необходимой для обновления часов реального времени AGC с интервалом в 10 мс. Для компенсации одной из функций, выполняемых AGC каждый раз, когда он просыпался в режиме ожидания, было обновление часов реального времени на 1,28 секунды.
Режим ожидания был разработан для снижения мощности на 5–10 Вт (с 70 Вт) во время полета на средней дистанции, когда AGC не требовался. Однако на практике AGC оставался включенным на всех этапах миссии, и эта функция никогда не использовалась.
AGC имел 16-битную шину чтения и 16-битную шину записи. Данные из центральных регистров (A, Q, Z или LP) или других внутренних регистров могли быть направлены на шину чтения с помощью управляющего сигнала. Шина чтения подключалась к шине записи через неинвертирующий буфер, поэтому любые данные, появляющиеся на шине чтения, также появлялись на шине записи. Другие управляющие сигналы могли копировать данные шины записи обратно в регистры.
Передача данных работала следующим образом: для перемещения адреса следующей инструкции из регистра B в регистр S подавался управляющий сигнал RB (чтение B); это приводило к перемещению адреса из регистра B на шину чтения, а затем на шину записи. Управляющий сигнал WS (запись S) перемещал адрес из шины записи в регистр S.
Несколько регистров могли быть одновременно прочитаны на шине чтения. Когда это происходило, данные из каждого регистра включались в шину с помощью операции ИЛИ. Эта функция включалась в шину с помощью ИЛИ использовалась для реализации инструкции Mask, которая была логической операцией И. Поскольку AGC не имел собственной возможности выполнять логическое И , но мог выполнять логическое ИЛИ через шину и мог дополнять (инвертировать) данные через регистр C, теорема Де Моргана использовалась для реализации эквивалента логического И. Это достигалось путем инвертирования обоих операндов, выполнения логического ИЛИ через шину и последующего инвертирования результата.
Программное обеспечение AGC было написано на языке ассемблера AGC и хранилось в памяти троса . Основная часть программного обеспечения находилась в памяти троса только для чтения и, таким образом, не могла быть изменена в процессе эксплуатации, [20] но некоторые ключевые части программного обеспечения хранились в стандартной памяти на магнитных сердечниках для чтения и записи и могли быть перезаписаны астронавтами с помощью интерфейса DSKY, как это было сделано на Аполлоне-14 .
Простая операционная система реального времени, разработанная Дж. Халкомбом Лэнингом [21], состоящая из «Exec», пакетного планирования заданий с использованием кооперативной многозадачности , [22] и управляемого прерываниями упреждающего планировщика, называемого «Waitlist», который планировал управляемые таймером «задачи», управляла компьютером. Задачи представляли собой короткие потоки выполнения, которые могли перепланировать себя для повторного выполнения в списке ожидания или могли начать более длительную операцию, начав «задание» с помощью Exec. Расчеты проводились с использованием метрической системы , но показания на дисплее отображались в единицах футы, футы в секунду и морские мили — единицах, к которым привыкли астронавты «Аполлона». [23]
AGC имел сложный программный интерпретатор, разработанный Лабораторией инструментальных средств Массачусетского технологического института , который реализовал виртуальную машину с более сложными и эффективными псевдоинструкциями, чем собственный AGC. Эти инструкции упрощали навигационные программы. Интерпретируемый код, который включал тригонометрические операции двойной точности , скалярную и векторную арифметику (16 и 24 бит), даже MXV
инструкцию (матрица × вектор), мог быть смешан с собственным кодом AGC. Хотя время выполнения псевдоинструкций было увеличено (из-за необходимости интерпретировать эти инструкции во время выполнения), интерпретатор предоставлял гораздо больше инструкций, чем изначально поддерживал AGC, а требования к памяти были намного ниже, чем в случае добавления этих инструкций в собственный язык AGC, что потребовало бы дополнительной памяти, встроенной в компьютер (в 1960-х годах память была очень дорогой). Среднее время выполнения псевдоинструкции составляло около 24 мс. Ассемблер, названный YUL в честь раннего прототипа Christmas Computer , [24] обеспечивал правильные переходы между собственным и интерпретируемым кодом.
Набор процедур пользовательского интерфейса с прерываниями, называемый «Пинбол», предоставлял клавиатурные и дисплейные сервисы для заданий и задач, запущенных на AGC. Был предоставлен набор доступных пользователю процедур, чтобы позволить астронавтам отображать содержимое различных ячеек памяти в восьмеричном или десятичном виде группами по 1, 2 или 3 регистра за раз. Были предоставлены процедуры «Монитор», чтобы оператор мог инициировать задачу для периодического повторного отображения содержимого определенных ячеек памяти. Задания могли быть инициированы.
Принципы проектирования, разработанные для AGC Лабораторией приборостроения Массачусетского технологического института , которой в конце 1960-х руководил Чарльз Дрейпер , стали основополагающими для разработки программного обеспечения — в частности, для проектирования более надежных систем, которые полагались на асинхронное программное обеспечение, приоритетное планирование, тестирование и возможность принятия решений человеком в контуре . [25] Когда были определены требования к проектированию AGC, необходимого программного обеспечения и методов программирования не существовало, поэтому их пришлось разрабатывать с нуля. Многие из используемых алгоритмов траектории и наведения были основаны на более ранних работах Ричарда Баттина . [21] Первый полет командного модуля контролировался программным пакетом под названием CORONA, разработкой которого руководил Алекс Космала. Программное обеспечение для лунных миссий состояло из COLOSSUS для командного модуля, разработкой которого руководил Фредерик Мартин, и LUMINARY [26] для лунного модуля под руководством Джорджа Черри. Детали этих программ были реализованы командой под руководством Маргарет Гамильтон . [27] Гамильтон очень интересовался тем, как астронавты будут взаимодействовать с программным обеспечением, и предсказал типы ошибок, которые могли возникнуть из-за человеческого фактора. [22] [27] В общей сложности разработка программного обеспечения в рамках проекта заняла 1400 человеко-лет , при этом пиковая численность рабочей силы составляла 350 человек. [21] В 2016 году Гамильтон получила Президентскую медаль Свободы за свою роль в создании программного обеспечения для полета.
Программное обеспечение бортового компьютера Apollo оказало влияние на конструкцию Skylab , Space Shuttle и ранних систем управления истребителями. [28] [29]
Компьютер управления «Аполлоном» называли «четвертым астронавтом» за его роль в оказании помощи трем астронавтам, которые на него полагались: Нилу Армстронгу , Баззу Олдрину и Майклу Коллинзу . [30]
Версия AGC Block II была разработана в 1966 году. Она сохранила базовую архитектуру Block I, но увеличила стираемую память с 1 до 2 килослов. Постоянная память была расширена с 24 до 36 килослов. Инструкции были расширены с 11 до 34, а каналы ввода-вывода были реализованы для замены регистров ввода-вывода в Block I. Версия Block II — это та, которая фактически летала на Луну. Block I использовался во время беспилотных полетов Apollo 4 и 6 и находился на борту злополучного Apollo 1 .
Решение расширить память и набор инструкций для блока II, но сохранить ограничительный трехбитный код операции блока I и 12-битный адрес имело интересные последствия для дизайна. Были использованы различные трюки, чтобы втиснуть дополнительные инструкции, такие как наличие специальных адресов памяти, которые при обращении к ним реализовывали определенную функцию. Например, INDEX
адрес 25 запускал RESUME
инструкцию для возврата из прерывания. Аналогично, INDEX
17 выполнял INHINT
инструкцию (запрещал прерывания), а INDEX
16 снова включал их ( RELINT
). Другие инструкции были реализованы путем предварения их специальной версией, TC
называемой EXTEND
. Адресные пространства были расширены за счет использования регистров Bank (фиксированный) и Ebank (стираемый), поэтому единственной памятью любого типа, к которой можно было обратиться в любой момент времени, был текущий банк, плюс небольшой объем фиксированной-фиксированной памяти и стираемой памяти. Кроме того, регистр банка мог адресовать максимум 32 килослова, поэтому для доступа к последним 4 килословам требовался регистр Sbank (супербанк). Все вызовы подпрограмм между банками должны были инициироваться из фиксированной памяти с помощью специальных функций для восстановления исходного банка во время возврата: по сути, это была система дальних указателей .
В Block II AGC также есть EDRUPT
инструкция (название является сокращением от Ed's Interrupt , в честь Эда Смолли, программиста, который ее запросил). Эта инструкция не генерирует прерывание, а выполняет два действия, которые являются общими для обработки прерываний. Первое действие запрещает дальнейшие прерывания (и требует RESUME
инструкции для их повторного включения). Во втором действии ZRUPT
регистр загружается текущим значением счетчика программ (Z). Она использовалась только один раз в программном обеспечении Apollo для настройки последовательности завершения цикла DAP в цифровом автопилоте лунного модуля . [ 31] Считается, что она ответственна за проблемы эмуляции программного обеспечения LEM AGC Luminary.
PGNCS generated unanticipated warnings during Apollo 11's lunar descent, with the AGC showing a 1202 alarm ("Executive overflow - NO CORE SETS"),[32] and then a 1201 alarm ("Executive overflow - NO VAC AREAS").[33][citation needed] The response of the AGC to either alarm was a soft restart. The cause was a rapid, steady stream of spurious cycle steals from the rendezvous radar (tracking the orbiting command module), intentionally left on standby during the descent in case it was needed for an abort.[34][35]
During this part of the approach, the processor would normally be almost 85% loaded. The extra 6,400 cycle steals per second added the equivalent of 13% load, leaving just enough time for all scheduled tasks to run to completion. Five minutes into the descent, Buzz Aldrin gave the computer the command 1668, which instructed it to periodically calculate and display DELTAH (the difference between altitude sensed by the radar and the computed altitude).[nb 1] The 1668 added another 10% to the processor workload, causing executive overflow and a 1202 alarm. After being given the "GO" from Houston, Aldrin entered 1668 again and another 1202 alarm occurred. When reporting the second alarm, Aldrin added the comment "It appears to come up when we have a 1668 up". The AGC software had been designed with priority scheduling, and automatically recovered, deleting lower priority tasks including the 1668 display task, to complete its critical guidance and control tasks. Guidance controller Steve Bales and his support team that included Jack Garman issued several "GO" calls and the landing was successful.[36]
The problem was not a programming error in the AGC, nor was it pilot error. It was a peripheral hardware design bug that had already been known and documented by Apollo 5 engineers.[37] However, because the problem had only occurred once during testing, they concluded that it was safer to fly with the existing hardware that they had already tested, than to fly with a newer but largely untested radar system. In the actual hardware, the position of the rendezvous radar was encoded with synchros excited by a different source of 800 Hz AC than the one used by the computer as a timing reference. The two 800 Hz sources were frequency locked but not phase locked, and the small random phase variations made it appear as though the antenna was rapidly "dithering" in position, even though it was completely stationary. These phantom movements generated the rapid series of cycle steals.
J. Halcombe Laning's software and computer design saved the Apollo 11 landing mission. Had it not been for Laning's design, the landing would have been aborted for lack of a stable guidance computer.[37][38]
The AGC formed the basis of an experimental fly-by-wire (FBW) system installed into an F-8 Crusader to demonstrate the practicality of computer driven FBW. The AGC used in the first phase of the program was replaced with another machine in the second phase, and research done on the program led to the development of fly-by-wire systems for the Space Shuttle. The AGC also led, albeit indirectly, to the development of fly-by-wire systems for the generation of fighters that were being developed at the time.[39]
In 2003, Ron Burkey initiated the Virtual AGC Project, aiming to recover the Apollo Guidance Computer (AGC) source code and build a functional emulator.[40][41] As part of this project, the original code, transcribed and digitized from 1960s hard copies,[42] was made available through the Virtual AGC Project and MIT Museum.[43] This effort gained renewed attention in mid-2016 when former NASA intern Chris Garry uploaded the code to GitHub, generating significant media buzz.[44][45][46]
Feature Stories