Мейнфрейм 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. Серебристый квадрат в центре — германиевая подложка, подключенная к штифтам цоколя. Точка в середине — сплав олова для коллектора, который соединяется проводом со штифтом коллектора слева. Меньшая точка на другой стороне германиевой матрицы образует эмиттер, подключенный к контакту справа
К сожалению, не доступен сервер mySQL