Как и все достаточно ранние ЭВМ, ЕС-1020 имела пульт управления, содержащий довольно много индикаторов, кнопок и переключателей. К сожалению, найти фотографию пульта советского варианта этой машины в сколько-нибудь приличном качестве мне не удалось, поэтому привожу изображение пульта болгарского варианта машины из какого-то рекламного проспекта 1970-х годов (его выходные данные отсутствуют), а ниже — рисунок размещения основных средств индикации и органов управления советского пульта. Несмотря на ряд существенных внешних различий, эти пульты практически идентичны. В самом верху обоих пультов расположены индикаторные лампы, отражающие текущее содержимое регистра микрокоманд РМК (два верхних ряда) и адреса постоянной памяти РАПП (третий ряд). Следом размещаются три группы индикаторов состояния мультиплексного и обоих селекторных каналов. На изображении болгарского пульта видно, что они разноцветные: красные индикаторы отражают состояние различных триггеров ошибок, белые — обычную информацию, жёлтые — контрольные разряды байтов. Ещё ниже расположены лампы регистра индикации в количестве 21 штуки: два полных байта с контрольными битами и обрезанный байт, содержащий два информационных и один контрольный разряды. Микропрограмма, обслуживающая пульт, заносит в этот регистр ту или иную информацию; сразу после останова процессора, например, там содержится адрес следующей выполняемой команды. Три нижних ряда ламп отражают состояние ряда регистров и триггеров процессора. Их компоновка в советском и болгарском вариантах несколько отличается, однако сама информация остаётся той же самой: 18 информационных и три контрольных бита регистра адреса памяти РМН, два байтовых регистра данных памяти РН и РЗ, входные регистры БА РА и РВ и выход БА С, регистр ошибок РО (все его индикаторы — красные, поскольку их установка означает обнаружение того или иного сбоя) и индикаторы состояния отдельных триггеров. Их четыре штуки (на советском пульте нарисовано пять квадратиков, но в тексте прямо говорится, что их четыре): индикатор триггера тяжёлого останова ТТО (красного цвета); индикатор совпадения адреса того или иного вида памяти с набранным на пульте; индикатор выполнения микропрограммы обслуживания одного из селекторного канала; индикатор выполнения микропрограммы обслуживания мультиплексного канала. На болгарском пульте в левом верхнем углу расположены пять больших индикаторов, сверху вниз: система (синий) — горит, когда процессор выполняет какую-либо микропрограмму, а не полностью остановлен; ручная работа (жёлтый) — отражает состояние триггера ТОСТ и горит, когда процессор остановлен с точки зрения программы, т. е. не выполняет команды и не обслуживает прерывания, но при этом способен выполнять ручные операции, инициируемые с пульта (считывание или изменение содержимого ячеек памяти и т. п.); контроль (красный) — загорается, когда один из переключателей режимов работы не находится в положении «Автомат» (в этом положении они должны находиться, когда машина обычным образом выполняет программу); ожидание (жёлтый) — загорается, когда в PSW устанавливается бит режима ожидания, т. е. когда процессор команды не выполняет, но может обрабатывать прерывания. На изображении пульта верхнюю строку надписи разобрать не удаётся, а в нижней строке написано «режим»; я прихожу к выводу, что это индикатор режима ожидания, исходя из того, что те же пять индикаторов имеются на советском пульте, но расположены в другом месте; загрузка (жёлтый) — горит, пока установлен триггер начальной загрузки программы, т. е. от момента начала загрузки и до её завершения с точки зрения аппаратуры (до окончания выполнения канальной программы, считывающей программу процессора в памяти). На болгарском пульте угадывается надпись ПЗП или НЗП — «(перво)начальная загрузка программы»; эта аббревиатура часто встречается на пультах и в технической документации разных советских ЕС ЭВМ. В советском пульте, судя по рисунку, эти пять индикаторов представлены лампами обычного размера, расположенными в правой нижней части пульта («Состояние системы»). Далее на болгарском пульте идут две кнопки синего и красного цвета. Надписи на них нечитаемы, но, по всей вероятности, это кнопки включения и выключения питания. Замечу, что их расположение отдельной группой, а не рядом с прочими переключателями и кнопками, при эксплуатации удобнее: меньше риск, что оператор случайно нажмёт не ту кнопку. В самой нижней части болгарского пульта мы видим две группы по пять поворотных переключателей — левая группа называется «Адрес памяти», а правая — «Адрес команды». Поскольку адреса в ЕС-1020 являются 18-разрядными, самый левый переключатель каждой из групп имеет четыре позиции, а остальные четыре — по 16 (один переключатель кодирует одну шестнадцатеричную цифру адреса). На советском пульте эти две группы находятся примерно в середине панели переключателей и конструктивно выполнены иначе («колёсико», торчащее сквозь прорезь панели пульта), из-за чего на рисунке обозначены прямоугольниками. Несмотря на свои названия, эти переключатели являются довольно многофункциональными: переключатели «Адрес памяти» в зависимости от положения других переключателей пульта могут задавать адрес основной, локальной или мультиплексной памяти, памяти ключей защиты, постоянной памяти, номер аппаратного регистра процессора или регистра одного из каналов; переключатели «Адрес команды» могут задавать собственно адрес команды, адрес постоянной памяти или адрес внешнего устройства для выполнения начальной загрузки, а также данные для записи в память или регистры процессора. В верхней части панели переключателей и у нас, и у болгар идут четыре поворотных переключателя, задающих режимы работы процессора и пульта.  Переключатель «Тип памяти» задаёт, к какому виду памяти или к какой группе регистров производится обращение с пульта. Предусмотрены следующие варианты: ОП — основная память; МП — мультиплексная память; ЛП — локальная память; ПЗ — память ключей защиты; ЦП — регистры центрального процессора; КМ — регистры мультиплексного канала; КС1 — регистры первого селекторного канала; КС2 — регистры второго селекторного канала. Переключатель «Режим работы» имеет четыре положения: «Автомат», «Команда», «Микрокоманда» и «ОП». Первое из них означает обычную работу, когда процессор выполняет команду за командой (если, конечно, он не остановлен). Положения «Команда» и «Микрокоманда» позволяют выполнять соответственно по одной команде или одной микрокоманде, после чего процессор останавливается либо в логическом смысле (прекращение выполнения команд), либо физически (останов синхронизации для прекращения выполнения микрокоманд). Положение «ОП» используется в некоторых пультовых операциях, о чём будет сказано ниже. Переключатель «Сравнение адресов» имеет, кроме «Автомата», ещё шесть положений.  В положении «Останов ОП» при обращении процессора к ячейке основной памяти, адрес которой набран на переключателях «Адрес памяти», аппаратно устанавливается триггер останова ТОСТ. Микропрограмма реализации текущей выполняемой команды или прерывания дорабатывает до конца и обычным образом передаёт управление микропрограмме «главного цикла». Последняя, в числе прочего, анализирует состояние этого триггера, что приведёт к логическому останову процессора (это описывалось в предыдущей статье), после чего с пульта можно выполнять различные операции. При нажатии кнопки «Пуск» процессор возобновит выполнение программы с точки останова (или с другой команды, если адрес команды был вручную изменён). Положение «Останов по записи ОП» аналогично предыдущему с той разницей, что триггер ТОСТ устанавливается лишь при записи по заданному адресу. Положение «Переход ОП» выполняет две функции. Если переключатель «Режим работы» находится в положении «Автомат», то при совпадении адреса обращения к памяти со значением, набранным на переключателях «Адрес памяти», производится занесение в регистр РМФЕ значения с переключателей «Адрес команды», что обеспечивает переход процессора на выполнение этой команды (это можно использовать, например, для зацикливания выполнения нескольких команд программы). Если переключатель «Режим работы» находится в положении «Команда» или «ОП», происходит зацикливание операции, выполняемой с пульта. Положение «Останов ПП» остановит процессор после выполнения микрокоманды, адрес которой задан переключателями «Адрес памяти». Работа возобновляется после нажатия кнопки «Пуск». Положение «Переход ПП» вызовет переход микропрограммы на заданный переключателями «Адрес команды» адрес, как только будет выполнена микрокоманда с адресом, указанным переключателями «Адрес памяти», что используется для зацикливания выполнения участка микропрограммы. Положение «Синхроимпульс ПП» никак не влияет на работу процессора, однако при выполнении микрокоманды с адресом, заданным переключателями «Адрес памяти», вырабатывается специальный импульс. Этот режим предназначен для, например, запуска осциллографа в момент выполнения определённой микрокоманды. Переключатель «Контроль» имеет три положения: «Автомат», «Останов» и «Блокировка». Когда этот переключатель находится в положении «Останов», при обнаружении любой машинной ошибки в собственно процессоре или в каналах процессор немедленно переходит в состояние тяжёлого останова вместо вызова микропрограммы обработки ошибок. В состоянии «Блокировка», напротив, процессор игнорирует любые ошибки. В состоянии «Автомат», как несложно догадаться, процессор обрабатывает машинные ошибки обычным образом — осуществляет переход на микропрограмму обработки ошибки, как описывалось в одной из предыдущих статей. Помимо описанных переключателей, на пульте имеется целая дюжина различных кнопок. На советском пульте они разделены на две группы — в одной, слева внизу, собраны 10 кнопок, в другой, в правом нижнем углу, находятся всего две. В данном случае советский вариант выглядит удачнее болгарского, где все 12 кнопок расположены одним блоком правее переключателей режимов: двумя «особыми» кнопками являются «Загрузка» и «Прерывание» — и только они, вообще говоря, нужны оператору в процессе работы с машиной. Остальные десять кнопок нужны либо инженеру, налаживающему процессор, либо системному программисту, ведущему отладку системной программы прямо с пульта. К ним относятся: «Контроль ламп» — нажатие этой кнопки зажигает все лампы пульта, чтобы проверить их исправность; «Блокировка таймера» — отключает обновление интервального таймера (эта кнопка имеет фиксатор и подсветку, включаемую при её нажатии); «Гашение» — инициирует сброс процессора, по завершении которого последний переходит в состояние останова. Заметим, что нажатие кнопки «Загрузка» также выполняет сброс процессора, но после этого процессор не останавливается, а инициирует загрузку с заданного устройства. Начальные действия по гашению выполняются аппаратно, после чего с фиксированного адреса 1 начинается выполнение микропрограммы гашения, которая и осуществляет основную часть работы по установке оборудования в исходное состояние; «Гашение сбоя» — нажатие на эту кнопку сбрасывает триггер тяжёлого останова и триггеры ошибок, что позволяет возобновить работу процессора после сбоя. Это гашение выполняется чисто аппаратными средствами; «Останов» — переводит процессор в состояние останова. Как было сказано в предыдущей статье, технически нажатие на эту кнопку устанавливается триггер ТОСТ, а сам останов реализован микропрограммно. Пока ТОСТ установлен, кнопка «Останов» подсвечивается; «Пуск» — если переключатель режима работы находится в положении «Автомат», то нажатие этой кнопки сбрасывает триггер ТОСТ, что ведёт к возобновлению выполнения программы. Если указанный переключатель находится в положении «Команда» или «Микрокоманда», то процессор выполняет соответственно одну команду (её адрес находится в РМФЕ) или одну микрокоманду, после чего опять останавливается. Как влияет эта кнопка на режим работы «ОП», литература не сообщает; «Занесение РАПП» — нажатие этой кнопки заносит адрес микрокоманды, набранный на переключателях «Адрес команды», в регистр адреса постоянной памяти РАПП, т. е. задаёт, какая микрокоманда будет выполнена следующей. В отличие от многих других операций пульта, эта операция, по понятным причинам, выполняется чисто аппаратными средствами; «Занесение АК» — по этой кнопке адрес, набранный на переключателях «Адрес команды», заносится в качестве адреса следующей команды в регистр РМФЕ и соответствующие ячейки локальной памяти, а также пересылается в регистр индикации для отображения на пульте; «Чтение» — выполняет чтение ячейки памяти или регистра, чей адрес набран на переключателях «Адрес памяти», а тип задан переключателем «Тип памяти», и заносит полученное значение в регистр индикации, что приводит к отображению информации на пульте; «Запись» — выполняет запись информации, набранной на переключателях «Адрес команды», в ячейку памяти или регистр, выбранные переключателями «Тип памяти» и «Адрес памяти». Для занесения одной и той же информации в несколько подряд расположенных ячеек памяти предусмотрена специальная процедура: сначала с помощью кнопки «Занесение АК» в регистр РМФЕ с переключателей «Адрес команды» заносится начальный адрес области памяти, затем на переключателях «Адрес команды»  устанавливается записываемая информация, а на переключателях «Адрес памяти» — адрес последней ячейки области (переключатель «Тип памяти», естественно, определяет, в память какого типа будет выполняться запись). После этого необходимо установить переключатель «Сравнение адресов» в положение «Останов ОП» или «Переход ОП», а переключатель «Режим работы» — в положение «ОП», и нажать кнопку «Запись». В результате микропрограмма запишет заданную информацию в указанную область памяти, после чего либо остановит процессор, либо возобновит запись с начала области, т. е. зациклит операцию записи. Блок-схема пульта приведена на рисунке. Для обеспечения доступа микропрограммы к регистрам, отражающим значения большинства переключателей и некоторых индикаторов пульта, предусмотрена передача содержимого регистров пульта на вход В БА и запись результата операции БА в регистры пульта, что управляется обычными полями микрокоманды В и С, как описывалось в одной из предыдущих статей. Однако здесь имеется одна тонкость. Дело в том, что поля В и С имеют по пять разрядов, что позволяет закодировать лишь 32 источника или приёмника информации, однако в машине их ощутимо больше: помимо регистров собственно процессора и пульта, имеются регистры трёх каналов. По этой причине лишь у регистров собственно процессора имеются свои уникальные имена и коды для этих полей (например, регистр РН задаётся комбинацией 00001). Регистры и пульта, и каналов носят одинаковые обозначения РР1–РР9, РРА–РРЕ. К регистру какого именно узла выполняется обращение, определяется битами регистра РБС: бит 2 устанавливается для обращения к пульту, бит 3 — ко второму селекторному каналу, бит 4 — к первому селекторному каналу и 5 — к мультиплексному каналу. Если микрокоманда не использует указанные «разделяемые» регистры, состояние этих битов РБС может быть произвольным: они часто используются как флажки, устанавливаемые и проверяемые микропрограммами, реализующими систему команд, и лишь при выполнении пультовых операций и обслуживании каналов приобретают описанный специальный смысл. Значения, набранные на переключателях «Адрес памяти» (они обозначены буквами А–Д), доступны микропрограмме через три псевдорегистра РР3, РР4 и РР5. Я их называю псевдорегистрами по той причине, что фактической необходимости хранить информацию нет: роль «хранилища» играют сами переключатели, а эти «регистры» служат лишь для выдачи того или иного значения на вход В БА. В РР3 используются лишь два бита — он соответствует четырёхпозиционному переключателю А; в двух других регистрах используются все восемь разрядов, поскольку они соответствуют парам шестнадцатеричных переключателей Б, В и Г, Д соответственно. Аналогичным образом, значение, набранное на переключателях «Адрес команды», доступно через псевдорегистры РР6, РРГ и РРД. Состояние восьмипозиционного переключателя «Тип памяти» отражается псевдорегистром РРВ. Как именно кодируется состояние, информации нет; скорей всего, в РРВ в любой момент времени установлен лишь один бит. Для отображения произвольной информации на пульте предусмотрены регистры РР5, РР6 и РР7, все вместе образующие регистр индикации РИНД. Как видим, у двух из них номера совпадают с регистрами переключателей адресов, но технически это совершенно другие регистры. РР5 имеет два информационных бита, РР6 и РР7 — по восемь; кроме информационных, в их состав входит по одному контрольному разряду. Наконец, в состав пульта входит регистр РР9, который был частично описан в предыдущей статье. Его четыре младших бита используются для организации работы интервального таймера, что, собственно, и было описано, а разряды 1–3 являются признаками пультовых операций. При нажатии на любую из кнопок «Чтение», «Запись» или «Занесение АК» сбрасывается триггер останова ТОСТ и устанавливается один из этих трёх битов. Микропрограмма выполнения пультовых операций зацикливается на проверке состояния ТОСТ. Когда обнаруживается его сброс, она проверяет состояние битов РР9[1:3] и выполняет требуемую операцию. При нажатии кнопки «Пуск» тоже производится сброс ТОСТ, однако ни один из битов РР9[1:3] не устанавливается, и микропрограмма обслуживания пульта заканчивает свою работу, передавая управление «главному циклу» для продолжения выполнения программы. Пожалуй, вся полезная информация, которую можно почерпнуть из имеющихся источников [1-3] касательно устройства и работы собственно процессора ЭВМ ЕС-1020, «выжата» и изложена в этой серии статей. «За бортом» осталась организация ввода-вывода: пожалуй, эту тему лучше обсуждать в отдельной серии, не привязанной жёстко к конкретной машине. Представляется небезынтересным сравнить наши ЕС ЭВМ с примерно аналогичными по характеристикам моделями фирмы IBM, с устройством которых наши разработчики наверняка были более-менее знакомы. В случае ЕС-1020 уместным будет сравнение с моделями IBM 360/30 и 360/40 (модели с большими номерами имеют намного более высокую производительность и, очевидно, сильно отличающееся внутреннее устройство, а модели 20 и 25, во-первых, не являются первыми по времени появления, а во-вторых, не являются полноценными представителями Системы 360, хотя формально и отнесены к ней, — это была попытка IBM урезать архитектуру ради удешевления; например, модель 20 реализует всего 37 команд против 143 у полноценной Системы 360; в ЕС-1020 реализованы 142 команды — отсутствует лишь ДИАГНОСТИКА, предназначенная для выполнения различных операций по диагностике неисправностей оборудования и управлению его конфигурацией; её точные функции зависят от конкретной модели, а сама она является привилегированной, а соответственно, недоступной прикладным программам). Как и процессор ЭВМ ЕС-1020, процессор ЭВМ IBM 360/30 (носящий, кстати, обозначение 2030) использует однобайтное АЛУ, а оперативная память используется и в качестве видимой программисту основной памяти машины, и в качестве локальной памяти процессора, и в качестве мультиплексной памяти мультиплексного канала. В частности, и «у нас», и «у них» программно доступные регистры общего назначения и регистры с плавающей запятой технически являются частью локальной памяти, т. е. хранятся в общем ферритовом ОЗУ. Таким образом, в самых базовых вещах мы наблюдаем полную идентичность обеих машин, но стоит копнуть чуть глубже, как сразу начинаются значительные различия. В ЕС-1020 длительность такта процессора составляет 1 мкс, и она жёстко привязана к полуциклу работы ОЗУ (за 1 мкс ОЗУ либо считывает, либо записывает информацию; полный цикл памяти всегда состоит из чтения и последующей записи, но между этими операциями процессор может выполнять определённую обработку данных). В течение такта вырабатываются четыре синхроимпульса той или иной серии (ГИ, ТИ, СИ, ХИ); длительность каждого импульса составляет 200 нс, а между соседними импульсами имеется промежуток 50 нс. В IBM 360/30 длительность такта процессора также привязана к полуциклу ОЗУ и в зависимости от модели последнего составляет либо 750 нс, либо 1 мкс. В течение такта формируются тоже четыре импульса, но одной-единственной серии (T1–T4); интервалов между импульсами нет: каждый из них имеет длительность 250 или 187,5 нс в зависимости от длительности такта. Ширина доступа к памяти в ЕС-1020 составляет два байта (18 бит с учётом двух контрольных разрядов), объём программно доступной ОП — 64, 128 или 256 Кбайт (физически реализовано 18 линий адреса, не считая контрольных разрядов). В IBM 360/30 ширина доступа к памяти — 1 байт, а её объём составляет от 8 до 64 Кбайт (физически реализовано 16 линий адреса). Общая организация потоков данных в IBM 360/30 выглядит подобно ЕС-1020 (см. рисунок), однако имеется ряд существенных различий. В частности, легко видеть, что адресных регистров, позволяющих обратиться ко всему объёму ОП, всего два — UV и IJ; в ЕС-1020, напомню, их три — РГРИ, РПТУ и РМФЕ (вдобавок, «наши» регистры хранят по 19 бит, не считая контрольных, из-за более широкого физического адреса). Естественно, поскольку память в IBM 360/30 однобайтовая, регистр данных памяти (R) тоже однобайтовый против двух однобайтовых регистров РН и РЗ, объединяемых в двухбайтовый РНЗ, в нашей машине. А вот собственно регистр адреса памяти, хранящий адрес, по которому в данный момент осуществляется обращение, хоть и имеет разную ширину, «у них» называется MN, а «у нас» — РМН; как говорится, найдите семь отличий, а все совпадения случайны :). Длина микрокоманды в IBM 360/30 составляет 60 бит; в ЕС-1020 микрокоманда технически содержит 64 бита, а логически — 62, поскольку два разряда не используются. Разделение микрокоманды на поля и их назначение довольно близки в обеих машинах, что вполне ожидаемо из-за концептуально схожей микроархитектуры, однако в частностях, как обычно, много отличий. В частности, весьма серьёзно отличается управление подачей операндов на входы АЛУ, чем «заведуют» поля CA, CF для входа A и CB, CK, CG для входа B. Помимо сильно различающегося набора источников информации для этого входа, по-разному организована дальнейшая передача информации. В ЕС-1020 данные на вход А всегда передаются прямо, а на вход В они могут передаваться прямо, крест-накрест (старший полубайт вместо младшего и наоборот), с передачей либо старшего, либо младшего полубайта и обнулением второго полубайта (причём тоже или прямо, или накрест), или, наконец, с «перекосом», когда один из полубайтов запоминается в специальном регистре, предыдущее содержимое которого используется в текущей операции, а новое содержимое будет использовано в последующей. В IBM 360/30 выборочная подача полубайтов возможна для обоих входов АЛУ, подача крест-накрест — только для входа А, а вот аналога нашего перекоса там нет, что несколько усложняет выполнение некоторых операций, в частности, реализацию команды MVO. АЛУ в IBM 360/30 выполняет только операции сложения и вычитания (как двоичные, так и двоично-десятичные) и логические: «и», «или», «исключающее или»; сдвигов нет (надо полагать, что сдвиг влево реализуется через сложение значения с самим собой, а сдвиг вправо — через пересылку крест-накрест и сложение с самим собой). Прямого аналога механизму косвенной функции нет, есть лишь возможность условного выполнения либо сложения, либо вычитания. Таким образом, функционально АЛУ ЕС-1020 является более эффективным и позволяет уменьшить объём микропрограмм, хотя фактическая производительность обеих машин примерно одинакова (недостатки АЛУ IBM 360/30 сказываются на скорости выполнения лишь нескольких операций, не очень часто встречающихся в реальных программах). Теперь посмотрим на IBM 360/40 (процессор 2040). Эта машина имеет ОП объёмом от 16 до 256 Кбайт, а физическая ширина доступа к памяти составляет два байта, что соответствует характеристикам памяти ЕС-1020. Время цикла памяти IBM 360/40 несколько больше — 2,5 мкс. В отличие от ЕС-1020 и IBM 360/30, в IBM 360/40 такт процессора отвязан от полуцикла памяти и имеет длительность 625 нс (пока память выполняет чтение или запись, процессор успевает выполнить две микрокоманды). Используются две серии синхроимпульсов — P и T, по четыре импульса в каждой. Серия T в определённых случаях блокируется, серия P выдаётся постоянно. Это отчасти напоминает синхронизацию в ЕС-1020, где имеется постоянно выдаваемая серия ГИ и блокируемые серии ТИ, ХИ и СИ. Потоки данных в процессоре 2040 весьма сильно отличаются от таковых в двух других рассматриваемых машинах, хотя во всех трёх случаях используется однобайтовое АЛУ. На приведённом рисунке обращает на себя внимание обозначение потоков данных либо одиночной, либо двойной линией. Дело в том, что часть регистров процессора этой машины широкие — к ним относятся регистры B, A, C, D и R, причём A и D имеют ширину 16 бит (плюс, как обычно, два контрольных разряда), а A, C и R — 19 информационных и три контрольных разряда. Регистр A используется для непосредственной адресации памяти, почему и состоит из двух полноценных и обрезанного байтов — точно так же, как регистры РГРИ, РПТУ и РМФЕ в ЕС-1020. Регистр C используется в качестве пары рабочих однобайтовых регистров или хранит какой-либо дополнительный адрес, но напрямую адресовать память не может. Наконец, регистр R позволяет передать все 16 или 19 битов данных с соответствующими контрольными разрядами между ним и любым из других четырёх широких регистров, не используя при этом АЛУ, что в некоторых случаях способствует существенному увеличению производительности (в процессорах как ЕС-1020, так и IBM 360/30 любая пересылка информации между регистрами выполняется через АЛУ, причём только по одному байту за такт). Что ещё более важно, в этом процессоре мы видим локальную память, являющуюся отдельным узлом собственно процессора, а не частью физического ОЗУ (кажется, технически ЛП тоже является ферритовым ОЗУ, но за счёт своей малой ёмкости намного более компактным и быстрым — его полный цикл совпадает с тактом процессора). Всего предусмотрено 144 слова шириной 22 бита (19 информационных и три контрольных; физически, похоже, у каждого слова имеется 24 бита); регистром данных для локальной памяти является уже упоминавшийся регистр R. Как и в других машинах, в ЛП хранятся значения регистров общего назначения, регистров с плавающей запятой и PSW, управляющая информация селекторных и частично — мультиплексного каналов (основная часть информации мультиплексного канала, как обычно, находится в мультиплексной памяти, являющейся частью ОЗУ) и рабочие области. Реализация локальной памяти в составе собственно процессора, конечно, весьма ощутимо увеличивает его стоимость, однако очень серьёзно повышает производительность; именно наличие быстрой локальной памяти сделало необходимой отвязку такта процессора от полуцикла ОЗУ и позволило стать IBM 360/40 существенно более быстрой машиной по сравнению с IBM 360/30 и ЕС-1020. Кстати говоря, АЛУ у ЕС-1020 и IBM 360/40 весьма близки, хотя и не полностью идентичны; в частности, в IBM 360/40 тоже имеются сдвиги и косвенные функции. Микрокоманда в IBM 360/40 имеет ширину 56 бит, т. е. меньше, чем в IBM 360/30 или ЕС-1020; естественно, общие идеи там те же самые, а вот конкретные микрооперации сильно отличаются. В целом, даже при таком поверхностном анализе становится понятно, что процессоры ЭВМ ЕС-1020 и двух младших моделей Системы 360 различаются настолько сильно, что в данном случае ни о каком прямом «воровстве» речи идти не может, хотя заимствования определённых идей или технических решений наверняка имели место. Пожалуй, в какой-то мере можно считать, что процессор ЭВМ ЕС-1020 — эта некая помесь процессоров 30-й и 40-й моделей Системы 360. Прямое воровство той или иной физической реализации архитектуры IBM в ЕС ЭВМ, кстати говоря, не было возможно и по вполне объективной причине. Система 360 была построена на элементах SLT (Solid Logic Technology), которые, если я правило понимаю, можно назвать микросборками, т. е. объединением в одном герметичном корпусе нескольких дискретных элементов (транзисторов, диодов, резисторов); позднее, в Системе 370, стали использоваться настоящие микросхемы, обозначаемые MST (Monolithic System Technology). И SLT, и MST были разработаны и производились самой IBM. Наши же ЕС ЭВМ строились на микросхемах серий 155 (младшие и часть средних моделей ЭВМ и почти вся периферия), 137, 187 (процессоры ЭВМ ЕС-1050 и ЕС-1052) и 500 (большинство средних и старших моделей), а также некоторых других. Почти все эти микросхемы являются аналогами или копиями микросхем американских фирм, не имеющих к IBM никакого отношения и не совместимых с элементной базой IBM напрямую; в частности, все микросхемы 155-й серии, используемые в ЕС-1020 и ЕС-1030, являются клонами микросхем серии SN74xx фирмы Texas Instruments. Соответственно, даже позаимствовав (или украв, если угодно) микроархитектуру, т. е. логическую внутреннюю организацию процессора, структуру и кодирование микрокоманды и т. д. и т. п., нашим инженерам всё равно пришлось бы проектировать принципиальную схему каждой печатной платы и машины в целом самостоятельно — элементная база была совершенно другой. В заключение приведу небольшую таблицу, показывающую время выполнения в микросекундах некоторых команд во всех трёх машинах; исходные данные взяты из [1] и [7]. В случае IBM 360/30 приводятся времена выполнения команд для памяти с циклом 2 мкс. Для всех команд формата RX предполагается, что поле B2 отлично от нуля, а поле X2 равно нулю. Для команд формата SS длительность операции зависит от размеров операндов (параметр N либо N1 и N2). Название Мнемоника Формат ЕС-1020 IBM 360/30 IBM 360/40 ЗАГРУЗКА L RX 27 32 11,88 ЗАПИСЬ ST RX 27 32 12,5 ПЕРЕХОД   С ВОЗВРАТОМ BALR RR 27 24 8,75   BAL RX 33 35 11,88 УСЛОВНЫЙ   ПЕРЕХОД BCR RR 16 14 5,01   BC RX 29 22 9,38 ИЛИ OR RR 20 30 7,5   O RX 30 40 11,88   OI SI 19 21 9,38   OC SS 36+3N или 28+5N 43+5N 16,25+3,13N СЛОЖЕНИЕ AR RR 20 29 7,5   A RX 33 39 11,88 УМНОЖЕНИЕ MR RR 338 304 83,28   M RX 348 313 84,72 ДЕЛЕНИЕ DR RR 390 550 175–192,5   D RX 398 560 176,88–196,88 ПЕРЕКОДИРОВАНИЕ TR SS 34+10N 41+7N 17,5+6,25N СЛОЖЕНИЕ   С НОРМАЛИЗАЦИЕЙ (короткие операнды с плавающей запятой) AER RR 62 65 14,3 СЛОЖЕНИЕ   С НОРМАЛИЗАЦИЕЙ (длинные операнды с плавающей запятой) ADR RR 93 105 22,53 УМНОЖЕНИЕ   (короткие операнды с плавающей запятой) MER RR 489 310 76,25 УМНОЖЕНИЕ   (длинные операнды с плавающей запятой) MDR RR 1239 1050 255 ДЕЛЕНИЕ   (короткие операнды с плавающей запятой) DER RR 389 600 128,13 ДЕЛЕНИЕ   (длинные операнды с плавающей запятой) DDR RR 2059 2500 472,5 ДЕЛЕНИЕ ДЕСЯТИЧНОЕ DP SS 2(N1-N2)(100+19N2) 12+3N1+(N1-N2)(71,5N2+110,5)-32N2 20,63+51,57N1-40,94N2+11,25N2(N1-N2) Несложно видеть, что почти все операции обработки данных на ЕС-1020 выполняются ощутимо быстрее, чем на IBM 360/30; не приходится сомневаться, что это является, главным образом, следствием вдвое более широкой памяти, что снижает частоту обращения к ней. В то же время IBM 360/40, имея примерно такое же однобайтовое АЛУ, оказывается намного быстрее на всех операциях; особенно впечатляющей является разница в делении длинных вещественных операндов (разрыв более 4 раз). Дело здесь не столько в более коротком машинном такте, сколько в наличии быстрой локальной памяти в составе самого процессора. В. В. Пржиялковский и др. Электронная вычислительная машина ЕС-1020. Под общей редакцией А. М. Ларионова. — М., «Статистика», 1975. В. В. Пржиялковский и др. Процессор ЭВМ ЕС-1020. Под общей редакцией А. М. Ларионова. — М., «Статистика», 1975. Р. И. Абражевич и др. Каналы ввода-вывода ЭВМ ЕС-1020. Под общей редакцией А. М. Ларионова. — М., «Статистика», 1975. Y24-3360-1. Field Engineering Theory of Operation. System/360 Model 30. Fifth Edition, June 1967. SY22-2840-2. IBM Field Engineering Theory of Operation. System/360 Model 40. Comprehensive Introduction. Sixth Edition, April 1970. SY22-2843-1. IBM Field Engineering Manual of Instruction. System/360 Model 40. Functional Units. Fifth Edition, March 1970. A22-6825-1. IBM Systems Reference Library. System/360 Instruction Timing Information.  Микроконтроллеры, цифровая электроника, ОС…