Mail.RuПочтаМой МирОдноклассникиИгрыЗнакомстваНовостиПоискВсе проекты
Рассылка
Получайте главные новости дня от Hi-Tech Mail.Ru

В открытый доступ выложили программу для лунной миссии «Аполлон-11»

Когда инженеры лаборатории измерительных приборов Массачусетского технологического института (МТИ) в 1960-е годы приступили к разработке программного обеспечения для лунной миссии США, нужных технологий попросту не существовало. Специалистам предстояло их изобрести. Теперь код программного обеспечения доступен на GitHub, и это настоящая капсула времени, пишет Quartz.

Достижения лаборатории измерительных приборов

Лаборатория измерительных приборов МТИ была основана в 1932 году гениальным Чарльзом Старком Дрейпером, отцом инерциальной навигации. В 1973 году она была переименована в честь основателя и отделена от института. Сейчас лаборатория имени Дрейпера является некоммерческой организацией и занимается исследованиями в различных областях – освоения космоса, национальной безопасности, энергетики и здравоохранения.

Разрабатывая программное обеспечение для полета на Луну, специалисты лаборатории создали новый путь сохранения компьютерных программ, который получил название «rope memory» (веревочная память ). Память нового типа позволяла хранить 2,5 МБ данных в носителе объемом 1 м3, аналоги, существовавшие ранее – всего 140 КБ.

Rope Memory. Фото: Wikimedia / Public domain

Кроме того, инженеры МТИ разработали особую версию языка программирования ассемблер. Для многих современных программистов язык ассемблера непонятен сам по себе. Его сложно читать, крайне трудно отлаживать. К тому же, что именно делает конкретный фрагмент кода, понять непросто. Сегодня программирование осуществляется на языках высокого уровня, а вставки на ассемблере, который напрямую обращается к ресурсам устройства, могут присутствовать для оптимизации работы программы с регистрами процессора, памятью и пр.

Ассемблер – язык для машин, а не для людей

На космическом корабле «Аполлон-11» была установлена система Apollo Guidance Computer (AGC). Программисты МТИ написали тысячи строк «эзотерического» кода на ассемблере, чтобы заставить машину выполнять все необходимые расчеты.

Apollo Guidance Computer. Фото: Wikimedia / Public domain

Чтобы понять, как много кода было написано, ресурс приводит фото Маргарет Гамильтон, директора программной инженерии подразделения измерительной лаборатории МТИ, рядом со стопкой распечаток кода. Ей тогда было около 30.

Фото: NASA

К слову, Гамильтон в свои 80 продолжает заниматься научной работой. И именно она вместе с коллегами в 1969 году предотвратила срыв посадки «Аполлон-11» на Луну – за три минуты до прилунения компьютер был перегружен входящими данными, но специалисты нашли решение проблемы.

Код, восстановленный вручную

Код для AGC впервые выложили в открытый доступ в 2003 году. Технический исследователь Рон Берки транскрибировал его с оригиналов МТИ и набрал вручную каждую из тысяч строк программы. Дело в том, что институт выложил отсканированные места, которые были частично повреждены, и порой код не читался. Берки пришлось потрудиться, чтобы восстановить пробелы в коде.

Сканированием листов кода занимался и пилот Гэри Нефф из Колорадо. Когда Берки узнал об этом, он попросил у Неффа его версию отсканированной программы. Исследователь был счастлив, когда выяснил, что на 100% верно дополнил недостающие фрагменты.  

Работа Берки сделала код программы для «Аполлон-11» доступным для других исследователей. Кроме того, специалист создал симулятор AGC для проверки работоспособности кода:

Хотя проект Берки был огромным успехом, некоторые фрагменты кода не были понятны современным разработчикам. 7 июля бывший стажер NASA Крис Гарри загрузил программное обеспечение в репозиторий GitHub, сделав его доступным широкому кругу специалистов и любителей.

Спустя несколько часов программисты стали препарировать программу, а также изучать комментарии, которые оставили в коде специалисты МТИ. Чаще всего комментарии поясняли, что делает тот или иной фрагмент программы. Но порой они делали процесс изучения сотен строк на ассемблере не таким унылым.

В коде программы обнаружили забавные шутки и отсылки к событиям 1960-х

К примеру, один из файлов кода назывался BURN_BABY_BURN--MASTER_IGNITION_ROUTINE (это можно перевести как «жги, детка, жги– программа мастера зажигать»). Первый комментарий пояснял это:

Это отсылает к 1965 году и беспорядкам в Лос-Анджелесе (восстание в Уоттсе, пригороде Лос-Анджелеса, против расовой сегрегации) и было вдохновлено экстраординарным диск-жокеем и владельцем радиостанции Великолепным Монтегю. Великолепный Монтегю использовал фразу «Жги, детка! ЖГИ!», когда крутил самые горячие новые записи. Великолепный Монтегю был харизматичным голосом соул-музыки в Чикаго, Нью-Йорке и Лос-Анджелесе с середины 1950-х до середины 1960-х.

В этой подпрограмме около 900 строк, и в первом и последнем комментариях кода можно рассмотреть своеобразную игру, которую предложила команда программистов – приветствие и прощание:

В файле под названием LUNAR_LANDING_GUIDANCE_EQUATIONS.s (его можно перевести как «уравнения для управления прилунением») две строки, предположительно, были временными, однако вошли в финальную версию программы:

В том же файле есть комментарий, который говорит астронавту «вернуть эту глупость обратно»:

Берки пояснил:

Этот код – все о позиционировании антенны радара для приземления. Я полагаю, что он показывает код, чтобы предупредить астронавта о необходимости изменения его положения.

А в файле PINBALL_GAME_BUTTONS_AND_LIGHTS.s («кнопки и огни для игры пинбол»), который описывается как «системная программа для экрана и клавиатуры для обмена данными между AGC и оператором компьютера» есть своеобразная цитата из Шекспира – фрагмент седьмой сцены четвертого акта второй части  «Генриха VI» (хотя в коде указано, что это фрагмент шестой сцены второго акта):

Тебе в глаза докажут, что при тебе есть люди, которые только и говорят, что о существительных да о глаголах, и все такие поганые слова, какие невтерпеж слышать христианину.
(перевод Е. Бируковой)

Это похоже на отсылку к языку программирования AGC, отметил один из пользователей Reddit. Язык использует предопределенные «существительные» и «глаголы» для выполнения операций. К примеру, глагол номер 37 означает «запустить программу», а существительное номер 33 – «время возгорания».

Сейчас программисты уже хорошо изучили код и смогли назвать проблемы, которые, скорее всего, возникали на «Аполлоне-11». К примеру, неполадки возникали в работе систем перемешивания в криогенных резервуарах и в цепях питания.

Один из пользователей предположил, что что-то не так не с кодом – проблема вызвана чем-то другим. Виновата не программа, а Луна. Возможно, на другом спутнике проблем при посадке не возникло бы:

Другой отправил его к основам – нужно было просто выключить и включить компьютер:

Еще один разработчик предположил, что, возможно, просто необходимо обновить программное обеспечение. В «Аполлоне-14» все исправлено:

Хотите первыми узнавать о «космических» новостях – жмите на кнопку подписки
Подписаться
Отписаться
Шутки шутками, но это действительно капсула времени! Расскажите о ней друзьям — кнопки ниже
Хиты продаж и новинки
Самые лучшие цены на смартфоны
Вы подписались на рассылку.Отменить
Подписаться на рассылку
Комментарии
165
Alexander Belov
Чтобы прочитать инструкции ассемблера есть описание на wikipedia: en(точка)wikipedia(точка)org/wiki/Apollo_Guidance_Computer
Всего 11 инструкций - осилить не сложно.
TC - безусловный переход с сохранением адреса возврата в регистре Q;
CCS - сложный условный переход: действительно без полбанки не разобраться (хвала простоте x86 ассемблера);
INDEX - прочитать слово по 12-битному константному адресу закодированному в этой инструкции, затем прибавить это число к 12-битной константе закодированной в следующей инструкции - индексная арифметика для следующей инструкции;
RESUME (не считается отдельной инструкцией) - вернуться из прерывания - частный случай INDEX(25) - очевидно адрес 25 нельзя использовать как-то иначе;
XCH - обменять значение регистра A с ячейкой памяти по 12-битному адресу закодированному в инструкции;
CS - загрузить число из памяти по 12-ти битному адресу закодированному в инструкции, вычесть это число из нуля (1'complement), поместить в регистр A;
TS - сохранить регистр A в ячейке памяти по 12-ти битному адресу закодированному в инструкции;
AD - прибавить значение в памяти по 12-ти битному адресу закодированному в инструкции к регистру A;
MASK - использовать значение из ячейки памяти для поразрядного 'И' со значением регистра A, результат в A;
MP - знаковое умножение значения в ячейке памяти и регистра A: старшая половина результата в регистре A, младшая в регистре LP;
DV - знаковое деление A на значение из ячейки памяти: частное в регистре A, остаток в регистре Q;
SU - вычесть значение в ячейке памяти из регистра A, результат в A;
Последние 3 инструкции кодируются двумя словами: EXTEND+[MP|DV|SU]. EXTEND - не отдельная инструкция, а частный случай TC.
СсылкаПожаловаться
И.С.
Никто не говорит, что хранилища не существует, у них есть, где и остатки «инопланетян» сохраняют, только исследовать людям посторонним для них не представляется возможным. Моя позиция вот здесь:
https://hi-tech.mail.ru/comment/284353/14430/#comment-14430
Я собственно ничего не утверждаю. Полёты Апполонов, безусловно, были огромным достижением для того времени. Но американцы не были бы американцами, если бы ничего не сфальсифицировали.
Начиналось всё довольно безобидно чуть более ста лет назад, когда небезызвестный в своё время репортёр снимал репортаж об извержении вулкана. Хотел снять кипящую лаву, чуть бедолага не поджарился приближаясь, ничего вразумительного не снял (ещё дымит зараза). Уже отчаявшись, снял кипящую кашу. И не просто выпутался из истории, стал знаменит, образцом для подражания. С тех пор фейковые картинки всё более осваивают сознание американцев. Действительность для них как бы режиссируют (для нас последнее время тоже).
СсылкаПожаловаться
Владимир
В ответ на комментарий от И.С. История переписки2
И.С.
Где, какие лаборатории? Наши считанные граммы перепродаются сейчас за бешеные деньги (вряд ли это конечно хорошо), а американских трёхсот килограммов никто нигде не видел.
СсылкаПожаловаться
Если тебе приснилось, что никто не видел, то очень глупо с твоей стороны выдавать свои сны за факты. А вот Lunar Samples Laboratory, в отличии от твоих фантазий существует на самом деле.
СсылкаПожаловаться
Чтобы оставить комментарий, вам нужно авторизоваться.
Обнаружили ошибку? Выделите ее и нажмите Ctrl+Enter.
Подпишитесь на нас
Новости Hi-Tech Mail.Ru