25 августа 1966 года командный и служебный отсеки корабля «Аполлон-3» (Apollo Command Module) были установлен на ракету-носитель «Сатурн-1Б» и отправлены в беспилотную испытательную миссию AS-202 на высоту 1136 км. Этот запуск стал третьим испытательным пуском «Сатурна-1Б» после AS-201 и AS-203. Но он стал первым полётом корабля с установленными системами управления и ориентации. Первый раз бортовой компьютер AGC (Apollo Guidance Computer) поднялся в небо. Эти испытания должны были доказать, что корабль «Аполлон» способен доставить людей на Луну и вернуть обратно.
Логические модули компьютера КА Аполлон. Кадр из видео: Франсуа Раутенбах
Moonjs — это небольшой эмулятор бортового компьютера космического аппарата «Аполлон».
Эта программа не была создана с нуля, это всего лишь порт написанного на С# Рональдом Бёрки Virtual AGC на javavascript с использованием asm.js и компилятора Emscripten.
У компьютера нет своего собственного специального названия, чаще всего его называют AGC по первым буквам Apollo Guidance Computer. По экземпляру было установлено в командном и лунном модулях. Впервые ввели в строй AGC в августе 1966 года, отказались от его использования в июле 1975.
Компьютер работает на частоте 2,048 МГц (основной, впрочем, является частота 512 кГц) и обладает оперативной памятью на 2048 (в ранних версиях — 1024) слов по 16 бит, при этом один из этих битов — бит чётности, поэтому для использования доступны только 15 бит. Объём ПЗУ составлял 36864 слов, в ранней версии — 24576.
Использовались 4 16-битных регистра: один для основных вычислений, один для счётчика команд, один для остатка для выполнения команды DV или адреса точки возврата для безусловного перехода и один для младшей части произведения при умножении. Из-за бита чётности и бита на переполнение для использования были доступны только 14 бит.
Масса AGC без панелей управления — примерно 32 кг, он потреблял порядка 70 ватт энергии при работе от сети в 28 вольт постоянного тока и ровно 15 ватт в простое.
Впервые использовались интегральные микросхемы, логика была резисторно-транзисторной. Несмотря на внешнюю скромность показателей, этот компьютер смог доставить 12 человек на поверхность Луны и вернуть их обратно.
Программное обеспечение было написано на ассемблере. Простая операционная система реализовывала многозадачность с исполнением до 8 задач, при этом одна из них всегда присутствовала с наименьшим приоритетом — она была создана для работы лампочки активности компьютера.
Для астронавтов AGC выглядел как восьмикилограммовая панель DSKY с семисегментными индикаторами, сигнальными огнями и кнопками небольшой клавиатуры, посредством которых производился ввод.
Забавно, что данные хранились в метрической системе, но отображались для астронавтов в более распространённых в США футах и милях.
Команды вводятся в виде двух двухзначных чисел, которые называются глагол (verb) и существительное (noun). Как следует из названий, глагол указывал на операцию, а существительное — на область данных. Дисплей управлялся с помощью реле, что замедляло обновление. В более поздних моделях эта часть уже работала на полупроводниках.
Полный список всех глаголов и существительных можно посмотреть в разделе 4.4 второго тома руководства оператора. Но для того, чтобы немного поиграть с эмулятором, это ни к чему.
Команды даются в виде последовательности вида V35E или V16N65E. E означает нажатие кнопки ENTR, V — VERB (глагол), N — NOUN (существительное).
Простые операции:
• V35E (VERB, 3, 5, ENTR) — тест приборной панели. Обратите внимание, что после выполнения операции индикатор PROG не загорается. Этот баг эмулятор наследует с Virtual AGC. • V16N65E или V16N36E показывает время с момента включения компьютера. Первая строчка показывает часы, вторая — минуты, третья — секунды. • Если время с момента загрузки симулятора раздражает, то задать реальное можно вводом V25N36E. Затем в R1 можно будет ввести часы, в R2 — минуты, в R3 — секунды. При вводе следует поставить + перед числом, так компьютер отделяет восьмеричные числа от десятичных. Вводить следует пять цифр, включая три нуля перед временем. По завершении ввода каждой строчки следует нажать ENTR. При вводе секунд следует учитывать, что секунды вводятся с точностью до сотых, поэтому для ввода 35 секунд нужно ввести +03500. По окончании ввода система может лампой KEY REL попросить вернуть ей возможность использовать дисплей для отображения данных, что следует сделать нажатием одноимённой кнопки. • V37E00E (обратите внимание: 00 не является существительным, после ввода V37 происходит нажатие ENTR, ввод 00 и повторное нажатие ENTR) запускает программу бездействия, в которой эмулируемый компьютер потребляет те самые 15 ватт. • V91E покажет контрольную сумму банков памяти. Первое число на экране будет контрольной суммой, второе — номером банка, третье — bugger word (разработчики немного напроказничали с этим названием). Кнопкой PRO можно переключиться на следующий банк данных. Обратите внимание, что bugger word банка 6 — 05143, что указывает на загруженную программу Colossus 249. Если бы использовалась Artemis 072, то это число было бы равно 04275.
После этого знакомства с интерфейсом самое время отправиться на Луну.
• Нажмите кнопку Enable IMU. Дайте 85—90 секунд для раскрутки гироскопов и старта других частей системы. • После того, как погаснет NO ATT, введите V37E01E (VERB, 3, 7, ENTR, 0, 1, ENTR). Загрузится режим 01, который предназначен для подготовки к запуску ракеты или инициализации сервисов. PROG будет отображать 01, если это не случится, попробуйте ещё раз через некоторое время. • Подождите калибровки гиростабилизатора (установления тангажа, pitch на значение, близкое 90°). Автоматически будет изменён режим работы, и PROG будет показывать 02. • Нажмите кнопку Launch для запуска. Начнётся отсчёт времени полёта, Mission Elapsed Time (MET). После запуска PROG переключится на 11, режим выведения на орбиту Земли. • DSKY будет показывать числовые значения (сверху вниз) скорости в футах в секунду (для быстрого перевода в метры достаточно умножить на 3 и разделить на 10), скорости изменения высоты в футах в секунду и высоту над стартовым столом в морских милях (1 морская миля = 1852 м). Формат последнего — XXXX.X, то есть реальные значения в десять раз ниже отображаемых. • Двигатели будут работать на протяжении 11 минут 44 секунд. Будут выполняться программы управления тангажом и вращением. • В любой момент можно отследить параметры орбиты введением V82E. Значения сверху вниз: высоты апоцентра и перицентра в морских милях в формате XXXX.X, время до свободного падения в формате XXXX, где первые два числа — часы, вторые два — минуты. Для возврата к скоростям и высоте нажмите PRO. • После успешного запуска апоцентр и перицентр должны быть выше 90 морских миль.
К счастью, теперь кое-что наконец-то нашлось. Южноафриканский инженер Франсуа Раутенбах (Francois Rautenbach) обнаружил в мусоре модули памяти от первого в истории бортового компьютера для автоматического управления и ориентации в космосе. Того самого компьютера, установленного на американском корабле, который мы сейчас называем «Аполлон-3».
Инженер аккуратно изучил находку и считал данные памяти с помощью хитроумной конструкции из множества реле и осциллографа.
Чтение памяти из модуля AGC. Кадр из видео: Франсуа Раутенбах
Постоянное запоминающее устройство. Кадр из видео: Франсуа Раутенбах
Первым делом инженеру пришлось разбирать в цоколёвке гигантской объединительной платы, установленной на задней части каждого модуля памяти. Франсуа нашёл документацию с описанием разводки выводов, внимательно изучил схемы — и сумел провести обратную разработку интерфейса, который давно не выпускается.
Документация с описанием разводки выводов. Кадр из видео: Франсуа Раутенбах
На следующем этапе он просветил модуль рентгеновским излучателем, чтобы понять его внутреннюю конструкцию. Инженеру помог знакомый кардиолог Дирк Преториус (Dirk Pretorius) в местном госпитале Gateway, который предоставил доступ к ретгеновскому аппарату. Модуль положили на кушетку для пациента — и просветили.
Просветка ПЗУ рентгеновским излучателем. Кадр из видео: Франсуа Раутенбах
Здесь нужно быть очень осторожным, потому что данные модули — единственный сохранившийся носитель программного обеспечения «Аполлона-3». Каждый бит, который удастся считать оттуда, имеет высочайшую ценность и представляет замечательное достижение технологической археологии.
По мнению инженера, это не просто первый экземпляр компьютера, который использовали в программе «Аполлон», но вообще первый в мире микрокомпьютер. Он намного опередил коммерческие микрокомпьютеры, такие как Datapoint 2200 производства компании CTC (1970 год), Altair 8800 (1974 год) и др.
Копия этого артефакта из AS-202 позже полетела к лунной орбите на корабле «Аполлон-11» и управляла спуском лунного модуля.
Лунный модуль КА «Аполлон». Фото: НАСА
Процедуру дизассемблирования Франсуа во всех деталях снимал на видео, которое опубликовал на YouTube.
Постоянное запоминающее устройство. Часть 1. Введение (9:03)
Постоянное запоминающее устройство. Часть 2. Конструкция (8:53)
Бортовой управляющий компьютер КА «Аполлон». Внешний осмотр (6:12)
Вероятно, эти первые несколько серий не станут последними, и Франсуа Раутенбах продолжит исследовательскую работу.
Находка южноафриканского инженера — безусловно, одно из величайших открытий компьютерной истории, сделанное в 21 веке. Тем удивительнее, что скромный Франсуа Раутенбах не стремится привлекать себе внимание. Публикация его видеороликов на YouTube прошла совершенно незамеченной, и только через несколько дней на неё обратили внимание в местных СМИ.
История находки тоже интересная. По словам инженера, он заинтересовался лунными компьютерами, прочитав книгу Фрэнка О'Брайена «Компьютеры Apollo. Руководство: Архитектура и эксплуатация», опубликованную в 2010 году. Из этой книги он узнал, что AGC был чрезвычайно продвинутым и мощным компьютером, и начал искать дополнительные материалы по этой теме.
Однажды друг из Хьюстона прислал ему фотографии мусора, который остался от запуска AS-202 в 1966 году. На фотографиях он увидел предметы, которые очень напоминали модули ПЗУ от бортового компьютера. Инженер изучил фотографии и документы по конструкции AGC — и понял, что это действительно те самые модули памяти, на которых записан код программы от первого микрокомпьютера в истории человечества.
Он вычислили источник фотографий. Оказалось, что некий человек пытался продать на аукционе eBay эти модули и другие модули компьютера «Аполлона» вместе с трёхтонной грудой металлолома, которая лежала на заднем дворе дома. Но к нему пришли агенты ФБР и попросили объяснить, откуда у него эти вещи. Мужчина смог найти инвойс о покупке металлолома, но снял его с аукциона. Он не хотел, чтобы в США кто-нибудь знал об этих деталях, поэтому обратился к покупателю за пределами страны. «Быть неамериканцем иногда выгодно», — шутит Раутенбах.
Франсуа говорит, что давно интересовался компьютерной историей. Он профессионально занимался разработкой аппаратного обеспечения и программированием в разных областях: от встроенного ПО до высокозащищённых систем, в последнее время занимается платёжными системами. Космические аппараты 1960-х годов далеки от профессиональной области Франсуа, но опыт в смежных областях разработки электроники и программирования позволил ему довольно профессионально «секвенировать» историческую находку.
В прошлом году инженер полетел в Хьюстон — и удостоверился в аутентичности модулей. После этого он оплатил доставку металлолома в ЮАР и связался с Элдоном Холлом, одним из разработчиков компьютера AGC и автором книги «Путешествие к Луне. История бортового управляющего компьютера КА Аполлон». С его помощью энтузиаст выяснил, что сам компьютер с AS-202, как и другие артефакты лунной программы, сейчас хранится на легендарном авианосце USS Hornet, который превратили в музей. А вот модули памяти и другие компьютерные комплектующие были проданы как мусор в 1976 году. И у НАСА не осталось ни единой копии программного обеспечения от первого микрокомпьютера.
Если южноафриканский инженер продолжит начатое, то скоро специалисты НАСА и все остальные смогут ознакомиться с этим уникальным экземпляром компьютерной истории.
Публикацию видеороликов Франсуа Раутенбах приурочил к 50-летию запуска AS-202.
Тот самый продавец, которого навещало ФБР, попросил сохранить его имя в тайне...