[Перевод] Подготовка налогов в 1950-м году: «программирование» IBM 403 при помощи штекерной панели


Задолго до появления современных компьютеров бизнес использовал электромеханические бухгалтерские машины (БМ) для обработки данных. Эти машины весом в тонну «программировались» проводами на штекерной панели управления, что позволяло им создавать сложные бизнес-отчёты на основе данных, содержащихся на перфокартах. И хотя в них не было электроники и они использовали вращающиеся механические колёса для суммирования данных, зато эти машины могли обрабатывать более двух карт в секунду.


Штекерная панель, выполняющая на IBM 403 налоговый вычет

В честь наступления 15 апреля [традиционный день подачи налоговых деклараций в США], я изучу штекерную панель (ШП), использовавшуюся для подготовки налогов в 1950-м и объясню забытое искусство программирования ШП, показав, каким образом переплетение проводов может реализовать алгоритм обработки данных. Закрепив панель на БМ, оператор мог выполнить определённую задачу по обработке данных. Хотя панель выглядит как спагетти-код, воплощённый физически, отслеживание соединений раскрывает её функцию: она вычисляла налоговые вычеты, суммируя записи из многих полей, выводила отчёт с промежуточными и итоговыми суммами, и перфорировала меньший набор итоговых карт, занося на них эти суммы.

Обзор работы с перфокартами

Перфокарты служили основой обработки данных с 1890-х до 1970-х, и их использовали для бухгалтерских операций, инвентаризации, расчёта зарплат и многих других задачи. Обычно на одной 80-столбцовой перфокарте содержалась одна запись, а данные хранились в фиксированных полях карты. На фото внизу показывает карту со столбцами, разделёнными на такие поля, как дата, номер продавца, номер заказа и количество. БМ обрабатывала эти карты, складывала числа и выдавала отчёт с промежуточными суммами по счетам и отделам, как показано ниже.

Систему обработки перфокарт придумал Герман Холлерит для переписи США 1890 года, в которой использовался простейший табулятор, подсчитывавший записи по отверстиям в картах. Для суммирования табуляторы использовали модуль под названием «аккумулятор», чьи круглые циферблаты содержали значения десятичных разрядов. Аккумулятор дал название регистру процессоров, используемому по сей день. К примеру, в процессорах Intel x86 есть регистр EAX, то есть EXtended Accumulator. Эти машины, постепенно обрастая возможностями, стали сложными БМ, способными выдавать бизнес-отчёты. Они стали популярными в бизнес-среде и к 1944 году IBM предоставляла уже 10 000 табуляторов и БМ. В июле 1948 года IBM представила модель 402 Accounting Machine, на которой и использовалась рассматриваемая мною ШП. 402-я и 403-я модели машин обладали богатыми возможностями: у них было 16 счётчиков, множество уровней для промежуточных сумм, контроль вертикальных расстояний для поддержки форм, они поддерживали сравнения, условные операторы и удаление ведущих нулей.


IBM 403 с сортировщиком перфокарт Type 82

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

Программирование штекерной панели

БМ программировались на выполнение определённой задачи путём размещения проводов на ШП. Поскольку каждое приложение использовало карты с полями на разных местах, БМ требовался способ определения значения каждого из полей. Различные отчёты формировались на основе значений, расположенных в разных частях станицы. Приложениям было необходимо вычислять промежуточные и общие суммы разных значений. До появления компьютеров, способных хранить программы, была нужна технология простой настройки системы на конкретное приложение. В результате появилась система размещения проводов на ШП.

На фото панель показана вблизи. У неё есть сетка из отверстий (узлов) с размеченными функциями. Вставляя провод в панель, вы соединяете два узла, что заставляет БМ выполнять определённую операцию. Набор проводов определяет операции, проводимые над каждой из карт.

Когда в панель вставляют провод, штекер на его конце высовывается сзади панели, как показано вверху. Когда панель размещают на БМ (ниже), штекеры соприкасаются с сеткой разъёмов БМ, замыкая необходимые контуры (обратите внимание на переключатели настройки, о которых я скажу ниже).

Поскольку ШП съёмная, компании могли легко менять панели для выполнения разных задач (каждый раз перетыкать провода в панели для новой функции было бы слишком затратно по времени). В результате у компаний были целые полки, забитые панелями, настроенными на все выполняемые операции. В таком виде «программное обеспечение» занимает ощутимое физическое пространство. На фото ниже показана коллекция панелей одной из компаний, предназначенных для разных задач.

