Pull to refresh

Ремонт принтера от мейнфрейма IBM 1401 эпохи 60-х

Reading time 14 min
Views 17K
Original author: Ken Shirriff

Мейнфрейм IBM 1401 (слева) в Музее компьютерной истории печатает фрактал Мандельброта на принтере 1403 (справа)

В Музее компьютерной истории для демонстрации стоят два рабочих мейнфрейма IBM 1401, но несколько недель назад у одного из них внезапно отказал принтер. Я помог его починить, но это оказалось сложнее, чем мы ожидали. По ходу пришлось изучить логические схемы проверки ошибок в принтере, буфер печати и даже низкоуровневые сигналы ферритовой памяти. Эта статья о нашем расследовании и том, как мы всё-таки нашли неисправный германиевый транзистор.

Мейнфрейм IBM 1401 вышел в 1959 году и стал главным бестселлером середины 60-х: всего было установлено более 10 000 систем. Компьютер давали в аренду за 2500 долларов в месяц (около 20 000 долларов в текущих ценах): очень низкая цена, позволяющая даже средним предприятиям использовать его для расчёта заработной платы, бухгалтерского учёта, выставления счетов и многих других задач. IBM 1401 сделан из небольших печатных плат (называемых SMS-картами), подключённых к блокам, называемых корзинами плат (gate). На фото внизу показан 1401 с одной из открытых корзин. Видны десятки коричневых SMS-карт.


Компьютер IBM 1401 с одной из раскрытых корзин плат, где видно множество SMS-карт. Вентилятор на передней крышке охлаждает карты

Один из главных драйверов продаж IBM 1401 — высокоскоростной линейный принтер IBM 1403, который выводил 10 строк в секунду (IBM утверждала, что это в четыре раза быстрее, чем у других принтеров, но конкуренты оспаривают это утверждение). Принтер 1403 печатал превосходно: это качество сумели превзойти только лазерные принтеры 1970-х годов.1 IBM утверждает, что «даже сегодня он остаётся стандартом качества для высокоскоростной ударной печати».


Крупный план цепи с литерами (вверх ногами) линейного принтера IBM 1403

В принтере 1403 использовалась длинная цепь с литерами (на фото вверху), которая с высокой скоростью вращалась над бумагой и красящей лентой. На каждой из 132 печатных позиций установлен молоточек и электромагнит. В определённый момент, когда нужный символ проходил через молоточек, электромагнит подталкивал его к обратной стороне бумаги, в результате чего бумага и лента били по литере на цепи, печатая символ.2


Печатный механизм линейного принтера IBM 1401. Из «Справочного руководства 1401», стр. 11

К сожалению, у принтера в Музее компьютерной истории возникла проблема: всякий раз при печати строки компьютер останавливался из-за ошибки «Проверка печати». К счастью, в музее есть группа волонтёров, которые помогают поддерживать систему в рабочем состоянии. Среди специалистов, которые участвовали в решении этой проблемы — Рон Уильямс, Фрэнк Кинг, Марк Вердиелл, Карл Клаунч, Майкл Мариню, Роберт Гарнер и Алексей Топтыгин. К тому времени, когда я пришёл на помощь, Рон написал простую тестовую программу, которая неоднократно пыталась напечатать строку; он перешёл в ручной режим и отключил проверку ошибок. Принтер напечатал символы как положено. Поэтому мы предположили, что проблема в логической схеме сообщений об ошибках внутри компьютера. Стратегия заключалась в том, чтобы найти сигнал ошибки, отследить его до источника — и определить причину.

