Как я выбрал себе работу на всю жизнь
Александр Макарович Терентьев,
Введение
Эта серия заметок описывает некоторые интересные ситуации, которые случились со мной при работе на ЭВМ «Минск-32» в 1970-х годах. Первый раз я увидел эту ЭВМ в 1973 году в ВЦ МГУ, куда меня послали обсчитывать результаты анкетирования, проводившегося в Проблемной межфакультетской Лаборатории коммунистического воспитания молодёжи при МГУ. Да-да, именно так она и называлась! Я в то время был уже исключён из института с третьего курса, не призван пока в армию, и твёрдо знал, что моё будущее – будущее программиста.
«Минск-32» была тогда самой массовой ЭВМ в стране, и, поскольку все эти истории есть по сути истории программирования, я должен описать эту машину. Поверьте, каждая деталь будет играть существенную роль в одной или нескольких историях.
На краю огромного зала, как мы говорили, «машинного зала», стоял небольшой стол с пишущей машинкой (ПМ) «Consul» на нём. Под машинкой снизу был ряд кнопочек-клавиш. Нажатие на левую посылало запрос на ввод информации, ответный подсвет второй справа означал разрешение ввода символов с клавиатуры. Введённый знак ромба “◊” означал прекращение ввода. Справа от машинки была панель с коммутацией магнитных лент, очень похожая на доисторический коммутатор телефонных номеров – 8 свисающих коннекторов и 8 дырочек. Например, сообщение на ПМ о коммутации МЛ-002 требовало воткнуть третий слева коннектор в тот реальный номер, на шкафу которого стояла магнитная лента (нумерация начиналась с 0).
Под левой рукой стоял отдельный столик чуть длиннее метра с деревянной крышкой. Откинув её, можно было видеть инженерный пульт с разными кнопками – «Цикл», «Такт», «Шаг», «Пуск», «+1СчАК» и др., а также полной панелью кнопок на все 37 разрядов и панелью адреса. Прямоугольные кнопочки работали как триггеры – при нажатии загорались, при повторном гасли.
Справа от ПМ на основном столике находился небольшой металлический ящичек с такими же кнопками-триггерами на нём, от 1 до 6, а также клавиша «ПускС». Три из этих кнопок управляли общей работой ЭВМ, например, отжатая (погашенная) кнопка 1 вызывала после вызова и загрузки программы в память сообщение об её начальном адресе загрузки и номере программного уровня (7, 10, 11 или 12 в восьмеричной системе), который выделен программе. Таким образом, одновременно можно было запустить до четырёх программ. Недалеко от консоли находилось устройство ввода с перфокарт, чуть поодаль – устройства ввода и вывода на перфоленту. Чуть поодаль стояло АЦПУ – о нём подробнее позже. Вдали были шкафы с магнитофонами, всего их было 8, но обычно 2 из них не работали – с них были сняты дефицитные детали для починки других шкафов (они назывались «НМЛ»). Бобины с магнитными лентами диаметром чуть менее 40 см опоясывались пластмассовыми заглушками, чтобы ленты не болтались при переноске. На одном из НМЛ висела особая магнитная лента с основными программами, она называлась «Лента Системы» (ЛС). Операционные системы, трансляторы, часто употребляемые программы находились на ЛС.
Надо сказать, что с самого начала техническая конструкция ЭВМ была придумана довольно сложно: 1 ячейка памяти включала 37 разрядов (битов), причём содержала пять 7-битных символов и ещё 2 разряда. Тексты хранились, конечно же, в символах, и обмен с внешними устройствами тоже был по 5 символов (2 последние разряда ячеек при этом в обмене не участвовали). А вот с программами так поступить уже было нельзя, поэтому в конструкции ЭВМ существовал ещё и обмен по 6 символов из ячейки, 6-й содержал, собственно, только два старших бита (35й и 36й разряды ячейки – напоминаю для непрограммистов, что нумерация разрядов начиналась с 0!). Конечно же, программы при своей работе указывали, по какому методу надо считывать символы – по 5 (КОСЛ5) или 6 (КОСЛ6) символов из ячейки. Идиотская ситуация была инициирована заявленной преемственностью ЭВМ предыдущей ЭВМ «Минск-22». Кем-то считалось (много позже я узнал истину), что режим совместимости с «Минск-22» расширит сферу применения ЭВМ. Выше не зря термин «Операционные системы» употреблён во множественном числе – их было, собственно, две, основной режим работы «КООРДИНАТОР» и так называемая «СОВМЕСТИМОСТЬ» – режим эмуляции «Минск-22». Я был слишком молод, в момент первого знакомства с «Минск-32» мне было всего 19 лет, и предыдущую версию я не застал. Надо сказать, что хотя ЭВМ занимала огромный зал (шкафы с ячейками памяти на транзисторах стояли в несколько рядов и колонн) и сильно грелась, она была куда надёжнее в работе, чем последующее за ней поколение ЕС. Ну, а общение через пишущую машинку давно уже не было для меня новым – я начинал изучение ЭВМ с так называемой серии «Мир», где кроме стола, набитого электроникой, и пишущей машинки (всё тот же Consul), более ничего и не было. Хотя, кажется, ввод-вывод перфолент всё-таки был. Давно это было, 1968 год, в ВЦ РАН, куда нас водили на экскурсии, а потом и на практику из нашей физматшколы №2.
Ах да, чуть не забыл. Ещё одно устройство, по виду напоминающее трактор или танк без башни и издающее примерно те же грохочущие звуки, служило для вывода на перфокарты. Обиходное имя его было «Бармалей», в редких организациях оно работало как следует, но оно было. С ним и будет связана моя первая история.
История 1. Про красоту (оформления)
Это потом мне стали приписывать различную функциональность – дескать, я заботился о красоте или чтобы не надписывать перфокарты… На самом деле толчком было обычное хулиганство. Ну то есть не обычное, а компьютерное, хотя слово «компьютер» появилось много позже, с появлением «Электроники», «Амиго», «Роботронов-1715» и прочих самодостаточных компактных вычислительных устройств.
Перфокарта (ПК) – это такой картонный листочек, со срезанным верхним левым углом. На листочке 80 позиций, в каждой – по 12 колонок. Символ кодировался набором колонок по вертикали, пробитых в нужной позиции. Устройства подготовки данных на ПК (так и называлось – УПДК) стояли в отдельном помещении, что было крайне неудобно для программистов, т.к. постоянно приходилось бегать от ЭВМ к УПДК через несколько залов (а то и этажей), чтобы перебить ошибочно набранную ПК на нужную или добавить в программу несколько строк. Зато такая организация труда была удобна для операторов, готовящих данные централизованно. Очень продвинутые УПДК помимо собственно пробивки ПК ещё и надпечатывали пробиваемый текст наверху перфокарты, но таких устройств было мало, и обычно истинный результат труда набивальщиц узнавался только после ввода ПК в ЭВМ.
Массивы ПК, составляющие один смысловой пакет, называли колодой или пакетом. Термин «набор данных» появился позднее, с приходом ЕС ЭВМ. Так вот, на «Минске-32» было принято, что первой ПК пакета всегда являлся так называемый «начальный блок» – 10 позиций, “***НБ” в первых пяти позициях и пятибуквенное имя в последующих пяти. Последней картой пакета – соответственно, “***КБ” и имя пакета, впрочем, необязательное. Пакетов было много: во-первых, новые программы, во-вторых, данные к разным программам, затем пакеты коррекции к программам, содержащим ошибки… Короче, эти пакеты постоянно приходилось надписывать, чтобы не спутать.
Моя идея была простая: поскольку в начальных блоках использовалось только 10 символов, а 70 колонок на ПК оставались пустыми, их можно было заполнить чем-то, символами, подобранными так, чтобы на просвет читалось имя пакета! 70 колонок – это 10 читаемых букв, если каждая содержит 7 колонок: 2 пустых как разделитель и 5, образующих видимое изображение.
Сказано – сделано. Вечер труда на прорисовку изображений букв, подбор по таблицам соответствующих кодов и написание программы – и готово. Кстати сказать, программа писалась на ЯСКе («язык символического кодирования»), транслятор с которого приходил с завода вместе с ЭВМ на эталонной ЛС. Освоил я его достаточно легко, ибо он был создан профессионалами и «заточен» под профессионалов. Фактически, это был язык машинных команд, что для двухадресной «Минск-32» было весьма удобно. Конечно же, никаких макрорасширений в те времена ещё не было, и всё приходилось писать “as is”.
Короче, программа была сделана… и вот тут-то возникла первая трудность. Дело в том, что вывод на ПК в ЭВМ «Минск-32» был крайне непопулярен во всех ВЦ из-за устройства вывода, «Бармалея», которое помимо того что грохотало неимоверно, ещё и было крайне капризным в наладке и обслуживании. Мне повезло: в ВЦ МГУ оно работало, так что очень быстро, чуть переделав программу, я помимо начальных блоков колод с ПК смог выводить и вообще произвольный текст. Каждой девушке было приятно видеть своё имя, читаемое на пробитой ПК, так что поклонниц у меня сразу стало много.
Сейчас, через много лет, я удивляюсь, почему такая простая идея не пришла в голову всем программистам, работающим на этой ЭВМ. А может быть, и приходила, а может быть, и была кем-то осуществлена, но мне об этом ничего не известно. И моё слово тут не последнее – через несколько месяцев после начала моих упражнений на этой ЭВМ меня пригласили читать лекции по ней в Политехническом музее, на которые съезжались из разных городов программисты и зам.директора… Это были своеобразные неформальные симпозиумы, где делились новостями, обменивались программами и информацией по эксплуатации. Руководил семинарами с присущим ему тактом Леонид Маркович Поварчук.
История 2. Про полноту (описания)
Эффективность программирования на любой ЭВМ зависит не только от её «железа» (элементной базы, композиции, системы команд, набора внешних устройств и т.п.), но и от «софта». Сейчас это очевидно для каждого. Во времена же 70-х годов с самой массовой ЭВМ страны сложилась весьма странная ситуация: не только не было качественного софта, но и не было никакой организации по его созданию, ведению базы и учёту. Это уже потом появился ГосФАП, а за ним и ВНТИЦентр, а в те времена к ЭВМ прикладывалась ЛС с весьма скудным набором – ЯСК, программа копирования МЛ «ЛКОП», ну и ещё 2-3 программы ввода перфокарт, их распечатки и справки с МЛ. Ну и отладчик «ОП2», крайне неудобный.
Разумеется, свято место пустым не бывает. По всей стране как грибы начали вырастать отдельные исполнители или их группы, которые обменивались программами общего пользования, используя личные знакомства. В Ленинграде практически все служебные программы, кроме транслятора с ЯСК, переписал заново майор А. Серов – его программы СПРАВ, СВЫКА и десяток других быстро разошлись по ВЦ страны. В Дубне пара героев сделали неплохой транслятор с Фортрана (он так и назывался «Фортран ИФВЭ»). Где-то разрабатывался Кобол, абсолютно кретинский язык, на котором каждая операция записывалась словами, а не символами («СЛОЖИТЬ» вместо знака “+” и т.п.), и были индивидуумы, всерьёз считавшие его прогрессивным.
В Лаборатории, где я работал, нужно было обрабатывать анкеты. Конечно, ЯСК для этого был слишком неудобен, и я решил испробовать Фортран ИФВЭ. Довольно быстро освоив язык чисто практически (печатных руководств к самодеятельным программам, разумеется, не было), я быстро натолкнулся на несколько непонятных мест. Во-первых, для работы с любым внешним устройством (ВнУ) программа должна была его за собой «закрепить», а отработав – «освободить», что вполне естественно для многопрограммной ЭВМ. Так вот, для закрепления в стандарт языка Фортран был введён специальный оператор на смеси французского с нижегородским “CALL СПЕЦ(ЗАКР, N)”. Опытным путём разобравшись с тем, как исполняется ввод и вывод по КОСЛ5 и КОСЛ6 на МЛ, я обратил внимание на то, что ввод с ПК по КОСЛ6 исполняется по номеру 6, а по КОСЛ5 – естественно, под номером 5. Однако, закрепление устройства ввода с ПК под номером 6 не удавалось – программа выдавала ошибку. Таких примеров было ещё штуки 4, и, вконец обалдев от экспериментов, я доложил руководству о своих проблемах.
Решение руководителя Лаборатории Лармина (по слухам, до руководства социологической лабораторией он ранее был танцором в балете) было простым: мне нужно ехать к разработчикам в Дубну и там всё выяснять! Что ж… это была моя первая командировка в жизни, я собрался с духом, созвонился с ИФВЭ и поехал.
Приехав в Дубну и прогуляв битый час по коридорам ИФВЭ, я нашёл нужную дверь и робко постучал. Через минуту дверь открылась на полвершка, оттуда высунулась усатая физиономия Олега Гадетского и, оглядев коридор и убедившись, что я один, молод и на комиссию не похож, он впустил меня внутрь, буркнув «Подожди минутку», а сам метнулся к столу, где под наспех расстеленной газетой скрывался расклад преферанса. Оказывается, я явился в самый неудобный момент: ловили мизер. Довольно быстро освоившись с дружелюбной компанией и закурив предложенную сигарету (что сразу нас сблизило), я принял деятельное участие в ловле мизера. Минут через десять, убедившись, что мизер не ловится, мы все расслабились и перешли к сути дела. Довольно быстро выяснив детали ранее непонятных мне операторов, я перешёл к проклятому “CALL СПЕЦ”. И тут… выяснилось, что да, номер 5 используется как для ввода, так и для вывода на ПК по КОСЛ5, а номер 6 – для КОСЛ6. А вот закрепление ввода всегда делается по номеру 5, а вывод – по номеру 6!
Выяснилось всё это при мне, оба разработчика транслятора были ошеломлены – они никак не ожидали, что какой-то мальчишка из Москвы, студент-недоучка, так их столкнёт лбами. Впрочем, на меня они не обиделись, а, почесав в затылке, решили, что так тому и быть, и даже всё получается логично. Проверив тут же всё это на простенькой программе, мы все успокоились и занялись уже преферансом всерьёз.
Конечно, я ездил со своей ЛС, и поделился имеющимся на ней. Погуляв пару дней по ИФВЭ и Дубне для солидности, я вернулся в Москву с новой версией транслятора с Фортрана (4 файла – ETAP1, SEC1, SEC2 и ETAP2) и оставшимися 10-ю рублями, что при зарплате в 105 рублей меня очень воодушевило, я до той поры не знал, как выгодно ездить в командировки. Статус мой среди соплеменников повысился, я имел дефицит (новую версию Фортрана) и мог уже консультировать по ней.
Конечно, программа обсчёта анкет была быстро написана. К сожалению, результаты были удручающие, как я и предсказывал: среди полутора сотен обследованных студентов МГУ число «коммунистически убеждённых» было минимально, а именно 1. При составлении итоговой таблицы я сделал большую глупость: альтернативную графу я назвал «коммунистически не убеждённые» – мне показалось, что слово «Прочие» в графе, в которую попали все без одного, звучит некорректно. Начальство было иного мнения…
История 3. Проходная вроде бы, но важная
Желание украшательства своей работы меня не покидало. Я попробовал, по аналогии с ПК, сделать вывод на перфоленту (ПЛ) так, чтобы символы образовывали читаемый текст. Это было труднее, чем с ПК, потому что в колонке было не 12 позиций, а всего 7. Да и то не всегда – использовалась как 7-дорожечная, так и 5-дорожечная ПЛ. Каждый, кто хоть раз рисовал шрифты на IBM PC, знает, что минимальная высота символа – 5, и то только в случае употребления заглавных букв. Однако, у меня нечто получилось. Конечно, я не ограничился 5-ю символами в длину, как с ПК. Программа позволяла выдавать надпись как телеграфную ленту длиной в несколько сотен символов, хотя использовал я впоследствии максимум пару десятков.
Работая и «выходя на машину», как мы это называли, поневоле начинаешь общаться со своими предшественниками по времени выхода, да и с последователями. Не уверен, что помню, в каком именно ВЦ это было (кажется, в «Главрыбе»), но познакомился я с коллегой по выходам на ЭВМ, Александром Пирожковым. Этот толстый добродушный парень, посмотрев на мои программы и мою работу, сделал один из важных шагов в моей жизни: он заказал мне программу. Кажется, там надо было выводить массив действительных чисел на ПЛ со стандартными разделителями – десятичной точкой и запятой между числами. Программу я назвал “ТРЕСК”, потому что трещал вывод на ПЛ достаточно сильно. Уже не помню, как и чем расплатился Саша Пирожков, но он сделал главное для меня: работая в институте ГипроУглеАвтоматизация, он познакомил меня с их системным программистом, Михаилом Александровичем Перегудовым. Миша был автором первого для «Минск-32» монитора пакетной обработки заданий (МОПС-32), который оказался возможным благодаря специальной программе, дополняющей операционную систему «КООРДИНАТОР», так называемой «ЗКООР». Эта сравнительно короткая программа позволяла перехватывать управление при всех сбоях вычислителя и всех экстракодах ввода-вывода. Ранее не говорилось о том, что часть машинных команд на ЯСК являлась, по сути, псевдокомандами (они назывались «экстракоды»), которые не выполнялись непосредственно, а вызывали прерывание на верхние уровни супервизора и исполнялись операционной системой. Таковыми были все операции ввода-вывода и ещё некоторые (коды “-60”, “-65”, “66”, “-67”).
Сохранение возможности управления при любом сбое программы, при котором ранее выдавалось аварийное сообщение Оператору ЭВМ (по традиции тех времён, человек за пультом назывался Оператором с большой буквы в отличие от оператора как машинной команды), было грандиозным шагом вперёд в развитии программного обеспечения «Минск-32». Однако, Миша несколько лет боролся с разработчиками за то, чтобы внедрить такую программу, как ЗКООР, в официальную разработку и поместить на основную ЛС.
Насколько важной оказалась возможность перехватывать все экстракоды, я напишу дальше. Здесь же скажу, что М. Перегудова всячески пытались «заткнуть», пытались не давать ему слово на официальных конференциях по Минску-32 в Политехническом музее (чему я был непосредственным свидетелем), и вообще тянули два года с внедрением ЗКООР в практику.
История 4. Про комсомольскую сущность
Восстановившись в родном МИЭМе (это, вообще-то, отдельная история, которая здесь вряд ли уместна), я скоро сделался завсегдатаем на ВЦ, где, конечно же, тоже стояла «Минск-32». Понаблюдав, как идёт работа, я, разумеется, предложил внедрить МОПС-32. Долго ли, коротко ли, но это было сделано. Поток заданий от студентов увеличился. Поскольку МОПС-32 официально не был куплен у М.А. Перегудова, инструкций к нему не было. Я конечно же консультировал всех, в том числе персонал ВЦ, бесплатно – я уже начинал понимать, что когда-то придётся заканчивать институт и писать диплом. Однако, были отдельные личности, общаться с которыми мне совсем не хотелось. И вот как-то всердцах на отдельную просьбу я сказал, что распечатаю экземпляр инструкций за 3 рубля. Меня предупреждали, что просила комсомолка, ленинский стипендиат, но я как-то не внял предупреждениям. А напрасно – завели на меня в комсомоле дело. Долго думали, как сформулировать то, что я нарушил – ведь я всё-таки не сотрудник ВЦ и не обязан был никому ничего печатать. На самом ВЦ экземпляра инструкций не было, он хранился у меня на отдельной МЛ (к тому времени у меня уже было несколько своих МЛ). Пока в комсомоле думали, как со мной поступить, случилась ещё одна история.
Аспирант нашего ректора, Серго Цаллагов, был зам.зав. отделом 250 НИИ «Сапфир». Там возникла острая нужда в квалифицированном программисте, он обратился на ВЦ МИЭМа, и ему, естественно, посоветовали меня. Проблема состояла в следующем. На этом совмещённом НИИ-заводе изготовляли полупроводниковые диоды, которые должны комплектоваться в мостики Уитстона по 4 штуки в комплект. Стояла так называемая «линейка» – аппарат, который делал автоматические замеры параметров диодов и выдавал результаты на перфоленту. По схожести параметров мостики распределяли в 4 группы: А. Б, В и Г. Самые качественные (А) шли на экспорт, следующие (Б и В) шли на военные заводы разного подчинения, ну и группа Г – в промышленность. Остатки комплектации поступали в магазины как радиодетали. Комплектация делалась программно, на ЭВМ «Минск-32», в режиме «СОВМЕСТИМОСТЬ». Была целая группа программистов во главе с к.т.н. Н. Марзеевым, которые не нашли лучшего решения, чем вводить все перфоленты, комплектовать мостики (сначала «А», потом остальные), а остатки выводить снова на перфоленту. Результатом такой организации дел было то, что до первого комплекта порой ЭВМ работала 2-3 часа, весь ВЦ был окутан перфолентами, и приходилось снимать машинное время на других «Минск-32» по 100 рублей в час.
Обратились ко мне. Я прикинул возможности «Минска-32» и потребовал за программу 500 рублей. Начальник отдела Наталья Берова согласилась. За месяц примерно я написал программу на ЯСК, которая вводила все ПЛ и записывала их на магнитную ленту (более ПЛ не использовалась), объединяя с предыдущими остатками, проводила комплектацию и, после выдачи скомплектованных на печать, выбрасывала остатки на другую МЛ. Пришлось помучиться, подбирая оптимальный режим ввода с ПЛ. Среди возможных вариантов – ввод по одному символу, ввод до разделителя, ввод фиксированного количества символов – был выбран последний. Ввод по одному символу трещал неимоверно и разрушал устройство, ввод до разделителя при отсутствии этого разделителя вообще мог привести к непредсказуемым результатам в памяти. Ввод фиксированного количества символов при вводе последнего куска ПЛ заполнял буфер нулями при исчерпании ПЛ, пришлось определять конец ПЛ программно.
На хороших ВЦ в то время (лето 1976 года) на АЦПУ использовалась сфальцованная бумага, по 72 строки, так, чтобы было удобно листы разрывать по линии надсечек. Благодаря возможностям «Минска-32», печать я выполнял одной командой целый лист, причём во время печати уже продолжали комплектоваться новые диоды, с выводом текущей печати во внутренний буфер. Поиск также был организован образцово: немедленно после нахождения комплекта, соответствующие блоки исключались из памяти, а сдвиговые пересылки общего массива к началу после исключения комплектов из памяти исполнялись командами групповых пересылок (команда ГРУП с кодом “-17”). После освобождения достаточного количества места с МЛ «всасывалась» новая порция данных… В общем, ухищрений было много, командные возможности оптимизации работы ЭВМ были использованы полностью.
В процессе работы я, общаясь с сотрудниками НИИ, с большим удивлением узнал, что огромное число ЭВМ «Минск-32» используется в режиме «СОВМЕСТИМОСТЬ» из-за острой нехватки программных средств и программистов. При числе ЭВМ в 1000 (как мы тогда все думали) это было катастрофическим разбазариванием машинного времени. Как же я был поражён, когда через много лет на заседании Совета Виртуального компьютерного музея узнал от В.В. Пржиялковского, что истинное число выпущенных ЭВМ доходило до 3000! Впрочем, у социализма были свои гримасы, ведь даже должности «программист» тогда НЕ БЫЛО, не говоря уже о сдельной оплате для него, что уж говорить о какой-либо организации софта…
Поскольку я уже догадывался о том, как обращаются со студентами на госпредприятиях, в программу был встроен ряд защит по дате и контрольному суммированию. Называлась вся эта программа «Титан».
На контрольных испытаниях программы комиссия была повержена в шок. После ускоренного ввода всех ПЛ и записи их на МЛ, программа начала считывать МЛ с начала… и через 7 минут выдала первый лист комплектов на печать. Не успел он отпечататься, как последовала выдача второго листа и так далее до выдачи всех комплектов. Весь цикл занял 20 минут – то, на что ранее уходил рабочий день. Штатные программисты взвыли и сели всё проверять. Я и С.Г. Цаллагов торжествовали.
Надо сказать, что реально платить деньги студенту дневного факультета было почти невозможно, во всяком случае, троечнику – от деканата требовалась справка на место работы. Пришлось изобрести новый вид документа, в котором всё написанное было абсолютной правдой, а целый документ – грандиозной липой. Был взят стандартный бланк для военкомата, в котором секретарша вписала мою фамилию и номер курса, подписан у декана М.А. Колтунова (благо зам.деканы, отлично меня знавшие, насторожились бы), проставлена печать и ПОТОМ почерком той же секретарши в фразе «Данная справка дана для представления» было аккуратно зачёркнуты типографские слова «в военкомат» и надписано сверху «на работу в НИИ Сапфир».
По указанной справке я был зачислен старшим лаборантом с месячным окладом 90 рублей, программа продолжала работать, вместо снятия машинного времени в других организациях НИИ «Сапфир» стал сдавать своё машинное время за те же 100 рублей в час… но так продолжалось недолго. В какой-то момент руководство решило, что гаду-студенту вполне хватит полученных за 2,5 месяца 225 рублей и закрыло мне проход в «Сапфир».
Разумеется, в начале очередного месяца программа перестала работать. Текст её, кстати сказать, был честно оставлен мной в «Сапфире», но целая команда тамошних программистов лишь тупо смотрела на него, ровным счётом ничего не понимая в ЯСК «Минск-32», они же всё время работали в «СОВМЕСТИМОСТи»! Звонили мне, угрожали – я держался и требовал денег. Тогда С.Г. Цаллагов решил справиться с гадом-студентом и пошёл жаловаться к своему научному руководителю, ректору моего института. Евгений Викторинович Арменский, делегат XX и XXII съездов партии и отличный мужик, высмеял его: «Что? Студент написал программу, а вы не понимаете её? Шесть человек во главе с к.т.н. не можете исправить?? Во даёт наш студент, ай да молодец. Иди отсюда!».
Подзуживаемый Н. Беровой, С.Г. Цаллагов решил спуститься на уровень ниже и пришёл в наш деканат… Тут он попал куда надо – злоба зам.деканов В.В. Андреева и в особенности В.П. Майбороды на меня была уже на нужном градусе, они только и ждали, чтобы меня во второй раз выгнать из института, теперь уже навсегда.
Я прекрасно понимал, что если поддамся, меня выгонят. Завод стоял уже две недели, диоды и килограммы перфолент накапливались, В.П. Майборода расследовал обстоятельства получения мной справки о работе и готовил бюро райкома комсомола (наш институт был на правах райкома)… Пришлось мне звонить руководству отдела НИИ «Сапфир» и объяснить им, чего они получат в результате и чего лишусь я. Выяснилось, что выгнать меня из института Н. Берова не хотела, и мы в конце концов договорились. Я был вновь зачислен на работу ещё на 3 месяца, в тот же день программа заработала, и оставалось только решить проблему в моём институте.
Решение бюро комитета комсомола по мне было уникальным в истории института. Оно состояло из двух пунктов. Первый: за нарушение комсомольской и внутривузовской дисциплины исключить негодяя Терентьева А.М. из рядов ленинского ВЛКСМ. Ну и второй: учитывая высокие достижения студента Терентьева А.М. в научной и практической работе, а также ходатайство ВЦ и ряда кафедр, в случае возникновения вопроса об отчислении молодца Терентьева А.М. из института – ходатайствовать перед деканатом об оставлении его студентом дневного отделения.
Таким образом, программа продолжала работать, НИИ «Сапфир» благополучно расправлялся с диодами и сдавал освободившееся машинное время, я хоть и недополучил примерно 60 рублей, но остался в институте. В следующем году, уже без всякой справки, хоть и продолжал учиться на дневном, я был зачислен во ВНИИУУголь Оператором ЭВМ. Но это уже совсем другая история.
К слову сказать, когда через год мне предложили восстановиться в рядах ВЛКСМ, я скорчил умильное лицо и со вздохом сказал, что я «не готов». Больше ко мне по этому поводу не приставали.
История 5. О копировании
Годы шли, МОПС-32 успешно развивался, но встала обратная проблема успеха: нелегальное копирование. Стандартная программа копирования магнитных лент ЛКОП позволяла точно, бит в бит и байт в байт, позонно копировать МЛ, делая с одной сразу несколько копий. Росло число организаций, которые не платили за МОПС, но успешно им пользовались. Сидели мы как-то летом 1977 года с Мишей Перегудовым и думали, как всё же организовать защиту от копирования. Он сразу же назвал идею: поскольку в системе машинных команд «Минска-32» были две команды записи зоны: “ЫЖ З;МЛ,N” и “ЫЖ ЗС;МЛ,N”, то может быть между ними можно засечь разницу? Вторая из перечисленных была командой вывода «зоны со скачком», т.е. перед выводом зоны (блока ячеек) на МЛ предварительно пропускался участок примерно 35 см. Такая команда специально существовала для выхода из ситуации, когда на МЛ попадался дефектный участок и его нужно было при записи обойти.
Высчитали скорость движения ленты, вспомнили про микротаймер с точностью 20 мс и прикинули, что можно попробовать различить по времени чтение зоны обычной и со скачком. Этим я и занялся.
МОПС-32 состоял из ряда программных модулей на ЛС. В некоторый момент после загрузки головного сегмента перед головками ЛС должен находиться начальный блок следующего сегмента. Вставив в головной сегмент считывание микротаймера до и после загрузки этого сегмента и вычтя из большего меньшее, мы получали примерно 6-8 интервалов микротаймера. А при чтении зоны со скачком это значение разности увеличивалось до 23-30, чем мы и воспользовались. Осталась задача сформировать ЛС так, чтобы нужный блок был заведомо записан со скачком.
Я, как всегда, решил эту задачу максимально нетривиальным образом. Вместо создания своей программы копирования ЛС, что было бы быстро опознано коллегами по ВЦ, я взял стандартную программу формирования магнитных лент МАГЗА и сделал в ней ряд изменений.
Дело в том, что большинство программистов в двухадресной ЭВМ команду безусловного перехода записывают тривиально – “И адрес”, что после трансляции с ЯСК приобретает вид “ИН адрес;адрес”, т.е. переход по признаку «ноль» в обоих случаях на один и тот же адрес. Однако, в любой программе есть множество числовых значений, указанных и работающих только как второй адрес, например, в командах логического сдвига “ЛСД адрячейки; адрсдвига” из ячейки “адрсдвига” берётся только второй операнд. Обычно в тексте программы такой операнд записывается числовым литералом; например, “АСД адряч;+2” вызывал арифметический сдвиг на 2 разряда (т.е. по сути умножение на 4). Транслятор для значения “+2” отводил целую ячейку в конце программы. Однако можно было подыскать команду безусловного перехода и в ней вместо “И адрес” поставить команду «идти и читать» “ИЧ адрес;0002”!! Лишнее чтение ячейки 0002 при переходе ничему не мешает, а вот ячейка из-под литерала в конце программы таким образом освобождалась.
Этот и несколько подобных методов работы с кодом программы позволяли освободить в ней 8-10 ячеек, которые путём несложных манипуляций можно было сосредоточить в одном месте подряд. В это место можно было вставить любые команды. Конечно, для всего этого нужно было разбираться в машинных кодах, иметь возможность распечатки программного кода и корректировки программы в загрузочном виде, т. е. в машинных кодах. Всё это было сделано.
Но это было ещё не всё. В те времена справка с МЛ давала уже не только длину каждой программы в ячейках, но и контрольную сумму. Чтобы сделать успешную замену стандартной программы своей злодейской копией, нужно было рассчитать дополнение до нужной контрольной суммы, так чтобы по справке было невозможно отличить одну от другой. О том, что подделывалась ещё и дата образования программы, я уже не говорю – эта задача была тривиальной. Обратите внимание, что эти сугубо вирусные технологии были начаты уже в те времена 1970-х годов.
В итоге появилась внешне ничем не отличимая программа копирования МАГЗА, которая при нажатии определённого ключа на пульте инженера и обнулении своей 6-й ячейки отслеживала запись на результирующую МЛ и при записи нужного начального блока записывала его со скачком.
Результат был потрясающий. Информация с работающей ЛС копировалась любой программой (даже аппаратно, стойка управления МЛ это позволяла) 1:1, а результаты работы исходной ЛС и копии были разные! При том, что информация бит в бит совпадала. Разумеется, я пообещал М. Перегудову сохранить тайну этого метода и вот сейчас, через 40 лет, когда нет уже не только «Минска-32», но и других ЭВМ с МЛ, впервые об этом рассказываю.
Естественным исключением из описанного являлся случай использования магнитных барабанов вместо ЛС (при нажатии ключа 4 вместо ЛС задействовались магнитные барабаны). К счастью для нас, их было очень мало, работали они крайне ненадёжно (их «потомки» на ЕС ЭВМ и то давали регулярные сбои). Единственная организация, где я их видел, была контора «Моспроект-1», и то работали они там через раз.
История 6. О начальном вызове
Чтобы компьютер заработал, нужно загрузить операционную систему. Так было и во времена «Минск-32». Операционная система загружалась, разумеется, с ЛС, там было 3 файла – «РЕЗИД», «КООРД» и «ТВНУ» (резидентная часть, позволяющая менять режим КООРДИНАТОР на СОВМЕСТИМОСТЬ, сам КООРДИНАТОР и Таблица ВНешних Устройств). Однако, чтобы их загрузить, тоже должен быть загрузчик. Постоянно работающей программируемой памяти, содержащей BIOS, тогда не было. Начальный загрузчик загружался с перфокарт. На пульте оператора набирали команду ввода (“-67…041”), по которой 24 перфокарты с кодовой программой загрузчика вводили с ПК и нажимали кнопку ПускС (помните? На панельке рядом с пишущей машинкой), по которой управление передавалось на адрес 400. Эта процедура называлась «Начальный вызов».
Естественно, с течением времени эти ПК истрёпывались, их копировали, надписывали… сохраняли в сделанной специально «коробочке» из пустых ПК.
А вот я подумал как-то: зачем держать так много ПК начального вызова? Подумал, подсчитал, и выяснилось, что вполне достаточно ОДНОЙ перфокарты, если заранее в первую зону на ЛС записать все эти 24 перфокарты после обязательных “***НК***ЛС” – ведь строгого ограничения на длину зоны на ЛС не было!
Задумано – сделано. Подготовлена специальная ЛС с увеличенной первой зоной, туда записан код начального вызова, и подготовлена ПК начальной загрузки. Внедрено это было сначала в институте ВНИИУУголь, куда я попал впервые в 1977 году, конечно же, на должности Оператора ЭВМ, ибо учился тогда ещё в МИЭМе.
Дальше – больше. Стандартный «Нач.вызов» содержал требования набрать на пульте инженера текущие дату и время, и каждый раз после этого нажимать кнопку «Пуск». На деле, разумеется, никто из обслуживающих ЭВМ этого не делал, вводились нулевые значения, и лишь после загрузки КООРДИНАТОРа и указания “*1. Установить новую МЛ на ЛЫ-001” и отказа “*1-*****◊” подавались директивы ввода даты и времени. Поэтому следующим моим действием было убрать эти запросы из процедуры начального вызова, что и было сделано. Как же приятно было видеть восхищённые глаза девиц-Операторов, когда я им показал новый вариант начала работы на ЭВМ!
Описанные действия мои являются, по сути, началом модификации операционной системы. А я, соответственно, учась повторно на 3м курсе, в 21 год сам, без учителей и спецлитературы, стал системным программистом на самой массовой в стране вычислительной машине.
История 7. Сеть ЭВМ
В вычислительном центре МИЭМа, помимо «Минска-32», стояла ещё новенькая, только что полученная ЭВМ нового поколения «ЕС-1022». Кому-то из администрации ВЦ пришла в голову идея связать эти две ЭВМ в единый комплекс. Переделали устройство вывода на ПЛ «Минск-32» и устройство ввода ПЛ на «ЕС-1022», соединили их кабелем и стали тестировать передачу пакетов с «Минска» на «ЕС». Долго ли, коротко ли, но отладили. Встала задача организовать ввод пакетных заданий на «Минске-32» для их исполнения на «ЕС». Разумеется, для этого позвали меня, студента 5го курса. Шёл 1977 год.
Решение было простым. Я написал новый модуль для МОПС-32, который загружался по появлении на ПК специального имени задания “***ЕС”, вводил поочерёдно ПК задания, перекодировал в кодировку ЕС и отправлял на вывод ПЛ. Заработало всё практически сразу, без отладки. Темой моей дипломной работы стала «Экспериментальная сеть вычислительных машин Минск-32 и ЕС-1022». Оценка, разумеется, «Отлично».
Вспоминается попутно ещё один случай. Запретили нам курить в институте. Летом ещё можно было выйти в задний дворик через служебную дверь, а в остальные времена года холодно, вот и курили все где ни попадя, при первом приближении опасности пряча курившийся бычок куда попало (чаще всего в стену). Разумеется, даром это не прошло – через пару месяцев в одной из комнат первого этажа заполыхал пожар. Сгорели две ЭВМ «Мир-1» (напоминаю, они состояли из напичканных электроникой столов и пишущих машинок). Стоимость одной примерно 30-35 тысяч рублей. Зашёл ректор, покрутил носом, оглядел столы и гениально сказал: «Ну и что?.. Два стола сгорели.». Молодец был Евгений Викторинович, истинный хозяин и политик!
Примерно в это же время мне пришла в голову мысль создать игровую программу. Как основу я взял идею всё того же М.А. Перегудова, несколько её дополнив. Вызванная программа предлагала задумать число от 1 до 100 и ответом сообщить ей, выдавая что-то вроде “ВВЕДИ ЧИСЛО ОТ 1 ДО 100. ДОЛГО НЕ ДУМАЙ, Т=14.45”. Ну, человек отвечал, к примеру, 47. В ответ получал “А У МЕНЯ 48. ТЫ ПРОИГРАЛ!”. Ага, говорили, ты просто прибавляешь единичку и всё. Я в ответ вводил число “27” и получал ответ “А У МЕНЯ 26. ТЫ ВЫИГРАЛ!”. Тут появлялся интерес… и невдомёк бедным было, что текущее время в первом сообщении присутствовало не случайно, надо было сложить его цифры и получить первое выигрышное число (в данном примере 1+4+4+5=14), а дальше прибавлять к нему по 13 и так получить все выигрышные числа до 100. Поскольку текущее время всё время менялось, список выигрышных чисел также менялся (это и было основным отличием от идеи Перегудова). Можно было организовывать тотализатор 1:10. Ставили по 10 копеек и пытались выиграть рубль.
История 8. Работа по распределению
По многократному заявлению В.В. Андреева, из нас готовили «командиров производства». Правда, он забывал упомянуть, что главным образом в почтовых ящиках и различного рода «секретках», что меня уже в те годы категорически не устраивало. Я попытался подготовить почву, состыковавшись с Минторгом СССР, откуда меня обещали отпустить после формального распределения. Однако, мест для Минторга СССР не было, а было место для Минторга РСФСР, на которое меня и запихнули. Это был Информационно-вычислительный центр конторы «Моспродснаб», размещавшийся на 4м этаже Центральной продовольственной базы города Москвы. Там стояло две ЭВМ «Минск-32» и одна ЕС, которую толком никто не осваивал; все расчёты шли на «Минсках».
Контора «Моспродснаб» обсчитывала все продовольственные базы г. Москвы: каждый батон колбасы, каждая буханка хлеба учитывались. Разумеется, обсчитывалась и Центральная база – проглядев один раз список продуктов, я навсегда излечился от ностальгии по социализму, даже если бы она и была: таких разносолов я во сне не видывал.
Зам.директора по науке на ИВЦ был А.Т. Гершенгорин. Он с помощью довольно посредственных программистов создал громадную программную систему, выдававшую на печать всё, от сводок до банковских документов по каждой продбазе за каждый день.
Вся информация хранилась на МЛ, только начальный ввод делался с ПК. В одном цикле расчётов использовалось 5-6 программ, каждая из которых требовала 3-4 МЛ. Естественно, до конца вычислений за целый день (а порой и дольше, для сводок за неделю и месяц) вся эта лабуда хранилась в виде огромных массивов на МЛ в текстовом виде. Машинного времени не хватало, круглосуточно были заняты обе ЭВМ. Мне предложили громадный том Отчёта с предложением ознакомиться с технологией, рассчитывая, видимо, на то, что новичок будет месяца три сидеть и разбираться во всех премудростях массивов бухгалтерского учёта. Должность была «инженер».
Конечно, мне это было неинтересно. Я запомнил основные фазы расчётов, сделал себе табличку, какие массивы в какой момент находятся на МЛ и пару дней подумал-поприкидывал. Через неделю я нагло заявился к Алексею Товичу, вернул отчёт и сказал, что я придумал, как на 5% сократить время расчётов. Вот работает программа с тремя МЛ – на одной входной массив, на другой классификатор, на третьей будет выходной. Перед началом работы выдаются 3 указания Оператору об установке каждой из МЛ, чтобы он смог их скоммутировать. На каждое указание Оператор должен ответить. После каждого ответа МЛ подгоняется к началу и проверяется её имя. А массивы немаленькие, так что время на подгонку МЛ к началу заметно – несколько минут. Моё предложение сводилось к тому, чтобы выдать два сообщения и только одно указание Оператору, который подготовил бы сразу все 3 МЛ и ответил один раз. Далее следовали команды подгона в начало каждой МЛ без ожидания, затем ожидание МЛ и проверка их имён в определённом порядке, начиная с самой короткой. В результате все 3 МЛ гнались к началу одновременно, и время сокращалось. Здесь я несколько упростил реально предложенную схему.
Предложения мои были тут же приняты и через несколько дней воплощены в жизнь. Мне опять предложили читать Отчёт… но у меня наготове было совсем другое предложение. Половина программ выдавала много информации на АЦПУ, причём неравномерно – выдаст 10 строк, считает, думает, потом опять 10 строк и т.д. АЦПУ же было устроено так, что после каждой команды некоторое время мотор продолжал вращаться, затем останавливался, а при поступлении следующей команды – разгонялся снова. Я вспомнил о программе ЗКООР, позволяющей перехватывать все обращения к выводу (в данном случае меня интересовала печать) и написал программу, которая все экстракоды обращения к печати перехватывала, накапливала во внутреннем буфере печатные строки, и при заполнении печатного листа выдавала его одной командой (а во время печати уже программа шла дальше, и перехватывались опять другие команды…). Здесь экономия на некоторых программах уже была далеко не 5%, а гораздо больше. Плюс стандартное оформление печатных листов, с датой, временем и даже номером ЭВМ и, конечно, именем перехваченной программы.
Алексей Тович оказался умным человеком – третий раз читать Отчёт он мне не предложил, а вместо этого в нарушение всех статей КЗоТа, ранее чем через 3 месяца перевёл меня в старшие инженеры и предложил самому искать дальнейшие усовершенствования. И я их начал с воодушевлением делать.
Не могу умолчать об одной безобразной истории. Выйдя на работу в ночь сразу после какого-то праздника, я приготовился перекрыть все нормы производительности, работая как Оператор. Однако… с удивлением обнаружил, что ЭВМ не работает, полыхая красными лампочками. К счастью, прибежал главный инженер, который также был в смене, и, быстренько просмотрев стойки с электроникой, обнаружил отсутствующую ячейку памяти. Выяснилось, что толстомордая девка, старший оператор, находясь в подпитии, вытащила из машины эту ячейку и выбросила за окно в снег. Разумеется, пока ячейку подобрали, промыли спиртом, высушили, вставили обратно и запустили машину, время было упущено. Этот случай ясно показал мне «энтузиазм» трудового народа.
Через год меня забрали переводом в Главное управление общественного питания г. Москвы, а ещё через год, в 1980 году, я вернулся на тот же ИВЦ уже начальником отдела Системного математического обеспечения. А те, которые не то что закончили, а начинали в 1970 году учиться одновременно со мной, к этому моменту едва-едва стали старшими инженерами…
Описывать весьма фактурную и познавательную работу в Главке я здесь не буду – это была работа на совсем другой вычислительной технике, классом ниже. К программированию на «Минске» я вернулся позже, когда ушёл с места зав.отделом ИВЦ «Моспродснаба» на должность старшего научного сотрудника института ВНИИУУголь, с которым у меня всё это время поддерживались связи.
Во время работы на ИВЦ «Моспродснаба», уже будучи нач.отдела, я познакомился с принципиально новым устройством – Videoton-340. Это был дисплей с клавиатурой, наподобие современного компьютера, только без мозгов. «Мозгами» служила вся ЭВМ «Минск-32». Видеотон был активным устройством, т. е. мог обратиться к ЭВМ по своей инициативе (например, при вводе информации с него), но тут имелись тонкости. В те времена Видеотон использовался как пассивное устройство, т. е. ввод с него был разрешён только тогда, когда программа на ЭВМ его запрашивала. Я быстренько (за пару недель) написал и отладил новый головной сегмент МОПС-32, который позволял вместо ПК и ПМ весь ввод исполнять с Видеотона, а вывод на печать также отправлять на дисплей. При желании, однако, нужная часть распечаток могла быть тут же выведена на АЦПУ. Такое программное решение существенно ускоряло и облегчало работу – не нужно было мотаться на УПДК за перебивкой той или иной перфокарты, можно было запускать счётную программу и одновременно отлаживать программы через МОПС-32 с дисплея, да и вообще началась совсем другая жизнь.
Я пока не рассказал ещё об одном нововведении. Одной из функций программы ЗКООР была поддержка специальной версии ЛС – с каталогами. Периодически, через 10-20 программных файлов, на ЛС размещался очередной каталог, файл с именем “***NN”, в котором содержался список всех файлов на ЛС с номерами их зон. Вместо подмотки ЛС в начало перед поиском каждой очередной программы, ЛС шла вперёд до ближайшего каталога, а потом либо продолжала промотку вперёд, либо отматывала сколько нужно зон назад, так, чтобы перед головками ЛС стоял начальный блок нужного массива. Если же почему-либо массив не находился, ЛС подматывалась к началу и осуществлялся обычный поиск.
Всё бы хорошо, но техника имеет обыкновение ломаться. При конструировании накопителей на магнитных лентах точному исполнению серии команд “ВРЖ З;МЛ/ЛС” (возврат с ожиданием зоны на МЛ или ЛС) должного внимания уделено не было. И если возврат на 10-15 зон обычно исполнялся точно, то при возврате на 250 зон уже вполне можно было ожидать, что реально возврат осуществлён на 248 или 249. Зависело это, по слухам, от некоей резиновой «груши», находящейся в составе НМЛ и быстро истирающейся при возвратном движении МЛ. В результате получалась глупость – подводилось с ошибкой нужное место, выяснялось, что это ошибка, и ЛС гналась к началу, как обычно, с последующим перебором.
История 9. Работа вопреки
Работа при социализме имела свои особенности. Мне для работы часто была нужна машина «целиком» – к этому моменту я уже стал разбираться в КООРДИНАТОРе досконально, и мне было интересно «прощёлкивать» по командам некоторые действия операционки, а для этого, сами понимаете, пакетный режим не подходил. Операторы ЭВМ были «рабочим классом» и работали днями, а нам, гнилой интеллигенции, оставались ночи. Собственно, ночами тоже была работа Операторов, но не в такой интенсивности, хватало одной ЭВМ из двух имеющихся. Ну, а на второй работал я.
Вычислительный центр института ВНИИУУголь помещался в головном здании института, от платформы «Быково» надо было пройти минут 30-40 через всю деревню по левой стороне железной дороги (по правую сторону был город Жуковский). Я тогда жил около метро «Улица 1905 года», доезжал до метро «Ждановская» (теперь «Выхино») и ехал на электричке до Быково. Днями, когда я не выходил на машину, мы работали в филиале института на ул. Орджоникидзе (там институт снимал помещения), где располагался отдел Владлена Исааковича Глейха, в котором я работал.
Официальной целью моей работы было писать программы, помогающие сориентировать проходку угля на карьерах. Имелись скважины, с отметками по высотам, и характеристиками горных пород по этим отметкам. Имелся проект проходки, и надо было спрогнозировать объём и качество возможной добычи угля по каждому проекту. Короче, чисто расчётная задача, правда, считалась она сравнительно долго. Попутно хотелось бы иметь отчерченный на специальном графопостроителе план участков…
А вот неофициально мне было всё более интересно устройство операционной системы ЭВМ «Минск-32». На ВЦ имелся полный комплект документов, и в том числе знаменитая папка N32 (приложение к руководству Системного программиста), в которой кратко были описаны все таблицы КООРДИНАТОРа. И вот, где-то с 4-х часов утра, когда все девицы-Операторы уже уставали и, упившись чем придётся, ложились спать где попало, от диванов до УПДК и «Бармалеев», я завершал отладку расчётных программ и тихо занимался исследованием КООРДИНАТОРа.
Надо сказать, что обилие электронных ячеек в ЭВМ, вообще говоря, потребляло много энергии. И вся она выделялась в виде тепла. Поэтому в машинных залах было очень жарко даже в холодное время года, а уж летом температура ниже 40 градусов не опускалась. Кондиционеры-то были, конечно же, но они тоже порой отказывали, да и мощности их не хватало на 4 ЭВМ, размещённых в расположенных анфиладой машинных залах. Поэтому вопрос потребления разных жидкостей стоял на первом месте. Чаще всего это был чай, иногда «Буратино», ну, а в отдельные дни и спиртное. Операторами ЭВМ были, естественно, женщины разных возрастов, а обслуживающими ЭВМ инженерами – мужчины. Я почти всегда принимал участие в чаепитиях и быстро стал для девчонок своим человеком, а вот инженеров приглашали далеко не всех. Естественным результатом такого оборота дел стало то, что отдельные инженеры начали испытывать ко мне неприязнь. С течением времени я порой обнаруживал мелкие гадости, которые должны были, по идее, отвадить меня от ЭВМ.
В один из дней, когда я, задержавшись у подруги в Жуковском, доплёлся до ВЦ где-то во втором часу ночи, мне дежурный инженер, умильно ухмыльнувшись, сообщил, что отведённая мне ЭВМ не работает. Возвращаться в Москву уже было не на чем, электрички ходить перестали, и я поинтересовался, в чём конкретная проблема. Оказалось, что пишущая машинка ЭВМ вдруг перестала реагировать на нажатие сигнальной кнопочки, и не разрешала ввод информации с Consul’а. В остальном всё было в порядке. Очевидно, был отсоединён какой-то нужный проводок.
В электронике я не понимал ни черта, искать оборванный провод значило насмешить всех (всё равно, не имея схем, я бы его не нашёл), и я стал думать, что можно в этой ситуации сделать. Помогло то, что в этот раз у меня с собой как раз была та самая папка 32, в которой были немного описаны таблицы КООРДИНАТОРа. Пошевелив мозгами, я остановил ЭВМ кнопкой «Такт» и принялся ковыряться в оперативной памяти ЭВМ. Поместив заранее заготовленный пакет перфокарт на устройство ввода, я ввёл в таблицы ЭВМ имя задания, необходимые признаки, машинный номер устройства ввода с ПК и, после нескольких ошибок (каждый раз всё приходилось начинать сначала), начался ввод ПК!
Это было громом среди ясного неба. Так с ЭВМ не умел обращаться никто. Сбежалась толпа посмотреть, что я творю, и среди толпы вытянутое унылое лицо инженера. Обязательную часть работы я в ту ночь выполнил.
На этом дело не кончилось. Через пару недель, когда я явился на ЭВМ, мне опять с торжеством объявили, что ЭВМ неисправна. На этот раз оказалась неисправной сама пишущая машинка – она позволяла вводить любую информацию, но ничего не выводила по командам из ЭВМ, намертво зависала с красной лампочкой неготовности устройства. Ага, подумал я, на сей раз оторвали другой проводок… Ну, тут решение было куда проще – нажималась кнопочка «+1 СчАК», осуществлялся переход к следующей машинной команде после команды печати, и после нажатия «Пуск» ЭВМ продолжала работу. Читать несделанный вывод мне было не нужно, я итак ясно представлял себе, что там может быть.
Работал я таким образом на неработающей ЭВМ и радовался про себя, что не пришло в голову этому инженеру вытащить из шкафа ячейку, как это было на ИВЦ «Моспродснаба» – с этим я бы точно не справился.
Не скрою, не только работой я развлекался. Кажется, я уже упоминал о пластиковом обруче, который надевался на МЛ, чтобы она не разматывалась. В одну жаркую летнюю полночь я продемонстрировал девицам-Операторам, что могу «продеться» сквозь это кольцо полностью, сверху донизу. Все начали пытаться повторить… но ни одна не смогла – мешала какая-либо часть тела.
Среди заданий, оставляемых для обработки Операторами, были, конечно, разные. Значительная часть была расчётная, но были и задания на копирование МЛ. Операторы, видя из листка учёта, для чего предназначены задания, в отдельных случаях запускали их вместе. Пока одно занималось расчётами, другое копировало ленты. И вот тут было важно, какое будет запущено первым, а какое вторым: у первого запущенного автоматически был выше приоритет. Правда, существовала команда увеличения приоритета задания “УВ-ХХХХХ◊”, но Операторы ей почти не пользовались, зачем им лишние знания… В результате, плёвое копирование с одной МЛ на другую трёх массивов могло висеть несколько часов, ожидая миллисекундные паузы в то время, когда другое задание что-то выводило на печать. Я уже не говорю, что существовала команда Оператора “ИС-ХХХХХ◊”, вообще исключавшая задание из памяти. Провисев часа полтора и скопировав два массива из трёх, задание могло быть вполне исключено из памяти вследствие того, что оно «зациклилось», по мнению Оператора.
Такое положение дел меня категорически не устроило. Я начал искать способы блокирования директивы «Исключить»… и нашёл. Система экстракодов «Минск-32» включала в себя команду “ЗПУ” – «Занять память и уровень». При этом программе позволялось занять один из свободных 4х программных уровней и автоматически снималась аппаратная защита с текущего уровня, т. е. можно было обращаться к любой ячейке памяти ЭВМ, и в том числе к таблицам КООРДИНАТОРа. Именно это мне и было нужно: после данного экстракода я менял имя задания в таблицах координатора на сочетание “◊◊◊◊◊”. Как легко понять, директива “ИС-◊◊◊◊◊◊” пройти не могла, т. к. после первого же ромбика ввод прекращался. Далее исполнялся экстракод «ОСВПУ» (Освободить память и уровень), и работа продолжалась, но снять задание Оператору было уже нельзя. Таким же образом я корректировал приоритет задания, устанавливая себе высший. Последним этапом было восстановить защиту своего уровня. Это делалось так. Дело в том, что в списке команд ЭВМ была малоизвестная команда “ИУ1 ПП,адрес”, передававшая управление при выставлении указателя вычислителя ПП в 1. Какого указателя? А любого! В том числе указателя защиты. Таким образом, если сразу после команды чтения запрещённой ячейки следовала команда “ИУ1 ЗЩ;*+1”, то на сумматор посылался считанный код, а управление не терялось! В литературе по ЭВМ, к слову, об этом ничего не было, но я уже ясно представлял себе не только архитектуру ЭВМ, но и мысли разработчика. Теперь было достаточно перед экстракодом “ЗПУ” прочесть собственную защиту, запомнить её, заодно посмотреть, есть или нет свободный уровень (иначе “ЗПУ” заблокировался бы), и, если есть, – быстренько снять защиту, проделать все необходимые операции с таблицами и восстановить защиту. Вот так с тех пор я и формировал на ПК такой пакет с заданиями – сначала запуск моей маленькой программы с подменой имени задания и её приоритета, затем запуск нужной программы (например, копирования МЛ), и в конце – программа восстановления имени задания.
Более инженеры со мной не связывались.
Заключение
Все описанные истории показывают путь постепенного освоения ЭВМ «Минск-32», но и путь становления системного программиста. Много потом было вычислительной техники, десятки – Ricoh, PDP, фактурные автоматы «Искра» 534-й и 555-й серий, ЕС (ДОС), ЕС (ОС), Robotron-1715, потом полдюжины операционных вариантов Windows… Но всю азбуку программирования я всё же прошёл на «Минск-32».
И самое главное, что вынес я из всего этого – что программист всегда остаётся один на один с ЭВМ. Ни на начальство, ни на техников, ни на Операторов, ни на подготовку данных, ни на литературу, ни на документацию – ни на кого и ни на что полагаться нельзя. Обо всём надо заботиться самому. Всегда.
Мне сейчас 64, с момента первого знакомства с ЭВМ «Мир-1» на ВЦ РАН прошло ровно 50 лет. Ни разу я не пожалел о выборе работы. И очень благодарен судьбе, что основное время моего становления пришлось на такую ЭВМ, как «Минск-32».
Об авторе: к.т.н., PhD
Помещена в музей с разрешения автора
30 января 2018