Налоговая программа

Я тщательно изучил расположение проводов на налоговой ШП, чтобы понять, что она делает. Первый шаг – отследить каждый провод и сопоставить его со схемой проводки (внизу), где показаны все разъёмы панели. Сравнив диаграмму с фотографией панели в начале статьи, вы обнаружите, что она показывает ту же самую проводку, только в гораздо более удобочитаемом виде.

Я обнаружил, что программа, «записанная» в проводах, считывает карты и подсчитывает промежуточные и итоговые суммы данных с карт. Конкретнее, на каждой карте есть семь считываемых полей. Первое – идентификатор, и все карты с одним идентификатором суммируются, в результате чего выдаются суммы для каждого из пяти полей. Мне кажется, что этот id назначался сотруднику, и каждая карта соответствовала одному периоду выплат. Или id мог принадлежать подразделению компании, а карта – отделу. Из-за отсутствия имён переменных точно это определить нельзя.

Суммирование записей по каждому id выдаёт итоговые налоговые вычеты этого сотрудника (с начала календарного года). Пять суммируемых полей могут относиться к зарплатным вычетам, таким, как федеральный подоходный налог, налог штата, налог на соцстрахование, на медицину и пенсионные отчисления. После прочтения карт, относящихся к сотруднику, БМ перфорирует новую, итоговую карточку, с общими суммами вычетов, и печатает строчку отчёта. Промежуточные итоги по всем сотрудникам суммируются для получения общего итога.

И вот как работает ШП. При чтении 80-истолбцовой карты каждая цифра доступна на одном из считывающих узлов, пронумерованных от 1 до 80. Соединение провода с узлом позволяет передавать цифру в другую часть машины. Допустим, к примеру, что в столбцах 28-33 содержится 6-значное число, и мы хотим сложить эти числа. Это делается при помощи соединения проводом 28-го считывающего столбца к наивысшему разряду счётчика, 29-го столбца – к следующему разряду, и т.п. – всего 6 проводов.

На фото ниже видно шесть красных проводов, передающих поле на счётчик 6С. 80 столбцов карты считывают два ряда узлов под надписью «Third reading». На вход счётчикам идут четыре ряда узлов под надписью «Counter entry». Остальные поля таким же способом соединены проводами со счётчиками.

По фотографии трудно разобраться в проводке, поэтому обычно схему подключения панели показывают на диаграмме. Ниже на ней показано соединение считывающих столбцов (справа) со счётчиком 6С (слева). Шесть проводов на диаграмме изображаются одним, в стиле изображения диаграмм от IBM. Горизонтальные полоски, соединенённые линией, обозначают шесть параллельно идущих проводов.

Для вывода итоговой суммы выход счётчика соединён с желаемыми столбцами принтера. На панели эти столбцы отмечены как «print entry»: 43 «алфавитно-цифровых печатных позиций», способных распечатывать буквы или цифры, за которыми идут 45 цифровых позиций, способных распечатывать лишь цифры. На диаграмме ниже показаны четыре провода от счётчика 4С, идущие к печатным позициям от 1 до 4 (жёлтым), и шесть проводов от счётчика 6С (красным) к печатным столбцам 35-40.

БМ содержит 16 десятичных счётчиков. 4 из них – 8-разрядные, они называются 8A, 8B, 8C и 8D. Четыре 6-разрядные (6A — 6D), четыре 4-разрядные (4A — 4D), и четыре – 2-разрядные (2A — 2D). Кроме того, два счётчика можно объединить, и получить более крупный счётчик. Также существуют связи между счётчиками для подсчёта промежуточных итогов. К примеру, счётчик 8А собирает промежуточный итог по сотрудникам. Эти итоги добавляются к счётчику 8В, и формируют общий итог.

Другая важная операция – сравнение id двух карт. Если у них одинаковый id, их нужно считать вместе, а если разный – нужно выводить подытог и обнулять счётчики. Сравнение выполняется через запись двух полей в два ряда для сравнения записей «comparing entry». Если они отличаются, сигнал поступает на выход «comparing exit». Поскольку мы хотим сравнивать текущую карту со следующей, мы берём одно поле из «второго чтения» и одно из «третьего чтения». Обрабатываемая нами карта будет на этапе третьего чтения, а карта после неё будет на этапе второго чтения. Наконец, вывод сравнения соединяется проводом с узлом «program start (minor)». В результате БМ начинает дополнительный цикл с распечаткой промежуточных итогов младшего уровня «minor» и обнуляет счётчики. У БМ есть ещё два дополнительных уровня промежуточных итогов, «intermediate» и «major» (средний и старший).