Мы начали с изучения схемы защёлки (latch), которая содержит условие ошибки проверки печати и отправляет его в компьютер. Чтобы найти цепь, мы сверились с документацией: сгенерированными на компьютере чертежами монтажных схем, которые называются автоматизированными логическими схемами (Automated Logic Diagrams, ALD). Ниже показан небольшой участок ALD с триггером проверки печати (PR CHK LAT). Каждый прямоугольник на ALD соответствует схеме на SMS-карте, а линии показывают соединение карт друг с другом. Расшифровка текста внутри поля справа указывает на карту типа 2JMX, реализующую функцию “2+AO”, которая в современных терминах представляет собой логическую схему И-ИЛИ с инвертированием. Текст в каждом поле также указывает расположение карты: её корзина, в данном случае 01A6, и положение карты внутри (F10). Таким образом, чтобы проверить осциллографом выходной сигнал защёлки (обозначенный H), мы открыли корзину 01A6, нашли карту F10 и подключили осциллограф к контакту H.

Мы обнаружили, что контакт H выдаёт низкий сигнал (ошибка), когда контакты F и G под напряжением, что является правильным поведением для защёлки. Контакт G (PR CK SAMPLE) по сути тактовый импульс для пробы состояния ошибки, в то время как контакт F является самим сигналом ошибки. Нашей следующей задачей стало определить, что вызывает сигнал ошибки на контакте F.


Фрагмент автоматизированной логической схемы (ALD) компьютера IBM 1401, показывающий защёлку проверки печати (PRT CHK LAT). Эта страница подписана как 36.37.21.2

В документации есть и схемы на логическом уровне. Их немного легче понять, чем физические соединения на диаграммах ALD. На приведённой ниже логической схеме показана схема ошибок принтера. Справа сигнал ошибки проверки печати (PRT CHK ERROR) выходит из защёлки (PR CHK LAT), которая содержит сигнал ошибки. (Это та же защёлка, что и на диаграмме ALD выше, как понятно по именам сигналов). Слева от неё объединяются несколько различных состояний ошибок для формирования сигнала ошибки, подаваемой в защёлку. (Обратите внимание, что логические символы IBM не соответствуют стандартным. Полукруг — это логический вентиль ИЛИ, а не И. Треугольник — это вентиль И. Символ “i” в прямоугольнике — инвертор).


Логическая схема логики проверки ошибок в IBM 1401/1403. Из «Инструкций по логическим схемам», стр. 77, «Элементы управления буфером печати»

Ошибку проверки печати могут вызвать несколько условий3, и мы подумали, что проверка срабатывания молоточка (hammer fire) — наиболее вероятный кандидат. Напомним, что в принтере 132 молоточка для печати строки символов. Для их проверки предусмотрены две специальные матрицы памяти. (1401 использует память на магнитных сердечниках по 4000 символов4; каждый бит памяти —маленькое ферритовое кольцо, которое в зависимости от намагниченности хранит 1 или 0. Сетка из 4000 сердечников образует матрицу памяти. Много матриц располагаются друг над другом, формируя блок памяти). Каждый раз, когда компьютер решает запустить молоточек, он записывает это в ферритовую память в матрице проверки соответствия (equal check). Когда молоточек фактически срабатывает, импульс тока от электромагнита сохраняет бит в матрице срабатывания.5 На каждом цикле сканирования компьютер сравнивает две основные матрицы, чтобы проверить правильное/неправильное срабатывание молоточков, а в случае несоответствия выдаёт ошибку проверки.


Крупный план электромагнитов в принтере IBM 1403. Электромагнит (при получении импульса через свою пару проводов) вытягивает металлический якорь, который управляет молоточком, бумагой и лентой напротив литеры. Всего установлено 132 молоточка, по одному на каждую колонку, в двух рядах по 66 штук

После некоторых сложных манипуляций6 мы выяснили, что проблема связана не с проверкой срабатывания молоточков, а с другой проверкой: «завершение печати строки» (print line complete, PLC). Она проверяет, что для каждой строки в каждом столбце напечатано не больше одного символа. Здесь используется третья специальная матрица памяти — матрица «печать строки завершена». Каждый раз при печати символа устанавливается соответствующий бит. (Для пустого или непечатаемого символа бит устанавливается отдельной схемой). В конце строки (при сканировании 49) проверяются все сердечники матрицы. Если какой-то из них равен нулю, то есть принтеру не удалось напечатать этот столбец, выводится сообщение об ошибке. (На предыдущей логической схеме вы можете увидеть сигнал PLC CHECK и логику, которая его генерирует).

