Запуск к Луне возможен из браузера благодаря порту на JavaScript
Moonjs — это небольшой эмулятор бортового компьютера космического аппарата «Аполлон».
Эта программа не была создана с нуля, это всего лишь порт написанного на С Рональдом Бёрки Virtual AGC на JavaScript с использованием asm.js и компилятора Emscripten.
У компьютера нет своего собственного специального названия, чаще всего его называют AGC по первым буквам Apollo Guidance Computer. По экземпляру было установлено в командном и лунном модулях. Впервые ввели в строй AGC в августе 1966 года, отказались от его использования в июле 1975.
Компьютер работает на частоте 2048 МГц (основной, впрочем, является частота 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 морских миль.
Эмулятор доступен по адресу http://svtsim.com/moonjs/agc.html. Больше интересных команд и описание работы на английском есть на странице Virtual AGC. Документация работы программ «Аполлона» доступна всем желающим.
Автор: FakeFactFelis