Столбцы 1-4 карточек сравниваются, чтобы выяснить, нужно ли печатать промежуточные итоги

На диаграмме выше столбцы 1-4 со второго и третьего чтений соединяются с узлами сравнивающих записей. Четыре соответствующих им выходных узла связаны проводом (серым) и соединены с младшим (MI) узлом запуска программы (жёлтый провод к PRG START справа вверху). На увеличенном фото внизу показано расположение проводов.

Ещё одна интересная особенность ШП – условное поведение при помощи переключателей. Соединения можно переключать в зависимости от сигнала, что позволяет машине менять поведение в зависимости от результатов сравнения или от состояния переключателей на панели. Эта ШП меняет поведение на основе переключателя «setup change 1», одного из переключателей на БМ наверху панели. Можно представить себе это как прообраз настроек командной строки. Согласно надписи на ШП, переключатель включает режим «с начала календарного года». Он включает обработку одного поля, а также переключает между константами 2 и 5, добавляемыми к счётчику 2В (назначение этих констант осталось для меня загадкой).

Провода с правой части ШП управляют поведением счётчика – например, накопление промежуточных или общих итогов. Также они соединяют несколько счетчиков вместе для их укрупнения. К примеру, счётчики 2C и 4D скомбинированы для работы как единый 6-значный счётчик.

В таблице представлена схема проводки ШП, показывающая связь между полями ввода и выводом принтера.

Колонки карты
Выходные колонки
Промежуточный счётчик
Итоговый счётчик
1-4
1-4
4C
34-38
5-10
8D
4A/2D
44-45
11-18
8A
8B
61-66
19-26
6A
2C/4D
67-71
27-32
6B
2A/4B
28-33
35-40
6C
8C
14-17
4D
С тумблера
2B

Колонки 14-17 суммируются, но не распечатываются. Возможно, их значения пробивают на итоговой перфокарте. Колонки 34-38 обрабатываются только при включённом тумблере «setup change 1». Счётчик 2В контролируется тумблером на панели, на каждом шаге к нему добавляется 2 или 5.

Ещё одна интересная функция машины – перфорация итогов. Она позволяет обработать большую пачку перфокарт и выдать небольшой файл с суммами. ШП для налогов настроена так, что для каждого сотрудника пробивается одна суммирующая перфокарта. Тем самым набор карт сотрудника с данными по каждому платёжному периоду сводится к одной карточке с годовыми суммами. Эту карту уже можно использовать в дальнейшей обработке.


Бухмашина IBM 403, соединённая с перфорирующим устройством 519-й модели

Перфорацию итогов проводят, присоединяя толстым кабелем к БМ перфорирующую машину. Провод, вставленный в один из узлов ШП, контролирует включение перфорации, а в другой – момент, в который нужно её проводит. ШП с налогами настроена так, что итоговая карточка пробивается для каждого промежуточного итога. Отдельная ШП на перфорирующей машина управляет тем, какие именно столбцы нужно пробивать на карточке.


Провода, управляющие перфорацией итоговой карточки. Узлы переключателя перфорации итогов (SP.SW) соединены серым проводом (слева внизу)

Внутренности бухгалтерской машины №403

Удивительно, какую функциональность могли обеспечить эти БМ без электронных компонентов, используя лишь хитроумную электромеханику. Внутри машины содержится лабиринт моторов, вращающихся валов, кулачков и захватов. Она больше похожа на автомобиль, чем на компьютер – у неё есть даже масляный насос! И со всеми этими механическими частями БМ весит более тонны (1143 кг).

На ШП по проводу определённая колонка передаётся на карточку. Но как символ с карты передаётся по проводу? Как счётчик выполняет сложение? Как выводится результат? БМ используют хитроумные механизмы, тесно связанные со структурой перфокарты.

Говоря современным языком, символ кодируется последовательно – по проводу идёт импульс, длительность которого связана с расположением отверстия на карте. Импульсы запускают и останавливают счётчики. Также они управляют печатающими головками, выводящими результат.