Проверка осциллографом (ниже) показала, что срабатывает PLC CHECK (жёлтый), потому что система думает, что в том же столбце печатается второй символ. Циановый сигнал — это (инвертированный) бит PLC от сердечника (PR LINE COMP LATCH); каждый нижний импульс указывает на печать символа в этой колонке. Розовый импульс (PRINT COMPARE) указывает на печать нового символа. Проблема в том, что циановый и розовый сигналы снижаются одновременно, указывая как на существующий символ, так и на новый символ в столбце. Это производит экстренный синий импульс (PLC CHECK), который инициирует жёлтый импульс (PRINT CHK ERROR от защёлки). Эта схема показана на предыдущей логической схеме с надписью «Попытка напечатать позицию дважды» (Trying to print position twice).


Сигнал осциллографа при отладке принтера IBM 1401

Почему система думает, что в столбце печатаются два символа? Это может быть по разным причинам. На распечатке мы видели, что в реальности принтер выводит на бумаге только один ожидаемый символ, так что схема для печати символа, видимо, работает правильно (PRINT COMPARE, одиночный розовый импульс вверху). Мы проверили схему пустых/непечатаемых символов, и она правильно обнаруживала пустые и непустые столбцы. Таким образом, наиболее вероятной проблемой является чтение 1 из сердечника памяти (циановая линия вверху, PR LINE COMP LATCH), когда там должен быть 0. Но в чём действительно проблема: неправильная намагниченность сердечника или неправильное значение на выходе?

Логическая схема внизу показывает механизм записи в память Print Line Compare. PR LINE COMP INH справа — это (инвертированный) сигнал, который записывается в сердечник.8 При сканировании 49 (цикл проверки после печати всех 48 символов) на эту линию подаётся напряжение, очищая память. Если печатается символ, то идёт сигнал PRINT COMPARE EQUAL. Логические вентили слева определяют пустой или непечатаемый символ. И если в сердечнике уже бит 1 (PR LINE COMP LATCH), то бит 1 перезаписывается в сердечник.


Логическая схема логики проверки завершения строки в IBM 1401/1403. Из «Инструкций по логическим схемам», стр. 77, «Элементы управления буфером печати»

Мы обнаружили, что эта схема записывала в сердечник ложные значения 1, потому что считывала ложные значения 1 из сердечника. Но так мы пошли по кругу: непонятно, изначальная проблема в чтении или записи. Чтобы разрешить проблему, мы поставили осциллограф на сканирование печати 49, когда обнуляются биты PLC, а затем посмотрели на следующее сканирование печати, которое считывает очищенные биты. Мы видели, как записывается 0 (т. е. высокое напряжение PR LINE COMP INH), но неожиданно увидели, что возвращается 1 (защёлка PR LINE COMP). Мы поняли: что-то происходит на низком уровне в ферритовой памяти.

Нужно упомянуть, что в стандартной системе 1401 контрольные биты принтера хранятся в основном модуле ферритовой памяти, но наша система использует отдельную «печатную память» для повышения производительности. Проблема производительности связана с тем, как принтер использует память: каждый раз, когда молоточек оказывается напротив нужной литеры на ленте, компьютер считывает соответствующий символ из памяти и запускает электромагнит, если символ в хранилище соответствует символу под молоточком. И получается, что в процессе печати непрерывно используется память — и компьютер во время печати не может производить никаких вычислений. Поэтому и внедрили отдельную печатную память на 132 сердечниках, которая действует как буфер печати.7 При использовании такого буфера строка для печати сначала быстро копируется из основной памяти в память печати. После этого компьютер может продолжать вычисления, используя основную память. За каждую дополнительную опцию IBM 1401 взималась ежемесячная плата: печатная память стоила $386 в месяц.


