Один мегагерц, который высадил человека на Луну и изменил мир сильнее, чем вы думаете
Если фраза «один маленький шаг для человека» стала символом американского космического триумфа для всего мира, то бортовой навигационный компьютер AGC стал символом этого триумфа для инженеров и программистов. Именно благодаря ему зародилась Кремниевая долина, определившая технологический облик конца XX и начала XXI века.
Производство электроники для Apollo стало первым массовым заказом интегральных схем в истории: в 63 году на нужды программы шло 60% всех выпускаемых микросхем. Этот заказ превратил Fairchild Semiconductor (будущего «родителя» Intel) из стартапа в крупнейшего производителя микроэлектроники своего времени, с большим отрывом обгоняя Texas Instruments.
Сначала интегральные схемы не казались привлекательной технологией: они были значительно дороже дискретных компонентов, а в их надёжности сомневались даже инженеры. Массовый государственный заказ сделал возможным приток инвестиций и снижение себестоимости. А успех Аполлона и безотказная работа электроники в суровых космических условиях стали лучшей рекламой. Без этого массовая микроэлектроника появилась бы в мире гораздо позже.
Так начиналась новая эпоха — не только в железе, но и в программировании. Термин software engineering вошел в обиход, именно благодаря Маргарет Гамильтон, руководившей разработкой ПО для AGC и стремившейся подчеркнуть, что программирование — это полноценная и самостоятельная инженерная дисциплина.
И это не считая того, что AGC содержал первую операционную систему реального времени с вытесняющей многозадачностью, а также программную виртуальную машину (прообраз современного микрокода) — для выполнения сложных математических операций. Вдобавок к этому — впервые использовался высокоуровневый компилятор (для алгебраических выражений).
Для управления столь сложной миссией потребовалось немало электроники — по меркам своего времени. Сложные вычислительные блоки были в каждом компоненте программы Аполлон: Launch Vehicle Digital Computer (LVDC) — в ракете-носителе Saturn V, Apollo Guidance Computer (AGC) — в командном и лунном модулях, с разными программами для каждого. На случай аварийной ситуации в лунном модуле предусматривалась резервная система — Abort Guidance System (AGS), задачей которой было лишь одно: вернуть астронавтов домой.
Ну а теперь — обо всём по порядку.
Saturn V, или самая большая пороховая бочка в истории
Всё управление этой трёхступенчатой махиной высотой с 36-этажный дом было сосредоточено в кольцевом отсеке третьей ступени — Instrument Unit. Мозгом ракеты служил Launch Vehicle Digital Computer (LVDC), связанный с другими системами через адаптер LVDA. Он координировал работу с:
инерциальными сенсорами ST-124 (IMU)
отдельным аналоговым Flight Control Computer (FCC) — управлявшим вектором тяги
радиокоммуникационной системой для приёма команд с Земли
пиропатронами, разделяющими ступени в нужный момент
Если LVDC был мозгом ракеты, то FCC — её вестибулярный аппарат. Полностью аналоговый, исключительно надёжный вычислитель, отвечавший за ориентацию ракеты и управление вектором тяги. Для отказоустойчивости он был реализован с тройной избыточностью: три параллельных канала выполняли одни и те же расчёты, а результат выбирался по принципу мажоритарного голосования — по совпадению двух из трёх сигналов.
Независимо от основного компьютера работала система аварийного спасения (Emergency Detection System, EDS). Её задача — мгновенно реагировать на критические отклонения ракеты и запуск системы спасения экипажа.
Launch Vehicle Digital Computer (LVDC)
Компьютер, управлявший всеми этапами полёта ракеты, представлял собой «бутерброд» из трёх блоков: логического, памяти и адаптера ввода-вывода (LVDA), соединённых в герметичном корпусе (у LVDA был собственный корпус). При всей своей важности по производительности он едва дотягивал до Arduino, а весил при этом 214 фунтов (97,1 кг) и потреблял 137 Вт.
Блок логики выглядел как «серверная стойка» из 18 × 5 = 90 функциональных модулей (Page Assembly). Все модули делились на пять групп (каналов): 1, 2 и 3 — полностью идентичные для тройной избыточности, 4 и 5 — вспомогательная логика ввода-вывода и принятия решений (Disagreement Detectors, DD).
Каждый Page Assembly состоял из до 30 Unit Logic Devices (ULD) — небольших керамических модулей размером 7,6 × 8 мм, каждый из которых содержал один логический элемент (стандартную «ячейку», если угодно) на четырёх кремниевых кристаллах с прецизионными толстоплёночными резисторами. Всего применялся 51 тип таких элементов. Разработанные IBM специально для космоса, ULD отличались высокой надёжностью, точностью и возможностью модульной замены, в отличии от ранних интегральных схем.
К сожалению, до нас дошла лишь часть документации по LVDC — в частности, почти нет сведений о том, как IBM производила ULD, только высокоуровневые отчёты. Поэтому энтузиасты занимаются реверс-инжинирингом логики LVDC.
Saturn V Launch Vehicle Digital Computer (LVDC) Circuit Board
LVDC поддерживал до восьми модулей ферритовой памяти, каждый ёмкостью 4096 слов по 28 бит (26 бит данных + 2 бита чётности). Максимальная конфигурация давала 32 768 слов — примерно 96 КБ.
Каждый модуль весил около 5 фунтов (2,3 кг) и содержал стек из 14 плоскостей ферритовых колец размером 128 × 64 ячейки, вместе с вспомогтальеной логикой (для выбора нужной ячейки) и усилителей сигналов.
Через каждое кольцо диаметром 0,8 мм вручную протягивались четыре провода: X, Y, Sense и Inhibit. Всего в одном модуле насчитывалось 114 688 колец.
Программы для LVDC до нас дошли тоже не все, точнее способ написания прогррамы для LVDC сильно отличался и поэтому у нас есть только набор отрывков для разных миссий. В отличие от AGC, где весь код был единым целым, в LVDC программы были модульными, с соглашением по какому адресу находятся «интерфейсы» того или иного модуля. Разработчик модуля мог никогда не видеть кода другого модуля и не представлять как он работал. Подчерк IBM — подход к проектированию ПО, повторяет модульный подход к проектированию железа.
Pings из космоса
Вся электронная часть кокпита лунного и командного модулей называлась: Primary Guidance, Navigation, and Control System (PGNCS), произносилась — пингс 🙃
Она включала:
коммуникационные VHF-транспондеры и приёмо-передатчики телеметрии
систему радаров
инерциальную навигационную систему (IMU): акселерометр и оптический звездный навигатор
управление двигателями и системой ориентации (RCS)
навигационную панель с необходимой информацией
клавиатуру и дисплей — Display and Keyboard (DSKY), произносилось —DIS-kee
В центре всего этого находился и управлял всем — Apollo Guidance Computer (AGC).
Компьютером был цельнометаллический блок весом 32 кг, который крепился к плите с водяным охлаждением (обычная космическая практика) и «пользовательский интерфейс» — Display and Keyboard (DSKY), который представлял собой цифровую клавиатуру и электролюминесцентные 7-сегментные 5-разрядные индикаторы.
Астронавты вводили команды с помощью цифровых кодов в последовательности «глагол (verb) – существительное (noun)», например «отобразить скорость». Пятиразрядные дисплеи показывали значения трёх регистров — в десятичном формате со знаком ± или в восьмеричном без знака. Такой богатый интерфейс и астронавты должны были знать все команды, параметры и программы наизусть.
Подробный отчёт [pdf] о внутреннем устройстве DSKY и инструкции по воссозданию реплики. Документация NASA по командам и индикации интерфейса.
Внутренне AGC представлял собой два блока из заменяемых модулей. Первоначально сомневались в надёжности интегральных схем, поэтому требовалась заменяемость и ремонтопригодность — предполагалось, что астронавты смогут проводить замену прямо в космосе (например, из двух AGC собрать один 🙂). Впоследствии это требование из ТЗ убрали.
Верхний блок был блоком памяти: справа располагался 72КБ ROM, чёрные модули — 4КБ RAM, остальное — служебные драйверы памяти. Нижний блок содержал логику и интерфейс ввода-вывода.
Для AGC потребовалось 4100 NOR-вентилей, 3 000 интегральных схем и 17 000 транзисторов. Это составляло 60% всех интегральных схем, произведённых в США в период с 1962 по 1967 год. При тактовой частоте 1 МГц (внешний источник — 2 МГц) его производительность достигала 14 245 операций с плавающей точкой в секунду (FLOPS), при энергопотреблении 55 Вт. Для сравнения, более тяжёлый и энергоёмкий LVDC (в 2,5-3 раза по весу и потреблению) выполнял 12 190 инструкций в секунду.
Отчасти это стало возможным благодаря миниатюризации интегральных схем, а отчасти — использованию неизменяемой памяти (ROM), которую прошивали вручную. Процесс занимал около восьми недель машинно-ручного труда. Для этого была создана специальная «швейная машина», которая считывала данные с перфоленты и точно позиционировала ферритовое кольцо. Затем вручную через каждое кольцо продевали 192 провода считывания (sense wires), кодируя единицу, или обходили кольцо — кодируя ноль. Эта обеспечивало самую высокую плотность хранения данных того времени.
Abort Guidance System (AGS)
Лунный модуль отличался от командного тем, что кроме основного AGC в нём был второй резервный компьютер — Abort Guidance System (AGS), предназначенный для аварийных ситуаций. Забавно, что изначально AGS называлась «Backup Guidance System» (резервная система навигации), но её аббревиатуру (BUGS) сочли слишком неудачной.
AGS был полностью независимым компьютером, напрямую связанным с инерциальной навигационной системой (IMU), двигателями и датчиками аварийной системы — Abort Sensor Assembly (ASA). А для взаимодействия с экипажем он имел собственный интерфейс ввода-вывода — Data Entry and Display Assembly (DEDA).
Разрабатывался он также независимо — в итоге каждая вычислительная система имела собственную архитектуру и проектировалась разными организациями:
LVDC — IBM
AGC — MIT Instrumentation Lab
AGS — TRW
Во время Apollo-10 AGS чуть не привёл к аварии при сближении с Луной — из-за ошибки в процедурах экипажа. В этой миссии посадка не планировалась, проводилось лишь тестирование полёта лунного модуля. На высоте около 100 м над поверхностью командир Том Стаффорд по ошибке переключил AGS в режим «наведение на CM» вместо «удержания ориентации», из-за чего система резко развернула LM в сторону командного модуля.
Понять скромные масштабы модулей, в которых жили астронавты, можно по тренажёру: здесь в центре виден DSKY, а правее его, рядом с джойстиком — DEDA.
Наследие
Хотя эпоха «Аполлонов» давно осталась в прошлом, но её наследие сегодня выливается во множество хобби и образовательных проектов.
Восстановление оригинального AGC
Apollo Guidance Computer Restoration (43 videos)
Marc Verdiell: Restoring the Apollo Guidance Computer
Virtual AGC
С 2003 года энтузиасты собирают и оцифровывают документацию, схемы и исходный код для компьютеров «Аполлона». Благодаря этому сегодня можно запустить в эмуляторе оригинальные программы миссий — от Apollo 7 до Apollo 17. Для AGC есть даже verilog модель всей логики (привет FPGA версии). Это используют для обучения будущих инженеров, интеграции в игры и 3D-симуляции и просто экспериментов. Исходники и вся документация на GitHub проекта. И конечно вселенная не может существовать без версии на Rust 🙂
DSKY реплики
DIY-сообщество создало множество проектов по воссозданию DSKY — в первую очередь потому, что их можно подключить к Virtual AGC и по-настоящему «полетать» на «Аполлоне»:
Реплика на Raspberry Pi с эмулятором yaAGC — компактный и доступный вариант для домашнего стенда.
DSKY-matic — максимально близкий к оригиналу по внешнему виду.
Реплика с электролюминесцентным дисплеем — с тем самым мягким «зелёным» свечением, как в 60-е.
Механически точная копия DSKY — повторяет конструкцию оригинала вплоть до механики клавиш.
А ещё кто-то выпустил наручные часы в виде DSKY.
Apollo 11 VR
В Steam есть симулятор Apollo 11 в VR, позволяющий пережить миссию от старта до посадки на Луну. А что будет если к ней подключить Virtual AGC и реалистичную физику?

















