stringtranslate.com

Компьютер управления Аполлоном

Компьютер управления 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 .

Интерфейс дисплея и клавиатуры (DSKY) бортового компьютера управления Apollo, установленного на панели управления командного модуля, с пилотажно-командным указателем положения (FDAI) над ним
Частичный список числовых кодов глаголов и существительных в бортовом компьютере Apollo, напечатанный для быстрой справки на боковой панели

Каждая лунная миссия имела два дополнительных компьютера:

Дизайн

Фотография двухэлементной микросхемы NOR, используемой для построения бортового компьютера Apollo Block II. Соединения (по часовой стрелке от верхнего центра): земля, входы (3), выход, питание, выход, входы (3).
Схема двойного 3-входового логического элемента ИЛИ-НЕ АРУ
Интегральные схемы из кремния в плоском корпусе , приваренные к печатной плате в компьютере управления «Аполлона»

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 

Интерфейс DSKY

Блок пользовательского интерфейса компьютера Apollo DSKY
Схема интерфейса LM DSKY

Пользовательским интерфейсом 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-битных регистра для общего вычислительного использования, называемых центральными регистрами :

Также было четыре места в основной памяти, по адресам 20–23, названные местами редактирования, поскольку все, что там хранилось, появлялось сдвинутым или повернутым на одну битовую позицию, за исключением одного, которое сдвигало вправо семь битовых позиций, чтобы извлечь один из семибитных интерпретирующих кодов операции, которые были упакованы по два в слово. Это было общим для AGC блока I и блока II.

Другие регистры

Прототипы DSKY и AGC, представленные в Музее компьютерной истории . AGC открывается, показывая его логические модули.
Прототип логического модуля из блока I AGC
Логический модуль Block II с микросхемами в плоском корпусе

В AGC имелись дополнительные регистры, которые использовались внутри в ходе работы:

Набор инструкций

Формат инструкции использовал 3 бита для кода операции и 12 бит для адреса. Блок I имел 11 инструкций: TC, CCS, INDEX, XCH, CS, TS, AD, и MASK(базовые), и SU, MP, и DV(дополнительные). Первые восемь, называемые базовыми инструкциями , были напрямую доступны 3-битному коду операции. Последние три были обозначены как инструкции extracode , потому что доступ к ним осуществлялся путем выполнения специального типа TCинструкции (называемой EXTEND) непосредственно перед инструкцией.

Инструкции AGC блока I состояли из следующего:

TC(передача управления)
Безусловный переход по адресу, указанному инструкцией. Адрес возврата автоматически сохранялся в регистре Q, поэтому TCинструкцию можно было использовать для вызовов подпрограмм.
CCS(посчитать, сравнить и пропустить)
Сложная инструкция условного перехода. Регистр A был загружен данными, полученными из адреса, указанного инструкцией. (Поскольку AGC использует нотацию с дополнением до единиц , есть два представления нуля. Когда все биты установлены в ноль, это называется плюс ноль . Если все биты установлены в единицу, это называется минус ноль .) Затем было вычислено уменьшенное абсолютное значение (DABS) данных и сохранено в регистре A. Если число было больше нуля, DABS уменьшает значение на 1; если число было отрицательным, оно дополняется до применения декремента — это абсолютное значение. Уменьшенное означает «уменьшенное, но не ниже нуля». Поэтому, когда AGC выполняет функцию DABS, положительные числа будут стремиться к плюс нулю, и то же самое будут делать отрицательные числа, но сначала раскрывая свою отрицательность с помощью четырехстороннего пропуска ниже. Последний шаг 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, ADONE. Любопытным побочным эффектом было создание и использование -дыр CCS, когда было известно, что проверяемое значение никогда не бывает положительным, что происходило чаще, чем можно было бы предположить. Это оставило два целых слова незанятыми, и специальный комитет был ответственен за назначение констант данных этим дырам.
INDEX
Добавить данные, извлеченные по адресу, указанному инструкцией, к следующей инструкции. INDEXможет использоваться для добавления или вычитания значения индекса из базового адреса , указанного операндом следующей инструкции INDEX. Этот метод используется для реализации массивов и табличных поисков; поскольку добавление выполнялось для обоих целых слов, он также использовался для изменения кода операции в следующей (extracode) инструкции, а в редких случаях — для обеих функций одновременно.
RESUME
Особый случай INDEX( INDEX25). Это инструкция, используемая для возврата из прерываний. Она заставляет выполнение возобновиться с прерванного места.
XCH(обмен)
Обменять содержимое памяти с содержимым регистра A. Если указанный адрес памяти находится в фиксированной (только для чтения) памяти, содержимое памяти не затрагивается, и эта инструкция просто загружает регистр A. Если он находится в стираемой памяти, «коррекция» переполнения достигается путем сохранения самого левого из 16 бит в A в качестве знакового бита в памяти, но здесь нет исключительного поведения, как у TS.
CS(очистить и вычесть)
Загрузить регистр A дополнением до единиц данных, на которые ссылается указанный адрес памяти.
TS(передача на хранение)
Сохраните регистр A по указанному адресу памяти. TSтакже обнаруживает и исправляет переполнения таким образом, чтобы распространить перенос для сложения/вычитания с множественной точностью. Если результат не имеет переполнения (крайние левые 2 бита A одинаковы), ничего особенного не происходит; если есть переполнение (эти 2 бита различаются), крайний левый бит отправляется в память как знаковый бит, регистр A изменяется на +1 или −1 соответственно, и управление переходит ко второй инструкции, следующей за TS. Всякий раз, когда переполнение является возможным, но ненормальным событием, TSза следует a TCк логике отсутствия переполнения; когда это нормальная возможность (как в сложении/вычитании с множественной точностью), за TSследует CAFZERO ( CAF= XCHв фиксированную память) для завершения формирования переноса (+1, 0 или −1) в следующее слово с более высокой точностью. Углы сохранялись с одинарной точностью , расстояния и скорости с двойной точностью , а прошедшее время с тройной точностью.
AD(добавлять)
Добавьте содержимое памяти в регистр A и сохраните результат в A. Два крайних левых бита A могут отличаться (состояние переполнения) до и/или после AD. Тот факт, что переполнение является состоянием, а не событием, допускает ограниченные степени переполнения при сложении более двух чисел, пока ни одна из промежуточных сумм не превышает удвоенную емкость слова.
MASK
Выполнить побитовую (логическую) операцию с памятью с регистром A и сохранить результат в регистре A.
MP(умножить)
Умножить содержимое регистра A на данные по указанному адресу памяти и сохранить произведение высокого порядка в регистре A, а произведение низкого порядка — в регистре LP. Знаки частей произведения совпадают.
DV(разделять)
Разделите содержимое регистра A на данные по указанному адресу памяти. Сохраните частное в регистре A, а абсолютное значение остатка — в регистре Q. В отличие от современных машин, числа с фиксированной точкой обрабатывались как дроби (условная десятичная точка сразу справа от знакового бита), поэтому вы могли получить мусор, если делитель не был больше делимого; защиты от такой ситуации не было. В AGC блока II делимое двойной точности начиналось в A и L (LP блока II), а правильно подписанный остаток выдавался в L. Это значительно упростило подпрограмму для деления двойной точности.
SU(вычесть)
Вычесть (дополнение до единицы) данные по указанному адресу памяти из содержимого регистра A и сохранить результат в A.

Инструкции были реализованы в группах по 12 шагов, называемых тактовыми импульсами . Тактовые импульсы были названы от TP1 до TP12. Каждый набор из 12 тактовых импульсов назывался подпоследовательностью инструкций . Простые инструкции, такие как TC, выполнялись в одной подпоследовательности из 12 импульсов. Более сложные инструкции требовали нескольких подпоследовательностей. Инструкция умножения ( MP) использовала 8 подпоследовательностей: начальную, называемую MP0, за которой следовала MP1подпоследовательность, которая повторялась 6 раз, а затем завершалась подпоследовательностью MP3. Это было сокращено до 3 подпоследовательностей в блоке II.

Каждый тактовый импульс в подпоследовательности мог запускать до 5 управляющих импульсов . Управляющие импульсы были сигналами, которые выполняли фактическую работу инструкции, например, считывали содержимое регистра на шину или записывали данные с шины в регистр.

Память

Память сердечника троса AGC (ПЗУ)

Память 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, теорема Де Моргана использовалась для реализации эквивалента логического И. Это достигалось путем инвертирования обоих операндов, выполнения логического ИЛИ через шину и последующего инвертирования результата.

Программное обеспечение

Маргарет Гамильтон стоит рядом со списками программного обеспечения, которое она и ее команда из Массачусетского технологического института разработали для проекта «Аполлон» . [19]

Программное обеспечение 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]

Блок II

Версия 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инструкцию для возврата из прерывания. Аналогично, INDEX17 выполнял INHINTинструкцию (запрещал прерывания), а INDEX16 снова включал их ( RELINT). Другие инструкции были реализованы путем предварения их специальной версией, TCназываемой EXTEND. Адресные пространства были расширены за счет использования регистров Bank (фиксированный) и Ebank (стираемый), поэтому единственной памятью любого типа, к которой можно было обратиться в любой момент времени, был текущий банк, плюс небольшой объем фиксированной-фиксированной памяти и стираемой памяти. Кроме того, регистр банка мог адресовать максимум 32 килослова, поэтому для доступа к последним 4 килословам требовался регистр Sbank (супербанк). Все вызовы подпрограмм между банками должны были инициироваться из фиксированной памяти с помощью специальных функций для восстановления исходного банка во время возврата: по сути, это была система дальних указателей .