Это корзина плат с микросхемами буфера печати. К блоку памяти в правом верхнем углу подключены пучки жёлтых проводов

На фото вверху показана корзина с платами, которые реализуют функцию печатного буфера. Основной модуль памяти представляет собой блок в правом верхнем углу с жёлтыми проводами. (Отдельные ферритовые сердечники можно увидеть на фото внизу). Ферритовая память требует большого количества вспомогательных схем. Для выбора адреса управляющие карты (driver card) генерируют сигналы X и Y. Чтобы намагнитить сердечник, сигнал сочетается с тактовым импульсом, затем управляющая карта усиливает сигнал и отправляет его по шине запрета, которая проходит через все сердечники в матрице.9 При чтении сердечник наводит импульс на сигнальный провод. Этот импульс усиливается управляющей картой, а затем бит сохраняется в защёлке. Многочисленные платы в корзине печатной памяти предназначены для вспомогательных функций в этом процессе.


Сердечники в буфере печати. Проводка отличается от обычной ферритовой памяти, потому что каждый молоточек напрямую связан с сердечником проверки. Качество изображения плохое из-за пластиковой крышки над сердечниками

Мы исследовали усилитель сигнала и платы защёлки на стороне чтения ферритовой памяти. Оказалось, что они работали правильно, поэтому мы перешли на сторону записи. Карта управления шиной HN показалась кандидатом на отказ, потому что она работает на высоком напряжении. Мы поменяли карту — но запустить принтер по-прежнему не удалось. Затем я попытался посмотреть на вход этой карты — и обнаружил, что на одной линии нет сигнала.


График осциллографа плохой карты CHWW с логическим вентилем И-НЕ: розовый (3) и синий (4) соответствуют входным сигналам, циановый выход (2) застрял на высоком напряжении

Отсутствующий сигнал генерировала карта типа CHWW, логический вентиль И-НЕ (NAND), который совмещает сигнал шины запрета с тактовым импульсом перед отправкой на управляющую карту. Я подключил осциллограф к входам и выходу вентиля и зафиксировал параметры сигнала, показанные на иллюстрации выше. Эта трассировка говорит сама за себя: выход (циан 2) остаётся высоким, даже когда оба входа (розовый 3 и синий 4) меняют значение с низкого на высокое. Сразу видно, что вентиль неисправен. Это всё объясняет: с таким застрявшим значением на выходе в матрицу PLC записываются только значения 1. После печати символа схема считывает значение 1 из памяти, думает, что символ уже был напечатан, проверка PLC терпит неудачу — и возникает ошибка проверки печати.


Принтер успешно работает, печатая степени двойки

Мы заменили эту карту — и принтер начал печатать без ошибок (фото вверху). Это доказывает, что мы наконец-то выяснили проблему; это оказался простой вентиль И-НЕ в глубине схемы ферритовой памяти печатного буфера. Неисправная карта показана ниже. На ней три вентиля NAND (детали) на диодно-транзисторной логике (которую IBM называет CDTL — Complemented Transistor Diode Logic). Каждый вентиль с двумя входными сигналами использует один германиевый транзистор (круглый металлический элемент) и два диода (полосатые стеклянные компоненты справа). Слева — нагрузочные резисторы (полосатые) и индукторы (бежевые).


Неисправная карта CHWW от IBM 1401. На ней три вентиля NAND. Нижний левый транзистор вышел из строя и был заменён

Я протестировал карту с генератором сигналов и обнаружил, что два из трёх вентилей работают, а третий застрял на высоком выходном сигнале, подтверждая наблюдения внутри 1401. Далее я проверил транзисторы в режиме диодного тестирования на мультиметре. На хороших транзисторах напряжение падало до 0,23 В. (Это может показаться низким значением, но помните, что это германиевые, а не кремниевые транзисторы). Для сравнения, на плохом транзисторе напряжение снижалось только до 0,95 В. Наконец, мы сняли транзисторы и проверили их на винтажном характериографе Tektronix 577. Мы думали, что плохой транзистор будет слишком слабым, чтобы управлять защёлкой, но он оказался полностью убит — совершенно ровная линия на характериографе.