403-я работает со временем, основанным на вращении валов, а не на часах. Каждый поворот вала соответствует циклу карточки – чтению и обработке. Фундаментальная единица времени – поворот на 18°: это время между чтением последовательных отверстий карты, передвижением печатающей головки на один символ и поворота счётчика на единицу. При скорости обработки в 150 карт в минуту получается около 400 мс на карточку и 20 мс на поворот на 18° — удивительно быстро для механизма.

Чтение карт

Чтобы понять, как работает БМ, нужно понять, как данные хранятся на перфокартах. На перфокарте хранится по 80 символов, каждый из которых представлен набором отверстий в столбце. На фото видна карта, демонстрирующая хранение чисел и букв алфавита. Каждый символ печатается сверху карты, а внизу в столбце пробивается соответствующие ему отверстия. Цифра – это просто отверстие в нужном ряду, от 0 до 9 (обратите внимание, что цифры хранятся не в двоичном, а в десятичном виде). Для поддержки букв над цифровыми рядами введены два вспомогательных, «зональных». Буква А обозначается двумя отверстиями в столбце – зональным и цифровым.

Зональный ряд над нулевым называется 11-м, или Х, а ряд над ним – 12-м. Для некоторых букв ряд 0 используется как зональный, а не как цифровой. С этим связаны некоторые трудности, к примеру, необходимость в специальном механизме, печатающем «цифровой ноль» вместо «зонального». Такое кодирование для перфокарт впоследствии превратилось в EBCDIC (Extended Binary Coded Decimal Interchange Code, расширенный двоично-десятичный код обмена информацией), использовавшихся на компьютерах IBM вместо ASCII. Многие артефакты этого кода, в частности, нарушение алфавитного порядка, берут начало именно в перфокартах.

Вы могли бы подумать, что БМ считывает карты по одному столбцу, и обрабатывает по одному символу последовательно. Но карты на самом деле читаются «боком», начиная снизу. Все 80 столбцов считываются параллельно, начиная с 9-го ряда и заканчивая нулевым, а затем зональными рядами. Для чтения карт БМ использует набор из 80 проволочных щёточек, по одной на каждый столбец. При наличии отверстия у щётки возникает контакт с металлическим валом под картой, это замыкает контур и создаёт импульс. У каждого столбца будет импульс, соответствующий отверстию, при этом сначала сработает 9-й, потом 8-й ряд, и так далее, заканчивая 0. Поэтому каждый символ кодируется последовательно, и каждый провод ШП передаёт один из этих сигналов, но все столбцы обрабатываются параллельно.

Печать

<img src="https://habrastorage.org/getpro/geektimes/post_images/774/a5b/10c/774a5b10c85f1c4db96af9b9c7b14c47.jpg
Печатные головки 402-й машины

Механизм печати БМ состоит из 88 печатных головок. На каждой головке есть все символы, которые можно распечатать. Головка двигается по вертикали, останавливаясь на нужном символе, а затем молоточек ударяет по ней, и через чернильную плёнку пропечатывается символ. Поэтому все символы в строке текста печатаются параллельно.

Провода с ШП определяют, что нужно распечатывать, останавливая каждую из головок в нужное время так, чтобы был выбран правильный символ. Движение головок точно синхронизировано с чтением карты, так что, допустим, 3-й ряд карты читается в то же самое время, когда «3» на печатной головке передвигается в положение для печати. Если узел щёточки соединён с печатным узлом столбца, импульс подаёт питание на магнит, отпускающий стопорный механизм, цепляющийся за зубцы печатной головки и останавливающей её так, что будет распечатан символ «3». В случае, если с карты считывается «2», щёточка окажется напротив отверстия на единицу времени позже, печатная головка поднимется ещё на одну позицию, и будет распечатана «2».

Механизм печати состоит из сложного сочленения механических частей: кулачков, собачек, направляющих, пружин и зажимов, а также электромагнитов, активирующих эти части в нужный момент. Механизм способен печатать 100 строк в минуту, поэтому части быстро снуют туда-сюда и их необходимо точно синхронизировать. Печатные головки смещаются на одну позицию каждые 18° поворота вала, и тем самым синхронизируются с чтением карты.

Счётчики

Основа БМ – электромеханические счётчики, суммирующие значения. Каждая цифра – это отдельное колёсико, поворачивающееся для суммирования. Расположение колеса соответствует значению этого разряда. К примеру, чтобы добавить к счётчику 27, колесо для десятков поворачивается на две позиции, а колесо для единиц – на семь. Поэтому для добавления значения из карточки колёса должны повернуться на соответствующее число оборотов. Колесо вращается, когда встречается отверстие, поворачивается на одну позицию для каждого дополнительного ряда, и останавливает чтение на ряду 0. Поскольку 9-й ряд читается первым, а 0-й – последним, в результате счётчик поворачивается на количество позиций, обозначенных положением отверстия.

