Тайна 3dfx Voodoo: изучаем архитектуру GPU из 90-х «по винтикам» [Длиннопост, про железо]
Недавно мне подарили настоящую легенду — STB 3dfx Voodoo 3 с двумя TMU, 16'ю мегабайтами видеопамяти и 2D-ускорителем. Как настоящий гик и любитель покопаться в ретро-железе, я сразу же нашел даташит и начал изучать внутреннюю архитектуру этого игрового монстра. И поверьте, здесь есть на что посмотреть!
В сегодняшней статье мы во всех деталях изучим архитектуру оригинальной 3dfx Voodoo, узнаем почему Nvidia выиграла в гонке видеокарт и почему игры с API Glide выглядели гораздо красивее, чем с D3D/OpenGL! Если любите настоящие технарские статьи без нейрослопа и рерайта — жду вас под катом!
❯ Предыстория
Думаю многие мои читатели знают, что 3dfx стала одним из пионеров 3D-графики на ПК для геймеров. Их видеокарты не отличались поддержкой «шейдеров», как Rendition Verite, долгое время толком не поддерживали OpenGL, а первые модели для работы требовали отдельную 2D-видеокарту. Однако их успех был обусловлен двумя главными факторами: масштабируемость и производительность.
Первая 3dfx Voodoo появилась в 1996 году и несмотря на высокую цену в ~300$, почти сразу стала хитом. Во первых, из конкурентов у Voodoo был разве что NVidia NV1, Rendition Verite и PowerVR Midas. NV1 сразу провалился из-за использования растеризатором квадов вместо привычных разработчикам треугольников, PowerVR был достойным конкурентом, но его TBDR-растеризатор сильно терял филлрейт и подтормаживал при отрисовке полупрозрачных поверхностей типа заборов и решеток (чего в играх всегда хватало), и только Verite был реальным конкурентом. Однако Verite не поддерживал ни OpenGL, ни D3D (который тогда был в зачаточном состоянии) и требовал освоения весьма сложного графического API — SSpeedy3D.
Дело в том, что в те годы каждый производитель видеокарт предлагал своё графическое API для взаимодействия с видеокартой. У S3 это был Metal, у ATi — CIF, а у 3dfx — Glide. И в отличии от других API, Glide был максимально близок к стандартному и простому OpenGL, только с изначальным упором на игры. В те годы, разработчики игр были вынуждены адаптировать свой движок для каждой видеокарты отдельно и благодаря своей простоте и продуманности, Glide стал неким стандартом — любой уважающий себя движок вплоть до 2000-го года обязательно поддерживал видеокарты 3dfx.
Однако в 1997 году, у 3dfx уже появились серьезные конкуренты в лице ATi и Nvidia. 3dfx Voodoo мало того что сама стоила ~200-250$, так ещё и для работы требовала дополнительную внешнюю 2D-видеокарту, которая стоила еще баксов 50. За ~150$, Nvidia предлагала новенькую Riva 128 с 4МБ видеопамяти, встроенным 2D-ускорителем, а также аппаратным декодером DVD-видео. ATi Rage Pro стоила примерно столько-же, по тестам была чуток медленнее, чем Nvidia, но также предлагала ноутбучные версии с поддержкой LVDS. Так что ноутбуки с чипами ATi с натяжкой можно было назвать игровыми.
3dfx решила проблему необходимости 2D-видеокарты весьма интересным костылем: компания выпустила Voodoo Rush — связку из 2D-видеочипа от Alliance Semiconductor и обычной Voodoo 1. Ирония была в том, что на видеокарты ставили как 2D-чипы AT25, так и 3D-чипы AT3D — и получалось что в системе было аж два видеочипа с поддержкой 3D-ускорения (и AT3D был не так уж и плох).
Ещё через год, в 1998 году, 3dfx выпустила Voodoo 2, которая стала ещё круче за счёт масштабируемости. Во первых, к GPU стало возможным подключить второй текстурный юнит, благодаря чему стало возможным наносить сразу две текстуры за один проход. А во вторых, теперь можно было объединить сразу две видеокарты с помощью технологии SLI, благодаря чему общая производительность теоретически увеличивалась в два раза. Причём SLI был реализован просто и гениально: первая видеокарта рисовала четные сканлайны, вторая — нечетные, и всё это делалось асинхронно, благодаря чему увеличивался общий филлрейт.
Однако Voodoo 2 всё ещё требовала внешнюю 2D-видеокарту и на момент 1998 года это было уже ни в какие ворота. S3 Savage, ATi Rage 128, NVidia Riva TNT, Matrox G200, Trident 3DImage, Rendition Verite V2200, Intel i740, SiS 6326 — абсолютно все эти видеокарты имели в себе приличный 2D-ускоритель. Причем Riva TNT также поддерживала мультитекстурирование, вплотную подбиралась к Voodoo 2 в бенчмарках и, в отличии от видеокарты от 3dfx, поддерживала рендеринг в 24х-битном формате. Это был главный конкурент Voodoo 2, который местами его заметно превосходил.
В 1999 году появилась 3dfx Voodoo 3, в которой наконец-то появилось 2D-ядро, а благодаря переходу на более продвинутый техпроцесс удалось засунуть сам GPU и два текстурных юнита в один чип. Кроме того, инженерам 3dfx удалось повысить частоту работы видеоядра с 90МГц до 130+. Наконец, благодаря интеграции всех компонентов в один кристалл, стало возможным сделать бюджетную видеокарту — Velocity 100, которая представляла из себя Voodoo 3 с уменьшенным объёмом видеопамяти с 16МБ до 8, а также одним отключенным текстурным юнитом (который включается обратно твиком в реестре :)). Эта версия стоила ~80$ и стала первой доступной Voodoo «для всех».
Но... было уже поздно. 3dfx Voodoo 3 была популярной за счёт остаточной славы и поддержки играми Glide, но с точки зрения функционала, видеокарты от Nvidia и ATi их давно уже уделывали вчистую. В 1999 году, у Nvidia в GeForce 256 уже появился T&L, кубмапы (возможность реализации полноценных отражений), бамп-маппинг и некоторые другие продвинутые техники. Voodoo 4, вышедшая в 2000 году перед банкротством компании, не смогла спасти ситуацию — она хоть и поддерживала 24х-битный цвет, но отсутствие T&L сильно било по производительности в играх с заметно возросшей полигональностью. По итогу, 3dfx обанкротилась и была выкуплена мелким зеленым стартапом — Nvidia :)
❯ Аппаратная архитектура
Как я уже говорил ранее, видеокарты 3dfx не имели каких-то архитектурных особенностей типа возможности загрузки микрокода в GPU или тайлового рендеринга. На практике это были простейшие Fixed-Function сканлайн-растеризаторы, где внешний вид каждого треугольника задавался набором регистров, и кроме отрисовки примитивов GPU больше ничего не умел. Почти во всех остальных картах того периода архитектура была точно такой-же и функционально Voodoo не так сильно отличался от условного S3 ViRGE или Intel i740, просто инженерам 3dfx удалось выжать максимальную производительность.
Однако на аппаратном уровне, видеокарты 3dfx заметно отличались от современников за счет того, что состояли как минимум из трех чипов:
TMU — тот самый текстурный юнит, о котором я говорил в вводной части статьи. В его задачи входит сэмплинг текстур, при этом он занимается не просто выборкой пикселей из видеопамяти, но и мип-маппингом, фильтрацией, а также перспективной коррекцией. В Voodoo 2 на одной видеокарте может быть сразу 3 TMU — что позволяет рисовать геометрию аж с 3-мя текстурами одновременно за один проход. Чисто технически, TMU тоже является полноценным растеризатором, так что его можно считать «мини-GPU».
Если игра рисует примитив с мультитекстурированием (например стенку с наложенной текстурой кирпича и пыли) — рендеринг работает параллельно: сначала первый TMU нарисует стенку с кирпичом, затем второй нарисует с пылью — в конце FBI смешает их и получится пыльная кирпичная стена! Без мультитекстурирования, игре пришлось бы сначала нарисовать кирпичную стенку, затем включить дорогой альфа-блендинг в режиме умножения ((SRCCOLOR * DESTCOLOR) + (DESTCOLOR * 0)) и нарисовать эту же стенку с текстурой пыли ещё раз.
Кроме того, TMU умел в проективные текстуры и всякие трюки с UV-координатами, благодаря чему можно было реализовать проективные попиксельные тени в реальном времени, металлические поверхности за счёт сферических карт отражений (помните отражающиеся машинки в NFS HP?) и некоторые другие фишки.FBI — сам GPU, выполняющий роль растеризатора и управляющий текстурными юнитами, а также линейным доступом к видеопамяти. Даже у FBI образца 1996 года был весьма богатый функционал: и освещение по Гуро, и попиксельный туман, и дизеринг, и Z-буфер/стенсил-буфер, и даже полноэкранное сглаживание! В общем, было всё необходимое для игр, разве что линии с антиальясингом не поддерживались.
Но были и минусы — FBI первых версий не поддерживал float'ы и оперировал исключительно целыми числами и fixed-point арифметикой, а ещё у него не было понятия Clip-Space — всё рисовалось исключительно в абсолютных экранных координатах. Но об этом чуть позже.RAMDAC — чип, выводивший фреймбуфер из видеопамяти на экран. Работало это весьма забавно: когда пользователь использует 2D-окружение — RAMDAC в 3dfx Voodoo отключается и VGA-сигнал с 2D-видеокарты коммутируется напрямую на VGA-разъём в Voodoo. Когда пользователь запускает 3D-игру (а в первых 3dfx Voodoo 3D-режим был эксклюзивным) — FBI переключал линии на свой RAMDAC. Получается что в ПК работало сразу два RAMDAC'а одновременно :)
Не менее интересной была и организация памяти. Дело в том, что все 4/8/16 мегабайт видеопамяти были отдельно поделены между TMU и FBI. Каждому TMU отдельно отводилось по 2-16 мегабайт VRAM, которые использовались только для хранения текстурных данных. У FBI была своя память объёмом в 2-4МБ, которая использовалась для фреймбуфера, Z-буфера и Stencil-буфера. От объёма VRAM для TMU зависело сколько текстур и какого разрешения можно загрузить на текущем уровне в игре, а от объёма памяти для FBI зависело максимальное разрешение изображения и возможность использования техник типа Stencil-зеркал или теней.
Главной проблемой 3dfx Voodoo был примитивный конвейер, который по большей части ложился на процессор. Для отрисовки каждого треугольника, процессору приходилось:
Посчитать степень освещенности каждого треугольника по алгоритму Гуро и Фонгу. То есть как минимум N ⋅ L.
Перемножить каждую вершину модели на матрицу модели-вида-проекции, чтобы получить позицию треугольника в пространстве экрана — так называемом Clip-Space. Каждую координату нужно было вручную поделить на W-компоненту вершины.
Затем ему нужно было произвести так называемый процесс клиппинга — разбиения наполовину-видимых треугольников, которые пересекают ближнюю плоскость отсечения (или «нос» игрока, если говорить простыми словами). Самый простой пример — это оружие в Quake: если клиппинг не делать, то задняя (невидимая нам) часть пушки просто инвертирует свои координаты и будет отображаться «перевернутой» уходя вдаль, хотя она должна просто скрыться из виду. Это самый тяжелый алгоритм, поскольку требует поиска точки пересечения треугольника с границей экрана и разбиения его на два новых.
Далее ему нужно было преобразовать Clip-Space координаты с плавающей точкой в абсолютные координаты ((((x * 0.5) + 0.5) * width) + (width / 2)). 3dfx Voodoo 2 наконец-то научился в floating-point координаты в Clip-Space, но для совместимости всё равно лучше было использовать «старый» подход.
И только затем пинать его в видеокарту, вручную записывая параметры каждого треугольника в регистры FBI по одному. Помните glBegin/glEnd? Вот это как раз оттуда :)
Для сравнения, в GeForce 256 ни один из этих этапов вообще не нужен был. Геометрию можно загрузить в специальную область в видеопамяти и отправить команду на отрисовку, после чего видеокарта сама всё сделает. Именно поэтому 3dfx Voodoo хорошо себя показывал в старых играх, где сцены были 4000-10000 треугольников, но вот когда игры пошли 30-40 тысяч полигонов... тут уже нагрузка на процессор была слишком высокой.
Между слов...
От схожей проблемы страдали и GPU от Intel. Тот же GMA900 был отнюдь не самым слабым видеочипом, но отсутствие аппаратного вершинного конвейера и установка в бюджетные ноутбуки с слабыми процессорами сделало своё дело...
Аппаратный конвейер в Intel'ах появился только начиная с GMA 500 — и то это на самом деле был PowerVR SGX535 :)
Интересно и то, что в 3dfx Voodoo 2 уже были зачатки 2D-движка в виде аппаратного блиттера, причем с возможностью блиттить как из оперативной памяти ПК, так и видеопамяти, но API для него в Glide я не нашел. Судя по всему, 3dfx просто не успела доделать полноценный VGA-совместимый контроллер в 1998 году, оставив в видеочипе только блиттер.
На самом низком уровне, управление 3dfx Voodoo происходило в основном с помощью замаппленых в память регистров. Драйвер искал PCI-устройство, выделял ему Base Address Register и затем конфигурировал FBI относительно текущего видеорежима. Когда игра хотела нарисовать следующий треугольник, драйвер записывал параметры вершин в соответствующие регистры FBI и TMU (да, регистры, связанные с вершинами у них дублировались) и отправлял команду TRIANGLECMD.
Да, всё было настолько просто. Как я уже говорил, так было не только у 3dfx, но и у S3 (о ViRGE я писал отдельную статью), Intel, SiS, ATi и Nvidia до GeForce 256. Отличался только Rendition Verite, но о нём мы с вами поговорим как-нибудь в другой раз.
❯ Программная архитектура
С точки зрения софта, у 3dfx Voodoo тоже всё было не так однозначно. Конечно основным графическим API был Glide, однако в 1997-1998 году стандартизацию и влияние OpenGL и Direct3D отрицать было глупо. Всё больше и больше игр использовали D3D, поддержку которого 3dfx поспешно добавила в 1997 году. Тут важно отметить то, что в те годы каждая версия Direct3D очень сильно друг от друга отличалась. Direct3D 5 оперировал командными буферами на манер современных видеокарт (Microsoft глядели в воду!), Direct3D7 уже был больше похож на OpenGL/D3D9, и обратной совместимости, как в случае с D3D11/D3D10/D3D9 у них не было — 3dfx приходилось писать новый драйвер под новые версии DirectX.
Ещё про командные буферы
Назывались они Execute-буферами и имели тот же функционал, что и списки в OpenGL. Microsoft надеялась что рано или поздно Execute-буферы можно будет выполнять напрямую на GPU - и угадала примерно к 1999-2000 году.
Самое забавное что сама концепция не прижилась и вплоть до D3D11 в видеокартах не было нормальных буферов команд.
Не путайте командные буферы с стейтблоками - это разные вещи.
С OpenGL тоже было всё не так гладко, поскольку в 1996 году его перспективы в играх всё ещё были туманны из-за ориентира на профессиональные рабочие станции. В конце-концов, кому в играх нужен был рендеринг на сервере? Однако игра поколения, Quake, использовала именно это графическое API и 3dfx пришлось сделать небольшой костыль вместо полноценного драйвера — MiniGL.
MiniGL работал поверх нативного графического API (т.е Glide) и предоставлял игре минимально-необходимый для работы набор функций — то есть рисование треугольников/квадов, работу с текстурами, матрицы и... ну, по сути все. Другие игры также могли использовать MiniGL, но у них не было доступа ни к функциям работы с туманом, ни к освещению в реальном времени, ни к мультитекстурированию, ни к Stencil-буферу. Немного позже другие производители видеокарт тоже начали реализовывать свои драйверы MiniGL и это стало своеобразным MiniAPI внутри Quake.
Полноценный нативный ICD-драйвер (так в те годы называли полноценные драйвера OpenGL) для OpenGL вышел только в 1998 году в виде бета-версии... и по сравнению с MiniGL, он был нереально тормозным и глючным! Часть функционала была забагованной, производительность была не ахти и даже в Quake на ICD видеокарта показывала себя хуже, чем с MiniGL. Но в целом, 3dfx за это винить не стоит — в те годы нормальные драйвера для OpenGL были только у Nvidia, S3 и Intel (иронично). Даже у ATi с OpenGL всё было очень плохо...
Поэтому главным секретом успеха 3dfx стало API Glide. Как я и говорил ранее, оно как две капли воды было похоже на упрощенный OpenGL, но отличалось отсутствием математической библиотеки, клиппера геометрии (да, программист был вынужден писать его сам, в отличии от D3D и GL) и... аллокатора текстур! Да, вы все правильно поняли — предполагалось что именно программист будет вручную управлять видеопамятью каждого текстурного юнита и ручками писать логику выделения/освобождения памяти.
С игровой точки зрения, Glide был функционально богаче D3D и OpenGL, и обгонял их на несколько лет вперед. Уже в 1998 году, в Glide была поддержка мультитекстурирования и комбайнеров, хромакея вместо альфа-теста (который требовал дополнительный цветовой компонент и занимал драгоценную видеопамять) и прямого доступа к фреймбуферу. Зато не поддерживались текстуры с разрешением выше 256x256 и соотношением сторон, отличающимся от 1:1 и 2:1...
В остальном, Glide был практически прямым интерфейсом к видеокарте, благодаря чему работал быстро. Но к 2000 году, Glide окончательно устарел концептуально, вместе с архитектурой оригинального 3dfx Voodoo, из-за чего компания и разорилась. ATi и Nvidia оказались шустрее...
❯ Заключение
Вот такой была 3dfx: сначала компания влетела на рынок игровых видеокарт с двух ног, успела стать стандартом ПК-гейминга, но всего через 3 года её архитектура устарела настолько быстро, что в 2000 году её поглотил какой-то там стартап с зеленым логотипом... Увы и ах, остается только надеяться, что инженеры 3dfx приложили руку к таким легендарным видеокартам, как GeForce 3 и GeForce 4! Хотя кто знает, может кто-то из них сейчас разрабатывает RTX 6xxx? :)
Ну а я надеюсь, что вам было интересно. Подписывайтесь на блог, чтобы не пропускать новые статьи каждую неделю! А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
А если вы хотите что-нибудь подарить из железа и увидеть о нём статью — пишите мне в Telegram. Меня очень интересуют самые разные гаджеты: начиная от игровых консолей и любых связанных с геймингом устройств, телефонов, смартфонов, КПК, заканчивая ретро-компьютерами и ноутбуками. Кто знает, может героем следующей подобной статьи окажется ноутбук из 90-х? :)
Особенно сильно я люблю ковыряться в ноутбуках из начала 90-х. Источник
После обзоров устройства не продаются, а остаются в моей коллекции. Когда-нибудь я хочу сделать музей, где к каждому устройству можно будет приложить QR и почитать мою статью. Кто знает, вдруг на следующей неделе я также подробно расскажу про девайс из вашей юности? :)
Фото Nokia 9300 с сайта mobile-review.com
Кстати, у меня есть GameBoy Advance SP, под который я очень хочу написать игру. Однако мой экземпляр был залит водой и кофе. Может у кого-то есть донор с дохлой платой, откуда я смог бы взять контроллер питания? У меня AGS-101.
Процессор, который изменил всё: Intel Pentium исполнилось 33 года
22 марта 1993 года Intel выпустила первые Pentium 60 и Pentium 66 — процессоры, с которых началась одна из самых известных линеек в истории персональных компьютеров. Именно Pentium стал первым суперскалярным процессором Intel и открыл новую эпоху производительности для массовых ПК. По данным Tom’s Hardware, первые чипы Pentium содержали 3,1 млн транзисторов, выпускались по 800-нм техпроцессу и стали важнейшим шагом вперёд по сравнению с Intel 486.
Секрет успеха Pentium был не только в росте частоты. Архитектура P5 позволяла выполнять несколько инструкций за один такт, использовала встроенный кэш, 64-битную внешнюю шину, динамическое предсказание ветвлений и заметно более быстрый блок вычислений с плавающей точкой. Всё это сделало Pentium символом настоящего технологического рывка и одним из самых узнаваемых брендов в истории CPU.
Но история Pentium — это не только триумф. В 1994 году линейка оказалась в центре громкого скандала из-за ошибки FDIV в блоке вычислений с плавающей запятой. Проблема привела к первому массовому отзыву процессоров Intel и стоила компании около 475 миллионов долларов, серьёзно ударив по репутации бренда. Тем не менее Pentium не просто выжил, а стал основой для целого поколения домашних и офисных компьютеров.
FOOF. Воспроизводим легендарный баг в процессоре Pentium
Приветствую всех!
Думаю, при упоминании знаменитого бага в процессоре Intel Pentium на ум сразу приходит ошибка деления. Но, как оказывается, она была не единственным косяком этих чипов.
Первые «пеньки» имели ещё одну интересную особенность: существовали «роковые» четыре байта, выполнение которых заставляло компьютер зависнуть намертво. Что же это была за ошибка, как она проявлялась и как её воспроизвести? Сейчас и узнаем.
❯ Суть такова
Наверное, многие кучу раз уже слышали про то, что в некоторых процессорах Intel Pentium существовал дефект, заставляющий их считать неправильно.
Этот косяк стал очень знаменитым и ныне встречается абсолютно в каждой статье в духе «10 самых разрушительных багов тысячелетия».
Но ошибка деления была не единственным багом в данном процессоре. Чуть менее знаменитым, но не менее впечатляющим стал F0 0F, о котором сегодня и пойдёт речь.
❯ Что же это вообще такое?
Немного поговорим о том, что же это вообще за дефект. Итак, некоторые процессоры Pentium (все с архитектурой P5) имели аппаратную ошибку: выполнение одной некорректной инструкции вместо исключения приводило к тому, что процессор переставал работать до полной перезагрузки. Сама эта команда (в самом популярном для демонстрации варианте) выглядела так:
lock cmpxchg8b eax
Объяснить с
Сама по себе эта инструкция использовалась для сравнения значения данных в регистре с 8 байтами в памяти, а при неправильном её использовании процессор просто бы выдал исключение. Но в сочетании с префиксом lock пенёк блокировал шину памяти и ждал записи, которая так никогда и не происходила. В результате этого он переставал отвечать на любые запросы, в том числе на прерывания, обработчик которых тоже не работал. Команда эта кодировалась байтами F0 0F C7 C8, которые и послужили названием данного дефекта.
Данная ошибка не причиняла никакого вреда компьютеру, а после перезагрузки работоспособность восстанавливалась. Тем не менее, особых привилегий для выполнения «роковых» байт не требовалось, отчего любая программа могла заставить компьютер зависнуть, приведя к потере несохранённых данных или отказу в обслуживании (если инструкция была выполнена на сервере).
В дальнейшем проблема была решена. Сначала программно, путём создания различных патчей для ОС, не дававших выполнить эту инструкцию и повесить ПК, а после и аппаратно — в степпинге B2 баг был ликвидирован. Как удалось найти, дефектные процессоры тоже отзывались и бесплатно менялись, хотя и не в таких количествах, как в случае с ошибкой деления.
❯ Обзор оборудования
Ну что же, перейдём к тестированию.
Для этого нам понадобится компьютер. В качестве него взял уже ранее показанный пень.
Внутри него стоит вот такой камень, как и многочисленные его собратья, подверженный этому багу.
А вот другой пенёк. К нему всё, что будет упомянуто далее, тоже применимо.
Поиск по sSpec это подтверждает: процессор имеет степпинг B1.
❯ Ставим софт
Теперь очередь того, чем мы будем собирать тестовый экзешник. В качестве этого софта взял Microsoft Visual C++ 5.00. Так что включаем компьютер, загружаем Windows 98 и ставим всё необходимое.
Попытки поставить 6.0 или наоборот более ранние версии провалились: одна требовала вставить некий «Disk 1» и в упор не видела установочные файлы, другая требовала наличия лицензионного CD в приводе. То ли мне попался неполный дистрибутив, то ли его обязательно надо было ставить с диска, то ли что, но разбираться с этим я не стал, просто скачал тот архив, где таких проблем не было. Им и оказалась версия 5.00.
Открываем установщик и в открывшемся меню выбираем самый первый пункт. Далее при установке вводим CD-key из одних единиц, а все остальные параметры оставляем по умолчанию.
Спустя минут пятнадцать софт устанавливается.
Всё готово к работе.
Далее создаём проект и пишем какую-нибудь пробную программу, дабы убедиться, что все нужные компоненты встали правильно.
Всё отлично работает. Можно приступать к проверке.
❯ Роковые четыре байта
Итак, удаляем всё, что было, и пишем следующий код:
#include <stdlib.h>
char main[] = {0xF0, 0x0F, 0xC7, 0xC8};
Объяснить с
После этого собираем проект.
Ну что, момент истины?
Запускаем собранный экзешник. Чёрное окно, один раз мигнувший курсор, и… компьютер зависает наглухо.
Не работает даже переключение светодиодов на клавиатуре. Единственная возможность выйти из этого состояния — жмякнуть кнопку Reset.
❯ А что там на других системах?
Перезагрузим машину и попробуем загрузиться в Windows 2000.
Здесь эта проблема больше не проявляется. То же самое приложение при запуске просто вылетает. Компьютер при этом остаётся работоспособным.
На современном ПК всё ещё проще: пустое окно консоли, закрывающееся через пару секунд.
❯ Что же в итоге?
Как можно видеть, вскоре после того, как ошибка была обнаружена, её уже исправили. В ядре Linux патч для неё появился уже через неделю. Вскоре исправление вышло и для Windows — им стало обновление KB163852. Как мы сами сегодня убедились, поздние версии ОС уже не позволяют так просто заставить ПК зависнуть.
Позже так стали называть и другие схожие по проявлению баги. В частности, некоторые модели процессоров Cyrix тоже могли зависать при выполнении некоторых инструкций.
В Pentium Pro и более поздних процессорах этот баг был исправлен окончательно, на этот раз на аппаратном уровне.
Такие дела.
Автор текста: MaFrance351
Написано при поддержке Timeweb Cloud ↩
Больше интересных статей и новостей в нашем блоге на Хабре.
📚 Вам может быть интересно:
О сколько нам открытий чудных..!
Я и не представлял, что раньше процессоры в комп были как картриджи и вставлялись в столы как оперативка, видеокарта и прочее.
Обзор фейков о достижениях СССР в компьютерной сфере: Эльбрус, Пентковский, БЭСМ-6 и т.д
Патриотическая пропаганда утверждает, что СССР иногда опережал США в компьютерной сфере и американцы якобы даже заимствовали некоторые советские разработки.
Примеры статей: ria.ru, ixbt.com, habr.com, версия про «советские корни Intel».
Так, в частности, главный архитектор суперкомпьютеров линии «Эльбрус» Борис Арташесович Бабаян заявлял о советском приоритете в разработке суперскалярных ЭВМ:
В 1978-ом году мы сделали первую суперскалярную машину, Эльбрус-1. Сейчас на Западе делают суперскаляры только такой архитектуры. Первый суперскаляр на Западе появился в 92-ом году, наш в 78-ом. Причем тот вариант суперскаляра, который сделали мы, аналогичен Pentium Pro, который Intel сделал в 95-ом году.
Но любой, кто не поленился бы провести элементарный фактчекинг, быстро бы выяснил, что первой суперскалярной ЭВМ была CDC 6600, разработки Сеймура Крэя.
Причём советское правительство пыталось заполучить эту машину:
Советский Союз в 1968 году проявлял неформальную заинтересованность в импорте компьютера CDC 6600 для Института физики высоких энергий в г. Протвино для анализа данных экспериментов на ускорителе У-70. В качестве ответной любезности СССР был готов поделиться результатами анализа с учёными США. Правительство США не дало согласия на эту сделку, в результате были закуплены английские машины компании International Computers Limited, которые по своим характеристикам приближались к CDC 6600.
Следующим шагом в развитии суперскалярной архитектуры была конвейеризация исполнительных устройств, как в современных микропроцессорах. Впервые конвейеризация узлов была реализована в машине IBM System/360 Model 91, в 1967 году, за 6 лет до начала разработки Эльбруса-1 и за 11 лет до его релиза.
В 1975 году, за 4 года до «Эльбруса», был также анонсирован суперкомпьютер Cray-1 (на векторной архитектуре), с тактовой частотой 80 мгЦ и производительностью 160 миллионов операций в секунду (MFLOPS).
Для сравнения: производительность Эльбрус-1 в 1979 году была 15 млн. оп/с., что в 10 раз меньше. А в 1980 году, когда «Эльбрус-1» сдал государственные тесты и был запущен в производство, уже был суперкомпьютер Cyber 205, с производительностью 400 Mflops!
Обратите внимание, что патриотическая пропаганда не проводит сравнительного анализа с существовавшими на то время Западными системами, что могло бы свидетельствовать о каких-нибудь преимуществах советских машин - вместо этого в ход идут различные манипуляции, с расчетом на технически неграмотную и не умеющую анализировать публику.
Байка про то, как советская ЭВМ БЭСМ-6 якобы превзошла американские ЭВМ
Так, например, в статье РИА новостей пишут, что вычислительный комплекс, в состав которого входила "полностью отечественная" БЭСМ-6*, в 30 раз быстрее обрабатывал телеметрическую информацию о космическом полете, чем неназванные американские машины (в ходе миссии Союз-Аполлон в 1975 году). Вот только тут речь идет о вычислительном комплексе АС-6**, состоящем из нескольких процессоров, а не отдельной БЭСМ-6, производительность которой составляла всего 1 млн. оп/с (что было даже меньше, чем у IBM 7030 Stretch, 1961 года выпуска, не говоря уже о CDC 7600).
У NASA тоже была многопроцессорная система и гораздо мощнее - ILLIAC IV, но эта машина стояла в исследовательском центре NASA в Эймсе, а не в «Хьюстоне», где происходило управление полетом. Судя по всему, история с телеметрией - это заранее спланированная советской стороной пиар-акция, а все самые важные и сложные расчеты были осуществлены заранее, перед полётом.
Что касается утверждений о советских ноу-хау в компьютерной отрасли, то и тут патриотическая пропаганда никаких ссылок на авторские свидетельства или научные публикации не дает, предлагая просто поверить Бабаяну на слово.
Статья в журнале Microprocessor Report, якобы подтверждающая советский приоритет
Также в качестве независимого источника патриотическая пропаганда ссылается на статью "Русские идут" из журнала Microprocessor Report, автор которой - разработчик процессора MC88110 Кейт Дифендорф:
Подтверждают историческое первенство Эльбрус и в Америке. В той же статье из Microprocessor Report Кит Дифендорфф, разработчик Motorola 88110, одного из первых западных суперскалярных процессоров, пишет: "В 1978 году, почти на 15 лет раньше, чем появились первые западные суперскалярные процессоры, в Эльбрус-1 использовался процессор, с выдачей двух команд за один такт, изменением порядка исполнения команд, переименованием регистров и исполнением по предположению". http://worldcrisis.ru/crisis/2037026
Вот только с переводом немножко подмухлевали - в оригинале не говорилось, что первые Западные суперскалярные процессоры появились на 15 лет позже:
In 1978, almost 15 years ahead of Western superscalar processors, Elbrus implemented a two-issue out-of-order processor with register renaming and speculative execution.
Правильный перевод будет такой: "В 1978 году, почти на 15 лет опередив Западные суперскалярные процессоры...".
То есть, здесь сказано, что в процессоре Эльбрус-1 на 15 лет раньше были реализованы названные технические решения, чем в Западных процессорах. При этом Эльбрус-1 использовал архитектуру RISC, известную ещё с начала 1960-х годов и впервые воплощённую в компьютере CDC 6600, а элементная база «Эльбруса» была построена на TTL микросхемах 133 серии, которые были клонами микросхем 54 серии от Texas Instruments (названия этих микросхем можно посмотреть в справочнике).
Возможно, Эльбрус-1 действительно впервые реализовал на практике какие-то востребованные в будущем решения, но далее в статье говорится, что в то время такой подход себя не оправдал и поэтому компания отказалась от суперскалярной архитектуры в пользу EPIC.
Разочарованная соотношением производительности и сложности этого проекта, в 1986 году компания приступила к разработке архитектур, основанных на явном мелкозернистом параллелизме и широком наборе команд - концепциях, которые сегодня в совокупности называются EPIC.
Для справки: на технологию, позже названную EPIC, имеется патент US4847755A, с датой приоритета от 1985 года.
Далее повествование статьи почему-то перескакивает с Эльбрус-1 сразу на Эльбрус-3, пропуская Эльбрус-2, построенный на основе интегральных схем серии ИС-100, клонов схем компании Motorola серии MECL 10K. Получается, что первые два проекта были построены на заимствованиях и, следуя тексту статьи, так и не были доведены до ума, после чего Бабаян получил государственное финансирование на третий, "принципиально новый проект" Эльбрус-3, который так и не был запущен в серийное производство. И вот Бабаян в статье обещает "сделать лучше", чем Западные аналоги, но уже в новом проекте E2K.
По всей видимости, статья "Русские идут" является рекламной и Кейт Дифендорф здесь выступает скорее в качестве пиарщика, чем эксперта. Вот, например, отрывок, где он призывает потенциальных инвесторов поверить Бабаяну и выделить финансирование:
Мы можем только надеяться, что кто-нибудь сочтет нужным профинансировать этот проект, чтобы их идеи можно было проверить на практике. Было бы действительно обидно, если бы талант команды Elbrus и технологии, заложенные в E2k и его компиляторах, были потеряны из-за нехватки нескольких десятков миллионов долларов.
А в начале статьи Кейт Дифендорф представляет Бабаяна "российским Сеймуром Крэем" - видимо, что добавить ему авторитета в глазах потенциальных инвесторов:
Известный разработчик суперкомпьютеров Борис Бабаян, которого часто называют российским Сеймуром Крэем, рассказал о новом процессоре, который разрабатывает его компания Elbrus International.
В другой подобной статье «У российского производителя суперкомпьютеров есть чип "убийца Интел"» от CBR online, вышедшей неделей позже, тоже был использован этот пиар-прием:
Российский архитектор суперкомпьютеров д-р Борис Бабаян, которого часто называют российским Сеймуром Крэем, планирует бросить вызов Intel Corp с помощью технологии, которая использует методы, схожие с чипом Intel Merced
А ещё в этой статье говорится, что, "по слухам", «Эльбрус-3» был в два раза быстрее Западных конкурентов. Проверить эти "слухи" и сравнить производительность "Эльбрус-3" с существовавшими в то же время Западными машинами неназванный журналист издания почему-то не удосужился, что лишний раз говорит о заказном характере материала.
Так вот, «Эльбрус-3», со слов официального представителя компании АО «МЦСТ» Константина Трушкина, "должен был достичь скорости в 1 млрд операций в секунду" (но не достиг?), а это меньше производительности Grey-2 (1.41 Gflops), выпущенного в 1985 году, меньше производительности NEC SX-3/44 (20 Gflops), выпущенного в 1992 году, не говоря уже про Intel Paragon (170 Gflops), выпущенный в 1994 году (в том же году, когда была готова рабочая версия Эльбрус-3).
Есть и более раннее упоминание Бабаяна как "российского Сеймура Крэя" - это статья Компьютерный царь в зарубежном журнале Популярная Наука от 1994 года.
Бабаян получил прозвище "русский Сеймур Крэй" в честь американского гения-затворника, который был пионером в разработке суперкомпьютеров.
И где же Бабаян получил такое прозвище? На страницах подобных заказных статей?
Бабаян - "русский Сеймур Крэй"?
А если подумать, то что общего у Бабаяна и Сеймура Крэя, кроме того, что это разработчики суперкомпьютеров? Сеймур Крей прославился, прежде всего, как создатель самых продвинутых компьютеров в мире - работая в CDC и будучи одним из учредителей этой компании, он создал компьютеры CDC 6600 и CDC 7600, установившие новые стандарты для всей компьютерной индустрии. После чего авторитет Крэя, как разработчика суперкомпьютеров, был бесспорен, поэтому, когда он основал собственную компанию Cray Research, инвестиции не заставили себя долго ждать. И Крэй тогда не обманул ожидания инвесторов, выпустив суперкомпьютер Cray-1, который не только был самым быстрым на то время, но и также стал коммерчески успешным - было продано более 80 Cray-1 всех типов (для сравнения, суперкомпьютер CDC STAR-100, тоже самый быстрый на момент выпуска, был построен в количестве лишь 5 штук).
Советские же разработки отставали от Западных на 5-10 лет и поэтому не были широко известны за рубежом.
Для наглядности, вот хронология появления суперкомпьютеров на Западе и в СССР, и их производительность:
В свете этих фактов, Бабаяну, в разговоре с Дифендорфом, пришлось признать, что советские суперкомпьютеры Эльбрус-1 и Эльбрус-2 вышли неудачными ("стали разочарованием"), тогда как Эльбрус-3, "на принципиально новой архитектуре" VLIW, якобы должен был стать технологическим прорывом, но не был закончен по причине развала СССР. Вот только на Западе уже были реализации архитектуры VLIW (например, компьютеры от Multiflow) и они не были востребованы рынком. И даже процессор Intel Itanium, который разрабатывался в 90-е и должен был учесть ошибки предшественников, в итоге оказался слабее конкурентов: "Было продано всего несколько тысяч систем с оригинальным процессором Merced Itanium из-за относительно низкой производительности, высокой стоимости и ограниченной доступности программного обеспечения".
В общем, Бабаян хорошо напустил пыли в глаза, чтобы привлечь Западные инвестиции, но потенциальные инвесторы, в отличии от российской патриотической общественности, оказались не столь доверчивы: так, в материале издания eWeek за 2002 год отмечают, что "российская компания до сих пор не произвела никакого кремния" для демонстрации американским аналитикам и не посещала форум MDR Microprocessor Forum, ведущий презентацию новых разработок.
В итоге, процессор Эльбрус 2000 был запущен в производство лишь в 2008 году, причем в Тайване. В CNews писали (статья с сайта удалена, ссылка ведет на архив), что российский процессор на тесте SPEC обогнал Pentium III, а на гостесте даже показывал производительность, эквивалентную Pentum 4. При этом Pentium III был снят с производства уже в 2003 году, а Pentum 4 в 2008 году. Выходит что если верить российским государственным тестам, Эльбрус в 2008 году достиг производительности Пентиум 4, выпущенного в 2000 году!
Профинансировали все это дело, главным образом, российские налогоплательщики (которым не нужно ничего доказывать или отчитываться). Правда в 2022 году компании МЦСТ трижды отказали в государственной субсидии, поскольку заявки компании не прошли научно-техническую оценку комиссии Минпромторга (а может это связано с санкциями и расходами госбюджета в связи с проведением СВО, ведь раньше же как-то проходили).
Роль Пентковского в создании процессора Pentium
В ряде публикаций, например, здесь, утверждается, что процессор Пентиум назван в честь Владимира Пентковского, советского разработчика процессоров Эльбрус:
После развала СССР, один из разработчиков Эльбрусов, Владимир Пентковский эмигрировал в США и устроиться на работу в Intel. Вскоре он стал ведущим инженером корпорации и под его руководством в 1993 г в Intel разработали проц Pentium, названный так именно в честь Пентковского.
Но Пентковского в качестве главного архитектора привлекали только к созданию Pentium III, каким же образом в честь него мог быть назван Pentium I, разработанный вообще без его участия? Логика тут явно хромает. Впервые Intel анонсировала процессор Пентиум в 1992 году, только тогда он назывался P5.
Название Pentium придумали в компании Lexicon Branding, куда компания Intel обратилась по причине судебного запрета на регистрацию торговой марки с числом "386".
Что касается роли Пентковского как инженера компании Intel, то есть научные публикации, посвященные архитектуре процессора Pentium III, написанные им в соавторстве с другими учеными. В частности, Пентковский указан как один из трёх авторов статьи "Реализация потоковых SIMD-расширений на процессоре Pentium III", посвящённой технологии SSE, которая была впервые использована как раз в процессоре Pentium III. В процессоре Pentium 4, выпущенном в 2000 году, уже использовался расширенный набор инструкций SSE2 и Пентковский не указан среди разработчиков в статье, посвящённой архитектуре этого процессора.
В российской Википедии о Пентковском пишут, что он "руководил разработкой нескольких поколений процессоров Intel". Данное утверждение ссылается на статью ixbt.com от 5 июля 1999 года, но никаких фактов, что Пентковский руководил разработкой других процессоров Intel, помимо Пентиум 3, там нет, есть только пространные намеки про "похожесть" Pentium Pro на прототип советского процессора Эль-90 (если что, главным архитектором Pentium Pro был Фред Поллак, а не Пентковский). Что касается "похожести", то Эль-90 также может быть "похож" на Западных предшественников, например, архитектурой RISC, которая впервые была применена на суперкомпьютере CDC 6600 (1964), а во второй половине 1980-х уже были массовые RISC-процессоры, такие как AMD Am29000 (1988), Intel i860 (1989, RISC и VLIW), Motorola 88000 (1988). Вот, скажем, Intel i860 чем хуже? Если у Эль-90, как пишут, была расчётная частота 25-30МГц, то компания Intel уже запустила в производство в 1989 году процессор с частотой от 25 МГц до 40 МГц. Кроме того, Эль-90, судя по всему, вышел недоработанным, раз не был запущен в производство, поэтому команда Пентковского приступила в 1990 году к проектированию Эль-91С, который не был закончен уже по причине краха СССР (а так бы "догнали и перегнали", не сомневайтесь).
В общем, даже если отмести все домыслы и спекуляции, надо признать, что Пентковский сыграл значительную роль в развитии компьютерной индустрии, но именно как инженер компании Intel, тогда как в СССР он занимался вторичными разработками. И Пентковскому ещё повезло, что он вообще мог заниматься любимым делом в условиях советской диктатуры, тогда как многие его коллеги подвергались репрессиям и дискриминации.
Была ли "компьютерная гонка" между США и СССР?
Патриотов, верящих, что у США и СССР было соперничество в компьютерной сфере, можно условно разделить на две группы: на тех, кто считает, что "компьютерная гонка" была проиграна в середине 1960-х, в результате "предательского решения" о копировании архитектуры IBM System (из-за чего финансирование отечественных разработок урезали), и на тех, кто верит, что СССР не отставал или даже опережал США в компьютерных технологиях (соответственно, первые верят байке про телеметрию, а вторые - ещё и бабаяновским байкам про "убийцу Интел").
Если по фактам, то советские суперкомпьютеры ни разу не становились самыми быстрыми в мире, в чем можно убедиться, ознакомившись с хронологией появления самых быстрых компьютеров с 1938 года по 1992 год.
Разумеется, советская власть публично не признавала отсталость советских ЭВМ, что и дало почву для конспирологии и обвинений в саботаже. Действительно, если у СССР были хорошие собственные разработки, то почему стали копировать компьютеры IBM в рамках программы ЕС ЭВМ, а затем решения Intel, DEC, Hewlett-Packard в серии СМ ЭВМ? Или зачем закупали британские ICL System 4 для госучреждений, если были свои "продвинутые БЭСМ-6"?
Советское правительство также закупало американские машины CDC Cyber 170 (1973), не смотря на то, что варианты для СССР имели урезанный функционал и меньшую производительность.
Всего было закуплено 6 или 7 машин CDC Cyber 170 по 5 млн. $ каждая (для сравнение, БЭСМ-6 стоила 530 тыс. рублей или ~650 тыс. $ по курсу 1970-х). И даже в неполноценном варианте американские машины были "быстрее, эффективнее и удобнее, чем БЭСМ-6", как признал в интервью DataArt Владимир Иванович Воробьёв, в то время заведующий Лабораторией информационно-вычислительных систем и технологий программирования ЛНИВЦ (СПИИРАН), где стояла одна из CDC Cyber 170. Получается, что дело вовсе не в мифических предателях и практика импорта и копирования Западных машин была вопросом целесообразности.
Для тех же, кто считает, что причина нарастающей отсталости советских машин была в "недостаточном финансировании", замечу, что крупнейшие мировые производители компьютеров, такие как IBM, Intel, AMD, DEC, CDC, HP и др., государственного финансирования не привлекали. И если Западные компании стремились сделать коммерчески привлекательный продукт для конкретной потребительской ниши, то советские разработки были прежде всего нацелены на технологический суверенитет в критически важных областях, там где использование Западных машин или их точных копий было нежелательно.
Соответственно, копирование Западных средних и малых ЭВМ позволило СССР высвободить больше научных ресурсов для создания отечественных суперэвм. И это не только "Эльбрус", но и, например, Электроника СС БИС, которая была введена в эксплуатацию в 1989 году. А вот слова одного из разработчиков этой машины, Юрия Панчула: "Этот проект был неудачей эпических масштабов - компьютер заработал только спустя 13 лет после своего заокеанского брата. До 1991 года было выпущено 4 экземпляра машины, которые оказались не нужными абсолютно никому".
Можно говорить о конкуренции США с Британией, Канадой, КНР, Японией, потому что суперкомпьютеры из этих стран когда-то или даже относительно недавно становились самыми быстрыми в мире, тогда как СССР ни разу не отметился в мировой компьютерной гонке. В целом советская компьютерная отрасль развивалась на заимствованиях решений у Западных частных компаний, причём с большим отставанием (сравните, например, даты производства компьютеров IBM System, PDP, VAX, и их советских клонов серии ЕС ЭВМ и СМ ЭВМ).
Персональные компьютеры и компьютерный бум
Появление персональных компьютеров в США привело к "компьютерному буму" в Западном мире - так, в 1980-х годах, в странах Запада было продано свыше 80 млн. ПК.
В СССР первым серийным персональным компьютером был Агат (1984), аналог Apple II (1977). Высокая стоимость «Агата» (около 4000 р.) сделала его недоступным для рядового советского потребителя, поэтому он производился небольшой серией для госучреждений. Для сравнения, самый популярный Западный ПК того времени Commodore 64 стоил 199$ (~160 руб. по советскому курсу).
А самыми массовыми ПК в СССР были клоны ZX Spectrum. Стоили советские клоны в районе 1000 р. (например, госцена на ПК «Сура» составляла 1152 р.), тогда как оригинальный Spectrum стоил около 200$ (~112 руб. по курсу 1991 года). Естественно, после снятия ограничений на импорт, Западные компьютеры быстро заместили отечественные.
Итого:
Единственным фактом, якобы доказывающим временное превосходство советских машин, служит история про расчёт телеметрии во время советско-американской космической миссии Союз-Аполлон. Чтобы проанализировать данный факт, нужны подробности, например, что за машины были у американской стороны и в каких условиях проходило это якобы соревнование. И вообще, американские коллеги знали, что с ними соревнуются? Почему нам об этой истории известно только из российских источников? У NASA, в то же время, была машина ILLIAC IV, почему она не упоминается в контексте истории с расчётом телеметрии? Ведь если NASA не задействовали свою самую мощную машину, то какое же это соревнование?
Что касается утверждений и предположений о якобы заимствований советских компьютерных технологий, то никаких доказательств этому не приводится. Зато есть множество примеров копирования в СССР компьютеров или компьютерных решений Западных частных компаний.
И даже если какой-то серийный Западный компьютер "был похож" на советский прототип, то это не доказывает советский приоритет. Дело в том, что для серийного производства должна быть подготовлена соответствующая технологическая база, тогда как советские разработки иногда больше походили на эксперименты (делали какой-то прототип и тут же приступали к разработке следующего) - частные компании такого позволить себе не могли (рисковать деньгами инвесторов), особенно на начальном этапе своего развития. В качестве доказательств какого-либо советского приоритета надо привести авторское свидетельство или научное исследование, более ранее, чем аналогичное Западное, а сравнивать прототип с серийной продукцией - некорректно.
Ну и наконец, что касается обвинений во вредительстве в адрес советского руководства. Вообще, спорить с конспирологами не нужно, ведь никаких доказательств они не приводят, но давайте им подыграем и предположим, что Запад и правда внедрял шпионов, "чтобы подорвать технологический суверенитет СССР". Тогда, в любом случае, виновата система, ведь с Западными странами подобное провернуть сложнее - там представителей власти можно критиковать и, если они действуют против национальных интересов, их не переизберут. Не говоря уже о том, что есть конституция, которая в демократических странах не позволяет чиновникам напрямую вмешиваться в экономику. Если же заслать шпионов не в правительство, а в какую-нибудь частную компанию, то лучшие сотрудники этой компании могут перейти работать к конкуренту, либо же создадут свою компанию, подобно тому, как бывшие сотрудники Sperry Rand основали Control Data Corporation. В СССР подобные возможности отсутствовали, а "железный занавес" фактически делал многих советских инженеров невыездными (например, чтобы разработчик Наири Грачья Есаевич Овсепян смог уехать из СССР, потребовалось вмешательство американского президента). И да, действительно, при такой централизованной и неподотчётной народу власти, с монополией на СМИ и систему образования, теоретически возможно завербовать какие-нибудь высшие должностные лица, которые будут работать против интересов страны и население этой страны даже не осознает этого.
Сноски
* В научной публикации High-Speed Computers of the Soviet Union утверждается, что БЭСМ-6 имела общие конструктивные особенности с Atlas, такие как уникальная для этих двух систем разрядность слова и адреса и разрядность машинных команд в слове, использование одноадресных команд с индексным регистром, регистра скрытых разрядов, кодировка символов и пр., также была идентичная техдокументация на обе машины.
** Система АС-6 была сдана в опытную эксплуатацию только в 1979 году, но здесь говорится, что "она использовалась при проведении работ по программе совместного советско-американского проекта «Аполлон – Союз»".


















