В Block II AGC также есть EDRUPTинструкция (название является сокращением от Ed's Interrupt , в честь Эда Смолли, программиста, который ее запросил). Эта инструкция не генерирует прерывание, а выполняет два действия, которые являются общими для обработки прерываний. Первое действие запрещает дальнейшие прерывания (и требует RESUMEинструкции для их повторного включения). Во втором действии ZRUPTрегистр загружается текущим значением счетчика программ (Z). Она использовалась только один раз в программном обеспечении Apollo для настройки последовательности завершения цикла DAP в цифровом автопилоте лунного модуля . [ 31] Считается, что она ответственна за проблемы эмуляции программного обеспечения LEM AGC Luminary.

Программные будильники 1201 и 1202

DSKY и Базз Олдрин на лунном модуле Eagle космического корабля Apollo 11 на пути к Луне

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]

Applications outside Apollo

Fly By Wire testbed aircraft. The AGC DSKY is visible in the avionics bay

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]

Source code release

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]

See also

Notes

  1. ^ More specifically, verb 16 instructs the AGC to print the noun (in this case, 68, DELTAH) approximately twice per second. Had Aldrin known this, a simple 0668 (calculate and display DELTAH, once) would have only added approximately 5% load to the system, and would have only done so once, when ENTER was pressed.