https://lh3.googleusercontent.com/-axFeFFZXMOA/WO4jKswf_lI/AAAAAAABB2Y/kZhsb2PJmMYodiX6Nuuz0K3ZTY-FGGK5wCHM/w9999/counter.jpg
Электромеханический счётчик 403-й машины

Вверху показан счётчик двузначных чисел. Колёсики – слева. Катушки пуска и останова заставляют колёса начинать и заканчивать вращение в нужное время, активируя рычаги, управляющие стопорами. Перенос осуществляется при помощи кулачков под колёсами, замыкающих контакты. Позади панели есть электрические контакты, считывающие хранящееся на счётчике значение – они подсоединены к контакту справа.

ШП определяет, какие колонки с карты добавляются к каким счётчикам. Для добавления значения поля к счётчику щёточка считывателя соединена со счётчиком через ШП, поэтому карта контролирует поворот колёс счётчика. Сигнал включает пусковую катушку счётчика, стопор отпускает колесо и оно начинает вращаться. На позиции 0 стопорная катушка отпускает стопор, и он останавливает колесо. К примеру, если щёточка прочла значение «7» с карточки, счётчик пройдёт 7 позиций, а затем остановится. Если щёточка читает «1», счётчик повернётся только на одну позицию. Работает всё через синхронизацию движения карты и вращения счётчика. Поворот на 18° соответствует движению карты на один ряд и повороту счётчика на одну позицию. У счётчика есть 20 позиций, отстоящих на 18°. Прибавление 10 поворачивает его на пол-оборота. Вычитание производится через сложение методом дополнения до девяток (вычитание цифры n заменяется на добавление к ней 9-n, после чего прибавляется корректирующая единица). Для этого счётчик запускается с позиции «9» и останавливается, когда будет прочтено отверстие. К примеру, если отверстие проделано на позиции 7, счётчик повернётся на 2 позиции.

Перенос с одного разряда на другой осуществляет сложный механизм. Вы могли бы ожидать, что когда одно колесо переходит с 9 на 0, оно поворачивает колесо следующего разряда, как на одометрах, но для многозначных счётчиков это было бы слишком медленно. Счётчик добавляет по 150 чисел в минуту и крутится очень быстро. Вместо этого счётчики используют схему, похожую на ускоренный перенос с предварительным просмотром (carry lookahead). Если колесо на позиции 9, оно замыкает контакт, и единица с нижнего разряда переходит на верхний. Когда колесо переходит с 9 на 0, замыкается другой контакт, создающий цифру, держащуюся «в уме». После всех сложений все державшиеся «в уме» цифры создаются параллельно и добавляются за один раз. Поэтому сложение вроде 99999999+1 не задерживаются из-за цепного переноса – все они поворачиваются одновременно.

Реле

БМ управляется сотнями реле, электромеханических переключателей, заведующих «управляющей логикой» системы. На фото показана задняя часть БМ, заполненная реле. Ещё реле можно найти на крайней панели. Для создания сигналов тайминга переключатели открываются и закрываются при помощи кулачков на вращающемся валу. Поэтому вся система синхронизируется с вращающимся валом.

Заключение

Сейчас обработка перфокарт уже почти забыта, но она управляла обработкой данных в течение почти ста лет. Ещё до существования компьютеров бизнес-предприятия использовали перфокарты и табуляторы для бухучёта. Бухгалтерские машины IBM были способны выполнять удивительно сложные задачи, несмотря на то, что они состояли из кажущихся сейчас примитивными компонентов. БМ и программирование ШП было популярно вплоть до 1960-х годов, когда предприятия начали постепенно переключаться на бизнес-компьютеры с хранением программ, типа IBM 1401. Тем не менее, IBM продолжала активно продвигать БМ вплоть до 1976 года. Интересно, что одна компания в Техасе до сих пор использует БМ IBM 402, что демонстрирует потрясающую долговечность технологии перфокарт.

Инструкции для разных БМ можно скачать на сайте Bitsavers;
• IBM 402, 403 and 419 Accounting Machines: Manual of Operation
• IBM 402, 403, 419 Field Engineering Manual of Instruction
• IBM Functional Wiring Principles

Оставить комментарий