Ссылка на часть 2
В предлагаемой вашему вниманию публикации рассмотрены основы архитектуры, аппаратной структуры, и структуры системного ПО бортового компьютера миссий Apollo — AGC (Apollo Guidance Computer). Тем, кто хочет изучить тему подробно, я рекомендую книгу [1] и другие материалы, ссылки на которые приведены в конце статьи.
![](https://habrastorage.org/webt/jp/zh/hf/jpzhhfsbohsjazk-j6p7m7jggnw.jpeg)
В программе Аполлон этот компьютер использовался в двух космических аппаратах: в командном модуле и в лунном модуле. В обоих случаях он крепился на «холодную плиту» с циркулирующей водно-гликолевой смесью, для охлаждения.
![](https://habrastorage.org/webt/ve/ah/-q/veah-qfktudkiu8seztcwac1dtk.jpeg)
Водоблок с трубками для подключения охлаждающей жидкости
Интересный факт: полное название компьютера, использовавшегося в программе Аполлон — AGC-4, так как имелись более ранние разработки. Его предшественник, AGC-3 был построен на феррит-транзисторных ячейках.
![](https://habrastorage.org/webt/cs/ce/_-/csce_-hwoe6nibqn76-u7msdfra.jpeg)
Структурная схема системы навигации
Используемые сокращения:
AOT — Alignment Optical Telescope
LR — Landing Radar
RR — Rendezvous Radar
CDU — Coupling Data Unit
DSKY — (AGC) Display and Keyboard
LGC — LM Guidance Computer (or AGC)
PTA — Pulse Torque Assembly
IMU — Inertial Measurement Unit
PSA — Power Servo Assembly
OSS — Optical Subsystem
ISS — Inertial Subsystem
RS — Radar Subsystem
Технические характеристики
Длина слова: 16 бит (14 бит + знак + чётность)
Память: ROM (rope core) 36Kслов; RAM (core) 2Kслов
Цикл обращения к памяти (ROM и RAM) — 11,72 мкс
Устройства ввода-вывода: DSKY (два устройства в корабле)
Быстродействие: время сложения — 20 мкс
Тактовая частота: 2.048 МГц
Технология: биполярная РТЛ, планарные корпуса
Размеры: AGC — 24" x 12.5" x 6" (HWD) (61 см x 32 см x 15 см); DSKY — 8" x 8" x 7" (HWD) (20 см х 20 см х 18 см)
Вес: AGC — 70 фунтов (32 кг); DSKY — 17.5 фунтов (8 кг)
Напряжение питания 28 В.
Потребление: режим работы: 70 Вт @ 28VDC; режим ожидания 15.0 Вт
Количество произведённых устройств: AGC: 75; DSKY: 138
Стоимость: неизвестно. В 2009 году DSKY был продан с аукциона за $50788.
Компьютер был полностью герметично закрыт, и не содержал каких-либо частей, нуждающихся в обслуживании. Но несмотря на это, инженеры опасались, что новые цифровые микросхемы могут выйти из строя в космосе, поэтому в ранних версиях предусмотрели возможность замены блоков. В последующих версиях, когда все убедились в надёжности компьютера, требование к ремонтопригодности было исключено из ТЗ.
![](https://habrastorage.org/webt/ph/sl/2y/phsl2ydjntxhmhosqocgp41pyom.jpeg)
Рисунок AGC из технической документации
![](https://habrastorage.org/webt/3_/5n/wp/3_5nwp9eymo6bhmte--waoehwic.jpeg)
AGC в открытом виде
Корпус AGC состоит из двух половин, с установленными модулями. Половины корпуса имеют разъёмы, которыми соединяются друг с другом электрические цепи. В середине правой половины корпуса расположены модули ОЗУ, отсутствующие на фотографии. О них пойдёт речь ниже.
![](https://habrastorage.org/webt/tv/-6/ij/tv-6ijyzn7mn_buxg8_e8hdiz3m.jpeg)
Компьютер полностью построен на микросхемах, которые содержат по два элемента NOR-3 (тревходовое ИЛИ-НЕ), и выполнены по резисторно-транзисторной технологии. Схема микросхемы приведена на рисунке выше. Принцип действия такого элемента прост: если вывод 5 соединить с 0, а вывод 10 — с плюсом питания, то, если на входах 2-4 нули, то транзисторы 1-3 (если считать слева направо) будут закрыты, и на выходе 1 будет лог. 1, т.к. он притянут к плюсу резистором. Если хотя бы на один вход подать 1, то соответствующий транзистор откроется, и притянет выход 1 к нулю.
Легко видеть, что при соединении двух или более выходов этих элементов образуется функция AND (И). При этом достаточно оставить питание (вывод 10) подключенным только к одному элементу. Но иногда питание оставляют подключенным у всех элементов, соединённых выходами, это позволяет получить повышенную нагрузочную способность выхода.
![](https://habrastorage.org/webt/-d/4n/pu/-d4npu5pcokvgzoab9ekc8mc-oi.jpeg)
Элемент с неподключенным питанием изображается на схеме с заштрихованным концом (см. рис).
Первая версия компьютера содержала 4100 микросхем, по одному элементу ИЛИ-НЕ в каждом, во второй версии, которая использовалась в полётах, было 2800 микросхем, по два элемента ИЛИ-НЕ в корпусе.
![](https://habrastorage.org/webt/gw/gp/7x/gwgp7xerwcwzoedwpddiryhnns0.jpeg)
Память AGC состоит из ОЗУ объёмом 2Кслова и ПЗУ объёмом 36Кслов. Под поле адреса отводится всего 12 бит, что позволяет адресовать 4Кслова, и память разделена на банки. Для переключения банков используется специальный регистр размером 4 бита, что даёт в результате 16битный адрес, позволяющий адресовать 64Кслов.
Более подробно банки памяти будут обсуждаться в разделе, посвящённом системному ПО.
ПЗУ компьютера выполнено по технологии rope memory (см. фото внизу).
![](https://habrastorage.org/webt/rv/tg/6n/rvtg6n5exrmso5gqw439qgbjgze.jpeg)
Внешний вид модуля Rope memory:
![](https://habrastorage.org/webt/yq/7e/v5/yq7ev5npuxscd67oigj18rd-gao.jpeg)
Принцип действия «верёвочной памяти» (rope memory) проиллюстрирован на рисунке снизу:
![](https://habrastorage.org/webt/z9/xw/d7/z9xwd7lnoua0pycbexj1oynzpz8.jpeg)
К сожалению, документация на блоки Core Rope Memory не сохранилась, но энтузиасты сумели разобраться с интерфейсом, подключить блок к компьютеру и считать содержимое, а затем запустить его на симуляторе.
Общий объём ПЗУ AGC составляет 36,864 слов по 16 бит. AGC имеет 6 блоков ПЗУ, каждый по 6 килослов (т.е. около 12 кб). Через каждый сердечник пропущено (или не пропущено) до 192 проводов, кодирующих данные, т.е. каждый сердечник кодирует 192 бита.
Прошивка каждого блока ПЗУ занимала 8 недель и обходилась в $15000. Всё это делалось вручную.
ОЗУ AGC имеет объём 2048 16-битных слов. ОЗУ компьютера выполнено на магнитных сердечниках, как и у большинства компьютеров того времени.
![](https://habrastorage.org/webt/hf/l0/s9/hfl0s98f3jsaang9usc2j44k7ee.jpeg)
Модуль ОЗУ, установленный в компьютер.
Видно, что модуль ОЗУ занимает ширину двух обычных модулей логики. ОЗУ состоит из «плоскостей» (planes), каждая из которых соответствует биту в слове данных, всего плоскостей 16. Каждая плоскость представляет собой решётку 64x32 кольца, всего 2048 колец. Через каждое кольцо проходит четыре проводника: координатные линии X и Y, линия считывания и линия запрета записи (inhibit line). Линии X и Y илут соответственно вертикально и горизонтально, линия считывания проходит через все кольца одной плоскости по диагональным направлениям, а линия запрета записи проходит также через все кольца плоскости вертикально.
Также плоскость называлась «ковриком» (mat). На рисунке ниже представлена одна плоскость размером 64x32 кольца.
![](https://habrastorage.org/webt/wl/tb/0c/wltb0c-djwyc1ouwhn1ezhcqrd4.jpeg)
Схема укладки линии считывания
![](https://habrastorage.org/webt/jp/2h/0i/jp2h0ii9d0zyxm2mjn7goqkwvnc.jpeg)
Модуль ОЗУ в разрезе
![](https://habrastorage.org/webt/2a/7y/zu/2a7yzuelolgxwur_5mrimx6ftey.jpeg)
Модуль ОЗУ. Рентгеновский снимок
![](https://habrastorage.org/webt/rf/ro/j9/rfroj9500l882h4gto5bz8rwpwm.jpeg)
Модуль ОЗУ в открытом виде
![](https://habrastorage.org/webt/8i/cp/rf/8icprffnxrxhpnwzuompcvko_ti.jpeg)
Модуль ОЗУ в сборе
![](https://habrastorage.org/webt/kb/e6/zy/kbe6zyq7_vjyycndksfiymn_cmk.jpeg)
DSKY расшифровывается как Display and Keyboard Unit, модуль дисплея и клавиатуры, и предназначен для обеспечения взаимодействия AGC и экипажа.
![](https://habrastorage.org/webt/pf/3v/vj/pf3vvjpxivo_zewda6h4wvyw4xq.jpeg)
![](https://habrastorage.org/webt/iv/gq/9t/ivgq9tuqmrlq-gt6yxn9hplkzwu.jpeg)
DSKY в разобранном виде
По сути, DSKY является просто простым терминалом к AGC. Он построен на основе реле, которые переключают сегменты люминисцентного индикатора, питающиеся напряжением 250VAC частотой 800 Гц, и на транзисторах. В более поздних версиях DSKY электромеханические реле были заменены тиристорами, так как вносили существенную задержку при отображении информации.
![](https://habrastorage.org/webt/kh/tn/yb/khtnyberfbkzawspgpusg51omli.jpeg)
Структурная схема DSKY
![](https://habrastorage.org/webt/9d/a1/tq/9da1tqgmxeu2boi_dpuk2pwed8s.jpeg)
Функциональная схема DSKY
![](https://habrastorage.org/webt/ie/ek/1u/ieek1uxy283bwphsdfns1v4yi-s.jpeg)
На рисунке показана схема подключения дисплея. Используются поляризованные реле с двумя обмотками, запоминающие своё состояние. Импульс, поданный на одну обмотку, включает индикатор, на другую — выключает. Обмотки реле включены в матрицу.
AGC подаёт в выходной канал 010 (восьмеричный номер канала) 15-битное число. Биты 12-15 подаются на декодер, имеющий 12 выходов, включающих строки матрицы.
Также блок имеет отдельные индикаторы для отображения сигналов PROG, TRACKER, GIMBAL LOCK и NO ATT, и других сигналов.
Ввод информации осуществляется с клавиатуры. Каждая кнопка подсвечивается лампочками на напряжение 115VAC частотой 400 Гц. При нажатии каждой клавиши, кроме PRO, генерируется 5-битный код. Код подаётся на порт компьютера, и генерируется прерывание, по которому код считывается. Когда кнопка отпускается, генерируется специальный сигнал reset. Клавиша STBY используется для перевода компьютера в режим ожидания, и обратно в режим работы, при повторном нажатии.
Клавиатура имеет 10 цифровых клавиш, и 9 дополнительных клавиш: VERB, NOUN, CLR, PRO, KEY REL, ENTR, RESET, +, и -.
![](https://habrastorage.org/webt/-t/gz/3n/-tgz3npaapai265hm6ptkkwhf-q.jpeg)
Кнопки содержат переключающие контакты, включенные таким образом, чтобы исключить генерацию двух кодов одновременно (см. рисунок ниже). Коды клавиш поступают в порт ввода AGC.
![](https://habrastorage.org/webt/wm/nj/4s/wmnj4s1epjnd_fn5w39freqczsu.jpeg)
К цепи кнопок подведено напряжение +28В. Подключение к компьютеру выполнено следующим образом:
![](https://habrastorage.org/webt/dl/nm/al/dlnmal_voxrdzlcp_jg41bktdi4.jpeg)
Фильтр на входе предохраняет систему от дребезга контактов и случайных помех.
![](https://habrastorage.org/webt/33/cu/hd/33cuhdqdhct8wxlvc4vm9uq-gsm.jpeg)
DSKY, вид сзади
Стандартной процедурой ввода команды в DSKY является последовательность: VERB-DIGIT-DIGIT, NOUN-DIGIT-DIGIT и ENTR. Это отражает идеологию взаимодействия пользователя с AGC: вводится глагол (VERB), и номер действия, которое нужно сделать, и существительное (NOUN), также кодируемое номером, которое указывает объект, на который направлено действие. Список кодов глаголов и существительных содержится в инструкции, которая была у астронавтов.
Нажатие кнопки VERB на клавиатуре очищает индикатор VERB. Затем астронавт вводит две цифры, которые интерпретируются как номер глагола, затем то же самое делается с существительным (NOUN). До тех пор, пока кнопка ENTR не нажата, коды можно исправить повторением ввода NOUN или VERB. После нажатия ENTR каждые 1.5 секунды мигают цифры на индикаторах VERB и NOUN, это означает, что оператор должен ввести данные, зависящие от операции. После этого начинается выполнение операции.
![](https://habrastorage.org/webt/vf/4z/-f/vf4z-fk2kaqtodt_bbumvfluz34.jpeg)
Внутри DSKY
Данные могут вводиться в восьмеричной и десятичной форме. Компьютер считает, что если знак "+" или "-" не введён, то данные будут в восьмеричной форме. Если при вводе восьмиричного числа нажать кнопки 8 или 9, будет мигать индикатор OPR ERR. Если нажаты клавиши "+" или "-", то соответствующий знак появляется на дисплее, означая, что компьютер готов к приёму десятичного числа. Если оператор ошибся, он может нажать на клавишу CLR и повторить ввод. Нажатие на ENTR завершает ввод. Для сброса сигнала OPR ERR и возврата в режим ввода используется кнопка RSET.
Кнопка RSET используется для гашения всех предупреждающих сигналов: TEMP, GIMBAL LOCK, PROG, RESTART и TRACKER. Это может быть полезно для того, чтобы выяснить, был ли предупреждающий сигнал кратковременным или вызвавшая его ошибка присутствует в данный момент.
![](https://habrastorage.org/webt/lz/-5/jx/lz-5jx7jmu4fploz0vwh30mdzjg.jpeg)
Внутри DSKY
Декодер содержит четыре драйвера линий реле и диодную матрицу, а также ключи возбуждения строк релейной матрицы. Биты 12-15 выбирают один из рядов релейной матрицы.
![](https://habrastorage.org/webt/ck/7x/wi/ck7xwi4yqzqgad9xrhzbrhymroe.jpeg)
Декодер релейной матрицы
Рассмотрим, как включается ряд 1. Ему соответствует код 0001. Он подаётся через интерфейс A25 и разъём J9 на корпусе DSKY, и на линии CE225 — CE228. Сигналы подаются в инверсной форме, т.е. CE226 — CE228 принимают значение лог. 1, а CE225 — лог. 0. Логическая 1 на входе закрывает транзистор Q1, транзистор Q2 также закрыт, и транзистор Q3 открыт. Таким образом, для выходов X линий CE226-CE228 и для выхода Y линии CE225 состоянием будет лог. 1. Диодная матрица имеет 8 входов, подключенных к прямым и инверсным выходам транзисторных ключей (выходы X и Y на рисунке). В нашем случае диоды CR53 модулей D2, D3 и D4, а также диод CR63 модуля D5 должны быть смещены в обратном направлении. Если эти диоды закрыты, включается блок CKT004, возбуждающий ряд 1, при этом напряжение +28В проходит по цепи Q1 (CKT011), R8, CR44, R9 (CKT004) и открывает транзисторы Q4, Q5 (CKT004). Транзисторы, открывшись, подключают первый ряд реле к нулю, что означает, что ряд выбран.
Нижний ряд диодов в диодной матрице (CR54 в модулях D2-D5) используется для детектирования наличия лог. 0 в битах 12-15 канала 10. Если хотя бы один ноль присутствует, хотя бы один из диодов открыт и напряжение 0VDC подаётся на источник напряжения драйверов выборки строки. Если все четыре бита равны 0, то все четыре диода закрыты, и напрядение +28VDC приложено к входу драйвера питания. Транзистор Q2 открывается, и транзистор Q3 закрывается. Транзистор Q1 закрыт, и выход драйвера представляет собой разомкнутую цепь, и напряжение на драйвера строк не подаются.
![](https://habrastorage.org/webt/jq/-a/rg/jq-argcy9xyfgtqtghjnjg_j_qs.jpeg)
DSKY, вид снизу
Для управления индикаторами статуса и ошибок используется релейная матрица в модуле драйвера индикатора (рис. ). Кроме реле, она содержит 6 идентичных транзисторных драйверов (D1-D6).
![](https://habrastorage.org/webt/7w/sg/f0/7wsgf0xx2fn6svhwkw3443t2h3e.jpeg)
Модуль драйвера индикаторов DSKY
Релейная матрица показана на рисунке ниже:
![](https://habrastorage.org/webt/gt/ta/yt/gttaytrvxbkm4ak5qcpuknn6iig.jpeg)
Релейная матрица
Каждый драйвер реле принимает от биты 1-11 канала 10. Рассмотрим бит 11 (цепь 006 в модуле D6). Если бит 1 канала 10 установлен в лог. 1, он в инверсном виде поступает в интерфейсную цепь A25, на разъём J9 в цепь CE224. Это открывает транзистор Q8, который закрывает транзистор Q9. Напряжение 28В присутствует на выводе 10 столбца реле, включающего знаки "+" и "-" на дисплее. Диодной матрицей выбирается строка. Путем выбора строки и столбца компьютер может переключать каждое единичное реле в матрице.
Реле матрицы управляют индикаторами DSKY. Ряд 12 управляет индикаторами состояния и аварийными сигналами.
![](https://habrastorage.org/webt/35/bb/qu/35bbquvjjikte-iqrkffc88-5ty.jpeg)
Коды матрицы реле
В таблице выше приведено соответствие между содержимым канала 10 и цифрой индикатора, управляемой соответствующим реле. Одной цифрой управляет пять реле. Биты 6-10 используются для управления первой цифрой, биты 1-5 управляют второй цифрой, бит 11 управляет знаком ("+" или "-"). Коды цифр приведены в таблице:
![](https://habrastorage.org/webt/on/xx/mp/onxxmpqw0phnhnn7rra2xuksfea.jpeg)
Коды цифр
Лог. 1 соответствует включенному реле.
![](https://habrastorage.org/webt/m4/gn/qo/m4gnqoixkysmpxcyjkhydrko0lk.jpeg)
В таблице выше показаны соответствия кодов и индицируемых цифр.
Схема подключения индикаторов к реле приведена на рисунке ниже.
![](https://habrastorage.org/webt/ax/1b/wj/ax1bwj5suyvgk28xttyro78sj8e.jpeg)
Схема релейной матрицы индикаторов
Цепи состояния и аварийных сигналов состоят из драйверов и неполяризованных реле.
![](https://habrastorage.org/webt/2z/xs/1w/2zxs1wd6k_nlknpkxipstvbmgre.jpeg)
Цепи состояния и аварийных сигналов
Например, когда сигнал ISS WARNING находится в лог. 0, он открывает транзистор Q13 и подаёт питание +28В на реле K21. Реле K21 включается и пропускает входной сигнал ALARM COMMON на дисплей и в секцию PGNCS как сигнал ISS WARNING.
![](https://habrastorage.org/webt/zq/az/e9/zqaze9o6ppgndpmqjqhg8cxgel0.jpeg)
Кабель подключения DSKY к компьютеру и бортовым системам
Питание блока DSKY осуществляется напряжениями 28В и 14В постоянного тока, поступающими с компьютера, также подаётся сигнал синхронизации частотой 800 Гц, который используется для генерации напряжения 250VAC частотой 400 Гц для питания дисплея.
![](https://habrastorage.org/webt/-2/dn/25/-2dn25ajpbwjstln2qe4mx_vxsa.jpeg)
Схема источника питания DSKY
Источник питания состоит из трёх двухтактных транзисторных каскадов, развязанных трансформаторами. На вход подаётся прямоугольный сигнал напряжением около 14В и частотой 800 Гц. Уровень напряжения может управляться с панели космического корабля и служит для регулировки яркости индикаторов. Трансформаторы T1 и T2 повышают напряжение, на выходе стоит дроссель с насыщением L2. Дроссель нужен для стабилизации напряжения на индикаторах. Индикаторы являются ёмкостной нагрузкой, величина ёмкости зависит от количества включенных индикаторов. Изменения в нагрузке вызывают изменение напряжения в цепи обратной связи, которое через мостовой выпрямитель подаётся на управляющую обмотку L2. Если включено больше индикаторов, напряжение на управляющей обмотке увеличивается, сердечник начинает входить в насыщение, если количество включенных индикаторов уменьшается, то напряжение на управляющей обмотке уменьшается, сердечник выходит из насыщения, таким образом напряжение на выходе поддерживается постоянным.
![](https://habrastorage.org/webt/qa/r6/ky/qar6ky-dbaxb4jntdtsxj6zavba.jpeg)
Ранний вариант DSKY. Этот вариант не использовался в полётах.
1. The Apollo Guidance Computer: Architecture and Operation. Frank O'Brien, Springer Praxis Books, 2010
2. Принципиальная схема AGC
3. http://www.righto.com/ Блог с кучей статей по AGC
4. https://hackaday.com/2016/09/02/decoding-rediscovered-rope-memory-from-the-apollo-guidance-computer/ — Decoding Rediscovered Rope Memory From The Apollo Guidance Computer
5. https://hackaday.com/2016/07/05/don-eyles-walks-us-through-the-lunar-module-source-code/ — Don Eyles Walks Us Through The Lunar Module Source Code
6. https://github.com/chrislgarry/Apollo-11 — репозиторий с исходными кодами ПО
7. https://github.com/shirriff/rope-simulator — репозиторий со схемами симулятора ПЗУ.
8. https://dodlithr.blogspot.com/search/label/Apollo%20Systems — большая подборка материалов по AGC и DSKY.
9. http://www.ibiblio.org/apollo/ — онлайновый симулятор AGC.
10. https://github.com/virtualagc — репозиторий с множеством полезной информации, включая Verlog-версию AGC, а также схемы и платы реплики AGC, и оригинальные схемы AGC и DSKY (в репозитории https://github.com/virtualagc/virtualagc)
В предлагаемой вашему вниманию публикации рассмотрены основы архитектуры, аппаратной структуры, и структуры системного ПО бортового компьютера миссий Apollo — AGC (Apollo Guidance Computer). Тем, кто хочет изучить тему подробно, я рекомендую книгу [1] и другие материалы, ссылки на которые приведены в конце статьи.
Apollo Guidance Computer
![](https://habrastorage.org/webt/jp/zh/hf/jpzhhfsbohsjazk-j6p7m7jggnw.jpeg)
В программе Аполлон этот компьютер использовался в двух космических аппаратах: в командном модуле и в лунном модуле. В обоих случаях он крепился на «холодную плиту» с циркулирующей водно-гликолевой смесью, для охлаждения.
![](https://habrastorage.org/webt/ve/ah/-q/veah-qfktudkiu8seztcwac1dtk.jpeg)
Водоблок с трубками для подключения охлаждающей жидкости
Интересный факт: полное название компьютера, использовавшегося в программе Аполлон — AGC-4, так как имелись более ранние разработки. Его предшественник, AGC-3 был построен на феррит-транзисторных ячейках.
![](https://habrastorage.org/webt/cs/ce/_-/csce_-hwoe6nibqn76-u7msdfra.jpeg)
Структурная схема системы навигации
Используемые сокращения:
AOT — Alignment Optical Telescope
LR — Landing Radar
RR — Rendezvous Radar
CDU — Coupling Data Unit
DSKY — (AGC) Display and Keyboard
LGC — LM Guidance Computer (or AGC)
PTA — Pulse Torque Assembly
IMU — Inertial Measurement Unit
PSA — Power Servo Assembly
OSS — Optical Subsystem
ISS — Inertial Subsystem
RS — Radar Subsystem
Технические характеристики
Спецификация
Длина слова: 16 бит (14 бит + знак + чётность)
Память: ROM (rope core) 36Kслов; RAM (core) 2Kслов
Цикл обращения к памяти (ROM и RAM) — 11,72 мкс
Устройства ввода-вывода: DSKY (два устройства в корабле)
Быстродействие: время сложения — 20 мкс
Тактовая частота: 2.048 МГц
Технология: биполярная РТЛ, планарные корпуса
Размеры: AGC — 24" x 12.5" x 6" (HWD) (61 см x 32 см x 15 см); DSKY — 8" x 8" x 7" (HWD) (20 см х 20 см х 18 см)
Вес: AGC — 70 фунтов (32 кг); DSKY — 17.5 фунтов (8 кг)
Напряжение питания 28 В.
Потребление: режим работы: 70 Вт @ 28VDC; режим ожидания 15.0 Вт
Количество произведённых устройств: AGC: 75; DSKY: 138
Стоимость: неизвестно. В 2009 году DSKY был продан с аукциона за $50788.
Компьютер был полностью герметично закрыт, и не содержал каких-либо частей, нуждающихся в обслуживании. Но несмотря на это, инженеры опасались, что новые цифровые микросхемы могут выйти из строя в космосе, поэтому в ранних версиях предусмотрели возможность замены блоков. В последующих версиях, когда все убедились в надёжности компьютера, требование к ремонтопригодности было исключено из ТЗ.
![](https://habrastorage.org/webt/ph/sl/2y/phsl2ydjntxhmhosqocgp41pyom.jpeg)
Рисунок AGC из технической документации
![](https://habrastorage.org/webt/3_/5n/wp/3_5nwp9eymo6bhmte--waoehwic.jpeg)
AGC в открытом виде
Корпус AGC состоит из двух половин, с установленными модулями. Половины корпуса имеют разъёмы, которыми соединяются друг с другом электрические цепи. В середине правой половины корпуса расположены модули ОЗУ, отсутствующие на фотографии. О них пойдёт речь ниже.
Основы схемотехники
![](https://habrastorage.org/webt/tv/-6/ij/tv-6ijyzn7mn_buxg8_e8hdiz3m.jpeg)
Компьютер полностью построен на микросхемах, которые содержат по два элемента NOR-3 (тревходовое ИЛИ-НЕ), и выполнены по резисторно-транзисторной технологии. Схема микросхемы приведена на рисунке выше. Принцип действия такого элемента прост: если вывод 5 соединить с 0, а вывод 10 — с плюсом питания, то, если на входах 2-4 нули, то транзисторы 1-3 (если считать слева направо) будут закрыты, и на выходе 1 будет лог. 1, т.к. он притянут к плюсу резистором. Если хотя бы на один вход подать 1, то соответствующий транзистор откроется, и притянет выход 1 к нулю.
Легко видеть, что при соединении двух или более выходов этих элементов образуется функция AND (И). При этом достаточно оставить питание (вывод 10) подключенным только к одному элементу. Но иногда питание оставляют подключенным у всех элементов, соединённых выходами, это позволяет получить повышенную нагрузочную способность выхода.
![](https://habrastorage.org/webt/-d/4n/pu/-d4npu5pcokvgzoab9ekc8mc-oi.jpeg)
Элемент с неподключенным питанием изображается на схеме с заштрихованным концом (см. рис).
Первая версия компьютера содержала 4100 микросхем, по одному элементу ИЛИ-НЕ в каждом, во второй версии, которая использовалась в полётах, было 2800 микросхем, по два элемента ИЛИ-НЕ в корпусе.
![](https://habrastorage.org/webt/gw/gp/7x/gwgp7xerwcwzoedwpddiryhnns0.jpeg)
Память
Память AGC состоит из ОЗУ объёмом 2Кслова и ПЗУ объёмом 36Кслов. Под поле адреса отводится всего 12 бит, что позволяет адресовать 4Кслова, и память разделена на банки. Для переключения банков используется специальный регистр размером 4 бита, что даёт в результате 16битный адрес, позволяющий адресовать 64Кслов.
Более подробно банки памяти будут обсуждаться в разделе, посвящённом системному ПО.
ПЗУ
ПЗУ компьютера выполнено по технологии rope memory (см. фото внизу).
![](https://habrastorage.org/webt/rv/tg/6n/rvtg6n5exrmso5gqw439qgbjgze.jpeg)
Внешний вид модуля Rope memory:
![](https://habrastorage.org/webt/yq/7e/v5/yq7ev5npuxscd67oigj18rd-gao.jpeg)
Принцип действия «верёвочной памяти» (rope memory) проиллюстрирован на рисунке снизу:
![](https://habrastorage.org/webt/z9/xw/d7/z9xwd7lnoua0pycbexj1oynzpz8.jpeg)
К сожалению, документация на блоки Core Rope Memory не сохранилась, но энтузиасты сумели разобраться с интерфейсом, подключить блок к компьютеру и считать содержимое, а затем запустить его на симуляторе.
Общий объём ПЗУ AGC составляет 36,864 слов по 16 бит. AGC имеет 6 блоков ПЗУ, каждый по 6 килослов (т.е. около 12 кб). Через каждый сердечник пропущено (или не пропущено) до 192 проводов, кодирующих данные, т.е. каждый сердечник кодирует 192 бита.
Прошивка каждого блока ПЗУ занимала 8 недель и обходилась в $15000. Всё это делалось вручную.
ОЗУ
ОЗУ AGC имеет объём 2048 16-битных слов. ОЗУ компьютера выполнено на магнитных сердечниках, как и у большинства компьютеров того времени.
![](https://habrastorage.org/webt/hf/l0/s9/hfl0s98f3jsaang9usc2j44k7ee.jpeg)
Модуль ОЗУ, установленный в компьютер.
Видно, что модуль ОЗУ занимает ширину двух обычных модулей логики. ОЗУ состоит из «плоскостей» (planes), каждая из которых соответствует биту в слове данных, всего плоскостей 16. Каждая плоскость представляет собой решётку 64x32 кольца, всего 2048 колец. Через каждое кольцо проходит четыре проводника: координатные линии X и Y, линия считывания и линия запрета записи (inhibit line). Линии X и Y илут соответственно вертикально и горизонтально, линия считывания проходит через все кольца одной плоскости по диагональным направлениям, а линия запрета записи проходит также через все кольца плоскости вертикально.
Также плоскость называлась «ковриком» (mat). На рисунке ниже представлена одна плоскость размером 64x32 кольца.
![](https://habrastorage.org/webt/wl/tb/0c/wltb0c-djwyc1ouwhn1ezhcqrd4.jpeg)
Схема укладки линии считывания
![](https://habrastorage.org/webt/jp/2h/0i/jp2h0ii9d0zyxm2mjn7goqkwvnc.jpeg)
Модуль ОЗУ в разрезе
![](https://habrastorage.org/webt/2a/7y/zu/2a7yzuelolgxwur_5mrimx6ftey.jpeg)
Модуль ОЗУ. Рентгеновский снимок
![](https://habrastorage.org/webt/rf/ro/j9/rfroj9500l882h4gto5bz8rwpwm.jpeg)
Модуль ОЗУ в открытом виде
![](https://habrastorage.org/webt/8i/cp/rf/8icprffnxrxhpnwzuompcvko_ti.jpeg)
Модуль ОЗУ в сборе
DSKY
![](https://habrastorage.org/webt/kb/e6/zy/kbe6zyq7_vjyycndksfiymn_cmk.jpeg)
DSKY расшифровывается как Display and Keyboard Unit, модуль дисплея и клавиатуры, и предназначен для обеспечения взаимодействия AGC и экипажа.
![](https://habrastorage.org/webt/pf/3v/vj/pf3vvjpxivo_zewda6h4wvyw4xq.jpeg)
![](https://habrastorage.org/webt/iv/gq/9t/ivgq9tuqmrlq-gt6yxn9hplkzwu.jpeg)
DSKY в разобранном виде
По сути, DSKY является просто простым терминалом к AGC. Он построен на основе реле, которые переключают сегменты люминисцентного индикатора, питающиеся напряжением 250VAC частотой 800 Гц, и на транзисторах. В более поздних версиях DSKY электромеханические реле были заменены тиристорами, так как вносили существенную задержку при отображении информации.
![](https://habrastorage.org/webt/kh/tn/yb/khtnyberfbkzawspgpusg51omli.jpeg)
Структурная схема DSKY
![](https://habrastorage.org/webt/9d/a1/tq/9da1tqgmxeu2boi_dpuk2pwed8s.jpeg)
Функциональная схема DSKY
![](https://habrastorage.org/webt/ie/ek/1u/ieek1uxy283bwphsdfns1v4yi-s.jpeg)
На рисунке показана схема подключения дисплея. Используются поляризованные реле с двумя обмотками, запоминающие своё состояние. Импульс, поданный на одну обмотку, включает индикатор, на другую — выключает. Обмотки реле включены в матрицу.
AGC подаёт в выходной канал 010 (восьмеричный номер канала) 15-битное число. Биты 12-15 подаются на декодер, имеющий 12 выходов, включающих строки матрицы.
Также блок имеет отдельные индикаторы для отображения сигналов PROG, TRACKER, GIMBAL LOCK и NO ATT, и других сигналов.
Ввод информации осуществляется с клавиатуры. Каждая кнопка подсвечивается лампочками на напряжение 115VAC частотой 400 Гц. При нажатии каждой клавиши, кроме PRO, генерируется 5-битный код. Код подаётся на порт компьютера, и генерируется прерывание, по которому код считывается. Когда кнопка отпускается, генерируется специальный сигнал reset. Клавиша STBY используется для перевода компьютера в режим ожидания, и обратно в режим работы, при повторном нажатии.
Клавиатура имеет 10 цифровых клавиш, и 9 дополнительных клавиш: VERB, NOUN, CLR, PRO, KEY REL, ENTR, RESET, +, и -.
![](https://habrastorage.org/webt/-t/gz/3n/-tgz3npaapai265hm6ptkkwhf-q.jpeg)
Кнопки содержат переключающие контакты, включенные таким образом, чтобы исключить генерацию двух кодов одновременно (см. рисунок ниже). Коды клавиш поступают в порт ввода AGC.
![](https://habrastorage.org/webt/wm/nj/4s/wmnj4s1epjnd_fn5w39freqczsu.jpeg)
К цепи кнопок подведено напряжение +28В. Подключение к компьютеру выполнено следующим образом:
![](https://habrastorage.org/webt/dl/nm/al/dlnmal_voxrdzlcp_jg41bktdi4.jpeg)
Фильтр на входе предохраняет систему от дребезга контактов и случайных помех.
![](https://habrastorage.org/webt/33/cu/hd/33cuhdqdhct8wxlvc4vm9uq-gsm.jpeg)
DSKY, вид сзади
Стандартной процедурой ввода команды в DSKY является последовательность: VERB-DIGIT-DIGIT, NOUN-DIGIT-DIGIT и ENTR. Это отражает идеологию взаимодействия пользователя с AGC: вводится глагол (VERB), и номер действия, которое нужно сделать, и существительное (NOUN), также кодируемое номером, которое указывает объект, на который направлено действие. Список кодов глаголов и существительных содержится в инструкции, которая была у астронавтов.
Нажатие кнопки VERB на клавиатуре очищает индикатор VERB. Затем астронавт вводит две цифры, которые интерпретируются как номер глагола, затем то же самое делается с существительным (NOUN). До тех пор, пока кнопка ENTR не нажата, коды можно исправить повторением ввода NOUN или VERB. После нажатия ENTR каждые 1.5 секунды мигают цифры на индикаторах VERB и NOUN, это означает, что оператор должен ввести данные, зависящие от операции. После этого начинается выполнение операции.
![](https://habrastorage.org/webt/vf/4z/-f/vf4z-fk2kaqtodt_bbumvfluz34.jpeg)
Внутри DSKY
Данные могут вводиться в восьмеричной и десятичной форме. Компьютер считает, что если знак "+" или "-" не введён, то данные будут в восьмеричной форме. Если при вводе восьмиричного числа нажать кнопки 8 или 9, будет мигать индикатор OPR ERR. Если нажаты клавиши "+" или "-", то соответствующий знак появляется на дисплее, означая, что компьютер готов к приёму десятичного числа. Если оператор ошибся, он может нажать на клавишу CLR и повторить ввод. Нажатие на ENTR завершает ввод. Для сброса сигнала OPR ERR и возврата в режим ввода используется кнопка RSET.
Кнопка RSET используется для гашения всех предупреждающих сигналов: TEMP, GIMBAL LOCK, PROG, RESTART и TRACKER. Это может быть полезно для того, чтобы выяснить, был ли предупреждающий сигнал кратковременным или вызвавшая его ошибка присутствует в данный момент.
![](https://habrastorage.org/webt/lz/-5/jx/lz-5jx7jmu4fploz0vwh30mdzjg.jpeg)
Внутри DSKY
Декодер содержит четыре драйвера линий реле и диодную матрицу, а также ключи возбуждения строк релейной матрицы. Биты 12-15 выбирают один из рядов релейной матрицы.
![](https://habrastorage.org/webt/ck/7x/wi/ck7xwi4yqzqgad9xrhzbrhymroe.jpeg)
Декодер релейной матрицы
Рассмотрим, как включается ряд 1. Ему соответствует код 0001. Он подаётся через интерфейс A25 и разъём J9 на корпусе DSKY, и на линии CE225 — CE228. Сигналы подаются в инверсной форме, т.е. CE226 — CE228 принимают значение лог. 1, а CE225 — лог. 0. Логическая 1 на входе закрывает транзистор Q1, транзистор Q2 также закрыт, и транзистор Q3 открыт. Таким образом, для выходов X линий CE226-CE228 и для выхода Y линии CE225 состоянием будет лог. 1. Диодная матрица имеет 8 входов, подключенных к прямым и инверсным выходам транзисторных ключей (выходы X и Y на рисунке). В нашем случае диоды CR53 модулей D2, D3 и D4, а также диод CR63 модуля D5 должны быть смещены в обратном направлении. Если эти диоды закрыты, включается блок CKT004, возбуждающий ряд 1, при этом напряжение +28В проходит по цепи Q1 (CKT011), R8, CR44, R9 (CKT004) и открывает транзисторы Q4, Q5 (CKT004). Транзисторы, открывшись, подключают первый ряд реле к нулю, что означает, что ряд выбран.
Нижний ряд диодов в диодной матрице (CR54 в модулях D2-D5) используется для детектирования наличия лог. 0 в битах 12-15 канала 10. Если хотя бы один ноль присутствует, хотя бы один из диодов открыт и напряжение 0VDC подаётся на источник напряжения драйверов выборки строки. Если все четыре бита равны 0, то все четыре диода закрыты, и напрядение +28VDC приложено к входу драйвера питания. Транзистор Q2 открывается, и транзистор Q3 закрывается. Транзистор Q1 закрыт, и выход драйвера представляет собой разомкнутую цепь, и напряжение на драйвера строк не подаются.
![](https://habrastorage.org/webt/jq/-a/rg/jq-argcy9xyfgtqtghjnjg_j_qs.jpeg)
DSKY, вид снизу
Для управления индикаторами статуса и ошибок используется релейная матрица в модуле драйвера индикатора (рис. ). Кроме реле, она содержит 6 идентичных транзисторных драйверов (D1-D6).
![](https://habrastorage.org/webt/7w/sg/f0/7wsgf0xx2fn6svhwkw3443t2h3e.jpeg)
Модуль драйвера индикаторов DSKY
Релейная матрица показана на рисунке ниже:
![](https://habrastorage.org/webt/gt/ta/yt/gttaytrvxbkm4ak5qcpuknn6iig.jpeg)
Релейная матрица
Каждый драйвер реле принимает от биты 1-11 канала 10. Рассмотрим бит 11 (цепь 006 в модуле D6). Если бит 1 канала 10 установлен в лог. 1, он в инверсном виде поступает в интерфейсную цепь A25, на разъём J9 в цепь CE224. Это открывает транзистор Q8, который закрывает транзистор Q9. Напряжение 28В присутствует на выводе 10 столбца реле, включающего знаки "+" и "-" на дисплее. Диодной матрицей выбирается строка. Путем выбора строки и столбца компьютер может переключать каждое единичное реле в матрице.
Реле матрицы управляют индикаторами DSKY. Ряд 12 управляет индикаторами состояния и аварийными сигналами.
![](https://habrastorage.org/webt/35/bb/qu/35bbquvjjikte-iqrkffc88-5ty.jpeg)
Коды матрицы реле
В таблице выше приведено соответствие между содержимым канала 10 и цифрой индикатора, управляемой соответствующим реле. Одной цифрой управляет пять реле. Биты 6-10 используются для управления первой цифрой, биты 1-5 управляют второй цифрой, бит 11 управляет знаком ("+" или "-"). Коды цифр приведены в таблице:
![](https://habrastorage.org/webt/on/xx/mp/onxxmpqw0phnhnn7rra2xuksfea.jpeg)
Коды цифр
Лог. 1 соответствует включенному реле.
![](https://habrastorage.org/webt/m4/gn/qo/m4gnqoixkysmpxcyjkhydrko0lk.jpeg)
В таблице выше показаны соответствия кодов и индицируемых цифр.
Схема подключения индикаторов к реле приведена на рисунке ниже.
![](https://habrastorage.org/webt/ax/1b/wj/ax1bwj5suyvgk28xttyro78sj8e.jpeg)
Схема релейной матрицы индикаторов
Цепи состояния и аварийных сигналов состоят из драйверов и неполяризованных реле.
![](https://habrastorage.org/webt/2z/xs/1w/2zxs1wd6k_nlknpkxipstvbmgre.jpeg)
Цепи состояния и аварийных сигналов
Например, когда сигнал ISS WARNING находится в лог. 0, он открывает транзистор Q13 и подаёт питание +28В на реле K21. Реле K21 включается и пропускает входной сигнал ALARM COMMON на дисплей и в секцию PGNCS как сигнал ISS WARNING.
![](https://habrastorage.org/webt/zq/az/e9/zqaze9o6ppgndpmqjqhg8cxgel0.jpeg)
Кабель подключения DSKY к компьютеру и бортовым системам
Питание блока DSKY осуществляется напряжениями 28В и 14В постоянного тока, поступающими с компьютера, также подаётся сигнал синхронизации частотой 800 Гц, который используется для генерации напряжения 250VAC частотой 400 Гц для питания дисплея.
![](https://habrastorage.org/webt/-2/dn/25/-2dn25ajpbwjstln2qe4mx_vxsa.jpeg)
Схема источника питания DSKY
Источник питания состоит из трёх двухтактных транзисторных каскадов, развязанных трансформаторами. На вход подаётся прямоугольный сигнал напряжением около 14В и частотой 800 Гц. Уровень напряжения может управляться с панели космического корабля и служит для регулировки яркости индикаторов. Трансформаторы T1 и T2 повышают напряжение, на выходе стоит дроссель с насыщением L2. Дроссель нужен для стабилизации напряжения на индикаторах. Индикаторы являются ёмкостной нагрузкой, величина ёмкости зависит от количества включенных индикаторов. Изменения в нагрузке вызывают изменение напряжения в цепи обратной связи, которое через мостовой выпрямитель подаётся на управляющую обмотку L2. Если включено больше индикаторов, напряжение на управляющей обмотке увеличивается, сердечник начинает входить в насыщение, если количество включенных индикаторов уменьшается, то напряжение на управляющей обмотке уменьшается, сердечник выходит из насыщения, таким образом напряжение на выходе поддерживается постоянным.
![](https://habrastorage.org/webt/qa/r6/ky/qar6ky-dbaxb4jntdtsxj6zavba.jpeg)
Ранний вариант DSKY. Этот вариант не использовался в полётах.
Литература и ссылки:
1. The Apollo Guidance Computer: Architecture and Operation. Frank O'Brien, Springer Praxis Books, 2010
2. Принципиальная схема AGC
3. http://www.righto.com/ Блог с кучей статей по AGC
4. https://hackaday.com/2016/09/02/decoding-rediscovered-rope-memory-from-the-apollo-guidance-computer/ — Decoding Rediscovered Rope Memory From The Apollo Guidance Computer
5. https://hackaday.com/2016/07/05/don-eyles-walks-us-through-the-lunar-module-source-code/ — Don Eyles Walks Us Through The Lunar Module Source Code
6. https://github.com/chrislgarry/Apollo-11 — репозиторий с исходными кодами ПО
7. https://github.com/shirriff/rope-simulator — репозиторий со схемами симулятора ПЗУ.
8. https://dodlithr.blogspot.com/search/label/Apollo%20Systems — большая подборка материалов по AGC и DSKY.
9. http://www.ibiblio.org/apollo/ — онлайновый симулятор AGC.
10. https://github.com/virtualagc — репозиторий с множеством полезной информации, включая Verlog-версию AGC, а также схемы и платы реплики AGC, и оригинальные схемы AGC и DSKY (в репозитории https://github.com/virtualagc/virtualagc)