References

  1. ^ Programmer's Manual, Block 2 AGC Assembly Language, retrieved 2018-08-27
  2. ^ a b Hall, Eldon C. (1996), Journey to the Moon: The History of the Apollo Guidance Computer, Reston, Virginia, USA: AIAA, p. 196, ISBN 1-56347-185-X
  3. ^ Interbartolo, Michael (January 2009). "Apollo Guidance, Navigation and Control Hardware Overview" (PDF).
  4. ^ "How did the Apollo flight computers get men to the moon and back ?". 11 March 2017.
  5. ^ James E. Tomayko (1988). "The Apollo guidance computer: Hardware". Computers in Spaceflight: The NASA Experience. NASA. Archived from the original on December 29, 2023.
  6. ^ Agle, D.C. (September 1998). "Flying the Gusmobile". Air & Space. Retrieved 2018-12-15.
  7. ^ "Ramon Alonso's introduction", AGC History Project (Caltech archive, original site closed), MIT, July 27, 2001, retrieved 2009-08-30
  8. ^ "Ramon Alonso's interview (Spanish)", Ramón Alonso, el argentino que llevó a la Apollo 11 a la Luna, Diario La Nacion, March 7, 2010
  9. ^ "Hugh Blair-Smith biography", AGC History Project (Caltech archive, original site closed), MIT, January 2002, retrieved 2009-08-30
  10. ^ "Herb Thaler introduction", AGC History Project (Caltech archive, original site closed), MIT, 14 September 2001, retrieved 2009-08-30
  11. ^ Kurinec, Santosh K; Indovina, Mark; McNulty, Karl; Seitz, Matthew (2021). "Recreating History: Making the Chip that went on the Moon in 1969 on Apollo 11" (PDF). Rochester Institute of Technology. p. 9. Retrieved 29 August 2023.
  12. ^ "LOGIC MODULE ASSEMBLY NO. A1-A16". MIT Instrumentation Lab. July 11, 1963. p. Sheet 1 of 2, Note 2.
  13. ^ "Apollo Requirements for Process Control and Fabrication of Resistance-Welded Electronic Circuit Modules and Assemblies". Archive.org. NASA. May 22, 1963. Retrieved 19 February 2024.
  14. ^ Butrica, Andrew J. (2015). "Chapter 3: NASA's Role in the Manufacture of Integrated Circuits". In Dick, Steven J. (ed.). Historical Studies in the Societal Impact of Spaceflight (PDF). NASA. pp. 149–250. ISBN 978-1-62683-027-1.
  15. ^ "Apollo Guidance Computer and the First Silicon Chips". National Air and Space Museum. Smithsonian Institution. 14 October 2015. Retrieved 1 September 2019.
  16. ^ a b c d e Hall, Eldon C. (1972). MIT's Role in Project Apollo: Final report on contracts NAS 9-163 and NAS 94065 (PDF). Cambridge, MA: MIT. Retrieved 15 June 2021.
  17. ^ Peirce, C. S. (manuscript winter of 1880–81), "A Boolian Algebra with One Constant", published 1933 in Collected Papers v. 4, paragraphs 12–20. Reprinted 1989 in Writings of Charles S. Peirce v. 4, pp. 218–21, Google [1]. See Roberts, Don D. (2009), The Existential Graphs of Charles S. Peirce, p. 131.
  18. ^ "Apollo DSKY panel relight: The full story". YouTube. 27 July 2021.
  19. ^ Weinstock, Maia (2016-08-17). "Scene at MIT: Margaret Hamilton's Apollo code". MIT News. Retrieved 2016-08-17.
  20. ^ Mindell 2008, pp. 154, 157.
  21. ^ a b c Hoag, David (September 1976). "The History of Apollo On-board Guidance, Navigation, and Control" (PDF). Charles Stark Draper Laboratory.
  22. ^ a b Mindell 2008, p. 149.
  23. ^ "The Moon landings". UK Metric Association. 18 October 2018.
  24. ^ "Hugh Blair-Smith's Introduction", AGC History Project (Caltech archive, original site closed), MIT, 30 November 2001, retrieved 2010-03-21
  25. ^ "NASA Honors Apollo Engineer" (Press release). September 3, 2003.
  26. ^ "Virtual AGC Luminary Page".
  27. ^ a b Harvey IV, Harry Gould (13 October 2015). "Her Code Got Humans on the Moon—And Invented Software Itself". WIRED. Retrieved 2018-11-25.
  28. ^ "About Margaret Hamilton". NASA Office of Logic Design. February 3, 2010.
  29. ^ A.J.S. Rayl. "NASA Engineers and Scientists-Transforming Dreams Into Reality". Archived from the original on May 16, 2016.
  30. ^ Fong, Kevin (2019). "13 minutes to the moon: Episode 5 The fourth astronaut". bbc.co.uk. BBC World Service.
  31. ^ O'Brien, Frank (2010-06-25). The Apollo Guidance Computer: Architecture and Operation. Springer Science & Business Media. ISBN 978-1-4419-0877-3.
  32. ^ Collins, Michael; Aldrin, Edwin (1975), Cortright, Edgar M. (ed.), "A Yellow Caution Light", NASA SP-350, Apollo Expeditions to the Moon, Washington, DC: NASA, pp. Chapter 11.4, ISBN 978-0486471754, retrieved 2009-08-30
  33. ^ "chrislgarry/Apollo-11". GitHub. Retrieved 2016-07-17.
  34. ^ Adler, Peter (1998), Jones, Eric M. (ed.), "Apollo 11 Program Alarms", Apollo 11 Lunar Surface Journal, NASA, retrieved 2009-09-01
  35. ^ Martin, Fred H. (July 1994), Jones, Eric M. (ed.), "Apollo 11 : 25 Years Later", Apollo 11 Lunar Surface Journal, NASA, retrieved 2009-09-01
  36. ^ Cortright, Edgar M., ed. (1975), "The Lunar Module Computer", Apollo 11 Lunar Surface Journal, NASA, retrieved 2010-02-04
  37. ^ a b Eyles, Don (February 6, 2004), "Tales From The Lunar Module Guidance Computer", 27th annual Guidance and Control Conference, Breckenridge, Colorado: American Astronautical Society
  38. ^ Witt, Stephen (June 24, 2019). "Apollo 11: Mission Out of Control". Wired. San Francisco: Condé Nast Publications. Retrieved September 18, 2019.
  39. ^ Tomayko, James E. (2000), "NASA SP-2000-4224 — Computers Take Flight: A History of NASA's Pioneering Digital Fly-By-Wire Project" (PDF), The NASA History Series, Washington, D.C.: NASA, retrieved 2009-09-01
  40. ^ Burkey, Ron. "VirtualAGC". iBiblio. Retrieved 10 April 2021.
  41. ^ "AGC source code collection on Github, maintained by iBiblio". GitHub. Archived from the original on 7 May 2021. Alt URL
  42. ^ "Archiving and referencing the Apollo source code". www.softwareheritage.org. Retrieved 2021-09-09.
  43. ^ "Virtual AGC Home Page". ibiblio.org. Retrieved 2021-09-09.
  44. ^ Collins, Keith (9 July 2016). "The code that took America to the moon was just published to GitHub, and it's like a 1960s time capsule". Quartz. Retrieved 19 August 2016.
  45. ^ Garry, Chris. "Original Apollo 11 Guidance Computer (AGC) source code for the command and lunar modules". GitHub. Archived from the original on 12 April 2021. Alt URL
  46. ^ "Apollo 11's source code is now on GitHub". Engadget. 10 July 2016. Retrieved 2021-09-09.

Sources

External links

Documentation on the AGC and its development
Documentation of AGC hardware design, and particularly the use of the new integrated circuits in place of transistors
Documentation of AGC software operation
Some AGC-based projects and simulators

Feature Stories