Мы вскрыли транзистор на токарном станке (lathe) и заглянули внутрь. Там используется германиевый сплав IBM 083 NPN (германий использовался до кремния). Транзистор состоит из крошечной германиевой подложки (блестящий металлический квадрат на фотографии внизу), образующей основание. Два провода эмиттер и коллектор соединяются пятнами оловянного сплава. Под микроскопом похоже, что точки сплава подверглись коррозии, а провод эмиттера не выглядит надёжно соединённым: мы подозреваем, что это основная причина сбоя.


Внутри неисправного германиевого транзистора IBM 083. Серебристый квадрат в центре — германиевая подложка, подключенная к штифтам цоколя. Точка в середине — сплав олова для коллектора, который соединяется проводом со штифтом коллектора слева. Меньшая точка на другой стороне германиевой матрицы образует эмиттер, подключенный к контакту справа

Выводы


Изучать эту проблему оказалось сложнее, чем большинство проблем IBM 1401. Но нам удалось найти причину, заменить неисправную карту и вернуть принтер к жизни. Одно преимущество IBM 1401 по сравнению с современными системами заключается в том, что это не чёрный ящик: вы можете заглянуть внутрь любой схемы, вплоть до отдельных транзисторов. В данном случае мы смогли найти повреждённый транзистор, который вызвал сбой системы, и даже определить, что его, вероятно, убила коррозия.

Примечания и ссылки


1. Одной из причин высокого качества печати IBM 1403 было использование гибкой цепи, а не планок с литерами. Многие более ранние принтеры использовали планки шрифтов, которые перемещались вертикально для выбора символов, поэтому любые ошибки смещения или синхронизации изменяли вертикальное положение символов, приводя к уродливому волнистому тексту. В 1403 горизонтально вращалась цепь с литерами, а смещение заключалось только в едва заметном изменении расстояния между символами.

2. Можно ожидать, что 132 молоточка совмещаются с 132 литерами на цепи и срабатывают сразу, но система работает не так. Вместо этого молоточки и литеры расположены немного по-разному, поэтому за один раз с цепью совмещается только один молоточек, а небольшое движение цепи приводит к выравниванию другого молоточка с другой литерой. (По сути, они образуют нониус). В частности, каждые 11,1 микросекунды цепь перемещается на 0,001 дюйма. Это приводит к новому выравниванию молоточка и типа литеры. По механическим причинам в очередь до конца строки выстраивается каждый третий молоточек (1, 4, 7, ...); это называется «подсканированием» (subscan) и занимает 555 микросекунд. Еще два подсканирования дают возможность сработать каждому молоточку в линии, образуя скан печати (print scan) в 1,665 миллисекунды. 48 сканов дают возможность каждому молоточку напечатать каждый символ, и после этого 49-е сканирование используется для проверки ошибок (Более подробный расчёт времени см. в «Руководстве по эксплуатации», стр. 37.).

Механизм сканирования и подсканирований может показаться чрезмерно сложным. Но ему удаётся совместить быстрый «электронный мир» с более медленным «механическим миром». В частности, совместить молоточек с литерой каждые 11,1 микросекунды. Компьютер считывает символ в этом столбце из сердечника памяти, сравнивает его с литерой, и если они совпадают, то запускает молоточек. Здесь важно, что цикл памяти сердечника совпадает с временем выравнивания молоточка, что позволяет прочитать символ с сердечника для каждого выравнивания молоточка. Если вам интересно, как работает механизм печати, есть вот такая анимация.

Один из нюансов в том, что удар молоточка занимает 1,52 миллисекунды («Руководство по эксплуатации», стр. 32). Таким образом, нужно запускать его не тогда, когда он действительно выровняется с литерой, а за 1,52 миллисекунды до этого момента.

3. Несколько жёстких проверок правильной работы принтера кажутся излишними. Но для бизнес-компьютера ошибки печати могут стать катастрофическими: представьте, что в чеках на зарплаты или в налоговых формах неправильные цифры. В научных компьютерах IBM не было столько проверок на ошибки, как в бизнес-компьютерах, исходя из предположения, что учёные заметят проблемы.

4. IBM 1401 хранит в ферритовой памяти сердечника 4000 символов, а не 4096, потому что это десятичная машина (т. е. двоично-десятичный код), с десятичными адресами. Память можно расширить до 16 000 символов с помощью блока расширения памяти размером с посудомоечную машину. Я уже писал о ремонте этого устройства. А здесь можете подробнее почитать о ферритовой памяти 1401.

5. Запись в память каждого удара молоточком выполняется не компьютером. Вместо этого каждый молоточек физически подключен проволокой непосредственно к определённому сердечнику памяти; 132 провода соединяют электромагниты с сердечниками. При срабатывании молоточка импульс от электромагнита идёт по проводу через соответствуя сердечник, намагничивая его (Эти провода видны на фотографии сердечников в статье).

6. Было сложно определить, какой сигнал вызывал ошибку на входе F из-за «монтажной» логики 1401. Поскольку в те времена транзисторы были дорогими, IBM использовала ряд трюков, чтобы уменьшить их количество. Один из трюков — монтажное ИЛИ вместо вентиля. Сигналы просто совмещались, так что если какой-то из двух имел высокий уровень, такой же получался у общей линии. Поэтому мы не могли просто прозондировать сигналы, подаваемые на контакт F — все они были связаны. Вместо этого пришлось отключить карты, чтобы проверить каждый сигнал по отдельности.

7. В печатном буфере 12 матриц памяти, то есть он хранит по 12 бит в каждом месте. Как и в обычной памяти, 6 бит занимает каждый символ BCDIC, ещё один бит для метки слова (метаданные, указывающие местоположения полей) и бит чётности. Вдобавок, четыре матрицы в печатном буфере предназначены для обнаружения ошибок: сигнальная матрица срабатывания молоточков, матрица проверки соответствия (запись молоточков, которые должны сработать), матрица завершения печати линии (PLC, запись колонок с напечатанными символами) и матрица проверки ошибок (колонки, которые вызвали ошибку).

8. Запись в ферритовые сердечники как будто происходит наоборот: высокий сигнал в шине запрета соответствует записи 0. Это связано с тем, как функционируют сердечники. Чтобы изменить магнитное состояние сердечника, требуется сильный импульс; а импульс с половиной напряжения не влияет на него. Сердечники расположены в сетке с адресными линиями X и Y, которые подают сигнал для выбора конкретного сердечника. Много матриц штабелированы друг над другом, каждая для одного бита. По каждой линии подаётся сигнал с половинным напряжением, поэтому только на пересечении нужных линий X и Y хватает тока, чтобы намагнитить сердечник до состояния 1. У каждой матрицы есть шина запрета, которая проходит через все сердечники матрицы. При записи 1 шина не получает тока, что намагничивает сердечник по указанному адресу, как описано выше. Чтобы записать 0 в матрицу, на шину подаётся половинный ток в противоположном направлении. В результате ни один из сердечников не получает достаточно тока для переключения, а сердечник по нужному адресу остаётся в состоянии 0. Таким образом, за счёт правильной установки шин можно записывать 0 и 1 по нужным адресам.

9. Информацию о проверках печати см. в «Командной логике» на стр. 98. Сведения о принтере 1403 см. в «Описании компонентов IBM 1403», «Руководстве по техническому обслуживанию принтеров 1403» и «Руководстве по эксплуатации принтеров 1403». См. также эту краткую статью о принтере 1403 в журнале IEEE Spectrum. Подробное описание IBM 1401 — в «IBM 1401: современная теория работы».
Tags:
Hubs:
+72
Comments 63
Comments Comments 63

Articles