Проект «Сфера-82»: Цвет и слой
Глава 1
Проект «Сфера-82»: Цвет и слой
Встреча
Новый год еще не отпустил город.
Владимир стоял в глухой, ватной тишине короткой праздничной паузы. Новогодний шум уже выдохся, но настоящая работа еще не началась. В окнах кое-где мигали оставленные гирлянды, возле мусорных баков темнели коробки из-под мандаринов, а над крышами висело низкое, слепящее зимнее солнце.
Морозов шел к Золотым воротам.
Снег выпал ночью. Густой, сухой, пушистый. Он укрыл промерзший асфальт ровным слоем, сгладил острые углы бетонных бордюров и превратил припаркованные у обочин «Москвичи» в одинаковые белые холмы. Дворники еще не успели пробить тропы. Алексей шел первым, оставляя за собой цепочку глубоких, четких следов.
Хрусть. Хрусть.
Звук сминаемого наста разносился в морозном воздухе с пугающей отчетливостью. Температура упала за минус двадцать, но день был не серым, а почти празднично ясным. Солнце било в стекла домов, дробилось на ледяных наростах водосточных труб и заставляло снег искриться так резко, что приходилось щуриться. Воздух обжигал носоглотку при каждом вдохе, колол щеки тысячами невидимых ледяных игл. Пахло выстуженным камнем и горьковатым угольным дымом — где-то за железнодорожными путями исправно чадила городская ТЭЦ, нагнетая кипяток в чугунные батареи спальных районов.
Скоро НИИ снова войдёт в обычный режим: журналы, пропуска, планёрки, звонки.
Именно поэтому Громов и попросил о встрече сейчас.
Вдали от института не было лабораторных дверей, которые уже начинали обрастать журналами и пропусками, михалычевского стола, где любой разговор мгновенно превращался в список задач, и ресторанного гула, через который приходилось пробиваться сквозь чужие разговоры, дым и музыку.
Громов предложил встретиться на Козловом Валу.
От Золотых ворот можно было пройти вдоль старого земляного укрепления к водонапорной башне и дальше, к спуску в сторону старого сада на склоне. Там было спокойнее идти рядом и говорить наедине: в морозный солнечный день редкие прохожие быстро проходили мимо, не нарушая чужого разговора.
Впереди над улицей поднималась белокаменная громада Золотых ворот. От яркого солнца она казалась плоской, почти вырезанной из плотной бумаги. Снег у подножия слепил глаза. На Козловом Валу ветер сдувал с гребня тонкую снежную пыль, и она тянулась над тропой низкой серебристой поземкой.
У начала дорожки стояла одинокая фигура.
Евгений Громов переминался с ноги на ногу, ритмично постукивая подошвами ботинок по утоптанному пятачку снега. Программист спрятал лицо глубоко в воротник жесткой куртки. Руки были намертво засунуты в карманы. Из-под серой вязаной шапки выбились русые пряди, покрытые тонким слоем инея от собственного дыхания.
Морозов подошел ближе.
— Давно ждешь?
Громов повернул голову. Нос покраснел от холода, под глазами залегли темные тени.
— Минут десять.
— Замерз?
— Терпимо. Зато здесь тихо.
Ответ прозвучал буднично, но Морозов понял: Громов выбрал это место не для прогулки.
Морозов кивнул. Они двинулись вдоль вала, оставляя за спиной Золотые ворота. Снег недовольно скрипнул под ногами.
Некоторое время они молчали.
— С Новым годом, Лёша, — произнес Громов, глядя под ноги.
— С наступившим, Женя.
Дежурный обмен фразами повис в воздухе и тут же замерз, осыпавшись ледяной крошкой. На морозе длинные поздравления не держались.
Они свернули в проулок. Здесь ветер почти не гулял, и мороз ощущался еще плотнее. За низким забором детского сада торчали засыпанные снегом железные грибки и деревянная ракета с облупленной красной краской.
Громов шел чуть позади. Его дыхание сбивалось, превращаясь в короткие облачка пара.
— Ты не про график первого квартала хотел поговорить, — сказал Морозов, не оборачиваясь.
Программист запнулся. Ботинок скользнул по льду, Женя взмахнул руками, ловя равновесие.
— Не про график.
Он поравнялся с Алексеем. Плечи уже не жались к ушам. Взгляд сфокусировался.
— Про будущее.
Морозов остановился.
Порыв ледяного ветра ударил в лицо, бросив горсть колючих снежинок на шарф. Где-то в глубине двора хлопнула дверь подъезда. Скрипнула лопата дворника.
Громов смотрел на него в упор. В глазах больше не было привычной ироничной усмешки столичного пижона. Женя за эти месяцы стал собраннее: меньше блеска, больше расчета, и вопросы теперь задавал не ради красивого спора.
А еще это был человек, который знал тайну.
Один из немногих в этом времени, кто понимал, откуда на самом деле взялись слишком точные прозрения Морозова и концепция Единой шины.
— Я могу не спрашивать, — тихо сказал Громов. — Могу делать вид, что мне достаточно задач, схем и сроков. Но после декабря это уже нечестно.
Морозов молчал.
— Как-то у тебя дома ты уже рассказывал про графику, манипулятор, сети и модульную систему, — сказал Громов. — Я потом долго это прокручивал. Не потому что чудо, а потому что за этим впервые стало видно направление: куда вообще может вырасти машина. Но это все техника. Архитектура. Понятно, что с ней делать. А я хочу понять другое.
Он сделал короткую паузу.
— Расскажи мне про будущее как про мир. Без рабочих заданий.
Скрежет лопаты стал ближе. Метрах в пятидесяти дворник в безразмерном ватнике ритмично скалывал лед с края тротуара.
— Женя.
— Я не прошу дат. И не прошу списка событий. Просто… как там живут? Что стало важным? Что мы сейчас вообще не способны представить?
Морозов посмотрел на слепящее небо над крышами. От солнца болели глаза, но морозная ясность только усиливала ощущение, что от ответа уже не уйти.
Громов спрашивал не про план проекта. Он спрашивал про реальность, из которой Морозов выпал и которую до сих пор носил в себе, как занозу.
— Хорошо, — сказал Алексей. — Тогда в общих чертах. Даты я не называю: не хочу превращать разговор в шпаргалку, да и после нашего вмешательства они всё равно могут поплыть. Но крупные направления останутся. Про них и скажу.
— Договорились.
— Тогда начнём не с политики, — сказал Морозов. — Начнём с того, что у тебя под рукой. Сейчас телефон — в коридоре, библиотека — на полке, фотоаппарат — отдельная коробка, карта — бумага, вычислительная машина — комната с пропусками. Потом всё это начнёт сходиться в один предмет.
Громов медленно повернул голову.
— В один предмет?
— Да.
— Ты сейчас не про чемодан говоришь?
— Нет. Про то, что кладут в карман.
Женя посмотрел на него с таким выражением, будто Морозов только что предложил засунуть в карман стойку ЕС ЭВМ.
— Карманный телефон, карманная библиотека,
— Редко.
— Уже лучше. А связь?
— Сначала провода, потом радиоканалы, потом сети, которые обычный человек вообще перестанет замечать. Он будет писать письмо, смотреть справочник, вызывать карту города, отправлять снимок — и не думать, где там коммутатор, где память, где чужой вычислительный центр.
— Снимок, — повторил Громов. — То есть с экраном.
— С цветным экраном. И не таким, как у нашей «Сферы-80».
Громов автоматически прищурился, словно перед ним уже лежал лист миллиметровки.
— У «Сферы» тридцать две позиции на двадцать четыре строки, — сказал он. — Если брать знак восемь на восемь точек, это двести пятьдесят шесть на сто девяносто две. Чуть меньше пятидесяти тысяч точек.
— В хорошем устройстве — чуть более трёх миллионов точек. В кадре на каждую точку обычно отводят двадцать четыре бита: по восемь на красный, зелёный и синий. А в некоторых режимах — уже тридцать, по десять на каждый цвет.
Громов остановился.
— Три миллиона? На стекле размером с ладонь?
— Да.
— Это в шестьдесят раз больше нашей полной экранной сетки, — сказал Громов. — Такой экран сам по себе съест всё, что мы называем видеопамятью, и попросит добавки.
— Попросит не один раз, — сказал Морозов. — То, что ты видишь на экране, сначала лежит в памяти как кадр. Пока один кадр показывается, второй уже готовят, чтобы картинка не рвалась. Иногда держат ещё служебные слои, шрифты, значки, куски будущих кадров. Поэтому видеопамять — это не один экран. Это несколько экранов плюс всё хозяйство вокруг них.
Громов потер переносицу.
— Несколько полных экранов в памяти одновременно?
— Да.
— И это только экран.
— Только экран, — подтвердил Морозов. — Он спокойно показывает движущуюся картинку: шестьдесят кадров в секунду. В некоторых режимах — сто двадцать.
Женя несколько секунд молчал. Смотрел не на улицу, а куда-то внутрь воображаемой схемы: три миллиона точек, цвет, синхронизация, память, процессор, который не разваливается от одной мысли об этом.
— Лёша, это же не карманная ЭВМ, — сказал он наконец. — Это маленький вычислительный центр с телефонной трубкой.
— И записной книжкой. И фотоаппаратом. И библиотекой. И картой города.
— Не добивай.
— С памятью больше, чем у всего нашего отдела вместе с ближайшим вычислительным центром.
— Сколько?
Морозов усмехнулся.
— Если сказать честно, ты решишь, что я издеваюсь.
— Говори.
— Миллиарды байт в обычном устройстве. Потом — сотни миллиардов. Для хранения дома — триллионы.
Громов остановился так резко, что каблук скользнул по утоптанному снегу.
— Триллионы байт?
— Да.
— В квартире?
— На столе. В кармане — меньше, но все равно чудовищно много по нынешним меркам. И самое смешное: через несколько лет после этого людям снова будет не хватать места. Документы, снимки, музыка, переписка, справочники, программы — повседневные дела быстро забивают любой запас.
Он помолчал и добавил:
— А половину памяти, если честно, будут занимать фотографии и видео кошек.
Громов несколько секунд молчал.
— Вот теперь поверил, — сказал он наконец.
— В триллионы байт?
— Нет. В то, что это не красивая сказка, а реальность будущего. Триллионы байт можно придумать. А кошек — нет.
— Подожди. Дальше неприятнее для программистов.
Они снова пошли. Ветер нес вдоль вала сухую снежную пыль, и она шуршала по ботинкам, как мелкий песок.
— Сейчас мы радуемся процессору с несколькими тысячами транзисторов, — сказал Морозов. — Потом счет пойдет на сотни тысяч. На миллионы. На миллиарды транзисторов на одном кристалле.
— Миллиарды, — повторил Громов глухо.
— И упрется всё не только в количество. Частоту нельзя поднимать бесконечно: тепло, питание, задержки. Поэтому один процессор начнут делать как маленькую артель внутри кристалла. Несколько вычислительных ядер. Потом десятки. Отдельные блоки для графики, для шифрования, для связи, для вычислений, которые сейчас кажутся экзотикой.
— Несколько процессоров в одном корпусе?
— В одном кристалле.
— И программа должна уметь делить работу между ними.
— Низкоуровневая — да. Если ты пишешь близко к железу, тебе придётся понимать, кто в какой кусок памяти лезет и в какой момент. Иначе два ядра одновременно изменят одни и те же данные, а результат будет зависеть от случайного порядка команд.
Громов поморщился.
— Общая память без дисциплины. Не продолжай. У меня от этого болят зубы.
— Но большинство будущих программистов от этого отгородят, — сказал Морозов. — Им дадут языки и среды, где память спрятана за стенкой. Пишешь не под конкретный процессор, а под условную машину. Она сама проверяет границы, сама раскладывает часть работы, а иногда прямо на ходу переводит твой текст в команды того железа, на котором он оказался.
— То есть программа одна, а машины разные?
— В этом и смысл. Написал один раз — запускаешь на разных машинах, если для них сделали такую прослойку. Не идеально, но достаточно хорошо.
— Звучит как ересь.
— Это та же ересь, которую мы протаскиваем через Микробейсик, — сказал Морозов. — По меркам ассемблера он чудовищно прожорлив. Но школьник пишет простые команды цикла и не думает, где у нас видеопамять, какой порт у клавиатуры и сколько тактов занимает переход. Если интерпретатор есть на «Сфере-80», его можно написать для «Сферы-82» и для другой машины. Алгоритм поедет за ним.
— Машинная независимость, — медленно сказал Громов.
— Она. Цена — эффективность. Когда процессоры станут слишком быстрыми, люди начнут платить скоростью за удобство. Перестанут считать каждый такт, каждый байт, каждую лишнюю копию массива. Кривой алгоритм прикроют быстрым кристаллом и лишней памятью.
— Будут писать тяп-ляп?
— Многие. Не все. Хорошие инженеры останутся. Но средняя программа станет жирнее, медленнее и абстрактнее. Зато её сможет написать человек, который никогда не держал в руках схему процессора.
Громов долго молчал.
— Ненавижу, — сказал он наконец. — Но здравое зерно вижу.
— Вот это и есть будущее программирования: меньше боли возле железа, больше переносимости, больше людей у клавиатуры. И больше мусора.
Морозов коротко рассмеялся. Смех вышел не веселым, но живым.
— Будут и другие машины. Не такие, где программист выписывает каждый шаг. Их будут учить на примерах.
— Учить?
— Нейронные сети. Не электронный мозг в газетном смысле. Большая математическая конструкция. Ей показывают миллионы
Громов повернул к нему голову.
— Писать программы?
— И программы тоже.
— Без алгоритма?
— Алгоритм там есть, но не тот, к которому ты привык. Не «если А, то Б». Если очень грубо, вспомни цепи Маркова: следующее состояние выбирается не командой сверху, а вероятностью, накопленной из прошлых переходов.
Громов прищурился.
— Вероятностный автомат?
— Как дальний, бедный родственник, — сказал Морозов. — Потом это станет мощнее, сложнее и умнее на несколько порядков. Не одна цепочка переходов, а огромная таблица настроенных связей, которая дает вероятный ответ. Иногда точный. Иногда уверенно неправильный.
— То есть машина будет убедительно врать.
— Да.
— Прекрасно. Наконец-то мы автоматизируем самое человеческое качество.
Они оба улыбнулись, и от этого разговор на секунду стал легче.
— Люди будут этому доверять? — спросил Громов. — Машине, которая может уверенно наврать?
— Слишком часто. Потому что удобно. Машины будут подсказывать, считать, сортировать, искать, писать, рисовать, переводить, узнавать лицо на фотографии. Человек получит инструмент чудовищной силы, а вместе с ним — соблазн меньше думать самому.
— Тогда образование должно стать жестче.
— Оно станет доступнее. И одновременно шумнее. Можно будет найти почти любую книгу, лекцию, справочник. Но рядом будет мусор, реклама, ложь, чужая глупость, выданная за знание. Людям придется учиться не только читать, но и отбраковывать.
Громов спрятал руки глубже в карманы.
— Если всё это действительно побежит с такой скоростью, — сказал он медленно, — то начальство перестанет успевать согласовывать реальность. У нас сейчас бумага быстрее мысли бывает только в анекдотах. А там?
Морозов некоторое время молчал. По тропе навстречу прошла женщина с авоськой, бросила на них быстрый равнодушный взгляд и заспешила дальше, прикрывая лицо варежкой от ветра.
— Там скорость станет не удобством, а отдельной силой, — сказал Алексей, когда шаги стихли. — Быстрее пойдут письма, расчеты, деньги, слухи, чертежи, решения. У людей изменится терпение: они привыкнут получать ответ сейчас, а не после трех согласований. У заводов изменятся зависимости: чужая задержка на другом конце цепочки сразу ударит по твоему плану. А у начальства останется привычка управлять миром так, будто он ждёт подписи на папке.
Громов посмотрел на него внимательнее.
— То есть мир начнет меняться быстрее, чем его успеют описывать инструкции.
— Да. И это заденет не только технику. Быт, привычки, хозяйство, политику. Как расчет устойчивости: если конструкция уже с трещинами, дополнительная нагрузка не создает их из ничего, но сразу показывает слабые места.
Женя медленно выдохнул. Пар поднялся между ними белым столбом.
— Ты про Союз?
— Про весь мир, — сказал Морозов. — Но Союз к этому времени будет нагружен сильнее многих: экономика, республики, ведомства, дефицит, привычка держать всё приказом. Россия никуда не исчезнет. Города, заводы, люди останутся. Но привычная карта связей не выдержит. Не завтра и не сразу. У нас меньше десяти лет до времени, когда хозяйственные цепочки начнут рваться, деньги начнут терять смысл, а люди, которые еще недавно считали фильтры, память и траектории, пойдут торговать, ремонтировать импортную технику, искать любую работу, где платят живыми деньгами.
Громов опустил глаза на снег. Несколько секунд он просто шел рядом, будто проверял каждое слово на прочность.
— А люди?
— Люди будут разными, как всегда. Кто-то впервые сможет говорить свободно, печатать то, что думает, ездить, торговать, открывать свое дело. Кто-то потеряет заводскую поликлинику, очередь на квартиру, уверенность, что завтра его место еще существует. Учителя, врачи, инженеры окажутся беднее тех, кто умеет вовремя купить, продать и договориться. Хорошие специалисты будут уходить в случайные заработки. Умные ребята начнут мечтать не о КБ, а о том, как выжить или уехать.
— Уехать куда?
— Куда пустят.
Некоторое время слышен был только снег под ногами.
— Про Америку и Японию я ещё понимаю, — сказал Громов. — Заводы, деньги, электроника. А кто ещё?
— Китай.
Женя даже остановился.
— Китай?
В одном слове прозвучало все, что знал советский инженер начала восьмидесятых: бедность, разрыв с Москвой, бесконечные газетные формулы, чужая и будто бы отсталая страна на краю карты.
— Тот самый Китай, — сказал Морозов. — Сейчас он кажется бедным, аграрным и технически вторичным. Потом он начнет собирать чужое, учиться на чужом, вкладываться в заводы, инженеров и связь. Сначала его будут считать большой мастерской. Потом выяснится, что мастерская умеет проектировать сама.
— Китай будет делать компьютеры?
— Компьютеры, связь, электронику, производственные цепочки. Не сразу и не завтра, но достаточно быстро, чтобы всем, кто сегодня смотрит только на Америку и Японию, стало неприятно.
Громов медленно потер переносицу рукавицей.
— Вот это уже звучит как фантастика.
— Для нас — да. Для будущего — нет.
Они вышли из проулка к пустому двору. На бельевых веревках висели обледеневшие прищепки. В одном окне кто-то двигал занавеску, но тут же отпустил.
— Странно, — сказал Громов после длинной паузы.
— Что именно?
— Ты говоришь про миллиарды транзисторов, карманные ЭВМ, Китай, машины, которые умеют убедительно врать. А тоскуешь почему-то не по ним.
Морозов посмотрел на него.
— Заметно?
— Ты радуешься не тому, чему, по идее, должен бы радоваться нормальный человек из будущего. Не космосу, не сверхмашинам и не этим твоим триллионам байт. Ты оживляешься, когда говоришь про домашний компьютер, про какой-нибудь скучный формат данных и про комнату, где можно выпить кофе между двумя задачами. Это, Лёша, если честно, странно.
Морозов усмехнулся.
— Нормальный человек из будущего тоже не обязан мечтать только о ракетах.
— А о чём обязан?
— Ни о чём не обязан.
Они свернули к низкой кирпичной ограде. Снег здесь лежал ровнее, только возле калитки виднелись следы детских сапог и узкая борозда от санок.
— В детстве я мечтал о нормальном компьютере дома, — сказал Морозов. — Не о машине в вычислительном центре. Не о шкафе за стеклом, к которому тебя пустят по расписанию и только через взрослого. О своей машине. Чтобы включил, написал программу, сохранил её и завтра она снова была на месте. Простая мечта. Почти бытовая.
Громов не перебивал.
— Потом это случилось. Не так, как мечталось, не сразу, не без грязи и дешёвых блоков питания, но случилось. А потом у меня появилась другая работа. Я проектировал кристаллы.
Он сказал это спокойно, но Громов услышал в голосе не технический азарт, а почти физическую тоску.
— Поэтому Зеленоград? — тихо спросил он.
— Поэтому и Зеленоград. Поэтому и этот будущий программный слой для работы с кристаллами, как бы мы его потом ни назвали. До готовой системы ему далеко, до моей прежней работы — тем более. Так, грубая зарубка на деревянной линейке вместо координатного редактора. Но для меня это кусочек той жизни. Возможность хотя бы на шаг приблизить здесь работу с кристаллом к тому, чем она когда-нибудь станет.
Громов долго смотрел на снег под ногами.
— Ты скучаешь по работе.
— Да.
— По работе, где тебя, если верить твоим рассказам, наверняка тоже мучили сроками, начальством, ошибками и чужими требованиями.
— Конечно.
— И по кофейной?
Морозов посмотрел на него с подозрением.
— Особенно по кофейной.
Громов коротко рассмеялся.
— Вот это самое безумное из всего, что ты сегодня сказал. Страннее Китая, карманной ЭВМ и машины, которая врёт как человек. Кофейная. Комната для кофе как инженерная мечта.
— Небольшая комната, где можно пять минут молча переставить мысли в голове, иногда важнее большого вычислительного центра.
— Не поверю.
— Поверишь, когда после третьего ночного прогона будешь спорить с Липатовым не в курилке, а за кружкой нормального кофе.
Громов покачал головой, но улыбка стала задумчивой.
— Значит, твой рай будущего — домашний компьютер, кристалл и кофе.
— Мои мечты не обязаны выглядеть рационально.
— Это точно.
— Человек вообще живёт мечтами, Женя. Иногда очень приземлёнными. Кому-то космос, кому-то своя машина, кому-то пять минут с нормальным кофе. Без этого мы бы и правда стали похожи на роботов.
Громов перестал улыбаться. Несколько шагов они прошли молча.
— Ладно, — сказал он наконец. — С этим спорить труднее, чем с триллионами байт. А теперь скажи честно: после всего этого ты правда считаешь, что наши жалкие форматы файлов имеют значение?
— Да, — сказал Морозов. — Именно после всего этого.
— Почему?
— Потому что привычки потом держат будущее так же прочно, как кристаллы. Как люди хранят данные, передают их друг другу, подписывают документы, проверяют ошибки, читают чужой код. Если здесь каждый пойдет своим путем, то даже умные люди потратят лучшие годы на перевод с одного местного языка на другой.
Громов долго молчал.
— Значит, наша задача скучнее, чем будущее.
— Гораздо скучнее.
— Форматы, документация, совместимость.
— И право человека через пять лет понять то, что он сам написал сегодня.
Громов усмехнулся.
— Ненавижу, когда скучная работа оказывается самой важной.
Женя посмотрел на заснеженные дома. На белые холмы машин. На пустую детскую площадку. На город, который ничего не знал о своем будущем.
— Понял, — сказал он.
Громов двинулся дальше не сразу, будто все еще перекладывал в уме миллиарды байт, карманные аппараты и китайские заводы. Морозов пошел рядом. Несколько минут они молчали, и в тишине снова стало слышно обычное: скрип снега, дальний хлопок двери, короткий смех двух школьников, съехавших с обледенелого склона на портфеле.
Они еще прошли вдоль вала до водонапорной башни, повернули обратно, потом спустились ближе к центру и зашли в кафе-кондитерскую погреться. Внутри пахло свежими булочками, сахарной пудрой и мандариновой кожурой, которую кто-то оставил на краю тарелки. Разговор о будущем там сам собой прекратился. За соседним столиком спорили две пожилые женщины, у окна мужчина читал газету, положив меховую шапку на соседний стул, кассирша считала мелочь с таким видом, будто решала задачу государственной важности.
Громов взял чай и булочку с повидлом. Морозов взял кофе — из тех порций, которые в меню существовали скромной строкой и выдавались почему-то только после короткого разговора с буфетчицей.
— После твоих рассказов булочка выглядит подозрительно устойчивой ценностью, — сказал Женя и осторожно откусил край.
— Не трогай булочку. Она ни в чем не виновата.
Морозов отпил кофе, поморщился и поставил чашку на блюдце.
— Нам точно нужна кофейная.
— Опять?
— Здесь кофе достать очень сложно, — сказал Морозов. — Иногда приходится пользоваться помощью органов. А вот это я пью исключительно из уважения к слову «кофе».
— Булочка лучше, — сказал Громов.
— Булочка лучше.
Громов усмехнулся. Щеки у него оттаяли, и он снова стал больше похож на себя: усталого, язвительного, живого.
Работу они тоже обсудили, уже обычным рабочим голосом. Не планы квартала, не будущие линии и не то, что пришлось бы объяснять на доске. Простые вещи: кто выйдет после праздников первым, где лежат последние распечатки, сколько листов миллиметровки еще осталось, и стоит ли в первый рабочий день приходить сразу с блокнотом или сначала сделать вид, что люди в новом году хоть немного отдохнули.
— Сделать вид, — сказал Громов. — Обязательно. Это важный элемент социальной совместимости.
— Запишу в стандарт.
— В раздел «обман начальства»?
— В раздел «бережное обращение с инженером».
Громов поднял булочку вместо тоста.
— Тогда я за стандарт.
Они посидели еще минут двадцать. Поговорили о том, кто из отдела вернется после праздников первым, как Михалыч опять будет ругаться на чужие кружки у чайника, и почему в новом году первым делом всегда приходится искать пропавший карандаш.
Когда они вышли, солнце уже ушло ниже крыш, и после теплого зала мороз щипнул за уши так резко, что оба невольно поежились.
У выхода Громов остановился и поправил воротник.
— До завтра, Лёша.
— До завтра.
Он пошел вниз по старой центральной улице, не оглядываясь.
Морозов еще минуту постоял у входа. Потом натянул шарф выше и пошел в другую сторону.
Глава 2
После праздников
Запах мастики, щедро размазанной по щербатому линолеуму, въелся в самый бетон стен. Густой. Химический. Неистребимый.
Внутри огромного здания НИИ «Электронмаш» царил стылый микроклимат. Батареи отдавали тепло неохотно. Было первое рабочее утро после короткой новогодней паузы. В длинных коридорах висела сонная тишина, которая по негласной договоренности еще притворялась продолжением праздника.
Людей почти не было. Редкие тени скользили вдоль выкрашенных бледно-зеленой масляной краской стен и быстро ныряли за двери кабинетов.
Морозов пересек пустой вестибюль.
В пустоте особенно ясно проступал запах самого здания: мастика, холодный бетон, сухая бумага объявлений под
Основная проходная еще жила прежним НИИ: вахтерша за стеклом, турникет, доска объявлений с профсоюзной елкой и списком дежурных. Но дальше, у поворота в коридор бывшего КБ-3, появился второй рубеж: только для нескольких комнат, где теперь числилась «Сфера».
За новым столом сидел дежурный из ВОХР. Молодой, скуластый, в безупречно застегнутой форме. Перед ним лежал толстый, прошитый суровой ниткой журнал в дерматиновой обложке.
За декабрь работа «Сферы» частично вошла в режимный контур. До праздников это было скорее договоренностью, несколькими пометками в спецчасти и пониманием, что закрытые задачи больше нельзя таскать через обычную лабораторную вольницу. За каникулы идея обросла процедурой и мебелью: столом, журналом, новым порядком входа.
Морозов достал из внутреннего кармана пропуск-книжечку. Стандартная обложка. Фотография с печатью. На внутренней странице — короткая спецотметка, согласованная со спецчастью.
Дежурный забрал документ. Никаких привычных кивков. Никаких вопросов про здоровье или погоду. Сухой, цепкий взгляд скользнул по лицу инженера, сверился с фотографией и сделал короткую отметку в журнале.
— Проходите, — коротко сказал дежурный.
Он протянул пропуск обратно.
Морозов забрал пропуск. Спрятал во внутренний карман пиджака.
Морозов снова подумал, что прежняя лабораторная невидимость закончилась. С 1976-го, с первого кульмана и первой толстой папки ТЗ, он вытаскивал проект через щели системы: списанные платы, личные договоренности, ночные проверки, чужие склады и найденные в последнюю минуту герконы. Пока речь шла о макетах и опытных платах, многое держалось на голом энтузиазме и связях. Теперь часть работ шла в особом режиме, и отметка в пропуске означала не привилегию, а право входить туда, куда вчера ещё можно было зайти по старой привычке. Всё остальное — кто взял деталь, что поменял в схеме, какой опытный узел вынес со склада, — должно было проходить через журналы, подписи и отдельные заявки.
Зато вместе с учетом появлялись подписи, выделенные ресурсы и возможность отводить случайных начальников от чужой двери. Морозов принимал это спокойно. Без этих скучных папок «Сферу» до производства не довести.
Алексей пошел по коридору. Шаги гулко отдавались в пустоте.
Он не испытывал ностальгии по прежней лабораторной вольнице. Свобода без ресурсов — это тупик. Чтобы вытащить в жизнь тот самый компьютер, о котором он когда-то мечтал, нужны были герконы, керамические процессоры, площади на заводах и лимиты на комплектующие. Система выдавала всё это только в обмен на контроль.
Обмен был неприятный, но понятный.
Дверь лаборатории была приоткрыта. Старая табличка «КБ-3» ещё висела на месте, но ниже кто-то уже приколол кнопками временную вывеску — белый лист с крупной надписью: «КБ „Сфера“». Из щели тянуло теплом и едва уловимым запахом свежей туши.
Морозов толкнул створку.
Лаборатория встретила его привычным рабочим хаосом. Осциллографы, макетные платы и мотки проводов сиротливо жались по краям столов. Один широкий монтажный стол у окна был очищен от приборов и временно превращён в бумажный плацдарм.
За ним сидел Иван Михайлович. Не как в кабинете и не как на совещании у директора — просто занял единственную большую плоскость, где можно было разложить бумаги и не уронить их в коробку с разъёмами. На очищенной столешнице лежали папки бывшего КБ-2, журналы КБ-3, описи шкафов, заявки на комплектующие, требования в первый отдел и формы командировочных удостоверений. Сбоку стоял его граненый стакан в подстаканнике.
Михалыч поднял голову от бумаг.
— Пропустили?
— Внесли в летопись, — Алексей подошел к столу, снял пиджак и повесил на спинку свободного стула.
— Садись. Пока народ не набежал, хозяйство разберём.
Морозов сел напротив.
Михалыч постучал пальцем по верхней стопке.
— Смотри, Лёша. В прошлом году второе и третье КБ объединили скорее по приказу: комнаты рядом, начальство общее, а шкафы, журналы и недоделанные дела у каждого ещё свои. Теперь у этого хозяйства появилось имя — «Сфера». Плюс закрытая работа специального назначения. Значит, надо принять дела по-настоящему, а не считать, что вывеска сама всё склеила.
— С чего начинаем?
— Люди, комнаты, доступы, шкафы, детали, старые ведомости, опытные изменения, командировки. Кто за что отвечает, к каким столам и шкафам имеет доступ, как списываем детали, как оформляем опытные изменения, кто подписывает заявки, где лежат журналы, как специалисты по аналоговым схемам из бывшего второго КБ вникают в цифровую часть проекта, чтобы не чувствовать себя лишними людьми. Если это не разложить сейчас, через месяц ты будешь не схемы смотреть, а выяснять, почему одна и та же плата проходит по трём разным бумажкам.
Он подвинул к себе стопку пустых бланков.
— Поэтому делаем по-человечески. Ты и ребята говорите, что нужно машине для работы. Заявки — только на необходимое: где допуск, где склад, где согласование. Наталья Сергеевна поможет перевести нестандартные решения на язык, который примет нормоконтроль.
— Почему вы сами за это взялись? — спросил Морозов. — Можно ведь часть отдать канцелярии или снабжению.
Михалыч фыркнул.
— Канцелярия аккуратно перепишет то, что ей дадут. А у нас половина железа имеет биографию длиннее моей трудовой книжки. Я за это хозяйство отвечаю, как ни крути. В цифровой схеме ты с Женей разберешься быстрее меня. А вот в людях, комнатах, складах и бумагах я сейчас полезнее, чем с паяльником.
Он ткнул пальцем в сторону столов, где под чехлами ждали макеты.
— Из бывшего второго КБ часть людей уже ушла, часть ещё смотрит на вашу цифровую работу как на чужую страну. Но специалисты по аналоговым схемам вам пригодятся. У них руки и привычка к железу. Если правильно подключить их к работе, они вам половину помех найдут раньше, чем Громов успеет придумать красивое название для очередной неисправности.
Он перевернул лист и постучал пальцем по короткой пометке на полях.
— И ещё. После истории с «Лучом» к нам переводят Андрея Горелова, из их смежной закрытой темы. Бумага идёт через наше руководство, а первый отдел, похоже, очень просил не затягивать. По слухам, инженер крепкий: занимался операторскими пультами, рабочими местами для режимных задач и диагностикой отказов. Сначала пусть вникнет в ход работы. Не похоже на случайную перестановку.
Морозов кивнул.
— Познакомимся. Если он умеет говорить с операторами и не боится железа, лишним не будет.
Морозов вернулся к делу.
— Значит, наша задача простая, — продолжил Алексей. — Не дать «Сфере-82» разойтись на две несовместимые машины. Закрытая ветка будет, от неё уже никуда. Но гражданскую нельзя делать бедным родственником.
Он постучал ногтем по краю бланка.
— То, что прошло через открытую машину и не развалилось в чужих руках, потом можно аккуратно переносить в закрытую. А если сразу всё запереть в спецварианте, начнём вариться в собственном соку и через полгода получим две несовместимые машины с одним названием. Вот этого нам нельзя.
Михалыч кивнул.
— Так и будем оформлять: одна база, две области применения. А порядок по бумагам я разложу.
Он придвинул к себе пустой бланк командировочного удостоверения. Взял перьевую ручку.
— Давай теперь к оформлению. По Зеленограду мне нужна бумага без красивых слов. Директор спросит не что тебе там интересно, а что от этого получает «Электронмаш». Как пишем?
— Прямо, — сказал Морозов. — «Сфере-82» нужна дешёвая и стабильная оперативная память. Память сожрёт цену машины быстрее любого корпуса. Если мы дадим зелёноградцам расчёты, проверочные таблицы, подготовку данных для топологов и служебные проверки кристаллов, они быстрее отловят брак и доведут технологию. А мы получим не красивую командировку, а будущую память для серийных машин.
Михалыч задумчиво покатал ручку между пальцами.
— То есть в бумаге: внедрение машинных методов подготовки и контроля микросхем памяти, снижение брака, подготовка элементной базы для ЭВМ «Электронмаша». Плюс приличная отчётная строка: институт ведёт внедренческую работу с МИЭТ и заводскими площадками.
— И рабочие места для подготовки проектных данных, — добавил Морозов. — Чтобы это было не разовой услугой, а нормальным инструментом.
— Уже похоже на обоснование. Тогда рамки: кто едет, на сколько и где кончается разговор, а начинается обещание. Сегодня дирекция выйдет из праздников и начнет кроить январь. Окончательный состав назовете на совещании.
— Едем мы с Женей, — сказал Морозов. — И Липатов нужен по делу, не для подписи. Он будет спрашивать простые неприятные вещи: что именно проверяем, чем подтверждаем результат и как потом повторить опыт. Без него мы там быстро начнём обещать больше, чем сможем проверить. Формально закрепим после общего разговора.
Перо скрипнуло по бумаге.
— Трое под вопросом до утверждения. Сроки?
— Первая фаза минимум на две недели. Готовую систему не обещаем. Покажем маленький опыт, который можно проверить на их материале: один расчёт, одну таблицу проверки, черновик данных для тополога, где получится — вывод на плоттер. Женя готовит вопросы по форматам и черновики служебных проверок.
— Суточные на первую неделю, дальше оформим продление по результатам первых материалов, — Михалыч быстро вписывал цифры в край бланка. — Если у зелёноградцев на столе появится дело, а не разговоры, сами попросят остаться.
— Нас устроит.
— Теперь по КБ «Сфера». Пока вы в Зеленограде, мне нужно заранее понимать, какие бумаги готовить. Схемы оставь ребятам, а мне нужны заявки, согласования и складские вопросы. Что первым?
— Цвет, — сказал Морозов. — Штатный инструмент, а не витрина для показов. «Сферу-82» мы тянем как машину общего назначения: редакторы, таблицы, учебные программы, инженерные расчёты, работу с программами под «МикроДОС». Где-то можно жить в чёрно-белом режиме: бухгалтерская таблица не умрёт без красной строки. А где-то цвет становится не украшением, а способом не перепутать состояние: схема, плата, слой, ошибка, предупреждение, учебная графика, операторский экран. Инженерные программы без цвета быстро упрутся в кашу на экране: будущая работа с топологией кристалла, пересечения проводников, сложные переходы, невидимые глазу замыкания. На чёрно-белом мониторе всё это придется изображать миганием и условными знаками.
— По «Сфере-82» закладываем нормальный цветной вывод. По «Сфере-80» сложнее: она и как чёрно-белая машина работает, но если мы хотим, чтобы на ней тоже писали и проверяли цветные программы, нужен добавочный цветной видеоблок. Железные возможности там почти исчерпаны, поэтому придётся искать аккуратное решение: не ломать совместимость и сделать это как конструкторную доработку для тех, кто собирает «Сферу» по чертежам из журнала или получил комплект по почте. Предварительно вижу так: Олег с Наташей начнут видеотракт и сопряжение. Люба посмотрит развязку и помехоустойчивость, чтобы видеоблок не жил отдельно от реального железа. Рябининой понадобится отдельная дорожка по документации: чтобы это выглядело как развитие учебно-инженерного профиля, а не как прихоть с цветными лампочками.
Он чуть помедлил.
— И отдельно — программная часть. Цвет не должен ломать «МикроДОС»: старые программы в русском и исходном режимах должны видеть обычный экран, а новые — обращаться к цвету через общий набор подпрограмм. Громов один этого не вытянет, тем более если едет в Зеленоград. Значит, нужен второй программист: подпрограммы ввода-вывода, экранные процедуры, монитор в ПЗУ, проверочные программы. Кого именно поставить, решим с ребятами: надо понять, кого можно оторвать от текущей работы. Но бумагу на перевод или выделение человека готовьте заранее.
Иван Михайлович коротко записал: «цветной видеоблок», «доработка Сферы-80», «документация».
— С носителями что? — спросил он. — Если говорим про «МикроДОС», одной кассетой не отделаешься.
— Обязательно, но начнём не с них. «Сфера-80» могла жить с кассетой. Для «Сферы-82» и «МикроДОС» штатным носителем должна стать дискета, иначе весь разговор о переносимых программах останется на бумаге. Единичные ИЗОТы мы добывали чудом, а для партии хотя бы в десять или сто машин чудо перестает быть методом снабжения. Значит, либо ищем устойчивый канал поставки, либо заранее проверяем, какие дисководы можно заменить без переписывания половины системы.
Иван Михайлович добавил строку и поднял глаза.
— А декабрьский стенд связи?
— Не первым делом, но забывать нельзя. Эту работу не бросаем, но и сетью пока не называем. Пусть пока останется рабочая пометка: какие линии уже заняты, куда можно подключать новый блок и кто проверит, чтобы один узел не мешал другому. Подробный разговор о порядке обмена проведём отдельно. Сегодня главное — цвет, программная часть и документация. Дисководы и связь не теряем, чтобы ни одна работа не уперлась в пустой бланк или чужую дверь. Ответственных назову на совещании.
Иван Михайлович перевернул лист, сделал ещё несколько пометок и подвёл черту.
— Весёлое начало года, — сказал он. — Значит так. По цвету сразу давайте перечень опытных изменений: что меняете, где проверяете, какие детали просите и где нужен допуск. По программной части — отдельную записку: как сохраняем работу «МикроДОС», какие подпрограммы оставляем внутренними и кому это поручаем. По дисководам — что ищем и чем можно заменить ИЗОТы. По связи пока хватит короткой пометки: декабрьский стенд не
— Так и сделаем.
— Добро.
Михалыч собрал исписанные бланки в серую папку, прижал их ладонью, чтобы не разъехались по столу, и положил папку перед собой.
— После общего разговора принесёте мне список ответственных и первые заявки. Не доклад. Мне нужно понимать, где детали, где доступ, где рабочее место, где согласование.
Алексей поднялся со стула.
— Принесу, — сказал он. — Сначала проговорим с ребятами порядок и подтвердим, кто за что берётся.
Михалыч не ответил. Он уже читал длинную, занудную инструкцию по правилам оформления режимных допусков для работы с керамическими процессорами серии 580.
* * *
Морозов вышел из лаборатории.
Ему требовалось несколько минут тишины. Разговор сделал своё дело, но мысли ещё нужно было уложить в новый рабочий порядок. В две тысячи двадцать шестом для этого служили стерильные, залитые холодным светом офисные кухни. Здесь вместо них был конец коридора, скрипучий подоконник и дверь в маленькую кладовку с окном.
Кладовку ещё только освобождали. У стены стояли коробки с высохшими рулонами кальки, пустые банки из-под фотохимии и списанный стул без спинки. На полу лежала пыльная стопка старых журналов «Техника — молодёжи». Михалыч ещё до праздников буркнул, что если Сергеев действительно пришлёт Морозову обещанный зерновой кофе, то хранить его среди фоторезистов нельзя: найдут, сопрут или запишут как реактив.
Алексей постоял на пороге и усмехнулся. Кофейная комната — громко сказано. Пока — склад забытых вещей с промёрзшим окном.
Он прикрыл дверь, не входя.
Просьба, которую Сергеев почему-то принял всерьёз, воплотилась неожиданно быстро. Ему нужна была не курилка с табачным дымом и чужими разговорами, а маленькое нейтральное место: полка, ручная мельница, чайник, чашки, нормальный кофе. Чтобы можно было на пять минут выйти из шума лаборатории, посмотреть в окно, переброситься с кем-нибудь парой фраз не для протокола и вернуться к текущим задачам.
Глава 3
Совещание
Через несколько минут Морозов вернулся в лабораторию.
Воздух в помещении КБ «Сфера» был прохладным, пах старой плотной бумагой, холодным металлом приборов и едва уловимо — подсохшими мандариновыми корками, оставшимися где-то в столах после новогодних дней. За дальними столами двое лаборантов готовили места под будущие макеты: прозванивали тестовые жгуты, подписывали бумажные бирки и раскладывали пустые ведомости деталей. Ближе к окну инженер из бывшего второго КБ методично перебирал коробку с аналоговыми компонентами, сверяясь со справочником. Первый рабочий день ещё только входил в нормальный ритм.
Морозов подошёл к центральному столу. Он был очищен от лишнего железа, уступая место широким листам миллиметровки, стопкам командировочных бланков и тетрадям. Вокруг стола уже собрались те, на ком держался технический каркас проекта. Громов сидел, скрестив руки на груди, Липатов раскладывал свои методические записи. Олег перекатывал в пальцах карандаш, рядом стояла Наташа, внимательно изучая какую-то распечатку. Люба Ветрова проверяла длинную таблицу номиналов. Саша Птицын стоял чуть в стороне, опираясь на край стойки с измерительной аппаратурой, собранный и готовый слушать.
Иван Михайлович занял место у края стола. Перед ним лежала обычная картонная папка с текущими документами: командировочные бланки, черновой список вопросов к Зеленограду и несколько листов по доступам. По виду — повседневная канцелярия; по смыслу — опора для решений, которые после совещания должны были стать поручениями.
— Давайте начнём, — сказал Морозов, опираясь ладонями о край стола. Он посмотрел на команду. — Прошлый год оставил нам ясную точку старта. «Сфера-80» работает, выпускается небольшой, но серией, а также собирается энтузиастами. В декабре мы подняли прототип «Сферы-82». Теперь проверяется следующий масштаб: как довести нашу новую машину до повторяемой опытной партии.
Он выдержал паузу, глядя на лежащие перед ним листы.
— До сих пор многое держалось на быстрых договорённостях у стола и правках прямо на макете. Такой порядок помог нам дойти до прототипа, но теперь нужны письменные границы: кто отвечает за линию работы, где проверяем результат, какие изменения допустимы и кто их подписывает. У нас есть обязательства, есть смежники, и есть задачи, которые физически не помещаются в одни руки. Поэтому сейчас мы разводим линии работы на ближайшие недели.
— По Зеленограду состав утверждён, — подал голос Иван Михайлович, придвигая к себе бланк. — Морозов, Громов, Липатов. Командировки выписаны.
— А зачем вы вообще туда едете? — спросил Олег. Он перестал перекатывать карандаш по пальцам, перехватил его поудобнее и постучал тупым концом по углу чертёжного листа. — Снова за К580?
— За лимитами на дешёвую и стабильную оперативную память, — ответил Морозов, опираясь ладонями о край стола. — «Электронмаш» не делает свои чипы. Если мы не решим вопрос с поставками динамических микросхем ОЗУ сейчас, память съест всю смету серийной «Сферы-82» быстрее, чем корпус и трансформаторы. Зеленоградцы бьются над выходом годных БИС. Мы предложим им наш программный метод: если они смогут использовать «Сферу» как малую переднюю консоль для промежуточного контроля, они будут находить топологические ошибки до того, как те уйдут в фотошаблон. Это сэкономит им машинное время на больших ЭВМ и снизит процент брака на линии. А взамен мы получим устойчивые лимиты на поставку микросхем.
Липатов медленно открыл свою тетрадь, поправил очки и посмотрел на Олега своим обычным, слегка занудным взглядом:
— А моя задача чуть шире, чем просто помощь коллегам из МИЭТа. Я сейчас свожу наши требования в один жёсткий регламент испытаний. Физики и технологи — люди увлекающиеся: они мыслят красивыми научными статьями, диссертациями и удачными опытами. Мы не можем просто подарить им идею и надеяться на ответную благодарность. Мне нужно вытянуть из них точные, зафиксированные в протоколах допуски и согласовать границы нашего эксперимента. На каких списанных пластинах они дадут нам проверить метод? Как аттестован их стенд? Если мы эту нудную метрологическую работу не проделаем на месте, мы привезём из Крюково охапку дружеских обещаний вместо реальных фондов.
Громов, до этого молча перебиравший свою стопку распечаток на серой газетной бумаге, шумно выдохнул сквозь зубы:
— А мне придётся разгребать их программные дебри. Ты представляешь, Олег, на чём они там считают свои топологические матрицы? БЭСМ-6, М-220 и другие большие универсальные ЭВМ. У БЭСМ-6 машинное слово — сорок восемь бит, у каждой большой машины свои привычки, а у нас в «Сфере» процессор К580 — восьмиразрядный. У них свои ведомственные операционные системы, свои форматы записи
— Вот именно, — Морозов кивнул, подтверждая слова Громова. — Мы едем согласовывать стыки на границе двух разных миров: их больших универсальных машин и нашей микро-ЭВМ. Им нужен быстрый инструмент локальной проверки рядом со столом тополога, нам — память. И этот компромисс должен быть записан в протоколах до единого бита.
— Нас мало, — вдруг произнесла Люба.
Она не оторвала взгляд от своей таблицы номиналов резисторов, но в наступившей тишине её тихий, ровный голос прозвучал на удивление весомо. Люба никогда не повышала голос и избегала резких слов, но её аккуратная прямота всегда била точно в цель.
— Я смотрю на наш план и просто складываю цифры. Зеленоградская поездка уносит троих ключевых разработчиков минимум на две недели. Здесь, во Владимире, остаётся нерешённой проблема поиска стабильных дисководов для будущих партий. Плюс базовая «Сфера-80», доработка под восемьдесят вторую, аналоговый блок цветности и письма, которые нужно как-то систематизировать. Мы размазываем людей тонким слоем по задачам. Если завтра у Олега поплывёт синхронизация в блоке цветности, кто ему поможет? Если Громов в Зеленограде застрянет со своими форматами файлов, кто здесь продолжит дописывать МикроДОС для «Сферы-82»? У нас на каждом ключевом направлении стоит ровно по одному человеку. Это не инженерное планирование, это ходьба по канату без страховки. Одна сезонная эпидемия гриппа — и весь наш красивый квартальный график превратится в кучу просроченных бланков.
Громов обернулся к ней, его лицо на секунду потеряло привычную язвительную маску:
— Ветрова, ты как всегда права, твоя арифметика безупречна. Нас действительно прижало к стене. Задач навалило на целый отраслевой НИИ, а мы всё ещё пытаемся выехать силами старого ядра КБ-3. И это мы, между прочим, ещё даже не начали всерьёз обсуждать закрытую ветку «Сферы-82В». Там ведь тоже понадобятся стенды, ночные прогоны, режимные формуляры и люди, которые будут за всё это отвечать.
Иван Михайлович медленно поднял свой гранёный стакан в подстаканнике, сделал глоток остывшего чая и со стуком поставил его обратно на стопку ведомостей:
— Я эту проблему знаю не хуже вас, ребята. Директор нашего института тоже не слепой, но новое штатное расписание нам министерство за один день не утвердит — там согласования через три главка идут. Будем выкручиваться тем, что есть в наличии. Во-первых, лаборантов бывшего второго КБ мы полностью переподчиняем Любе и Олегу на макетные работы: пусть разгрузят вас от рутинной пайки жгутов, переписывания листингов, маркировки проводов и первичной проверки деталей. Во-вторых, Птицын забирает на себя складскую логистику и входной контроль. Наша задача сейчас — выжать максимум из тех людей, которые понимают проект. КБ должно научиться работать как промышленная структура: с журналами, ответственными, резервом по людям и оформленными изменениями. Решения у одного стола больше не могут быть главным способом работы.
— Именно поэтому, — Морозов выпрямился, — мы прекращаем работать по принципу «каждый делает всё». Пока мы в Зеленограде, КБ остаётся во Владимире. И здесь есть чёткий список работ. КБ не должно ждать нашего возвращения как разрешения на каждый шаг. Вы продолжаете вести проект.
Он пододвинул к себе чистый лист миллиметровки.
— Первое. Дисководы. Кассетный магнитофон для «Сферы-80» был нормальным решением, но для «Сферы-82» и нормальной работы с МикроДОС нам нужны дискеты. То, что мы доставали болгарские устройства по случаю, больше не работает. Нам нужен проверяемый канал поставки или полная документация на замену. Это задача на поиск и сверку протоколов.
— Второе, — Морозов посмотрел на Олега и Наташу. — Цвет.
Олег мгновенно подобрался, глаза блеснули техническим азартом.
— Мы можем выжать нормальную палитру, если пересмотрим…
— Ограничения, Олег, — жёстко, но спокойно перебил Морозов. — Мы ставим цвет на рельсы, но цвет нам нужен не для красоты. Цветной видеовыход — это инструмент диагностики, это выделение слоёв для будущих схем, это графики, это учебные классы. Для базовой «Сферы-80» мы ищем конструкторное расширение, которое не сломает чёрно-белую совместимость. Для «Сферы-82» цвет будет штатным.
— Сопряжение сигналов и фронты, — тихо сказала Наташа, делая пометку на полях своей распечатки. — Если мы начнём гнать цвет поверх старой шины, у нас поплывёт синхронизация.
— Вот это вы и будете выяснять, — подтвердил Морозов. — Олег, Наташа — на вас видеотракт и физика сигнала. Люба.
— Питание, земля, гальваническая развязка, — ровно отозвалась Люба. — Цветной тракт сожрёт ток. Если мы потянем его от старого блока питания, у нас просядет логика. Я буду считать допуски.
— Принято. Подробный разбор по видеопамяти и режимам оставим на потом, когда у нас будут на руках расчёты Громова по нагрузке на процессор. Сейчас — только границы.
Морозов перевёл взгляд на Птицына. Младший инженер стоял прямо, внимательно слушая каждое слово. За прошедший год он перестал быть просто парнем на подхвате, научившись чувствовать железо не хуже старших товарищей.
— Саша, — обратился к нему Морозов. — На тебе физическая реальность.
Птицын шагнул ближе к столу.
— Слушаю.
— Номиналы, корпуса, пригодность партий. Нам будут сбрасывать детали от смежников, и не все они пройдут военную приемку. Мне нужно, чтобы ты организовал входной контроль. Плюс проверка стендов. Когда Люба и Олег начнут макетировать видеотракт, им понадобятся чистые, проверенные линии питания и тестовые генераторы. Ты держишь этот контур. Ты должен знать, какая деталь на какую плату пошла, и где у нас дефицит.
— Сделаю, — коротко кивнул Птицын. — Начну с ревизии того, что осталось от бывшего КБ-2. Там были неплохие запасы по керамике и логике.
— Только сверяй маркировку, — предупредила Люба. — Там половина коробок с перебитыми паспортами.
В этот момент дверь лаборатории приоткрылась, и в комнату уверенным шагом вошла Наталья Сергеевна Рябинина. Она не была сотрудником КБ, но её появление всегда заставляло инженеров подтянуться: Рябинина олицетворяла тот самый нормоконтроль и документальный порядок, перед которым пасовали даже самые гениальные эскизы на клочках бумаги.
— Я прошу прощения, что прерываю ваше производственное
Громов страдальчески вздохнул:
— Наталья Сергеевна, у нас тут архитектура горит.
— У вас, Евгений, всегда что-нибудь горит, — спокойно, но твердо ответила Рябинина. — Ваша «Сфера-80» ушла в эксплуатацию, Олимпиада закончилась. Вы всем составом КБ перелопатили гору писем от кружков ДОСААФ, школьных учителей и радиолюбителей. Выявили массу проблем: как машины работают при просадках сети, на плохих телевизорах, с сомнительной пайкой. Это бесценный материал для анализа надёжности. Но где документальный след? Поговорили и забыли? Я не собираюсь собирать системную статистику по обрывкам ваших воспоминаний.
Она открыла папку и выложила чистый бланк с аккуратной сеткой таблиц:
— Липатов, Морозов, это к вам. До вечера мы должны согласовать единую форму карточки отказа. Систематизируем ошибки: дефект схемы, дефект конкретной партии микросхем, ошибка в описании или внешние условия. Любое изменение в опубликованных чертежах должно быть оформлено. Если мы находим системную ошибку в логике, её исправление должно выходить как официальный бюллетень, утверждённый КБ, а не как устный совет по телефону.
Морозов медленно кивнул. Ему было физически некомфортно терять чувство личного контроля над каждым проводом, но Рябинина была абсолютно права.
— Наталья Сергеевна права, — сказал он, обращаясь к команде. — Письма и внешняя обратная связь — это наша испытательная лаборатория. Отдел документации будет вести реестр отказов, фильтруя эмоции и оставляя чистую техническую суть. Сергей Дмитриевич, до отъезда согласуй форму карточки отказа. Любое изменение в схемах, даже самое мелкое, теперь идёт через официальную бумагу.
Рябинина аккуратно завязала тесьму папки и повернулась к Морозову:
— И последнее. По поводу архива. Я передаю в спецчасть опись всех черновиков и эскизов по вашему декабрьскому эксперименту с локальной связью. Жду от вас чистовые схемы. Мне нужно жёстко зафиксировать этот узел в документах, пока вы здесь не начали разводить новые платы под цветной видеоблок.
Морозов мгновенно подобрался:
— Абсолютно верно. Спасибо, Наталья Сергеевна. Олег, Наташа — слушайте внимательно. Схемы декабрьского стенда связи зафиксированы. Это значит, что контакты системного разъёма шины, которые мы использовали под маркерное кольцо и служебные сигналы обмена, теперь неприкосновенны. Это наш аппаратный резерв. Когда вы начнёте проектировать цветную плату или подключать контроллер дисковода, ни в коем случае не используйте эти линии под видеосигналы или управление накопителем. Если мы сейчас залезем в эти порты ради удобства разводки, то весной, когда придётся собирать боевой прототип, мы упрёмся в тупик. Локальный обмен сейчас не первая задача, но порты должны остаться зарезервированными в КБ.
Иван Михайлович, до этого молча слушавший инженеров, открыл свою папку.
— Раз уж мы заговорили о резервировании. Есть ещё один вопрос, который мы сегодня только обозначаем, но держать в уме его придётся.
Он посмотрел на Морозова.
— Режимность темы выросла. То, что мы делаем, интересует не только школы и кружки. После моего разговора с руководством, нам спускают требование по закрытой ветке.
В лаборатории повисла тяжелая тишина. Громов нахмурился, Олег перестал дышать.
— Не переживайте, ничего страшного, но нам всё равно нужны будут люди, — успокаивающе поднял руку Иван Михайлович. — Раз нужен вариант машины для спецприменений, к нам прикрепляют специалиста. Его допустят к обсуждению, у него будут оформленные полномочия. В дальнейшем он будет руководителем закрытого направления «Сферы».
Морозов сцепил руки в замок.
— Хорошо. Гражданская ветка остаётся массовой проверочной средой. Мы отрабатываем на ней узлы, МикроДОС, видео, а потом самые устойчивые решения переносим в закрытые применения. Когда специалист появится — мы будем говорить с ним на языке технической необходимости. Но для этого, — он обвёл взглядом стол, — наша собственная база должна быть безупречной.
Морозов придвинул к себе лежащий на миллиметровке рабочий блокнот в плотном переплёте, взял карандаш и быстрыми, уверенными движениями набросал на чистой странице три аккуратные колонки, разделив их жирными линиями.
— Давайте подведём итог, — сказал Алексей, обводя команду взглядом. — Фиксируем задачи на ближайшие две недели.
Он указал карандашом на первую колонку:
— Первая колонка — Зеленоград. Липатов, Громов — до вечера мы должны полностью свести наш круг вопросов к зеленоградским коллегам по форматам данных. Нам нужны точные технические вопросы к их топологам и программистам.
Карандаш переместился ко второй колонке:
— Вторая колонка — Владимир. Это наша зона ответственности, пока мы в отъезде. Олег, Наташа, Люба — вы берёте тему цветного вывода. К нашему возвращению я жду от вас расчёты по токам, нагрузке на блок питания, физике сигнала и возможным путям сопряжения с цветным трактом.
Морозов провёл черту под третьей колонкой:
— И третья колонка — риски, которые мы обязаны контролировать постоянно. Сюда пишем аппаратную совместимость связи со свободными линиями шины, поиск стабильных аналогов для дисководов ИЗОТ и те ведомственные требования к закрытой ветке «82В», которые нам ещё только предстоит получить от их специалиста. Спецрежимом своих пугать не дадим, но запас прочности в общую архитектуру обязаны заложить сразу.
Он закрыл блокнот и отложил карандаш в сторону.
— Вопросы? — спросил Морозов.
— Паяльники греются, схемы чертятся, Лёша, — негромко сказал Олег, забирая со стола свой лист ведомости. — Не переживай, мы тут без вас лабораторию не сожжём. Наташа проследит.
— Прослежу, — подтвердила Наташа Рогова с мягкой, но серьёзной улыбкой. — И за приборами, и за токами.
— Вот и отлично, — Иван Михайлович закрыл свою папку с документами. — Тогда за работу, товарищи инженеры.
Люди начали расходиться от стола, собираясь в кружки и обсуждая текущие задачи. Лаборатория снова наполнилась гулом голосов, щелчками тумблеров и шорохом разворачиваемых схем.
Глава 4
Горелов и общая архитектура
В комнате спецчасти было слишком тепло.
Тепло было сухое, стоячее, бумажное; от него быстрее уставали глаза и начинали чесаться пальцы от желания открыть форточку. Но форточку здесь никто не открывал без спроса. На стене висел портрет, под ним — сейф с двумя замками, рядом — стол, покрытый коричневым дерматином. Дерматин был испещрен следами циркуля, царапинами от металлических уголков папок и круглыми пятнами от стаканов, которые ставили сюда люди, уверенные, что государственная бумага выдержит всё.
Морозов сидел напротив Виктора Николаевича Кирсанова, представителя Первого отдела Электронмаша.
Иван Михайлович устроился сбоку, ближе к двери. Он не вмешивался, но самим своим присутствием превращал разговор из
У окна стоял незнакомый Морозову человек лет тридцати пяти. Сухой, аккуратный, в сером костюме без единой лишней складки. Просто стоял так, чтобы видеть всех троих и одновременно не мешать.
— Знакомьтесь, это Андрей Витальевич Горелов, — сказал Кирсанов. — Смежная закрытая тема «Луча». Операторские формы, режимные рабочие места, диагностика отказов. Сейчас он входит в ваш проект с правом голоса по всему операторскому контуру, а формальное руководство закрытым направлением «82В» мы оформим чуть позже.
Горелов коротко кивнул.
— Он не надзиратель, — добавил Кирсанов, глядя уже на Морозова. — И не человек, который будет ходить по лаборатории с печатью и запрещать всё подряд. Если такое начнётся, сообщите мне. Это ваш коллега, профессионал. Но его вопросы вы будете слушать.
— Вопросы по делу я слушаю, — сказал Морозов.
— Вот и хорошо.
Кирсанов открыл тонкую папку. Внутри лежали три листа машинописного текста с пометками красным карандашом.
— Закрытой машине нужен операторский профиль, — сказал он. — Ведомственный контур покупает управляемое рабочее место, а не школьную вольность, кружок или надежду на то, что пользователь сам напишет программу. Горелов знает, как неудачно спроектированные рабочие места умирают в реальной эксплуатации.
Горелов впервые заговорил.
— Они умирают не от отсутствия вычислительной мощности. Чаще от мелочей. Неправильная клавиша рядом с правильной. Одинаковые поля на экране. Отсутствие аварийного признака. Невозможность понять, зависла машина или ждёт данные. Оператор после ночной смены ошибается не потому, что глуп, а потому что пульт и экран требуют от него лишней внимательности.
Он говорил ровно, почти сухо. Но за каждой фразой чувствовался чужой опыт.
— Поэтому, — продолжил Горелов, — если мы делаем закрытую модификацию, я предлагаю не тащить в неё всё гражданское наследство. Бейсик, свободная клавиатура и экран, на котором программа может нарисовать что угодно, только увеличат риск. Нужна жесткая форма. Фиксированные зоны. Свой загрузчик. Свои клавиши. Свой набор режимов. Чем меньше свободы, тем меньше отказов по вине человека.
Иван Михайлович шевельнулся, но промолчал.
Морозов посмотрел на Кирсанова. Тот не помогал и не мешал. Сидел неподвижно, давая спору состояться.
— Андрей Витальевич, — сказал он, — всё, что вы перечислили, абсолютно верно.
Горелов чуть поднял брови. Он явно ждал сопротивления с первой фразы.
— Оператор не должен страдать от нашей любви к универсальности. Экран должен помогать, а не требовать расшифровки. Аварийное состояние должно быть видно сразу. Нельзя строить закрытый контур так, будто за ним сидит студент-программист с кружкой чая.
Морозов выдержал паузу и добавил:
— Но я категорически против вашего метода решения.
— Почему? — спокойно спросил Горелов.
— Потому что вы предлагаете лечить человеческую ошибку архитектурным расколом.
В комнате стало тише. Даже гул батареи под окном будто отошел на второй план.
Морозов наклонился вперед.
— Если мы сделаем отдельную «82В» со своим загрузчиком, своими экранными формами, своими клавишами и своим набором базовых подпрограмм, мы получим удобный прибор. Возможно, даже очень удобный. Его легко показать заказчику. Легко описать в акте. Легко принять в одном ведомстве.
— Именно, — сказал Горелов.
— А потом придёт второй заказчик. У него будет другая форма, другой порядок ввода, другая ведомость, другой аварийный признак. Мы добавим вторую версию. Потом третью. Через два года у нас будет набор закрытых приборов, каждый из которых чуть-чуть отличается от другого. Программы не переносятся. Люди переучиваются. Ошибки исправляются отдельно. Любая доработка превращается в отдельную маленькую войну с железом.
Морозов провел пальцем по краю стола.
— Так мы размножим несовместимость вместо безопасности.
Горелов выслушал без раздражения. Потом взял с края стола чистый лист и быстро начертил прямоугольник.
— А это операторское место, — сказал он. — Вот зона статуса. Вот зона данных. Вот зона ввода. Если программа гражданской ветки имеет право писать куда угодно, она может затереть зону статуса. Или вывести ошибку тем же цветом, что и норму. Или оставить на экране старые данные после отказа канала. Вы предлагаете мне доверять дисциплине программиста. Я предлагаю не давать ему такой возможности физически.
— Вы предлагаете зашить форму в прибор.
— Да.
— А когда форма изменится?
— Перепроектируем.
Иван Михайлович тихо кашлянул.
— Перепроектируем, — повторил он с таким видом, будто слово само по себе требовало отдельного акта, трёх подписей и месячного лимита на детали.
Горелов посмотрел на него без обиды.
— Иногда перепроектирование дешевле ошибки оператора.
— Иногда, — согласился Морозов. — Но не всегда. И точно не как основной принцип.
Он взял лист Горелова и рядом нарисовал второй прямоугольник. Внутри — тонкую линию основания.
— Вот базовая «Сфера-82»: процессор, память, базовые процедуры ввода-вывода, клавиатура, общий порядок вывода на экран. Это фундамент. Выше — ваш спецрежим. Пусть он загружает свои жёсткие рамки. Пусть аппаратно проверяет, что программа не лезет в зону тревоги. Пусть ведёт журнал отклонений. Пусть при отказе канала принудительно выставляет аварийный экран. Но он живёт сверху. Он не меняет фундамент.
Горелов наклонился над листом.
— Программная защита.
— Программно-аппаратная. Опасаетесь зависаний? Сделаем отдельный аппаратный сторожевой таймер. Поставим счётчик, который сам выбросит сигнал аварии, если основная программа зависнет и перестанет его сбрасывать. Где нужна отдельная ПЗУ-накладка под ваши требования — будем проектировать. Но нижний слой остаётся совместимым.
— Вы слишком доверяете нижнему слою.
— Нет. Я ему не доверяю. Поэтому и хочу, чтобы его проверяло как можно больше людей и задач.
Горелов поднял глаза.
— А если открытая программа обойдёт ваши рамки? Если базовая подпрограмма останется прежней, а спецрежим только делает вид, что держит оператора за руку?
— Тогда это халтура, а не защита, — сказал Морозов. — И мы её не принимаем. Таблица разрешений должна стоять аппаратно там, где её нельзя обойти обычной программой. Часть уйдёт в отдельное ПЗУ, часть — в схему контроля. Но это всё равно надстройка, а не новый компьютер.
Горелов не согласился, но перестал смотреть на второй прямоугольник как на детский рисунок.
— Проверять массой людей и задач? — переспросил он. — Вы про тех самых радиолюбителей и школьников?
Вопрос прозвучал почти нейтрально. Горелов смотрел не на воображаемый класс с детьми, а на будущую уязвимую границу между открытым и закрытым.
— В том числе школьники, — сказал Морозов. — С закрытыми данными они работать не будут. Зато массовая гражданская среда находит ошибки, которые стерильный закрытый стенд не видит.
Кирсанов впервые за несколько минут пошевелился.
— Осторожнее с этим тезисом, товарищ Морозов.
— Я понимаю.
— Пока понимаете не до конца. Но направление верное. Гражданская обратная связь полезна, тут не поспоришь. Но открытый канал — готовая щель для утечки. Придётся строить фильтр.
Морозов кивнул.
— Письма, схемы и жалобы снаружи мы не понесём прямо к стенду, — сказал он. — Сначала Наталья Сергеевна убирает фамилии, адреса и всё, что тянет наружу лишнее. Иван Михайлович смотрит, что из этого вообще можно пустить в работу. На стол инженерам попадает сухая выжимка: что включали, что сгорело, что повторилось. А закрытые формы и обозначения в обратную сторону не ходят.
— Вот это уже похоже на разговор, — сказал Кирсанов.
Горелов постучал карандашом по своему прямоугольнику.
— Хорошо. Допустим, базовый слой остаётся, — произнес он. — Тогда я не хочу ловить ошибку добрым словом. Команда, опасная для закрытого режима, должна аппаратно упираться в таблицу разрешений. Экранная форма должна быть утверждённой, а не нарисованной программистом ночью. И если процессор намертво завис, оператор не должен смотреть на красивую застывшую картинку, думая, что всё в норме.
— Таблица разрешений — да, — согласился Морозов. — Но без создания новой системы команд. Экранные формы — с версиями и подписью. Зависание процессора — выводим на отдельный аппаратный контур контроля. Пока это требование к разработке; до готовой схемы ещё далеко.
— Журнал отклонений, — добавил Горелов.
— Обязательно.
— И право остановить демонстрацию, если экранная форма вводит оператора в заблуждение.
Морозов хотел автоматически возразить, но остановился. Это было неприятное право. И именно поэтому нужное.
— Да, — сказал он. — С обоснованием.
Горелов впервые едва заметно улыбнулся.
— С обоснованием я умею.
— Вижу.
Иван Михайлович перевел взгляд с одного на другого.
— Значит, если по-человечески: закрытая машина не отдельная машина. Это профиль поверх общей. Все предложения — письменно: что меняем, зачем и чем проверяем. Андрей Витальевич смотрит операторскую часть, Алексей держит совместимость, а Виктор Николаевич следит, чтобы открытое и закрытое не перепутали.
Кирсанов посмотрел на него поверх папки.
— Грубо.
— Зато понятно.
— Оставим как рабочую формулировку.
Напряжение в комнате чуть спало. Горелов аккуратно сложил лист пополам и убрал в тетрадь.
— Когда мне можно посмотреть работу видеогруппы? — спросил он.
— После того, как я объясню им, кто вы и зачем пришли, — ответил Морозов. — Не хочу, чтобы вы свалились им на голову как внезапный ревизор из ниоткуда.
— Разумно.
— И ещё. В лаборатории многие из старой команды говорят между собой на «ты». Не надо принимать это за отсутствие дисциплины.
— Не принимаю, — сказал Горелов. — Но со мной пока лучше на «вы».
— Пока — да.
Кирсанов закрыл папку.
— Тогда фиксируем, — подытожил он. — Базовую архитектуру без отдельного решения не трогаем. Предложения по «82В» оформляются письменно. Открытые материалы проходят через фильтр, закрытые формы наружу не уходят. Докладную майору Сергееву я подготовлю сам. Если ведомства начнут тянуть проект в разные стороны, приходите ко мне раньше, чем начнёте тянуть в ответ.
Он встал. Разговор был окончен.
В коридоре, после душной комнаты спецчасти, воздух показался холодным и живым. Морозов на секунду остановился у окна. За стеклом во дворе НИИ медленно разворачивался грузовик со списанными стойками. Дворник отбрасывал снег от крыльца ровными, терпеливыми движениями.
Горелов вышел следом.
— Вы правда считаете, что школьная архитектура может выдержать закрытый контур? — спросил он.
— Нет, — сказал Морозов. — Я считаю, что закрытый контур должен выдержать архитектуру, которую смогут понять и школьник, и инженер, и оператор после ночной смены. Иначе мы снова построим вещь, которая работает только в одной комнате и только пока рядом сидит её автор.
Горелов несколько секунд молчал.
— Это труднее.
— Да.
— Зато если получится, будет надёжнее.
Морозов посмотрел на него.
— Вот поэтому вы нам и нужны.
Горелов не ответил сразу. Потом кивнул — коротко, без благодарности, как человек, принявший участок работы.
Они пошли по коридору к лаборатории.
За дверью КБ уже вовсю спорили. Горячий баритон Олега перебивал ровный голос Наташи, Люба что-то вслух высчитывала, Громов язвительно требовал у кого-то не трогать его распечатки грязными руками. Этот привычный рабочий шум был сейчас почти уютным.
Морозов на мгновение задержал руку на прохладной латунной ручке. Затем решительно толкнул створку и шагнул в этот шум.
Глава 5
Цвет не для красоты
— Это самый доступный путь, Наташа. Мы уже один раз спасались тем, что не делали отдельный монитор с нуля. Если человек собрал машину дома, он первым делом потянет провод к телевизору.
Олег Тимофеев, взлохмаченный, с закатанными рукавами рубашки, бил обратной стороной карандаша в телевизионную схему.
На монтажном столе лежали макет «Сферы», черно-белая «Юность», несколько брошюр с телевизионными схемами и широкая миллиметровка, придавленная тяжелым трансформатором, чтобы не сворачивались края. Никакого цветного шасси у них пока не было; были только листы, карандаши и желание не упереться в тупик с первой же минуты.
— Мы просто берем видеосигнал, подмешиваем цветную составляющую и подаем его туда, куда бытовой телевизор уже умеет принимать картинку. Любой кружок получает понятный путь: собрал машину, подключил кабель к телевизору — и видит цвет. Никакого вмешательства в высокое напряжение. Никаких переделок и риска спалить половину квартиры.
Наташа Рогова стояла по другую сторону стола. Перед ней лежали графики сигналов, аккуратно вычерченные на кальке.
— И получает цветное пятно вместо текста, — ровным голосом ответила она. — С черно-белой «Сферой» мы уже прошли этот круг: модулятор хорош как аварийная лазейка, но рабочая картинка началась только там, где мы пошли прямо в видеоканал. В цвете все хуже. Полоса пропускания телевизионного тракта не пропустит твои фронты. Буквы сольются. Вертикальные линии станут цветной кашей. Для игр это, может, и сойдет, там резкость не так важна. Но для схем, чертежей и работы с текстом такой путь — слепота. Нам нужен чистый тракт. Иначе оператор через час работы ослепнет от твоей красоты.
Люба Ветрова, совершенно не участвуя в перепалке, аккуратно выписывала в блокнот отдельные строки: питание, земля, развязка, высокое напряжение. Когда Олег ударил карандашом по схеме в
Морозов пропустил Горелова в лабораторию, вошел следом и прикрыл дверь. Шум их спора он услышал еще в коридоре.
— Бытовой антенный вход как довод рассмотрим, но держаться за него не будем, — с порога произнес Морозов, подходя к столу и вставая рядом с Наташей. — Опыт базовой «Сферы-80» нам уже доказал: нормальный текст требует прямого видеоканала. Если инженер не сможет прочитать допуски на экране, грош цена всей затее с цветом. Но и готового цветного монитора у нас в шкафу не лежит, поэтому разберем каждый путь и посмотрим, где он ломается.
Олег обернулся и тут же ткнул карандашом в телевизионную схему.
— Алексей Николаевич, если мы полезем внутрь телевизора в обход радиоканала, мы превратим цветной вывод в сугубо заводскую задачу. Радиолюбитель дома с паяльником в цветной телевизор не полезет. Там умножитель. Там убить может.
— Значит, если полезем внутрь аппарата, паспорт доработки начнется не с картинки, а с развязки и запретов. Подробно, по шагам, чтобы не убило.
Морозов кивнул в сторону своего спутника. Тот молча разглядывал разложенные схемы и пока держался в стороне.
— Знакомьтесь. Андрей Витальевич Горелов. Его подключили к «Сфере-82В» по линии первого отдела. Не к процессору и не к МикроДОС — к рабочему месту оператора: что человек на смене видит на экране, когда машина считает, ждёт данные, показывает ошибку или уходит в аварию. Архитектура у нас одна, поэтому разговор о цвете он слушает с самого начала.
Горелов коротко кивнул. Олег смерил его быстрым взглядом, Наташа чуть поправила очки. Горелов подошел к столу, заложил руки за спину и посмотрел на разложенные схемы, макет и черно-белую «Юность».
— Значит, цвет? — спросил он, глядя на пучок проводов.
— Пытаемся, — хмыкнул Олег, крутя карандаш в пальцах. — Если Наташа не зарежет идею на корню ради идеальных фронтов импульса.
Морозов придвинул к себе свободный табурет и сел.
— Давайте отделим желания от работы, — сказал Морозов, обводя команду взглядом. — У нас есть базовая черно-белая машина. Она работает не как лист отдельных точек, а как текстовый экран: экранная область памяти, коды знаков, ПЗУ знакогенератора, счетчики адреса и прямой видеоканал на «Юность». Женя уже пишет в видеопамять напрямую, Люба с ним уже сдвигала начало строки счетчиками, Наташа с Олегом вытаскивали из свободного признака инверсию и псевдографику. Сейчас видеовывод «Сферы-82» по смыслу такой же. Это фундамент. Если ваш цвет сломает вывод старого текста или заставит переписывать МикроДОС и служебные программы, мы его выбросим без сожаления.
Олег оперся ладонями о край стола, нависая над миллиметровкой.
— Мы не сломаем. Но если делать цвет, то делать по-взрослому. Цвет на каждую точку. Хотим рисовать графики — рисуем. Хотим раскрашивать слои топологии или выделять узлы на схемах — раскрашиваем. Выделяем под это дело отдельный банк памяти, ставим контроллер и гоним на экран сплошной массив.
Наташа покачала головой и положила на миллиметровку свою кальку с временной диаграммой.
— Конфликт на шине данных, Олег. Если ты дашь каждой точке свой цвет, объем видеопамяти вырастет многократно. Видеоконтроллеру придется слишком часто занимать шину, чтобы успевать вычитывать данные для луча. Процессору просто не останется времени на работу. Ему придется ждать, пока луч пробежит строку. Машина будет красиво светиться, выводить графики, но перестанет считать. Ты превратишь вычислительную технику в дорогую гирлянду.
— Поставим быструю память. Разнесем такты. Будем читать в противофазе!
— Это задержки. Это другой тепловой режим. И это полная потеря совместимости со всем, что Женя Громов уже написал, — парировала Наташа. — Твоя противофаза потребует идеальных фронтов тактового генератора. Чуть поплывет температура — и процессор начнет спорить с видеоблоком за одну и ту же память.
Горелов оторвался от миллиметровки и поднял взгляд на Олега.
— А зачем вам вообще красить каждую точку? — спросил он. — Оператору не нужны картины и плавные переходы. Оператору нужно видеть, что станок встал, или что данные в таблице не сошлись.
— Потому что машина делается не только для оператора станка, — горячо возразил Олег. — На ней будут учиться в школах. На ней будут чертить схемы. Игры, в конце концов, писать будут!
Морозов поднял руку.
— Разделяем, — сказал Морозов. — «Сфера-80М», наша народная машина, остается черно-белой в базе. Для нее цвет — это только внешняя надстройка. Атрибутный режим. Код знака остается в прежней экранной области, а цвет знака и цвет фона задаются отдельным признаком в небольшом блоке. Процессор не задыхается, старые программы работают, как работали, ничего не зная про цвет. Они пишут привычный код символа и получают прежний белый знак или псевдографический блок; новая программа, если захочет цвета, задаст признак отдельно.
Олег нахмурился, быстро прикидывая в уме аппаратные затраты на такую схему.
— Атрибуты — это скучно. Раскраска по квадратикам.
— Это дешево, быстро и совместимо, — отрезала Наташа. — Текст читать можно, таблицы выделять можно, слои разносить — тоже. Что еще нужно для работы?
— Для «Сферы-82» базовый режим оставляем тем же по логике: быстрый текст через коды знаков и знакогенератор. Поверх него закладываем два цветовых пути. Первый — атрибутный, основной для текста, таблиц и инженерных расчетов. Второй — отдельный графический режим с ограниченным цветом: палитра жесткая, полный спектр для каждой точки нам не нужен и не по карману. Он включается только по запросу основной программы. Включил графику — пожертвовал скоростью вычислений или частью оперативной памяти. Выключил — вернулся к быстрому тексту.
— То есть одной платой мы две машины не накроем, — сказал Олег, уже не споря, а проверяя границу задачи.
— Одной целиком — нет, — ответил Морозов. — Общим может быть выходной конец: формирование раздельных сигналов цвета, синхронизация, согласование с ВКУ, развязка, питание и паспорт проверки. А вход в этот блок у машин разный. У «Сферы-80М» железо беднее: старая карта экрана, минимум свободных линий, никаких лишних циклов на шине. Там цветная приставка должна стоять сбоку от видеотракта и брать только то, что старая машина физически может отдать без переделки ядра.
Он передвинул карандаш к другой колонке.
— У «Сферы-82» можно делать нормальное сопряжение: отдельные регистры, порты управления, область атрибутов, ограниченный графический режим, диагностику. Там цвет не приделка к старой машине, а часть архитектуры. Поэтому общий блок — да. Одинаковая плата от разъема до экрана — нет. Иначе мы либо задушим восьмидесятую, либо специально
Олег медленно кивнул и поставил на полях жирный знак вопроса напротив слова «память».
— Хорошо. Архитектуру разделили. Как физически выводим?
Наташа подвинула к себе чистый лист бумаги и быстро набросала блок-схему.
— Сначала вычеркиваем красивую ошибку, — сказала она. — Цвет через бытовой радиоканал. Для домашнего телевизора он удобен, но для нашей задачи это частотная модуляция, поднесущие и фазовые сдвиги. На черно-белом варианте мы еще могли терпеть запасной модулятор ради совместимости. В цвете мы будем полгода делать кодер SECAM, а потом получим дрожащую радугу вместо текста.
— Значит, прямой тракт, — сказал Олег уже без прежнего задора. — Красный, зеленый, синий, синхронизация. Уровни ТТЛ. Физически правильно. Только куда мы эти провода воткнем? Специальных цветных дисплеев под нашу машину никто серией не выпускает. Делать свой монитор с нуля — это новая разработка на полгода, если не больше.
— Свой монитор мы сейчас не потянем, — сказал Морозов. — Значит, нужен донор. Готовое цветное шасси, куда можно завести наши раздельные сигналы, минуя радиоканал. Не готовое решение, а железо, которое еще надо достать и проверить.
— УПИМЦТ, — медленно произнес Олег. — Унифицированное модульное шасси. Тяжелое, капризное, зато ремонтники его знают.
— И у нас его нет, — тихо напомнила Люба.
— Поэтому сначала ищем списанный или ремонтный, — Морозов постучал пальцем по миллиметровке. — Только потом разбираем, куда можно безопасно подать сигнал, что отпаять, где поставить согласование и как написать паспорт переделки. До этого УПИМЦТ — только название в блокноте, а не решение.
Люба Ветрова впервые оторвалась от блокнота. Олег увидел, что она уже успела выписать отдельным столбцом питание, земля, развязка, АОТ101А.
— Подождите, — сказала она. — Мы уже один раз подавали сигнал прямо на видеоусилитель. Помните гостиницу в Александрове? Вспышку, выбитый свет и Олега, который потом держал оптрон как талисман?
Олег поморщился.
— Помню. Очень хорошо помню.
— Тогда не называйте это просто «завести сигнал на шасси», — продолжила Люба. — Для черно-белого варианта мы развязывали один видеосигнал. Здесь у вас минимум три цветовых линии и синхронизация. Каждая линия должна быть отделена от телевизионного шасси. Никакой общей земли между вычислительной машиной и телевизором. Никаких «потом поставим защитный резистор».
Наташа кивнула.
— Она абсолютно права. Токи утечки нас похоронят. Плюс наводки от строчного трансформатора. На черно-белом экране это давало рябь и мыло, а здесь цветовой тракт превратится в антенну для помех. Красный фронт придет чуть раньше синего, и мы получим не слой металлизации, а цветную тень.
Люба пододвинула к себе миллиметровку и взяла свой карандаш.
— Цвет — это ещё и потребление, — сказала она, вырисовывая контуры блока питания. — Ваш узел сопряжения потребует своих стабилизаторов. Если мы берем УПИМЦТ как донора, штатный блок питания телевизора мы не используем для логики. Ему и так тяжело. Нам нужен отдельный экранированный блок для цифровой части, развязка по всем сигнальным линиям и чистая земля внутри машины. Иначе этот ваш ВКУ не пройдет ни одну комиссию по безопасности. Я не подпишу ни одну схему, пока не увижу полную изоляцию.
Олег тяжело вздохнул.
— АОТ101А на один черно-белый канал мы еще продавили. На четыре быстрых линии они могут завалить фронты.
— Значит, проверяем, где они годятся, а где нужен другой входной каскад, — ответила Наташа непререкаемым тоном. — Но Люба права. Безопасность и стабильность первичны.
Горелов наклонился над краем миллиметровки.
— Допустим, вы решили проблему развязки, — сказал Горелов. — Допустим, у вас есть чистые, хорошо различимые цвета. Без ряби и наводок. Для гражданской машины, для школы или института этого хватит. А теперь посмотрите на это со стороны оператора, который сидит за «Сферой-82В» в закрытом контуре.
Он взял красный карандаш и нарисовал на пустом краю миллиметровки ровный квадрат, имитирующий экран.
— Третий час ночи. Человек на смене. Машина считает задачу, контролирует периферию. На экране — зеленая таблица состояний. Цифры меняются. Все штатно. И вдруг центральный процессор зависает. Пробой статики, сбой по питанию, ошибка программы — неважно. Машина встала.
Горелов обвел нарисованный квадрат красным грифелем.
— Что происходит на вашем экране при аппаратном зависании?
Олег пожал плечами, не видя подвоха.
— Ничего не происходит. Видеоконтроллер продолжает циклично читать последний кадр из памяти и выводить его на монитор. Картинка просто застынет.
— Именно, — жестко сказал Горелов. — Картинка застынет. Она останется зеленой и правильной. Оператор будет смотреть на нее десять минут, двадцать минут, думая, что процесс идет нормально, потому что индикация не изменилась, а цвет сообщает о норме. Это ложная норма. Худшее, что может случиться на объекте. Цвет, который врет.
Наташа нахмурилась и снова посмотрела на свои графики. Олег задумчиво почесал затылок.
Морозов не перебил. Вот зачем Горелова надо было привести к общему столу, а не сажать в отдельную секретную комнату: рядом с красивой физикой сигнала появилась проверка на уставшего человека перед экраном.
Олег медленно выпрямился.
— Значит, видеоблок не должен верить самой картинке, — сказал он. — Ему нужен отдельный признак, что процессор ещё работает. Не строка на экране, не цвет поля, а живой импульс. Машина его даёт — показываем норму. Перестала давать — картинка сама обязана испортиться.
— Именно, — подтвердил Горелов. — Если процессор не выдает сигнал подтверждения своей работы больше заданного времени, цвет не имеет права оставаться нормальным. Видеоблок должен аппаратно, без участия зависшей основной программы, вывести заведомую аварию: инверсию, красный фон, мерцание, что угодно, лишь бы оператор боковым зрением понял, что машина мертва. Цвет обязан сообщать состояние, а не украшать экран.
Морозов кивнул и повернул лист так, чтобы его видели Наташа, Олег и Люба.
— Вот это фиксируем для всех, — сказал он. — Не как прихоть закрытой машины, а как требование к общему видеоблоку. Цвет обязан показывать отказ железом, даже если программа уже молчит. Иначе мы сами сделаем экран, который будет врать оператору.
Он постучал карандашом по краю листа.
— На МикроДОС это не сваливаем. Ушла программа в бесконечный цикл — экран останется как был, пока человек не нажмёт сброс. Значит, признак живой машины должен идти отдельно от самой картинки.
Олег потер подбородок, глядя на схему новыми глазами. Задача перестала быть просто возней с телевизором.
— Понял, — пробормотал Олег, быстро чертя на полях. — Значит, на плате надо оставить место под отдельный контроль отказа. Решение потом посчитаем,
— Сделаете? — коротко спросил Горелов.
— Сделаем, — ответила Наташа раньше Олега, принимая вызов. — Но сначала разложим по сигналам. Люба, отдельный контроль по питанию потянем?
Люба прикинула что-то в уме, глядя на свои записи.
— Потянем. Если Олег не будет экономить на конденсаторах по питанию и нормально разведет землю.
Морозов встал с табурета. Картина сложилась окончательно. Из разрозненных желаний, споров и страхов вырисовался понятный, тяжелый, но проходимый инженерный маршрут.
— Подводим итог, — сказал он, указывая на исчерканную миллиметровку. — Старый черно-белый вывод неприкосновенен, это наш базис. «Сфера-80М» получает цветную атрибутную приставку, которая не ломает старые программы и не требует от старого железа невозможного. «Сфера-82» получает встроенные атрибуты и ограниченный графический режим через другое аппаратное сопряжение. Физика сигнала после этого общая: жесткий цифровой тракт, развязка и доработанное шасси УПИМЦТ в обход радиоканала. А входные платы и логика управления — разные.
Он посмотрел на команду, раздавая зоны ответственности.
— Олег, на тебе физическое сопряжение. Чтобы сигнал формировался без конфликта на шине данных и не тормозил вычисления.
— Принято, — кивнул Тимофеев, уже что-то прикидывая на бумаге.
— Наташа. Циклограмма, уровни сигналов, допуски. Ты — внутренний контроль. Если Олег соберет макет, который работает только по вторникам и только у него на столе, пока никто не дышит — ты останавливаешь работу. Мне нужна серийная повторяемость.
Наташа коротко кивнула, поправляя линейку на столе.
— Люба. Вся развязка, земли, трансформаторы и защита, — продолжил Морозов. — Чтобы ни один оператор не получил фазу на клавиатуру и ни один сбой в блоке питания телевизора не спалил нам процессор. Ты здесь главная по выживанию железа.
Люба молча сделала жирную пометку в блокноте, подчеркнув слово «развязка» дважды.
— Андрей Витальевич, — Морозов повернулся к Горелову. — На вас — операторские профили. Ложная норма, аварийные экраны, читаемость при долгих сменах. Формируйте жесткие требования к схеме контроля зависания. Ищите, где оператор может ошибиться.
Горелов чуть заметно улыбнулся и записал в тетрадь: «ложная норма — проверка».
— Сделаю.
Олег сложил руки на груди, хмуро глядя на свои черновые наброски, которые теперь предстояло перевести в строгие схемы дешифрации.
— Алексей Николаевич, чтобы я начал рисовать дешифрацию адресов и собирать макет, мне нужны точные границы, — сказал он. — Сколько байтов мы выделяем под эту графику? Какие адреса портов отдаем под атрибуты? Как это все ляжет на карту памяти, чтобы не придавить служебные области? Я не могу разводить плату по вдохновению, мне нужны проверяемые рамки.
— Это к Жене, — ответил Морозов. — Вы готовите аппаратные ограничения, а я передам. Он считает математику режимов: что потянет старая машина, сколько байтов мы можем откусить от памяти без вреда для МикроДОС и прикладных программ, и как именно программы будут обращаться к вашим цветам.
Олег вздохнул и потянулся за чистым листом бумаги, отодвигая телевизионную схему в сторону. На новом листе он написал три строки: «80М — приставка», «82 — два режима», «УПИМЦТ — через согласование».
Морозов сделал шаг назад, отходя от стола и оставляя видеогруппу в их естественной среде. Горелов уже тихо спорил с Наташей о том, как сделать аварийный маркер заметным и при этом не превратить экран в бессмысленную мигалку, а Люба методично диктовала Олегу требования по сечению провода для земляной шины. Олег слушал, морщился и всё равно записывал.
Глава 6
Программный участок
Карандаш со скрипом перечеркнул три строчки мнемоник на широком листе, густо покрытом пометками и цифрами. Громов отложил его, посмотрел на новый вариант и поставил рядом короткую галочку. В лаборатории конструкторского бюро стоял густой, настоявшийся запах нагретого текстолита, припоя и пыли, оседающей на решетках вентиляторов. Он разбирал цикл считывания статуса порта: не ради красоты, а чтобы проверочная программа не отнимала лишние такты у обмена.
Бледный свет от экрана «Сферы-82» выхватывал из полумрака заваленный осциллограммами стол.
Сбоку легла помятая ведомость.
— Евгений Николаевич, подпишите. Логика, резисторы, пара конденсаторов для фильтров по питанию.
Громов не глядя чиркнул ручкой по бумаге, ожидая, что Птицын заберет лист и уйдет. Но тот остался стоять над душой. Он переминался с ноги на ногу, теребил край ведомости и неотрывно смотрел на экран, где ровными столбцами мерцали шестнадцатеричные адреса памяти.
— Уже поздно, Саша, — Громов отложил карандаш. — Иди домой. Завтра с утра мы с Алексеем Николаевичем и Липатовым уезжаем в Зеленоград, а вам здесь еще держать хозяйство.
— Я листинги смотрел, — глухо сказал Птицын, не двигаясь с места. — Те, что вы на столе оставляли. Подпрограммы обмена для МикроДОС.
Громов медленно повернулся в кресле. Птицын был отличным монтажником. Он собирал макеты с закрытыми глазами, чувствовал железо кончиками пальцев, умел аккуратно резать дорожки и кидать перемычки из тонкого провода, не устраивая коротких замыканий. Но программная часть всегда оставалась для него черным ящиком, территорией математиков и инженеров-системотехников.
— И много понял?
— Достаточно, чтобы не путать регистр с перемычкой, — Птицын упрямо поднял подбородок. — Я осенью при ВЦ пропадал по вечерам, пока вы архитектуру доводили до ума. Не за ЕС-1035 садился, конечно, кто бы меня пустил. Операторам помогал: перфоратор подкрутить, ленту склеить, распечатки с АЦПУ разнести. Заодно у ребят брал почитать, как машинные команды вообще устроены. У них там, понятно, другая машина и другой ассемблер, но сама дисциплина похожая: адрес, команда, операнд, переход. А потом я уже ваше описание К580 читал. Олимпиада меня добила: школьники на бумаге такие алгоритмы присылали, что стыдно рядом с настоящей машиной только провода паять. В ваших листингах я уже немного разбираюсь.
Громов сцепил пальцы в замок. В лаборатории повисла пауза, прерываемая только мерным гудением трансформаторов в дальнем углу. Техник, который по собственной инициативе читает служебные подпрограммы, — это либо будущая катастрофа, способная повесить машину одним неверным переходом, либо редкий шанс снять с Громова кусок рутины.
— Значит, изучал, — Громов придвинул к себе чистый лист миллиметровки. — Отлично. Тогда у нас инициатива наказуема. Садись, дам тебе задачку.
Птицын мгновенно опустился на скрипучий табурет, пододвигаясь вплотную к столу.
— Смотри сюда, — Громов нарисовал три круга, соединив их жирной линией. — Это наш первый тестовый стенд локального обмена. Три машины «Сфера-82». Они соединены коаксиальным кабелем, на концах стоят оптроны для гальванической развязки, чтобы мы не сожгли
— Понятно. Скорость пятьдесят шесть килобит в секунду. Я видел результаты на экране, когда вы гоняли тесты перед праздниками.
— Верно. Значит, общая задача такая: к моему возвращению этот стенд должен говорить не просто «работает» или «не работает», а где именно сорвалась передача. Узел молчит, маркер потерялся, сумма не сошлась, блок дошел нормально — всё это должно быть видно на экране без гадания по листингам. Сейчас я это вижу только потому, что сам помню, куда смотреть. Это неправильно.
Птицын кивнул. Его глаза блестели в свете экрана. Он ловил каждое слово, боясь перебить.
— Что мне делать?
— Мне нужна проверочная программа обмена, — Громов постучал пальцем по нарисованным кругам. — Сама передача работает, но отслеживать пакеты глазами через отладчик — плохая работа. На той дискете, что лежит возле машины, моя рабочая копия. МикроДОС у нас — не отдельная вселенная, а CP/M с нашими добавками. В расширенном режиме она знает русские буквы, но штатная разработка под восьмидесятый процессор живет в старом английском режиме. Поэтому включаешь МикроДОС как обычную CP/M, работаешь латиницей: ED, ASM, LOAD. Никаких русских имен файлов, никаких украшений. «LAN.ASM» не трогаешь: там сам порядок обмена и маркер, можешь читать, но редактировать нельзя. Тебе нужен «LSTAT.ASM». Это маленькая служебная программа на ассемблере. Она уже выводит номер узла и счетчик блоков, но делает это криво и почти ничего не пишет в журнал. Твоя часть — дописать строку состояния: номер узла-отправителя, номер принятого блока, контрольную сумму и простой код возврата. Успех, ожидание, ошибка суммы.
Он перевернул карандаш тупым концом к схеме.
— Евгений Николаевич, — Птицын осторожно поднял руку, будто отвечал на занятии. — Я в маркер и прерывания не полезу. Я пока не самоубийца.
— Вот за это уважаю, — сказал Громов. — Маркер ходит по кругу, узел ловит его, цепляет свой блок данных, отправляет дальше. Это уже работает, и ломать это тебе рано. Тебе нужен хвост, который смотрит на готовый результат и по-человечески пишет его на экран. Комментарии к исходному коду смотри по моей рабочей тетради, вон там в углу валяется. Почерк у меня, как у врача после ночного дежурства. Если не разберешь сокращения, попроси Любу: она после всех таблиц по видеопамяти уже читает мои каракули лучше меня.
— Контрольную сумму простым сложением байтов делать?
— Исключающим ИЛИ, — отрезал Громов. — Для лабораторного стенда хватит.
Он уже хотел вернуть карандаш к схеме кольца, но задержал руку над бумагой. В задаче со связью Птицыну доставался самый безопасный край работы: взять готовый результат и вывести его так, чтобы живой человек не гадал по внутренностям программы. Для первого шага этого было достаточно. Но такой же край торчал и из другой темы, куда Громов до сих пор никого не подпускал.
— И запомни принцип, — сказал Громов. — Программа в такой работе нужна не для красоты. Она должна быстро показать, что железо делает на самом деле. Сегодня это узел связи: пришел блок, не пришел, сошлась сумма, сорвался маркер. Завтра Олег соберет макет цветного вывода, и там понадобится такая же проверочная штука. Чтобы не спорить над экраном на глазок: этот бит отвечает за фон, этот за знак, этот пока запасной. Дал байт — получил ожидаемую картинку. Не получил — ищешь ошибку в плате, адресе порта или в программе.
Птицын поднял глаза от листа.
— Мне и цвет трогать?
— Пока нет, — Громов подчеркнул слово «пока» короткой чертой. — Сначала сеть. Но таблицу режимов можешь начать готовить уже сейчас. Когда вернусь, из нее получится маленькая пробная программа: вывести полосы, шахматку, все сочетания цвета знака и фона, прогнать несколько адресов подряд. Это не сложнее по мысли, чем твой «LSTAT»: не лезешь внутрь видеогенератора, а даешь ему понятные числа и смотришь, что вышло наружу.
Соседний стол жалобно скрипнул. Из-за стойки с измерительными приборами вынырнул Олег Тимофеев. Его клетчатая рубашка была расстегнута на верхнюю пуговицу, волосы растрепаны на затылке. В руке он держал лист, оставшийся после общего разбора цвета: «80М — приставка», «82 — два режима», «УПИМЦТ — через согласование».
— Раз уж ты сам сказал про цвет, — произнес Олег, подходя к их столу, — я это оформлю как производственную необходимость. Локальный обмен — поэзия, Женя, но мне тоже нужно закрыть свое. Мне нужны числа, чтобы этот лист превратился в схему, а не в благие пожелания.
Громов отодвинул лист со схемой сети и достал новый.
— Хорошо, будут тебе числа, — сказал он. — Саша, ты тоже записывай. Базовый текстовый экран: тридцать два знакоместа в строке, двадцать четыре строки. В экранной области лежат коды знаков, матрица восемь на восемь сидит в ПЗУ знакогенератора. Значит, текущий текстовый экран — семьсот шестьдесят восемь байтов кодов.
Птицын быстро записал: 32 × 24 = 768.
— Дальше атрибуты, — продолжил Громов. — Один байт на знакоместо: три бита на цвет знака, три на фон, два в запас. Еще семьсот шестьдесят восемь байтов нижняя граница. Если дать запас под удобную адресацию и служебные признаки, закладывайте около полутора килобайт. Для «Сферы-80М» это отдельная приставка или боковая плата через порт, чтобы старые программы под МикроДОС писали символы как раньше и не знали, что рядом появился цвет.
— А полная сетка точек? — спросил Птицын.
— Только как верхняя оценка для «Сферы-82», не как обязательный режим, — ответил Громов. — Двести пятьдесят шесть на сто девяносто две точки дают сорок девять тысяч сто пятьдесят две позиции. Один бит на точку — шесть тысяч сто сорок четыре байта. Три бита на точку для восьми цветов — восемнадцать килобайт при плотной упаковке. Если класть точку в байт для удобства, почти сорок восемь килобайт. В таблице прямо напиши: для старой машины это только справочная верхняя оценка.
Люба Ветрова вошла в лабораторию, бесшумно ступая в мягких рабочих тапочках. В одной руке она держала кружку с давно остывшим чаем, а в другой — аккуратно смотанный провод.
— И отдельной колонкой — корпуса микросхем,
— Поэтому выходной конец может быть общим, а вход разный, — Громов повернул лист к ней и Олегу. — Три цветовые линии, синхронизация, развязка, согласование с переделанным телевизионным шасси — это одна физика. Для «Сферы-80М» — дополнительная приставка с собственным узлом согласования. Для «Сферы-82» нормальное сопряжение с шиной, атрибуты в штатной логике и отдельная строка в таблице под ограниченную графику. Сначала текст, атрибуты и проверяемые границы.
Олег положил линейку поперек листа, обозначая край будущей схемы.
— Мне еще надо понимать, как твоя пробная программа будет к этому обращаться. Если ты завтра скажешь «порт такой-то», я разведу дешифратор под него. Послезавтра ты передумаешь — и я буду резать дорожки ножом. Значит, в таблице нужны не только байты памяти, но и способ обращения: где порт атрибута, где порт выбора режима, где запретные линии, которые заняты связью. И отдельно пометь, что можно менять перемычкой на макете, а что потом должно уйти в печатную плату.
Птицын быстро перенес это на свой лист и впервые вмешался без робости:
— Тогда для проверки цвета программа должна идти не от красивой картинки, а от битов. Сначала пишем ноль — смотрим обычный экран. Потом один бит фона, один бит знака, все восемь вариантов. Потом шахматка, чтобы видно было перепутанные линии.
Громов посмотрел на него уже внимательнее.
— Правильно мыслишь. Еще добавь поле с одинаковыми буквами: скажем, вся строка из «А», потом из «Ж», потом цифры. Знакогенератор отдельно, атрибуты отдельно. Если поплывет форма буквы — виноват не цвет. Если буква нормальная, а фон не тот — смотришь атрибут или дешифрацию. Если на разных знакоместах цвет меняется через одно — ищешь адресную линию. Вот это и есть программно-аппаратное сопряжение, Саша: программа задает железу такие вопросы, на которые железо не может ответить туманно.
Люба поставила кружку на край стола, но листа не коснулась: у нее была привычка не двигать чужие расчеты без спроса.
— И подписи на разъемах, — тихо добавила она. — Не «тот провод, который Олег помнит», а нормальные обозначения. Иначе через месяц придет лаборант менять плату, увидит три одинаковых жгута и выберет самый красивый. Потом вы будете доказывать, что программа виновата.
— Ветрова, ты сейчас оскорбила всю культуру красивых жгутов, — сказал Громов.
— Нет, Женя. Я ее спасаю от тебя.
Олег коротко фыркнул, но спорить не стал. Птицын улыбнулся краем рта и аккуратно дописал рядом с таблицей: «разъемы подписать».
— А если Олег адрес порта потом поменяет? — спросил он. — Я же тогда всю пробную программу переписывать буду?
— Если переписывать всю — значит, плохо написал, — сказал Громов. — В начале текста заведешь отдельный кусок с условными обозначениями. Адрес порта атрибутов, порт выбора режима, маска фона, маска знака. В ассемблере для этого есть нормальные псевдокоманды, не надо размазывать числа по всему листингу. Олег переставил дешифрацию на другой адрес — ты меняешь одну строку и снова транслируешь. Вот так программа и железо договариваются между собой на время макета.
Он постучал карандашом по пустому месту под будущей таблицей.
— И не делай красивых русских надписей. Для проверки хватит латиницы, цифр и нескольких устойчивых знаков. Тебе нужно поймать перепутанный бит, неверный порт или ошибку адресации, а не писать выставочную заставку для журнала. Пробная программа должна быть скучной до неприличия: выводит одно поле, ждет нажатия, выводит следующее. Зато если на пятом поле фон стал не тем, все сразу видят, где искать.
Олег положил перед Птицыным свой лист с тремя строками.
— Вот это и нужно привести в порядок. Режимы, адреса портов, распределение битов атрибута, нижняя оценка памяти и запас. Это внутренняя владимирская работа: за две недели нам нельзя привязать железо к неверному числу. Я буду разводить дешифрацию не по вдохновению, Женя. Мне нужны проверяемые аппаратные режимы на бумаге.
— Будут тебе режимы.
Громов взял два чистых листа бумаги. На одном он крупно, печатными буквами написал: «Стенд локального обмена. Блок статистики. Журнал». На втором: «Видеорежимы. Адресация атрибутов. Нижняя граница».
Он сдвинул оба листа на край стола, прямо перед Птицыным.
— Бумаги перед тобой, Саша, — сказал он. — Сегодня вникаешь в постановку, а завтра, пока мы будем трястись в электричке и устраиваться в Зеленограде, садишься за работу. Дописываешь хвост для стенда локального обмена и гоняешь тесты под запись. Это первое. И второе — сводишь всю эту арифметику по цветам, битам и портам в одну нормальную таблицу. Чтобы Олег мог сверяться с ней при разводке, Люба — при компоновке, а я после возвращения не тратил время на расшифровку, когда сяду писать пробную программу.
Птицын моргнул, переводя недоверчивый взгляд с Громова на листы.
— Я? Таблицу видеорежимов?
— Ты хотел программировать? — Громов поднялся из кресла и потянулся за портфелем. — Добро пожаловать на программный участок. Сделаешь криво — Олег заметит первым, а я узнаю уже в Зеленограде.
Люба хмыкнула.
— Я ему помогу, — бросила она, направляясь к своему рабочему месту. — По крайней мере, прослежу, чтобы он не перепутал выводы на колодке, пока будет опрашивать порты.
Олег удовлетворенно кивнул, спрятал линейку в нагрудный карман рубашки и пошел к своему столу отбирать чертежи для морозовской папки.
Громов вытащил из-под стола тяжелый кожаный портфель. Щелкнули металлические замки. Внутрь отправились папки со спецификациями, командировочные бумаги, черновики предложений для МИЭТа и толстый блокнот с расчетами обмена по шине. Вес картона и бумаги приятно оттягивал руку, придавая грядущей поездке материальную весомость.
Он застегнул куртку, накинул шарф и обернулся у дверей лаборатории. Птицын даже не смотрел в его сторону. Техник уже придвинул к себе клавиатуру, положив листы с задачами поверх старых ведомостей. Он методично, с громким пластиковым стуком, вбивал первые команды ассемблера, чтобы пропустить их через транслятор.
Глава 7
У монтажного стола
Галетный переключатель массивного измерительного стенда сухо щелкнул, фиксируя выбранный диапазон напряжения. В глубине просторной лаборатории монотонно, на одной низкой ноте, гудел прогревающийся осциллограф; от приборной стойки тянуло едва уловимым запахом нагретой пыли и горячего металла.
Олег сдвинул
— Бумажный этап мы прошли, — Олег открыл плоскую пластмассовую кассетницу и выложил на миллиметровку несколько черных корпусов микросхем. — Теперь эту математику нужно заставить работать в текстолите. Будем перекладывать логику в физику.
Он взял остро отточенный твердый карандаш и уверенно провел первую жирную линию на бледно-оранжевой сетке чертежа.
— Начинаем отсюда. Забираем шину адреса напрямую от центрального процессора. Сразу пускаем ее через входной дешифратор, чтобы отсечь чужие обращения и не мусорить в канале. Дальше ставим регистр атрибутов — он будет аппаратно защелкивать данные о цвете для каждого конкретного знакоместа. Следом промежуточные буферные элементы и выходной каскад на цветное ВКУ.
Олег начал расставлять черные прямоугольники микросхем прямо на нарисованной линии, выстраивая наглядную физическую цепочку прохождения сигнала. Схема формировалась на глазах.
— Основную обвязку собираем на обычной сто пятьдесят пятой серии, она дубовая, проверенная временем и прощает мелкие огрехи макетирования, — продолжал он, постукивая тупым концом карандаша по одному из корпусов. — А вот счетчики и скоростные регистры возьмем из пятьсот пятьдесят пятой. Во-первых, прилично сэкономим по току потребления, во-вторых, она ощутимо меньше греется при той же тактовой частоте. Нам лишняя печка в закрытом блоке совершенно ни к чему.
Саша Птицын навис над столом с противоположной стороны. Он то и дело переводил сосредоточенный взгляд со своей таблицы на растущую цепочку деталей, пытаясь сопоставить абстрактные программные адреса со схемой.
— Олег, Евгений Николаевич мне уже дал общую схему проверки, — сказал он, машинально почесывая переносицу. — Бегущая единица, бегущий ноль, коды ошибок. Но я пока не понимаю, какие места в вашем железе этим ловить. Просто гонять маску по портам — мало.
— Вот это уже правильный вопрос, — Олег провел еще одну линию, соединяя воображаемые выходы регистра с буфером. — Тебе нужно привязать громовскую проверку к нашим физическим узлам. Записал маску в порт — дальше проверяешь цепочку: дешифратор сработал, регистр цвета защелкнулся, буфер выдал уровень, контрольный вывод показал тот же разряд.
Птицын задумчиво кивнул, мысленно перебирая ассемблерные команды и сдвиги в регистрах аккумулятора.
— То есть, в распечатке у меня должны быть номер порта, маска и ожидаемый разряд на контрольной точке?
— Именно. Если при тестировании цвет фона аппаратно пробьет на цвет символа или красный канал сольется с синим, я должен по твоей распечатке или по реакции светодиодов на триггерах точно понять, у какой именно микросхемы залипла ножка. Или где две соседние медные дорожки слиплись крошечной каплей припоя. Пусть программа помогает локализовать неисправность до конкретного вывода, вместо общей жалобы на цветовую кашу.
Наташа Рогова, до этого молча наблюдавшая за процессом от стеллажа с приборами, решительно шагнула к столу. Она перехватила у Олега карандаш, склонилась над миллиметровкой и уверенно перечеркнула длинную линию, уходящую от выходного каскада к правому краю листа. Взамен она нарисовала короткий отрезок и поставила жирный, размашистый крестик.
— Залипшие выводы и сопли припоя мы с помощью Саши найдем, это грубые ошибки монтажа, — голос Наташи звучал сухо и предельно по-деловому. Она быстро добавила еще несколько крестиков вокруг дешифраторов и скоростных регистров. — Меня сейчас гораздо больше волнуют задержки распространения сигнала.
Она выпрямилась и посмотрела на Олега, ожидая возражений, но тот лишь внимательно изучал ее пометки на эскизе.
— Как только мы повесим на шину дополнительные буферы, поплывут фронты импульсов, — продолжила Наташа, указывая острием карандаша на свои отметки. — Сигнал перестанет быть идеальным прямоугольником и превратится в пологую трапецию. Чем длиннее печатная дорожка, тем больше ее паразитная емкость. Вот здесь, на входе строчных синхроимпульсов, здесь, на выходе регистра цвета, и обязательно перед выходным видеоусилителем — выводим на плате измерительные контрольные точки. Нормальные, физические металлические выводы. Чтобы зажим осциллографа цеплялся намертво и не соскальзывал при случайном касании.
Она обвела нарисованные штырьки плотными кружочками, жестко фиксируя требование в схеме.
— В программе цвет выглядит как бит в регистре, Саша. В аналоговом тракте это конкретное напряжение и точное время его подачи на пушку кинескопа. Чуть завалим фронт — получим мыло вместо четкой границы буквы. Чуть промахнемся с задержкой — цветная подложка съедет относительно светящегося контура символа на пару миллиметров вправо. Поэтому все уровни и временные сдвиги будем жестко контролировать и заносить в журнал измерений на каждом этапе сборки макета.
Люба Ветрова задумчиво потерла подбородок. Она смотрела на исчерканный бумажный эскиз взглядом конструктора. Для нее эти абстрактные символы, прямоугольники и пересекающиеся линии уже превращались в плоскость стеклотекстолита, густо прошитую медными капиллярами дорожек и блестящими точками переходных отверстий.
— Знаете, что я вам скажу, товарищи разработчики, — Люба скрестила руки на груди. — Вы сейчас на макетной плате накидаете перемычек из тонкого монтажного провода, оно у вас, конечно, заведется. Вы обрадуетесь. А мне потом эту объемную паутину нужно будет уложить в плоскую двухстороннюю печатную плату без перекрестных паразитных связей.
Она вытащила из кармана рабочего халата красный фломастер, сняла колпачок и широким жестом очертила контур вокруг набросанного Олегом и Наташей видеоузла.
— Давайте сразу закладывать нормальную топологию. Куда у нас пойдет высокочастотный аналоговый сигнал с выходного каскада? На заднюю панель базового шасси?
Олег утвердительно кивнул.
— Да, через жгут на разъемы к внешнему цветному монитору.
— Отлично, — Люба нарисовала несколько плотных заштрихованных прямоугольников на самом краю контура. — Значит, сразу закладываем механические аппаратные ключи на разъемах и четкую маркировку краской на плате. Разные типы разъемов под разные группы сигналов. Чтобы слесарь или настройщик при замене блока в тесной стойке физически не смог воткнуть кабель синхронизации в контакт красного цвета. Если направляющий ключ слабый, его обязательно попробуют продавить силой.
Она провела жирную красную линию по периметру воображаемой платы и между основными логическими блоками.
— Дальше. Узел обязан быть технологичным и ремонтопригодным изначально. Если к контрольным выводам Наташи нельзя будет подобраться щупом без снятия соседней интерфейсной платы, нормоконтроль и заводские технологи завернут нам паспорт изделия еще на этапе проверки эскизного проекта. Свободное пространство
— Одной медью вы тут не спасетесь, — сказал Петр Иванович от соседнего кульмана.
Ветеран-схемотехник из бывшего второго КБ уже несколько минут слушал их разговор, делая пометки на своем листе. Рядом стоял еще один специалист-аналоговик с раскрытой тетрадью по кабельным трассам. Петр Иванович снял очки, протер их носовым платком и подошел к монтажному столу.
— На бумаге логика у вас правильная, — старый инженер ткнул узловатым пальцем в расчерченную миллиметровку. — А за разъемом она становится током в кабеле. Там уже работают емкость, сопротивление, наводки и земля, без всякого уважения к аккуратным алгоритмам.
Олег молча отодвинулся, уступая место у чертежа. С цифровой логикой он мог спорить до хрипоты, но в вопросах высокочастотных аналоговых цепей авторитет стариков из КБ-2 был непререкаем.
— В чем конкретно мы ошибаемся, Петр Иванович? — прямо спросил Олег, приготовившись записывать.
— Во всем, что касается выхода наружу, — ветеран провел потемневшим ногтем по красной линии Любы. — Во-первых, кабельная трасса. Не вздумайте тянуть цветовые сигналы длинным пучком рядом со строчной разверткой и мощными силовыми цепями. Там такие наводки гуляют, что ваша единица мгновенно превратится в забор из импульсных помех. Экран должен быть глухим, оплетка плотной.
Второй аналоговик придвинул к ним свой лист с наброском кабельной трассы.
— Во-вторых, согласование линии, — продолжил Петр Иванович. — Кабель имеет собственную емкость и волновое сопротивление. Стандартный выход вашей логической микросхемы его просто не прокачает. Сигнал отразится от конца линии, вернется обратно, и вы получите дико звенящие фронты плюс многоконтурные повторы изображения на экране. Тени за буквами. Ставьте прямо у разъема специальные буферные каскады. Выход должен жестко держать нагрузку в семьдесят пять ом, чтобы не выжигать цифровую логику.
Наташа быстро сделала пометку в блокноте, признавая абсолютную правоту замечания.
— Третье. Земля, — Петр Иванович посмотрел на Любу из-под кустистых бровей. — Вижу, вы уже разделяете цифровую и аналоговую часть. Это правильно. Только точку схождения надо выбрать заранее, иначе получите классические земляные петли. Цифровая часть шумит, регистры и счетчики при переключении дают короткие броски по питанию. Если грязь от процессора полезет в чувствительный видеотракт, на экране пойдет мелкая косая рябь, которую ни один фильтр не вытянет. Привязывайте обе земли в одной понятной точке, прямо у силового разъема питания. Звездой.
— Я как раз хотела увести полигон двумя контурами, — серьезно ответила Люба. — Значит, схождение ставлю у силового разъема и помечаю его отдельно, чтобы потом никто не кинул перемычку где попало.
— И не экономьте на блокировке питания, — добавил напарник Петра Ивановича. — Поставьте развязывающие керамические конденсаторы у корпусов каждой микросхемы. Каждой, а не через одну. Иначе по шине питания пойдет просадка в момент одновременного переключения многоразрядных регистров.
Петр Иванович снова перевел взгляд на эскиз контрольных точек.
— Выводы Наташи — правильное решение. Но поставьте их так, чтобы можно было измерять сигнал до входа в кабель и сразу после него, на приемной стороне. Кабель искажает форму. И еще одно. Оставьте на опытном макете посадочные места под подборные резисторы в выходных цепях. Нам придется по осциллографу довести уровни цветовых каналов до нормальной нагрузки, разброс параметров у компонентов приличный.
— Главное не увлекаться, — предупредил Олег. — Нельзя превращать подбор номиналов в технологическую зависимость от «крутилки». Мы не сможем каждый серийный блок настраивать индивидуально часами.
— В крупную серию крутилки не пойдут, — успокоил ветеран. — На макете подберем точные рабочие номиналы, а в чистовую плату запаяем постоянные резисторы. И помните главное: картинка на мониторе — это субъективно. Качество тракта будем проверять по форме реального сигнала на осциллографе. И читать этот сигнал надо через разные шасси ВКУ, включая самые капризные.
Горелов, до этого молча фиксировавший технический спор в свою служебную записную книжку, негромко кашлянул, привлекая внимание группы.
— Геометрия вывода тоже поплывет, — ровным, лишенным эмоций голосом произнес Андрей Витальевич. — Вы сейчас рассчитываете на идеальную прямоугольную сетку на плоскости. Но если растянуть матрицу символов на всю физическую ширину кинескопа, по самым краям мы гарантированно потеряем резкость. Фокусировка электронного луча по углам выпуклой стеклянной колбы всегда хуже, чем в центре. Знаки в крайних столбцах будут нечитаемыми.
Олег посмотрел на выключенный монитор, стоящий на верхнем ярусе металлического стеллажа. Выпуклое стекло экрана тускло отсвечивало серым, напоминая о несовершенстве оптики.
— Предлагаете зажать растр? Сделать рабочее поле программно меньше физического размера экрана?
— Аппаратно, — поправил Горелов. — Жесткое окно в самом видеотракте. Цветную рамку вокруг основного текстового поля.
Наташа на пару секунд замерла, глядя на пустые края чертежа, а затем быстро взяла карандаш и четко отсекла на схеме новые логические зоны.
— Поняла. Формируем жесткое аппаратное окно активного изображения. Все, что снаружи этого окна — фоновая заливка. Синхроимпульсы строчной и кадровой развертки мы при этом не трогаем, монитор работает в штатном режиме, кадр не ломается. Мы просто сужаем временную область обращения к видеопамяти. Выделим под управление цветом бордюра отдельный регистр. Пока луч кинескопа идет по краям — выдаем цвет рамки, как только заходит в активную зону — открываем буферы памяти символов.
— И вот вам готовое решение проблемы с ложной нормой, — добавил Горелов, с профессиональным удовлетворением наблюдая, как его эксплуатационное требование превращается в кусок железа. — Рамку можно использовать как аппаратный признак отказа, в обход центрального процессора при критической ошибке. Оператор боковым зрением мгновенно ловит скачкообразное изменение цвета рамки при зависании машины или обрыве линии связи. До вчитывания в текст на экране дело дойдет уже после первой реакции.
Горелов оперся ладонями о край стола.
— У меня есть другой вопрос, товарищи разработчики.
Он обвел цепким взглядом всю собравшуюся группу, включая аналоговиков.
— Допустим, мы сейчас все это грамотно спаяем, разведем земли звездой и поставим правильные буферы. На столе этот единственный макет у нас заведется и покажет красивую картинку с ровным бордюром. Как вы планируете сдавать этот узел ведомственной приемке?
За столом стало тише: разговор перешел от макета к приемке.
— Там ведь военные спросят не только, ровные ли у вас буквы, — продолжил Горелов, чеканя каждое слово. — Пойдут измерять жесткие параметры. Уровни напряжения на выходах при максимальной нагрузке. Точную длительность и форму синхроимпульсов. Устойчивость тех самых фронтов, о которых говорила Наталья, при колебаниях питающей сети от минус десяти до плюс десяти процентов. Тепловой нагрев ваших скоростных регистров
Горелов выпрямился, привычно заложив руки за спину.
— И главное — гарантированная читаемость знака на разных устройствах отображения. На любом типовом цветном ВКУ, включая тот случай, когда лабораторный монитор уже убрали со стола. Отдельно комиссия проверит, что происходит при подключении шасси к специальной машине с совершенно другой системой заземления и питания. Если мы сейчас сделаем сугубо гражданскую плату, опираясь только на то, что есть под рукой, представитель заказчика завернет узел, и нам придется перепроектировать его с нуля. Потеряем месяцы.
Олег обвел пальцем расставленные на бумаге корпуса микросхем и задержался на выходном каскаде. Замечания аналоговиков ложились прямо в схему; вопрос Горелова превращал схему в будущий заводской документ.
— Значит, на чертеже появляется второй слой, — сказал он наконец. — Рядом со схемой сразу пишем, как ее проверять. Пока дорожки еще на бумаге, это проще.
Наташа подвинула к себе лист и провела вдоль контрольных точек аккуратную вертикальную черту.
— Тогда я заведу таблицу измерений вместе с принципиальной схемой, — сказала она. — Уровень на выходе регистра, форма синхроимпульса, сигнал до кабеля, сигнал после кабеля, нагрев скоростных регистров. Это потом ляжет в программу и методику испытаний без переделки.
— А я отмечу места, где к этим точкам можно подлезть прибором, — добавила Люба. — И разведу разъемы так, чтобы ключи и земля были частью платы, без записок на полях.
Птицын потянул к себе свою таблицу битов.
— Тогда я к каждому тесту добавлю ожидаемую контрольную точку. Маска, порт, разряд, код ошибки. Если шина сорвется, программа остановится на понятном месте.
— Только без попытки написать за один вечер всю лабораторную науку, — Олег усмехнулся. — Начни с регистров атрибута и буферов. Когда они заговорят с железом, добавим остальное.
Горелов достал из внутреннего кармана пиджака записную книжку.
— Я принесу перечень параметров, которые потребуют по специальной машине, — сказал он. — Допуски по питанию, температуре, контрольным выводам, читаемости знака, режимам отказа. Тогда будет понятно, где гражданскую плату можно оставить общей, а где нужен запас под «восемьдесят два В».
— Вот это нам и нужно до чистовой разводки, — Олег сдвинул чертеж к краю стола и освободил место под макетную плату. — Лучше сейчас добавить пару буферных каскадов или емкостей, чем потом переносить готовый узел в военный вариант с помощью скальпеля, паяльника и чьей-то матери.
Он посмотрел на выключенный экран стоящей в углу «Сферы».
— Одного лабораторного макета мало. Для ПМИ, паспорта узла, проверки плавающих тепловых сбоев и работы программистов нужна установочная партия. Ориентир — пятнадцать однотипных цветных шасси, которые можно привести к одному виду. Где их брать — ремонтный фонд, телемастерские, телецентр или заводские остатки, — разберемся отдельно, но требования к ним нужны уже сейчас. Люба, посмотри с Сашей комплектуху по сто пятьдесят пятой и пятьсот пятьдесят пятой серии строго по эскизу. Наташа, давай прогреем осциллограф и генератор, начнем снимать параметры. Петр Иванович, если найдете правильные экранированные кабели и разъемы, мы будем вам очень признательны.
— Найдем, — сухо ответил Петр Иванович. — Только вы сперва перестаньте рисовать ток как прямую линию.
Олег усмехнулся и подвинул к нему чистый лист миллиметровки.
Глава 8
В спецфонде
Архитектура Зеленограда подавляла выверенной, почти математической правильностью. Широкие проспекты расчерчивали пространство на строгие функциональные зоны, а монументальные фасады научно-исследовательских институтов напоминали гигантские радиаторы охлаждения, врезанные прямо в заснеженный ландшафт.
Здание, к которому они подошли, выглядело типовым: серый бетон, ленточное остекление, массивные козырьки над входами. Кричащих вывесок и длинных аббревиатур здесь не было. У тяжелых стеклянных дверей висела только скромная прямоугольная табличка с номером корпуса.
Слава, встретивший их у остановки и доведший до нужного корпуса, сослался на дела в своем отделе и направился к соседнему зданию. Морозов потянул на себя холодную металлическую ручку. Дверь поддалась с глухим сопротивлением пневматического доводчика.
Внутри пахло натертым линолеумом, холодным воздухом из тамбура и застоявшимся табачным дымом, который тянуло из невидимой курилки.
Они оказались в тесном тамбуре перед турникетами. За толстым стеклом будки сидел вахтер в форменной рубашке.
Алексей поставил тяжелую сумку на узкий деревянный барьер. Достал из нее папку с предписанием, а из внутреннего кармана пальто — командировочное удостоверение и паспорт. Громов и Липатов молча приготовили свои документы и пропуска со спецотметкой.
Процесс не терпел суеты.
Вахтер взял документы. Скользнул взглядом по строчкам предписания, завизированного Сергеевым. Поднял глаза и методично сличил фотографию в паспорте с лицом Алексея. Ни кивков, ни дежурных вопросов о цели визита.
Пальцы вахтера легли на диск черного карболитового телефона. Короткий треск пружины. Гудки.
— Пост три. Трое из Владимира, НИИ «Электронмаш». По списку Сергеева, — голос из-за стекла звучал глухо, искаженный мембраной переговорного устройства. — Да. Подтверждаю.
Трубка легла на рычаг.
Вахтер выдвинул из ящика стола стопку плотных картонных бланков. Взял перьевую ручку. Заскрипело перо, вписывая фамилии в пустые графы.
В узкую щель лотка под стеклом выехали паспорта, командировочные удостоверения и три свежих местных пропуска. Поперек картонок шла диагональная синяя полоса, а внизу каллиграфическим почерком значилось: «МИЭТ, отдел НТИ». Красные владимирские вкладыши давали им право приехать и запросить доступ; синяя полоса означала только маршрут внутри чужого здания.
— Третий этаж, правое крыло. Кабинет триста четырнадцать, — отчеканил вахтер. Металлический язычок турникета с лязгом освободил проход.
Они миновали барьер.
Коридоры института были погружены в рабочую тишину. В воздухе ощущалась академическая строгость. Стены, выкрашенные до половины в нейтральный салатовый цвет, отражали свет редких люминесцентных ламп. Шаги владимирской тройки гулко отдавались от бетонных перекрытий. На стенах висели строгие стенды с графиками выполнения пятилетних планов и правилами техники безопасности при работе с химическими реактивами. Линии стен, таблички и плакаты складывались в сухой порядок.
Во Владимире коридоры НИИ напоминали проходной двор: инженеры вечно перетаскивали громоздкие блоки питания, из приоткрытых дверей доносились жаркие споры о трассировке плат. Владимирский институт оставался живым, хаотичным муравейником.
Зеленоград предстал перед ними безупречно отлаженным конвейером. Эта архитектурная и звуковая стерильность давила на психику: здесь создавали микроскопические структуры, где пылинка могла стать катастрофой. Линолеум без единой царапины, идеально ровные стыки стеновых панелей, приглушенный гул вентиляционной системы.
Здесь нельзя было просто прийти и сказать: «У меня есть отличная идея». В мире чистых помещений, фотошаблонов и математических моделей слова должны были иметь вес,
Третий этаж. Правое крыло.
Дверь из темного шпона с табличкой «Зав. сектором НТИ Орлова Е. Д.». Морозов коротко постучал костяшками пальцев и, не дожидаясь ответа, нажал на ручку.
Кабинет оказался узким пеналом, заставленным металлическими шкафами картотек. Свет из единственного окна падал на массивный двухтумбовый стол. Фикусы в кадках, чайные чашки и календари с видами природы здесь были неуместны. Всё в кабинете было приспособлено для работы с бумагами.
Елена Дмитриевна Орлова сидела за столом.
Женщина средних лет, с гладко зачесанными волосами. На ней был строгий темный жакет, застегнутый на все пуговицы. Взгляд, направленный на вошедших поверх стекол очков в тонкой металлической оправе, оценивал их с той же сухой деловитостью, с какой минутой ранее это делал вахтер на проходной.
— Предписания, — сказала она, не меняя позы.
Морозов шагнул к столу, выкладывая документы. Орлова открыла толстый амбарный журнал в дерматиновом переплете. Взяла ручку.
Шуршание плотной бумаги и скрип пера заполнили тишину. Елена Дмитриевна методично переносила номера допусков в графы журнала.
— Ваш куратор обеспечил вам доступ к фондам «ДСП» и ограниченной части «Сов. Секретно», — произнесла она ровным, почти механическим голосом. — Я должна предупредить. Спецфонд — это не городская библиотека. Мы не выдаем материалы по запросам «что-нибудь посмотреть про вычислительную технику».
Она промокнула чернила пресс-папье.
— Любая неточная заявка рассматривается как пустая трата рабочего времени сотрудников архива. Если вы не знаете шифров, фамилий авторов или точных тем исследований — вы получите отказ. Неточность подрывает доверие, а его запас здесь легко исчерпать. Формулируйте запросы.
Это был тест. Первый фильтр Зеленограда, отсекающий туристов от инженеров.
Морозов оставил объяснения при себе. В этом кабинете ценились точно названные полки.
Он достал из сумки сложенный вчетверо лист и положил его перед Еленой Дмитриевной.
— Первый блок: САПР топологии и промежуточные форматы для фотошаблонов. Особенно материалы по отладке ручной правки рубилита и ранней отбраковке на пластине. Если у вас проходит тема «Кулон» — машинная подготовка топологии на больших ЭВМ, — нам нужны отчёты и указатели к ней.
Орлова пробежала глазами верхние строки. Лицо осталось строгим, но ручка в её пальцах перестала висеть в воздухе.
— Дальше?
Морозов перевернул лист. Второй блок они с Громовым составили еще во Владимире: Женя дал слова, Алексей придал им вид, который можно было произнести в кабинете НТИ.
— Переводы ВИНИТИ по управляющим программам периферии, структурам файлового обмена и обработке прерываний. Нас интересуют спецификации: заголовки, поля, таблицы, форматы вывода на носитель.
Орлова сделала пометку на полях.
Морозов придвинул ближе третий листок, исписанный аккуратным почерком Липатова.
— И испытания. Тепловые режимы, вибрация, электромагнитная совместимость, отбраковочные ведомости по сериям логики. Нам нужны границы, за которые нельзя выводить опытную аппаратуру.
Теперь Елена Дмитриевна подняла глаза. На секунду в её строгом взгляде появилось деловое признание: эти трое заранее знали, какие шкафы им понадобятся и к каким вопросам техсовета нужно подготовить выписки.
Елена Дмитриевна отложила ручку.
Она собрала заполненные листы заявок. Выдвинула из ящика тяжелую металлическую печать.
Щелк. Щелк.
Два фиолетовых оттиска легли на бумагу, подтверждая их право на информацию.
— Читальный зал закрытых фондов находится в конце коридора, — Орлова передала им проштампованные листы. Жест был сухим и точным, как удар метронома. — Правила стандартные. Портфели и сумки оставить в камере хранения у дежурного. Выносить материалы запрещено. Копирование — только через официальный запрос с визой первого отдела. Фотографирование запрещено. Соблюдайте абсолютную тишину. Выписки делать только в прошитые и опечатанные тетради, выданные дежурным.
Она посмотрела на Морозова.
— Ваши тетради будут проверены перед выходом и останутся здесь. На следующий день получите их снова по журналу.
Алексей коротко кивнул, принимая условия игры. Они развернулись и покинули кабинет.
* * *
Тяжелая двустворчатая дверь, обитая звукопоглощающим материалом, отрезала их от остального института.
Закрытый читальный зал спецфонда оказался просторным помещением без окон. Искусственный свет рядов люминесцентных светильников падал на длинные дубовые столы с потемневшими от времени столешницами. Вдоль стен возвышались стальные стеллажи, забитые серыми картонными папками, скоросшивателями и подшивками журналов.
Воздух казался мертвым, пересушенным батареями центрального отопления и фильтрами вентиляции. Пространство насквозь пропахло старой бумагой, клеем и книжной пылью, висящей невидимой взвесью.
Царила полная тишина.
Несколько человек в строгих костюмах сидели за столами, склонившись над документами. Никто не поднял головы при появлении владимирской группы.
Морозов, сдав сумку дежурному прапорщику и получив взамен тонкую тетрадь с сургучной печатью на прошивке, подошел к свободному столу. Через десять минут тележка на резиновом ходу бесшумно подкатила к его рабочему месту. Дежурный выложил перед ним стопку серых папок.
Алексей сел на жесткий стул.
На обложках верхних папок жирно краснели прямоугольные штампы «Для служебного пользования». Чуть ниже, под плотным картоном, скрывались материалы с более серьезными грифами, отпечатанными выцветшей фиолетовой штемпельной краской.
Морозов открыл первую обложку. Зашуршала плотная, чуть пожелтевшая бумага.
Вместо стройной картины советской микроэлектроники в папках обнаружилась мешанина из разрозненных инженерных школ. В Зеленограде бок о бок работали разные лаборатории, институты и заводские группы, и у каждой был свой язык. Все они пытались описать одну и ту же физическую реальность кремния. То, что в одном отчете называлось «координатной матрицей», в соседнем именовалось «топологическим массивом». Одни авторы отталкивались от возможностей цеха и фотошаблона, другие — от машинного времени больших ЭВМ, третьи — от контроля брака.
Алексей начал вчитываться, пропуская через себя эту многоголосицу.
Среди машинописных листов попадались переводы западных публикаций с аккуратно перерисованными от руки схемами. Морозов искал опоры: точные вешки, которые позволили бы привязать его знания к текущему календарю и к возможностям здешнего производства.
Взгляд зацепился за знакомую структуру текста. В сноске мелким шрифтом стояла оригинальная аббревиатура: CIF. Caltech Intermediate Form. Год публикации базового описания — тысяча девятьсот восьмидесятый. Совсем свежее.
Рядом на полях кто-то оставил бледную карандашную помету: «Сравнить с внутренним стандартом обмена». Значит, местные инженеры уже искали общий язык. Морозов мысленно разобрал структуру формата. CIF позволял объяснить машине рисунок кристалла без двусмысленностей: вот номер слоя, вот начальная координата, вот контур проводника, вот прямоугольное окно контакта, вот маркер конца записи. Строгий порядок превращал чертеж в набор чисел.
Алексей перевернул страницу, открыв следующую серую папку. Переводная аналитика по методам проверки сложной логики.
Аббревиатура LSSD стояла в английском заголовке почти без пояснений, но за ней
В самом низу стопки обнаружился отчет, упоминающий архитектуру BILBO — Built-In Logic Block Observer, «встроенное наблюдение за блоками логики». Название звучало игрушечно, но идея была серьезной: часть схемы сама помогала проверять соседние блоки, превращаясь то в генератор проверочных сигналов, то в накопитель ответа.
Морозов откинулся на спинку жесткого стула. Флуоресцентная лампа под потолком издавала монотонное, зудящее гудение.
Откровения здесь были лишними. Местные инженеры сидели в этом сухом, пропахшем бумажной пылью воздухе и читали ровно то же самое. Они понимали, что с ростом плотности элементов старые методы проверки перестают работать: щупом уже не подлезешь к каждому внутреннему узлу, а ошибка, спрятанная в геометрии слоя, проявится слишком поздно.
В восемьдесят первом году эти идеи упирались в машинное время, площадь на кристалле и дисциплину производства. Проверочные последовательности надо было готовить, ответы — считать, результаты — сверять. Машинные залы расписывались по минутам на недели вперед. Тополог, вооруженный скальпелем, резал пленку рубилита на координатографе, а проверку получал только после очереди на большую машину: здесь зазор меньше допустимого, здесь окно контакта съехало, здесь слой пересекся с тем, с чем пересекаться не должен.
Ошибка находилась слишком поздно. Через три дня, когда данные прокручивали на БЭСМ-6, или, что еще хуже, когда маска уже уходила на фотолитографию и портила кремниевую пластину.
Справа от Алексея тихо скрипнула ножка стула. Сергей Липатов, до этого сосредоточенно выписывавший в свою прошнурованную тетрадь цифры из отбраковочных ведомостей, с тихим раздражением захлопнул папку.
— Я так не могу, — шепотом, почти одними губами произнес Липатов. — Здесь ГОСТы на климатические испытания противоречат заводским отчетам по серии К155. Если я выпишу только выводы, на техсовете нас размажут за неточность формулировок. А переписывать методику целиком нельзя по правилам зала.
Сергей взял свою тетрадь с сургучной печатью на прошивке.
— Пойду к дежурному. Потом к Орловой. Надо четко определить границы: какие шифры испытательных отчетов мы имеем право упоминать вслух, а какие остаются за закрытыми дверями. Иначе мы рискуем лишиться допуска.
Липатов бесшумно поднялся и, стараясь не стучать каблуками, направился по проходу к столу выдачи.
Как только его спина скрылась за стеллажом с картотекой, Евгений Громов подался вперед. Он отодвинул в сторону пухлый том реферативного журнала и развернул свою прошнурованную тетрадь так, чтобы Морозов видел страницу. Лист был разделен карандашной чертой на две колонки. Почерк у Жени оставался угловатым, торопливым, но сейчас в этом беспорядке угадывалась работа: стрелки, номера карточек, короткие пометы на полях.
— Лёш, — зашептал Громов, с явным нетерпением пододвигая тетрадь. — Подсказывай. Я тут посмотрел их публикации по трансляторам и структурам данных… Знаешь, по сравнению с этой машинной индустрией наша владимирская МикроДОС выглядит как детский велосипед рядом с тепловозом. Терминов столько, что я сначала поплыл. Но потом взял себя в руки и раскидал выписки на две кучи. Слева — где большая ЭВМ помогает топологу рисовать. Справа — как они ловят бракованный кристалл до посадки в корпус. Кажется, половина авторов спорит об одном и том же, просто на разных ведомственных диалектах.
Морозов посмотрел на дверь зала. Липатов у стойки что-то негромко объяснял дежурному, показывая на свою тетрадь. До их стола его голос не долетал.
— Начни с левой, — сказал Алексей.
Громов постучал карандашом по первой колонке.
— Вариант первый: большая машина сама разводит кристалл. Подаешь принципиальную схему, задаешь правила, она строит топологию. Пишут про стопроцентную автоматическую трассировку, волновые алгоритмы и машинный обход препятствий. Читается так, будто человек с резаком скоро станет не нужен.
— Вот это на техсовете не произноси, — тихо сказал Морозов.
— Потому что обидятся?
— Потому что это пустое обещание. Обидятся потом, когда поймут, сколько кремния такая автоматика сожрет впустую. Машина может провести дорожку от точки до точки, как в школьном лабиринте. Но кристалл — не бумага. Там слои, зазоры, паразитные емкости, теплоотвод и допуски конкретного цеха на травление. Автомат видит голую математическую сетку, а опытный тополог — физику: как кислота проест кремний, как ляжет металл, где лишний микрон обернется падением выхода годных. Если программа нарисует красиво, но раздует площадь на двадцать процентов — это не победа. Это выброшенные деньги завода.
Громов поморщился, будто ему испортили красивую игрушку.
— А я уже почти поверил. Очень соблазнительно: нажал кнопку, получил кристалл.
— Соблазнительно, — согласился Морозов. — И потому опасно. САПР сейчас — это просто электронный кульман, а не замена инженеру. Машина помогает хранить геометрию, передавать ее, проверять куски. Но рисует все равно человек. Представь, как это происходит: тополог берет рубилит — двухслойную пленку с красным верхом. Берет нож и вручную, миллиметр за миллиметром, вырезает контуры будущих проводников и контактных окон. Сдирает красную пленку там, где должен пройти сигнал.
— Вручную?
— Да. И одно неверное движение лезвия означает, что зазор стал меньше допустимого. Глазом эту долю миллиметра на листе поймать почти невозможно. Потом этот лист фотографируют с огромным уменьшением. Делают фотошаблон — стеклянную пластину с рисунком, через которую слой будут переносить на кремний. Если ошибка ушла на фотошаблон, она размножится на сотни пластин. Брак пойдет в серию.
— Значит, проверять надо до шаблона.
— Именно. Ошибка дорожает с каждым шагом. На столе тополога это просто испорченный кусок пленки. На этапе шаблона — выброшенные реактивы и время. В цеху — запоротая партия. Наша задача — предложить малый проверочный инструмент рядом с инженером. Тополог ведет схему, а машина читает промежуточный формат — тот самый CIF или местный аналог — и проверяет геометрию: два проводника подошли слишком близко, контактное окно съехало с полигона, слой пересекся там, где по правилам нельзя.
Женя провел короткую черту в первой колонке и подписал: «только участки».
— Нам нужен способ прочитать их геометрию. Без красивого рассказа про автоматическую разводку.
— Вот это уже реальная задача, — Морозов придвинул папку с пометками. — Промежуточное звено между человеком и большой ЭВМ. Чтобы поймать грубую ошибку, машине достаточно знать координаты, номер слоя, минимальный зазор и нарушенное правило. Как в бухгалтерии: решение принимает главбух, но складывать столбики цифр надежнее на калькуляторе. Тополог думает, а наша машина проверяет рутину, которую замыленный глаз уже не видит.
— Тогда мне здесь нужна карта их внутренних форматов, — сказал он. — Где заголовок, где номер слоя, где координаты, где признак замкнутого контура, где конец записи. И хоть один разрешенный пример. Целиком секретную топологию никто не даст, значит, нужен учебный или обезличенный кусок, который можно будет увезти во Владимир.
— Да. Код ты здесь писать не будешь. У тебя нет под рукой нашей машины, нет свободного машинного времени, и никто не даст тебе вынести живую закрытую топологию. Здесь ты собираешь язык задачи. Во Владимире сделаешь блок чтения и первую проверку правил.
— А если у них формат не один?
— Значит, начнешь с одного. Весь Зеленоград за один заход мы не проглотим. Нам нужен малый проверяемый участок, который нельзя будет назвать фантазией Морозова. Один фрагмент, один набор правил, один понятный результат.
Женя кивнул и перевел карандаш во вторую колонку.
— Теперь правая кучка. Контроль на пластине. Вот тут у меня совсем голова пухнет. Они пишут про проверку до корпусирования, про контактные площадки, про зондовые установки, про тестовые структуры по краю пластины. Потом рядом идут LSSD, сигнатурный анализ, BILBO. А в некоторых обзорах это все смешано так, будто кристалл должен сам себя проверить, сам себе поставить оценку и сам выйти из цеха.
Морозов коротко усмехнулся, но сразу погасил улыбку.
— Вот это как раз надо разложить по полкам. На техсовете они уже спорили с нами об экономике ранней отбраковки, и второй раз читать им тот же доклад бессмысленно. Здесь важнее показать, что мы различаем три разных технических уровня.
— Какие?
— Первый — обычный контроль пластины снаружи. Зондовая установка: микроскоп, точная механика, тонкие иглы на контактных площадках. Через них подают сигналы, снимают ответы, проверяют сопротивление, пороги срабатывания, утечки. Второй — тестовые структуры по краю пластины: маленькие контрольные элементы, по которым технолог видит, как прошел слой, не поплыл ли размер, не ушел ли режим. А третий — то, о чем я говорил в декабре: проектировать саму схему так, чтобы ее было удобнее проверять изнутри. LSSD, сигнатурный анализ, вся эта будущая дисциплина.
Громов кивнул, быстро расставляя номера на полях.
— Значит, завтра вместо лозунга «встроим самопроверку в каждый кристалл» мы спрашиваем, что уже можно потрогать снаружи: какие площадки доступны, какие последовательности они подают, какой ответ считают годным.
— Но сама «Сфера» не будет физически проверять пластину.
— Конечно. «Сфера» не заменит зондовую установку. Это была бы такая же ложь, как обещание полной автотрассировки. Зондовый стол, микроскоп, механика перемещения, контактная карта — это их хозяйство. Наша польза в другом: подготовить проверочные последовательности, свернуть длинный ответ в короткий контрольный признак, помочь вести карту участков, связать результат проверки с координатами кристалла и с тем фрагментом топологии, из которого он вырос.
Громов медленно выдохнул.
— В первом случае мы читаем геометрию до производства. Во втором — помогаем читать результат проверки после изготовления пластины, но до корпуса.
— Именно. Это два разных подхода к одной проблеме. Слева мы ловим ошибку до производства — в геометрии. Справа мы помогаем разобраться с результатом после изготовления пластины — по координатам, проверочным последовательностям и короткому контрольному признаку. А разговор про внутренние сканирующие цепочки оставляем как дальний шаг, когда они сами попросят развивать тему.
Громов посмотрел на правую колонку уже иначе. Там, где минуту назад была каша из английских сокращений, возникала последовательность действий.
— LSSD и BILBO куда класть?
— На будущее. Выпиши, но вернёмся к этому мы ещё нескоро. Идеи правильные: делать внутренние регистры наблюдаемыми, прогонять тесты прямо внутри кристалла. За этим будущее. Но если мы завтра заявим: «отдайте нам десять процентов площади кристалла под встроенную самопроверку», нас просто поднимут на смех. У них каждый микрон на счету, они бьются за выход годных, а тут мы со своей красивой диагностикой.
— Значит, не лезем внутрь кристалла?
— Не сразу. Сначала берем то, к чему есть физический доступ: контактные площадки, тестовые структуры, регулярные блоки вроде памяти. Сигнатурный анализ предложим как способ не гонять туда-сюда километры перфолент с нулями и единицами. Длинный отклик схемы аппаратно сворачивается в короткую сигнатуру. Совпала с эталоном — блок исправен. Не совпала — ищем сбойный узел. Сигнатура не заменяет понимания логики, она просто экономит время.
— Удобная штука, — признал Громов. — Четыре знака вместо километра перфоленты.
— Границы сразу оговори: четыре знака имеют смысл только там, где есть эталон и понятная проверочная последовательность. Липатов первым спросит про условия опыта.
Женя тихо фыркнул и снова склонился над листом.
— Тогда для техсовета это должно звучать так: мы приходим с малым рабочим местом, которое умеет прочитать фрагмент топологии, проверить простые правила и подготовить данные для раннего контроля на пластине. А для опытного участка просим что-то регулярное: память, край массива, повторяющийся блок.
— Вот, — Морозов постучал пальцем по его тетради. — Регулярность нам помогает. На регулярном блоке проще доказать пользу. Там меньше спора о смысле схемы и больше чистой проверки: координаты, повтор, расстояние, контрольный отклик. Если получится на малом, потом можно расширять.
— А вот это куда отнести? — Громов кивнул на открытую папку, где мелькали слова про цилиндрические магнитные домены и криогенные элементы. — Пузырьковая память, ПЗС-хранение, Джозефсон. В отчетах выглядит почти как космос.
— Пусть остаются космосом, — ответил Алексей. — Хорошие физические эффекты не всегда становятся хорошей массовой техникой. Для лаборатории можно собрать чудо на жидком гелии. Для серии нужна технология, которую завод повторит тысячами раз, без профессора с гаечным ключом у каждого шкафа. Вычислительная техника будет расти там, где есть обычная технологическая дисциплина, плотная память, понятный контроль и возможность тиражировать результат. Поэтому память — динамическая, проверка — ранняя, связь с топологией — через формат, а не через рассказы о гениальности.
Громов аккуратно обвел обе колонки жирным контуром. В левой теперь стояли три короткие строки: «формат», «геометрия», «малый фрагмент». В правой: «площадка», «последовательность», «сигнатура».
— Так уже похоже на работу, — сказал он. — Без блеска, зато можно защитить.
— Будущее всегда начинается с таких вещей, — ответил Морозов. — С разрешенного примера, с таблицы полей, с вопроса к технологу, какой зазор он действительно держит, а какой только пишет в отчете.
— И с Липатова, который запретит половину наших красивых слов.
Шаги за спиной заставили их одновременно замолчать. Липатов вернулся к столу, неся свою тетрадь. Лицо Сергея было сосредоточенным, но уже без прежнего раздражения.
— Выяснил, — шепнул Липатов, усаживаясь на стул. — Орлова дала добро на выписку шифров стандартов. ГОСТы по механическим воздействиям можно упоминать напрямую. Но есть жесткое условие: зарисовки топологии бракованных участков запрещены. Только буквенно-цифровые индексы.
— Нам хватит, — сказал Морозов.
— И еще, — Сергей посмотрел на них обоих. — Когда будем выступать на техсовете, мы не должны говорить, что «решаем проблему брака». Это их больная мозоль, они воспримут это как упрек. Мы должны говорить: «сокращаем время локализации топологических расхождений». Понимаете разницу? Тот же смысл, но в их терминах.
Они просидели над документами еще два часа. Алексей методично выписывал номера ГОСТов, термины и форматы данных. Изученные материалы подтверждали его тактику: нужно собрать работающий каркас из местных же идей, разбросанных по разным отчетам. Будущий проверочный комплекс должен выглядеть не чужаком из Владимира, а логичным продолжением зеленоградской инженерной мысли.
Когда время работы читального зала подошло к концу, Морозов аккуратно сложил серые папки в ровную стопку.
Они подошли к барьеру. Прапорщик забрал их прошнурованные тетради. Он медленно, с шелестом перелистывал страницы, его глаза скользили по строчкам, выискивая запрещенные к выносу схемы или чертежи. Убедившись, что внутри только текст, списки литературы и формулы, дежурный поставил на последних исписанных страницах сухой штамп ОНТИ, вписал номера в регистрационный журнал и расписался.
Тетради исчезли в узком металлическом шкафу за спиной прапорщика. Замок сухо щелкнул. Эти записи не пропадали, но становились частью внутреннего учета спецфонда: завтра их снова выдадут по журналу, а пока за порог можно было вынести только память, общий план и номера тем, которые не нарушали режим. Только после этого им вернули их личные сумки.
Владимирская группа покинула читальный зал, спустилась по гулким лестницам и вышла через проходную МИЭТа.
На улице их встретил резкий январский мороз. После спертого воздуха спецфонда холод обжигал легкие. Снег хрустел под ботинками. Морозов переложил сумку в другую руку. Теперь внутри лежали только командировочные удостоверения и чистая бумага. Вся настоящая работа осталась за стальной дверцей. Завтра к ней придется возвращаться.
Они шли к автобусной остановке вдоль серого монументального фасада института.
— По файловым структурам всё вырисовывается, — нарушил молчание Громов. Говорил он уже в полный голос, выпуская изо рта клубы пара. — Завтра доберусь до описания их магнитных лент. Если мы поймем, как они пакуют координаты полигонов, я смогу составить нормальное задание для блока чтения. Сам код напишу уже дома, на «Сфере», когда будет разрешенный образец данных. И отдельно выпишу вопросы по зондовой проверке: какие последовательности они подают, какой ответ считают годным и как связывают результат с местом на пластине. Нам не нужно подменять их математику расчетов, нам нужно научиться принимать их геометрию и их контрольные признаки.
— А у меня тепловые допуски собраны, — Липатов поправил воротник пальто, спасаясь от ветра. — Завтра закопаюсь в регламенты вибрационных стендов. Нам нужно знать, как именно они трясут свои блоки при приемке. Будем закладывать запас прочности под их же станки.
Морозов остановился у края заснеженного тротуара.
— Значит, план на завтра понятен, — сказал Алексей, глядя на приближающийся желтый «ЛиАЗ». — Жене — форматы, ленты и вопросы по контрольным последовательностям. Сергею — стенды и климатика. А я буду восстанавливать по их отчетам пошаговый маршрут работы тополога и место, где в этот маршрут можно встроить проверку геометрии. Нам нужно точно знать, в какой момент человек кладет скальпель и идет курить, пока работает большая машина. Именно в эту паузу мы и должны поставить наше малое рабочее место.
Глава 9
Акты, шасси и печати
Олег Тимофеев стоял у кульмана, опираясь ладонями о нижнюю планку. На приколотом ватмане плотным слоем лежали результаты последних разборов: физический эскиз цветного узла, рабочие пометки по сериям логики 155 и 555, точки разделения земель, схема ключей на разъемах и узел аппаратного контроля состояния. Первичный макет видеотракта уже существовал на бумаге и частично на лабораторном столе.
У края стола лежала рабочая макетка цветного тракта: часть корпусов уже стояла на месте, часть цепей еще заменяли подписанные навесные перемычки, а несколько дорожек Наташа держала только на кальке, чтобы не закрепить ошибку раньше времени. Рядом Птицын оставил распечатку с портами, масками и ожидаемыми разрядами на контрольных точках. Пока этот узел умел только проверить, что выбранные сигналы можно снять со «Сферы» и не сорвать синхронизацию. До законченной печатной платы оставались разводка земли, выходные каскады, прогрев и нормальная ведомость изменений.
Рабочая документация собиралась по частям: ватман Олега, таблица Любы по питанию и журнал Наташи с контрольными точками. Первый осмысленный цветовой сигнал они получат через несколько дней, если повезет. Аккуратный образец для технологов и нормоконтроля потребует больше времени. Поиск одинаковых ВКУ по хозяйственным каналам наверняка продлился бы дольше, чем сборка самого макета.
Наташа Рогова сидела на высоком табурете, аккуратно затачивая цветные карандаши над небольшой картонной коробкой. Люба Ветрова устроилась слева, рядом с тяжелым блоком питания, и листала рабочий журнал с выписанными номиналами. Андрей Горелов расположился сбоку с открытой папкой: он фиксировал требования для будущей эксплуатации оборудования.
— Первый макет мы доведем, — произнес Олег. — Но если мы начнем искать ВКУ только после готовой платы, потом будем неделю смотреть на осциллограф и гадать, что эта плата покажет на настоящем кинескопе. Одного удачного образца мало. Нужны одинаковые аппараты для прогрева, сравнения и нормальной методики.
Наташа сдула стружку с грифеля и на секунду улыбнулась краем губ.
— Иначе опять будем спорить вокруг одной платы: сегодня работает, а завтра нет.
— Вот, — сказал Олег. — Нам нужно понять, какие блоки вообще можно брать за основу, сколько одинаковых образцов реально достать и как потом проверять их по единой методике.
— Начинаем с самого вероятного кандидата, — Наташа провела красную линию под верхней строкой списка. — УПИМЦТ-61-II. Если брать его за основу, нам нужны исправный или хотя бы живой кинескоп, рама, блок обработки сигналов цветности, блок разверток и силовой блок питания. Корпус тоже лучше
Олег вспомнил плотную компоновку массивных цветных телевизоров.
— Закладываем методику испытаний. Блок цветности собран на гибридных микросхемах К224. Они сильно греются, рабочие режимы уходят, и расчетный зеленый цвет через час превращается в грязно-желтый.
— А развертка всё равно шумная, — добавила Люба, делая короткую запись в журнале. — Оптроны отделят сигнальные линии, но они не отменят фильтры, общий провод и укладку жгутов. Иначе помеха от строчной развертки полезет в землю и синхронизацию, а мы потом будем искать ошибку в памяти там, где на самом деле дрожит видеотракт.
— Прописываем прогрев и обвязку, — кивнула Наташа и вывела на ватмане новую категорию. — Замеры напряжений в контрольных точках на холодном образце и после двух часов работы. Экранирующие медные чулки на сигнальные линии. Жесткая фиксация жгутов подальше от умножителя напряжения.
Горелов перелистнул страницу в папке.
— Ищем заводскую документацию на ремонт, — согласился Олег. — Карты сопротивлений, осциллограммы, схемы БОС и БР. Как только найдем железо, будем привязывать наши контрольные точки к их заводским таблицам.
Он отступил от доски. На ватмане, рядом с блоками цветности, теснились пометки: «ОМТС», «Снабжение», «Первый отдел».
— С такой ведомостью нас в ОМТС развернут, — сказал Тимофеев, хмуро глядя на свои записи. — Одно дело — выбивать промышленные микросхемы или транзисторы. Со скрипом, но они проходят по квотам приборостроения.
Наташа положила красный карандаш на полочку кульмана.
— А пятнадцать цветных комплектов — это фонд бытового обслуживания населения. Очередь заявок, план ремонта, баланс мастерских. Если Седых подпишет такую заявку официально, ему придется обосновывать цифры перед министерством.
— И тогда моментально подключится первый отдел, — подтвердил Горелов. — В одной бумаге встретятся закрытый комплекс, цветной видеовывод и дефицитный потребительский товар. Всю тему засекретят до выяснения. Доказывать потом, что гражданской машине тоже нужен цвет, замучаемся.
— Новые комплекты просить не можем, — произнесла Наташа. — Придется идти, как в Александрове. Помнишь, как мы с тобой таскали «Юности» из изолятора брака? Не товарный вид искали, а живую основу для ВКУ. Здесь то же самое, только цветное. Надо искать неликвид, ремонтный фонд, сломанные аппараты в городских телемастерских. Нам нужны кинескопы, шасси, блоки и схемы, а не гарантийные талоны. Как провести это по бумагам, минуя прямую заявку на новые телевизоры?
Олег подвинул к себе свободный край ватмана и вывел отдельную строку: «списанные блоки через мастерские». Рядом поставил вопросительный знак.
— Я могу составить критерии для приемочных актов, — сказал Горелов. — Но порядок списания и передачи имущества по актам не знаю. Это уже не инженерный вопрос.
— Нужен хозяйственник, — Наташа снова посмотрела на ведомость. — Тот, кто понимает балансы, фонды предприятий и акты списания.
— Николай Петрович, — произнесла Люба. — Он хотя бы объяснит, по какой номенклатуре это может пройти.
Олег потянулся к внутреннему телефону, но трубку сразу не снял.
— Сначала к Михалычу, — сказал он. — Иначе получится, что мы сами распоряжаемся складом бывшего КБ-2.
* * *
Иван Михайлович нашелся на своем привычном месте: за широким столом с папками бывшего КБ-2. Только стопки уже стали ровнее, на некоторых появились бумажные закладки, а рядом лежал тонкий скоросшиватель с карандашной надписью: «КБ-2. Шкафы и склад».
— Иван Михалыч, дело есть, — сказал Олег без предисловий. — Цветные ВКУ через обычную заявку мы не получим. Новые телевизоры просить нельзя, это сразу уйдет наверх и в первый отдел. Можно попробовать выйти на городские телемастерские: им запчасти, нам неремонтные аппараты или комплектные шасси с документами.
Иван Михайлович поднял на него тяжелый взгляд, потом отложил карандаш и несколько секунд молчал.
— Вариант неприятный, но рабочий, — наконец сказал он. — Других сейчас, похоже, нет. Через фонды вам пятнадцать цветных аппаратов никто не даст. Через режимную часть нельзя: гражданскую ветку сами туда утянем. А через бытовой ремонт можно хотя бы начать разговор.
— Значит, можно звонить Николаю Петровичу?
— Можно. Но не от себя. Скажешь, что я разрешил выяснить, можно ли оформить это законно, без обещаний и без вывоза деталей до акта. И начните не с письма в управление, а с конкретной мастерской.
Он открыл записную книжку, лежавшую под папкой с описями, и нашел нужную строку.
— Дом быта на Горького. Телеателье при нем. Там старшим мастером работает Семен Кузьмич Ларионов. Когда-то давно в КБ-3 наладчиком сидел, еще до того, как ушел в бытовую технику. Толковый, лишнего языком не мелет. Если у них действительно лежат цветные аппараты под списание, он хотя бы скажет, где искать и какие бумаги потребуются.
— Он нам отдаст шасси?
— Он ничего вам не отдаст, — сухо сказал Иван Михайлович. — Он не кладовщик при нашем КБ. Он может не выгнать вас за дверь и объяснить, какие аппараты у них числятся мертвыми. Дальше — Николай Петрович, акты, печати и моя подпись.
Михалыч подвинул к себе скоросшиватель «КБ-2. Шкафы и склад».
— Теперь по второй половине этой идеи. Если хотите предлагать мастерским что-то взамен, нужна нормальная опись. Официально там половина называется так, что родная мать не узнает. «Прибор измерительный, бывший в употреблении». Какой прибор, в каком состоянии, с кабелями или без — догадайся сам. Но основа есть.
Он достал из стопки серую папку и раскрыл ее на середине.
— А неофициально? — спросил Олег.
Михалыч посмотрел через плечо в сторону соседнего кульмана.
— Петр Иванович!
Ветеран из бывшего второго КБ оторвался от своего листа неохотно, но подошел сразу. Он выслушал вопрос, взял у Михалыча ключ с жестяной биркой и повел Олега к задней двери кладовой, где раньше хранили аналоговые стенды и запасные узлы к ним.
За стеллажами скрывалась узкая комната, насквозь пропахшая картоном, машинным маслом и старым лаком. На верхних полках стояли осциллографы с пожелтевшими ручками, ниже лежали трансформаторы от списанных стендов, коробки с тумблерами, катушки провода, радиаторы, связки многоконтактных разъемов, бумажные пакеты с керамическими конденсаторами и тяжелые жгуты, перетянутые бечевкой.
— Вот это в официальной описи есть, — Петр Иванович ткнул пальцем в ряд приборов. — Их можно списывать только через акт: инвентарные номера, печати, остаточная стоимость. А вот это, — он постучал ногтем по коробке с разъемами, — годами складывали после переделок. На всякий случай. Формально оно
Олег присел перед нижней полкой и вытащил на свет алюминиевый радиатор с засохшей термопастой.
— Телемастерским такое пригодится?
— Радиаторы, провод, тумблеры, разъемы, крепеж — заберут с руками, если у них правда план ремонта горит, — сказал Петр Иванович. — Осциллографы старые тоже могут взять, только комплектность проверяйте. А вот мосты и генераторы без паспортов не суйте первыми. Начнете с непонятного железа — Николай Петрович сам вас завернет.
Олег быстро записывал на сложенном листе два столбца: «по описи» и «уточнить в кладовой».
— Делаем так, — сказал подошедший Михалыч. — Я даю тебе официальную выписку по складу КБ-2. Петр Иванович отмечает, что из старых запасов реально не жалко отдать. Ты приносишь Николаю Петровичу две бумаги: что числится и что предлагается к передаче после акта.
— Понял, — сказал Олег.
Петр Иванович сухо усмехнулся.
— И не пишите «хлам». В бумаге хлама не бывает. Пишите: «неиспользуемое оборудование и радиодетали, пригодные для ремонта бытовой аппаратуры». Сразу станет приличнее.
* * *
Олег вернулся к столу с серой выпиской Михалыча, листком Петра Ивановича и номером телеателье на Горького. Только после этого он снял трубку внутреннего телефона.
До бюро снабжения дозвонился не сразу: где-то щелкали переключателем, переспрашивали, кто говорит, потом наконец в трубке раздался знакомый суховатый голос Николая Петровича.
Олег коротко объяснил задачу: цветной видеовывод, пятнадцать однотипных основ под ВКУ, желательно не новые телевизоры, а аппараты из ремонтного фонда или комплектные шасси с документами. Отдельно сказал, что Иван Михайлович разрешил проверить законное оформление и предложил начать с телеателье при Доме быта на Горького. Николай Петрович дослушал до конца и попросил повторить цифру.
— Телевизоры, значит, собираете, — констатировал он уже без всякого удивления.
— Решаем задачу цветного видеовывода, — ответил Олег. — Для проверки нужны стабильные однотипные макеты.
— Заявку в городское управление бытового обслуживания писать собрались? — спросил Николай Петрович. — Телеателье им подчиняются, но шасси цветного телевизора у них на балансе как имущество, а не как мешок винтов. Медь, драгметаллы, дефицитные блоки, план ремонта. Если я такую бумагу в местный ОМТС пущу, ее первый же ревизор завернет. И правильно сделает: нецелевое расходование фондов.
— Значит, надо понять, где такие блоки числятся и кто имеет право их списывать, — вполголоса подсказала Наташа.
Олег повторил это в трубку. На другом конце Николай Петрович помолчал; было слышно, как он отодвинул какие-то бумаги.
— Ларионова я помню, — сказал он наконец. — С ним можно начинать разговор, но только разговор. Может быть, получится обмен по актам. Городские телемастерские задыхаются без запчастей. Планы горят. У них в подсобках лежат мертвые аппараты, которые чинить нечем. Ждут актов на утилизацию. А у нас на балансе висит дальний склад бывшего КБ-2.
Олег посмотрел на серую выписку. Пыльные приборы, тяжелые ящики с крепежом и детали, которые цифровикам уже мешали, для телемастерской могли оказаться рабочим запасом.
— Обменный фонд, — вслух произнес Тимофеев.
— Возможно, — поправил Николай Петрович. — Оформляется это через акты списания. Вы им комплектующие, они нам — нерабочие платы подходящей компоновки и с документами. Но сначала я сам выясню, в какую мастерскую можно зайти официально, с печатями. К среде скажу, можно ли это провести законно. А вы пока составьте опись того, что готовы отдать со старого склада. Только без самодеятельности.
— То есть к вам не с просьбой, а с описью, — уточнил Олег.
— Вот именно. С просьбами ходите к начальству, а ко мне — с бумагой, где видно, что вы хотите получить и что можете предложить взамен.
В трубке щелкнул рычаг.
Олег положил трубку и снял с кульмана исписанный ватман. Бумага легла поверх прежних схем, оставив на деревянной поверхности место для двух чистых бланков.
— Разводим две работы, — сказал он, кладя листы рядом. — Первая пойдет Николаю Петровичу: что мы можем выдать из старых запасов и предложить мастерским на обмен. Вторая останется здесь. Дефектовочная ведомость. Если нам привезут пять ящиков телевизионного лома, мы должны за полчаса понять, что брать в лабораторию, а что отправлять обратно.
Наташа забрала правый бланк и провела на нем ровную вертикальную черту.
— Полностью рабочий УПИМЦТ в списанном фонде мы вряд ли увидим, — сказала она. — Рабочий аппарат уже стоит у кого-нибудь дома или давно разобран на запчасти. Поэтому начинаем с сохранности узлов.
Она вписала в первую колонку четыре строки: кинескоп, БОС, БР, силовой блок.
— Кинескоп первым? — спросил Олег.
— Первым, — подтвердила Наташа. — Целый цветной кинескоп в ремонтном фонде долго не пролежит. Если у аппарата сгорел блок питания или развёртка, а трубка живая, мастерская снимет её на другой телевизор раньше, чем мы успеем написать письмо. Севшая эмиссия, пробой, трещина у горловины, белый налёт вместо нормального геттера — и весь наш ВКУ превращается в груду плат без экрана. Значит, в ведомости отдельная строка: состояние кинескопа, отклоняющая система, кольца сведения, крепление и защитное стекло, если оно есть.
— То есть нам нужны не только шасси, — сказал Олег. — Нужно отдельно искать живые трубки.
— Да. Или хотя бы понять, можно ли получить их как запасные части через мастерские. Купить цветной кинескоп проще, чем новый телевизор, но для КБ это всё равно будет не покупка в магазине, а бумага, фонд и подпись. Поэтому фиксируем заранее.
— Блок обработки сигналов цветности нужен с целой платой, заводскими разъемами и доступными контрольными точками, — продолжила она. — Отдельные сгоревшие детали переживем: конденсаторы, резисторы, даже микросборку серии К224 можно заменить, если найдем такую же. Бракуем сквозные прогары гетинакса, вырванные дорожки и самодельные перемычки неизвестного назначения. Иначе потом неделю будешь выяснять, что мастер пытался обойти.
— Блок развертки? — спросил Олег.
— Тоже смотрим геометрию платы и жгуты. Если выбило тиристор или сгорел предохранитель, это ремонт. Если разъемы выкушены бокорезами вместе с кусками проводов, плату придется раскапывать как музейный экспонат. Для проверочного стенда такая работа бессмысленна.
Олег записал замечание.
— В мастерских жгуты могут выкусить целиком, — сказала Наташа. — Им надо быстро вернуть аппарат в работу, а не сохранять нам заводскую красоту.
Люба открыла рабочий журнал на чистой странице и подвинула к себе карандаш Наташи.
—
Она нарисовала на полях маленькую схему: сеть, разделительный трансформатор, автотрансформатор, контрольные приборы, испытуемый блок.
— После этого нормальный прогрев, чтобы проявились плохая пайка, трещины в дорожках и уход режимов. Снимаем контрольные напряжения с силового блока, пульсации, устойчивость синхронизации. Высокую часть подключаем в последнюю очередь, когда понятно, что силовой блок не бросает в остальные цепи лишнее. И все измерения повторяем по единой методике, иначе через неделю сами не поймем, почему один комплект приняли, а второй забраковали.
— То есть ведомость станет методикой, — подхватил Олег. — По ней любой из нас сможет повторить проверку.
— Именно, — сказала Люба. — Иначе у нас появится коллекция случайных железок.
Горелов до этого молча слушал, делая короткие записи в блокноте. Теперь он повернул лист к себе и дописал внизу отдельный раздел.
— Входной контроль вы закроете, — сказал он. — Нужен еще раздел по эксплуатации: что увидит человек у ВКУ и что сможет сделать техник без вашей лаборатории.
— Зачем закладывать это сейчас? — Наташа отложила карандаш. — Мы пока собираем гражданский лабораторный макет.
Горелов посмотрел на нее поверх листа. Несколько секунд он будто прикидывал, стоит ли рассказывать лишнее, потом все-таки положил ручку на стол.
— Пару лет назад меня вызывали на удаленный узел связи, — сказал он. — Вычислительная стойка там стала сбоить. В аппаратной есть ЗИП, формуляры, журнал смены. Дежурный техник — толковый мужик, руки на месте, только его учили обслуживать стойку по формуляру, без схемы всего изделия в голове. У него смена, канал простаивает, начальство торопит, а на панели горит одна общая лампа: «Авария». И больше ничего.
Олег чуть кивнул. Картина была знакомой.
— Техник записал в журнал общую фразу про сбой, снял наугад один блок, поставил запасной, пошевелил разъемы. Машина ожила. Снятый блок он вернул в ЗИП как исправный: внешне ведь все в порядке, лампа погасла. Через две недели этот же блок попал на другой комплект. Отказ повторился, а в журнале опять стояло: «сбой устранен». Мы потом несколько дней ловили плавающую неисправность и спорили, не ошибка ли это в программе. Оказалось, плата теряла контакт после прогрева.
Люба медленно закрыла рабочий журнал.
— И если бы в первой записи было сказано, когда именно отказ проявился…
— Мы нашли бы его за час, — закончил Горелов. — Поэтому оператор не должен чинить машину. Он видит на экране грубый признак: текст пополз, цвет ушел, рамка предупреждения не держится, — и вызывает техника. Технику нужны простые аппаратные признаки: питание ниже нормы, потеря синхронизации, готовность видеоплаты, перегрев, если датчик удастся поставить без лишней сложности. Для гражданского макета это пока не отдельный блок и не требование закрытой машины, а контрольные точки и место под будущую индикацию. Если закрытая модификация потом потребует такого контроля, я отдельно разложу, какие сигналы можно взять с общего узла, а какие придется выводить наружу.
Олег придвинул к нему лист с дефектовкой.
— Ладно, зафиксируем список состояний, — сказал он. — Только без канцелярщины. Коротко: что видно снаружи, что проверяется прибором и какой блок вообще имеет смысл снимать.
— Согласен, — Горелов поставил рядом с разделом маленькую галочку. — И добавьте графу «как проявляется отказ». Если цвет уходит на одной плате — это одно. Если то же самое повторяется на запасном блоке, это уже требование к нашей схеме или к способу подключения. Для приемки эти вещи нельзя смешивать.
Наташа перенесла это в таблицу отдельной колонкой. Лист быстро превращался в черновик: на нем появлялись стрелки, скобки, уточнения, номера блоков, пустые места под будущие результаты.
Олег придвинул к себе левый бланк. Николаю Петровичу требовался перечень имущества, которое мастерские смогут принять по акту, а Михалыч уже предупредил: в описи должны сходиться официальный склад и фактическая кладовая аналоговиков.
В шапке он вывел: «Опись неиспользуемого оборудования и радиодеталей». Первой строкой пошли тяжелые осциллографы прошлого десятилетия. Для цифровой логики «Сферы» они были громоздкими и медленными, зато в телемастерской такой прибор годился для настройки развертки и поиска пропавшего сигнала. Измерительные мосты он вписывать не стал, вовремя вспомнив предупреждение Петра Ивановича об отсутствии паспортов.
Следом Олег вписал трансформаторы от списанных стендов, катушки провода, радиаторы, тумблеры, контакты реле и россыпь крепежа — то, что в КБ считали мусором, а в мастерских забрали бы с руками. Отдельной строкой добавил многоконтактные разъемы: бывшие в работе, зато советские, крепкие, с нормальными корпусами.
— Вот это им понравится, — сказала Наташа, заглянув в левый бланк. — Разъемы и радиаторы точно заберут.
— Медный провод тоже, — добавила Люба. — Если он в заводских катушках, а не свален россыпью.
Олег подписал под таблицей: «Состояние уточнить на складе». Потом поставил первую настоящую позицию для Николая Петровича: «Осциллографы С1, списанные, работоспособность не проверялась, комплектность внешним осмотром». Рядом оставил пустую графу для количества. Ее придется заполнить уже в кладовой, по пыльным полкам и инвентарным биркам.
Глава 10
Подготовка доклада
От окна тянуло холодом; батарея под подоконником едва теплилась и не успевала прогреть выцветший ковролин. Январский рассвет пробивался сквозь плотные шторы ведомственной гостиницы, оставляя комнату серой и тесной. Круглый стол из ДСП, покрытый растрескавшимся шпоном, почти исчез под завалами бумаги.
Закрытые тетради и проштампованные выписки остались в спецфонде. Дежурный методично запер плоды их многочасового труда в металлическом шкафу, лязгнув тяжелым замком. На гостиничном столе лежали разрешенные материалы: открытые командировочные предписания, стопка чистых картонных карточек, личные ночные черновики, записанные по памяти обрывки структур, номера тем для повторного запроса через журнал и несколько машинописных выписок из открытых вестников ВИНИТИ. Этого хватало, чтобы собрать доклад с соблюдением режима.
Им снова предстоял зеленоградский техсовет — то самое заседание, где в прошлом году Савельев и технологи разбирали каждое обещание до производственной арифметики. После декабрьского разговора с Сергеевым от Морозова ждали конкретного шага: связать раннюю отбраковку кристаллов, возможности «Сферы-82» и экономику серийной памяти в один проверяемый опыт. Поэтому они и сидели в гостиничном номере над разрешенными выписками, пытаясь из памяти, номеров тем и открытых листков собрать речь для технологов.
Алексей пододвинул
Справа от него Громов, низко склонившись над обрывком миллиметровки, быстро раскладывал будущую программу на крупные шаги. Программист сосредоточенно сопел заложенным носом. Они с Морозовым уже отрезали слишком смелые варианты: автоматическую разводку, прямое управление станком, попытку целиком загружать слой в оперативную память. Теперь Громову нужно было понять, как провести через «Сферу-82» зеленоградский фрагмент топологии: принять данные, проверить формат, разрезать слой на посильные куски и сохранить подозрительные координаты, не утопив машину в памяти.
Напротив программиста Липатов обустроил свой сектор стола со своей обычной сухой аккуратностью. Сергей Дмитриевич занимался другой частью доклада: сводил протоколы отказов и акты вскрытия, чтобы понять, как именно микроэлектроника умирает в реальных цехах. Он отгородился от теоретических выкладок коллег плотным барьером из статистических выписок и линовал чистый лист, перенося туда по памяти цифры зеленоградского заводского брака. Столбцы получались идеально ровными: процент термического пробоя окисла, коэффициент отслоения металлизации при вибрационном тесте, недопустимые отклонения по примесям в кремниевых подложках.
За этими сухими цифрами, перенесенными с желтоватых бланков ОТК, стояла главная проблема. Перекос температурного профиля в диффузионной печи всего на пару градусов или микроскопическая пылинка в чистой комнате превращали сотни часов кропотливой работы тополога в горстку бесполезного кремниевого шлака. Липатов видел практическую физику материалов, умноженную на износ советского парка станков.
— Мы утонем в этом объёме, — глухо произнёс Морозов, отрывая взгляд от разложенных схем. Бумага сухо зашуршала под его пальцами. — Если вынесем на техсовет весь разбор, разговор уйдёт в спор о статьях, ГОСТах и ведомственных приоритетах. Зеленоградцы знают свою технологию, брак, цену машинного времени и реальную дисциплину цеха лучше нас. Проблема в другом: между машинной частью подготовки топологии, заводской статистикой и рабочим столом тополога пока нет небольшой вспомогательной программы проверки. Наша задача — показать, где «Сфера» может дать практическую отдачу на одном узком опыте и реальную экономию.
Громов оторвался от миллиметровки и потер глаза большим и указательным пальцами.
— Идем по функциональным узлам, — хрипло предложил он. — Показываем, где наша программа берёт на себя конкретный участок в их работе. Формат обмена данных. Проверочный алгоритм. Рабочее место тополога. Выстраиваем доклад так, чтобы это выглядело как помощь их маршруту, без претензии перестраивать весь цех.
Липатов аккуратно, строго параллельно краю своей тетради, положил шариковую ручку.
— Ты слишком далеко забежал, Женя, — ровно произнес он. У Липатова такая интонация означала разбор сырой схемы без скидок на авторское самолюбие. — В наших находках слишком много чисто лабораторных допущений. Зарубежные статьи описывают другую чистоту материалов, другую стабильность фотолитографии, другую прецизионную оптику. Если мы выйдем на трибуну техсовета и предложим концепцию, опирающуюся на переводную статью из зарубежного журнала, главный технолог задаст один простой вопрос: на каком именно отечественном оборудовании мы собираемся это печатать? И на этом заседание закроют.
Морозов согласно кивнул.
— Проблема шире станков, Сергей Дмитриевич, — Алексей придвинул к себе лист со тезисами. — Проблема в словаре и в том, с чего начать разговор. Эти статьи здесь читали внимательно; по пометкам в спецфонде видно, что зеленоградцы давно работают с теми же вопросами и свою технологию знают лучше нас. Значит, нам нужно говорить их рабочими категориями: формат данных, допуск, прибор, рамки эксперимента. Мы набросали архитектуру, теперь её нужно перевести на язык цеха и техсовета.
Он обвёл ручкой верхнюю строчку.
— Возьмём топологию. На кремнии микросхема состоит из нескольких физических уровней: дорожки металла, контактные окна, области диффузии. На листе тополога это линии, пятна и контуры разного назначения, а для машины — номера слоёв и координаты. Если каждый станок, каждая большая ЭВМ и каждая местная программа называют эти координаты по-своему, мы утонем уже на обмене данными.
— Нужен машинно-независимый формат, — подхватил Громов. — Геометрия в чистом виде: слой такой-то, точка такая-то, контур замкнулся, запись закончилась. Чтобы его могла прочитать не только их большая машина, но и наша «Сфера».
— На Западе такую идею сейчас оформляют в формат CIF, — кивнул Алексей. — Свежий пример промежуточного языка для описания слоёв. Но на трибуне нам важна не аббревиатура, а принцип: отделить рисунок кристалла от конкретного железа, на котором этот рисунок хранится и проверяется.
— «Промежуточное представление топологической информации», — ровно произнёс Липатов, не отрываясь от своих выписок по проценту брака. — Слово «унифицированное» оставим на потом. Унифицированным оно станет, когда профильное министерство спустит ГОСТ. А пока мы отстаиваем нашу концепцию.
Громов качнулся на задних ножках стула.
— Блеск. Идеальная канцелярская формулировка, чтобы ни за что не отвечать, если опыт провалится.
Морозов коротко усмехнулся и встал, разминая затекшую спину. Прошёлся от окна к двери и обратно, чтобы окончательно согнать сон.
— Хорошо, — сказал Алексей, возвращаясь к столу и опираясь костяшками пальцев о край картона. — Возвращаемся к исходной схеме. Концепция «СЛОЙ-81». Их действующий маршрут подготовки топологии целиком трогать рано. До полноценной САПР нам как до луны. Зеленоградские большие машины держат на лентах и в оперативной памяти массивы, слишком крупные для нашей «Сферы», а часть работы всё равно остаётся за топологами и рубилитом. У К580 шестнадцать адресных линий: даже в предельной конфигурации он прямо адресует только шестьдесят четыре килобайта. В нынешних опытных машинах стоит вдвое меньше, тридцать два килобайта, и для зеленоградской задачи этого тем более мало. Но даже если довести стенд до полного адресного поля, верхнюю часть заберет МикроДОС, еще кусок уйдет на буферы диска, служебные таблицы и экран. На программу и данные останется несколько десятков килобайт. Поэтому мы предлагаем «СЛОЙ-81» как малое автоматизированное рабочее место у стола инженера-тополога.
— Значит, на техсовет выносим не готовую САПР, а первый макетный образец, — уточнил Громов.
— Именно, — сказал Морозов. — Иначе это останется разговором про будущее, а нам нужен опыт, который можно показать вживую. От Зеленограда мы просим исходные данные: формат координат, единицы измерения, допустимые зазоры, порядок доступа к данным и носитель, с которого мы сможем честно прочитать их фрагмент.
Громов поморщился и вернулся к листу. Ему нравилась сама постановка: программа получала выход на реальное производство, где любой байт упирался в железо, дискету и чужую технологическую дисциплину.
— Тогда нам понадобится машина для стенда, — сказал он. — Сейчас их всего три.
Морозов кивнул. В декабре эти три опытные «Сферы-82» выглядели почти роскошью: одна была занята демонстрациями МикроДОС и «Сметы», вторую Седых после бухгалтерского показа уже просил придержать под хозяйственные испытания, третья уходила под сеть, дисководы и текущие проверки КБ. Для настоящего зеленоградского опыта этого парка не хватало.
— Значит, после техсовета будем выбивать еще, — сказал Алексей. — Для первого разговора достаточно показать расчёт и готовность написать опытную версию программы. Если они дадут формат и опытный фрагмент, во Владимире придется собрать отдельную «Сферу-82» под стенд. Лучше сразу с цветным выводом: слои, ошибки и предупреждения на таком экране понятнее. Первый проход защитим на чёрно-белом экране с распечаткой, а цвет оставим следующей ступенью, когда Олег доведет ВКУ.
Громов быстро закивал, возвращаясь к своей миллиметровке.
— Тогда считаем честно, — сказал он и быстро занял чистый угол листа. — В наших опытных машинах сейчас тридцать два килобайта. Для зеленоградского стенда надо сразу закладывать расширение до полного адресного поля К580. Шестьдесят четыре килобайта — потолок без сложного переключения дополнительных блоков памяти. Такая схема нам сейчас только помешает: МикроДОС рассчитана на обычное адресное поле, программа начнёт давать сбои, а на техсовете вправе спросить, кто это будет сопровождать в цехе. Если под систему, буферы и таблицы уйдет хотя бы десять-двенадцать килобайт, мне останется около пятидесяти. В эти пятьдесят весь слой памяти не поместится. Значит, слой режем на окна: прочитал кусок, проверил прямоугольники, записал подозрительные координаты, взял следующий кусок.
— И контрольные суммы входных данных тоже по кускам? — уточнил Липатов.
— А как иначе? — Громов постучал карандашом по полю миллиметровки. — На входе последовательность записей: слой, координаты, ширина проводника, зазор. В памяти держу таблицу правил, несколько рабочих списков и один-два буфера чтения. Все остальное идет с диска. Если придется работать с перфолентой, будет медленнее, но принцип тот же. Восемь разрядов процессора нам не мешают складывать координаты, просто длинные числа придется тащить парами байтов. Неприятно, зато честно.
— Вот это уже можно обещать, — Морозов кивнул. — Для стендового экземпляра нам нужна «Сфера-82» с памятью, доведённой до полного адресного поля. Рабочая программа будет методично обрабатывать фрагменты и ловить грубую ошибку раньше, чем она станет испорченным фотошаблоном.
— Тогда вывод полной картинки на экран пока откладываем, — продолжил Громов. — На первом этапе работаем со списком координат. Подаем «Сфере» текстовый файл с координатами дорожек: левый нижний угол, правый верхний угол, номер слоя. Моя служебная программа проверяет формат и ищет грубые топологические пересечения по геометрии прямоугольников. Машина выдает список подозрительных координат, а тополог проверяет их по своим чертежам до того, как нести пленку на большой координатограф.
— Именно, — Морозов перевел взгляд на Липатова. — Но для техсовета нужен не только способ проверки, а объект опыта. Конкретный участок схемы, который для них сейчас действительно важен, а для нашей программы достаточно удобен в качестве первой работы.
Он сдвинул в сторону чистые карточки, освобождая место на столе.
— Динамическое ОЗУ. Та самая микросхема памяти на шестьдесят четыре килобита, над которой они сейчас работают.
Громов поднял глаза от исписанной миллиметровки.
— Память как объект выбрана не случайно, — сказал он уже без прежней насмешки.
— Именно, — кивнул Морозов. — Оперативная память сейчас самый дефицитный и дорогой узел. Для полной «Сферы-82» нам нужно задействовать всё адресное поле К580, а каждую микросхему ОЗУ приходится добывать отдельно. Если Зеленоград доведет выход годных по такой памяти до приемлемого уровня, серийная машина станет дешевле и надежнее. Проверяем их топологию на понятном регулярном участке — и одновременно показываем, почему эта работа нужна нам самим.
Липатов перестал линовать бумагу. Его взгляд стал цепким, оценивающим.
— Поясни.
— Жесткая регулярная структура, — сразу ответил Морозов. — Ячейки памяти повторяются на кристалле тысячами раз. Если в базовом шаблоне есть топологическая ошибка, она повторяется по всей пластине. Брак стопроцентный. Логика процессора для наших текущих программных средств слишком сложна: там много нерегулярных связей и нестандартных ячеек. Матрица памяти ближе к чистой математике. Для первого опыта берем периферийную обвязку ОЗУ: дешифраторы адреса, усилители считывания.
Алексей наклонился над столом.
— Мы предлагаем «СЛОЙ-81» как средство проверки одного критического слоя памяти до выхода на фотошаблоны. Если на этом ограниченном фрагменте мы докажем, что способны поймать короткое замыкание металлизации до того, как завод сожжет кремний в печи, у техсовета появится экономическое основание выделить нам следующий участок и машинное время.
— То есть оставляем один показательный опыт, — медленно проговорил Громов. — Загрузили координаты, прогнали проверку формата, посчитали контрольную сумму слоя. Выдали топологу распечатку с ошибками. Один опытный стенд, один участок, один наглядный результат.
Громов кивнул собственным мыслям и потянул к себе чистую перфокарту. Вдоль верхнего края он набросал структуру будущих данных: массивы координат, управляющие символы, алгоритм подсчёта контрольной суммы. На лист ложились байты и адреса, которые способна переварить «Сфера-82».
Липатов молча наблюдал, как на столе растёт стопка исписанных черновиков. Затем расстегнул пиджак и достал из внутреннего кармана красный карандаш.
Сергей Дмитриевич придвинул к себе лист, где Морозов крупным почерком расписал план выступления. Красный грифель с хрустом прошёлся по бумаге, перечёркивая жирной чертой абзац о прямой передаче данных на станок.
— Вот здесь нас имеют право остановить, — ровным голосом сказал Липатов. — Имитировать загрузку тестового фрагмента мы сможем. Выдавать данные на реальную производственную линию пока рано. Системная часть ещё не прошла проверки. Если программа Жени промахнётся хотя бы на один бит, зеленоградский координатограф запорет плёнку рубилита. Знаете, кто будет оплачивать брак? Наше владимирское КБ. Выставят такую неустойку, что мы до пенсии будем паять кабели в счёт погашения ущерба.
Громов подался вперёд, локтем сдвинув к краю стола пустые бланки.
— Сергей Дмитриевич, если отрезать автоматическую выгрузку, останется только отметка на экране! Мы покажем ошибку топологии, но машина её не исправит.
— Именно, — невозмутимо согласился Липатов. — Мы только локализуем проблему. Один участок. Один слой. Одна
Морозов потер переносицу. В голове у него цепочка выглядела простой: найти дефект, пересчитать маску, сразу выдать исправленный вариант. Красная черта Липатова вернула схему к первому шагу. Машина только подсветит координату. Исправлять бракованный участок придётся живому топологу.
— Хорошо, — сказал Алексей и сделал помету на карточке. — Прямую передачу на станок снимаем. Оставляем предварительную оценку тестового участка и ручную правку.
Липатов коротко кивнул. Красный карандаш скользнул выше по листу. Слово «внедрить», написанное в заголовке, оказалось зачёркнуто. Сверху появились аккуратные, рубленые буквы: «проверить гипотезу».
— К внедрению допускают решения после ведомственных испытаний, — ровно произнёс Сергей Дмитриевич, стряхивая красную пыль с бумаги. — А у нас пока перенос журнальной идеи на доступные микросхемы и реальные зеленоградские данные. На техсовете имеют право спросить, как именно алгоритм поведёт себя на конкретной топологии. Красивой идеи мало. Каждый шаг придётся обосновать методикой.
— Тогда разложим, где вообще может родиться ошибка, — сказал Алексей. — Соринка на плёнке, брак фоторезиста, нарушение травления — это чистое производство. Ошибка в исходной электрической схеме — тоже мимо нашего первого опыта. Этим занимаются схемотехники и технологи. Для нашей малой программы остаётся другая задача.
— Остаётся геометрия, — подхватил Громов, уже сердито, но заинтересованно. — Слишком узкая дорожка. Недопустимо малый зазор между двумя проводниками. Лишнее пересечение там, где слои должны пройти раздельно.
— Обрыв металлизации, перемычка, неверное перекрытие контактного окна, — добавил Морозов. — Несовмещение слоёв тоже важно, но для первого опыта это слишком широко.
— На первом этапе берём то, что можно проверить числами, — сказал Липатов. — Ширина, зазор, пересечение прямоугольников на одном слое, контрольная сумма входных данных. Всё остальное оставляем за пределами доклада.
— У нас получается указатель ошибок, — проворчал Громов. — Нашли подозрительное место, вывели координату и отдаём топологу. Для программиста это всё равно что остановиться на полпути.
— Это пределы нашей ответственности, — поправил Липатов. — На первом опыте мы только локализуем нарушение. Один участок. Один слой. Одна координата, которую можно заново получить при заводской проверке. Дальше тополог смотрит на чертёж и правит руками.
Карандаш снова зашуршал. Обширное «управление топологией» Липатов заменил сухой «индикацией геометрических ошибок». Рядом с «автоматической правкой топологии» появилась помета: «ручное внесение корректировок топологом».
Морозов смотрел, как из черновика исчезают слишком общие обещания. На листе оставались тезисы, которые можно было подтвердить формулой, существующей методикой или отдельной проверкой на непроизводственном фрагменте.
— Значит, показываем проверку рядом с их действующим маршрутом подготовки топологии, — сказал Алексей, разглядывая исполосованный красным черновик. — Показываем место, где настольная машина снимает с тополога грубую проверку раньше фотошаблона.
Липатов отложил затупившийся карандаш.
— Вот это уже похоже на разговор с техсоветом. Один участок топологии, один проверочный прогон и чёткие границы ответственности. Тогда они начнут считать график, машинное время и риск для цеха, а не разбирать абстрактные планы.
Доклад они правили еще около двух часов. Липатов вычеркивал слишком общие обещания, Громов возвращал технические подробности, Морозов оставлял только то, что можно было подтвердить на одном фрагменте топологии.
К концу работы на столе остались лежать только три плотные карточки. На них Морозов свёл весь хаос ночных выписок в три защитимых тезиса.
Первая: запрос описания их внутреннего формата файлов для написания конвертера. Вторая: память и объект опыта — динамическое ОЗУ на шестьдесят четыре килобита, проверку которого «Сфера» с предельным объёмом адресного поля будет «жевать» по частям, фрагмент за фрагментом. Третья, с жирной красной подчёркнутой линией от Липатова: только локализация, никакой машинной правки. Машина выдаёт подозрительную координату — штатный зеленоградский тополог проверяет её глазами и правит скальпелем по рубилиту.
Морозов перечитал написанное и щёлкнул колпачком авторучки. Если на техсовете зайдёт речь о паразитных ёмкостях, технологических задержках или аппаратных ограничениях К580, у них теперь был чёткий аргументированный ответ на любую попытку обвинить их в теоретическом прожектёрстве.
— Значит, просим согласовать узкий локальный эксперимент, — ровным голосом сформулировал Морозов, собирая карточки. — Нам нужен один непроизводственный фрагмент топологии ОЗУ, несколько минут машинного времени на БЭСМ-6 для выгрузки контрольного массива координат на магнитной ленте, описание самого формата и согласованное место для нашей опытной «Сферы-82», когда мы соберём её во Владимире.
Липатов методично собрал свои статистические выписки, аккуратно постучал краем стопки по столешнице, выравнивая листы миллиметр к миллиметру, и спрятал их в серую картонную папку.
— Вот в таком виде, — констатировал Сергей Дмитриевич, туго завязывая тесёмки папки, — с этим докладом можно идти на техсовет.
Глава 11
Техсовет
Слава Крылов шёл навстречу с узким рулоном чертежей под мышкой и уже на ходу сверял свои часы с настенными над дверью. Увидев Морозова в коридоре второго этажа, возле перехода в административный корпус, он ускорил шаг и придержал тяжёлую створку.
— Алексей Николаевич, как раз вовремя, — сказал он и пожал Морозову руку. Громову и Липатову кивнул отдельно. — Савельев уже в зале. Две минуты у нас есть, пока все рассаживаются.
Они пошли рядом. Коридор был широкий, с высоким потолком, глухими дверями лабораторий и табличками, где длинные названия отделов не помещались в одну строку. За одной дверью глухо стучала машинка, за другой кто-то негромко спорил о графике испытаний.
— Сразу скажу главное, — Слава понизил голос, но не сделал из этого тайны. — Савельев прошлый разговор помнит. Идею он с ходу не отвергает, иначе вас бы сегодня не слушали. Но если услышит, что вы хотите переделывать весь маршрут, закроет вопрос за пять минут.
Морозов понял: Савельев просто сменил способ спора. После прошлого техсовета пустая насмешка над владимирцами уже выглядела бы слабостью. Теперь он будет искать место, где опыт не проходит по маршруту, актам и ответственности, и там остановит его совершенно законно.
Морозов нащупал в кармане три плотные карточки.
— Условия опыта мы как раз и привезли.
— Тогда держитесь за них, — сказал Слава. — Тут спор пойдёт с двух сторон. Сначала топология: это уже не принципиальная схема, а рисунок будущего кристалла по слоям — где металл, где диффузия, где контактные окна и зазоры. Потом технологический маршрут: как этот рисунок проходит через рубилит, плёнку, фотоповторитель и травление, пока не становится реальным участком на пластине.
— То есть Ланская будет смотреть, что нарисовано, а Руденко
— Грубо, но верно, — сказал Слава. — Для них бумажная координата ещё не дорожка на кремнии.
Липатов достал блокнот и, не сбавляя шага, сделал короткую пометку.
— Выписка, сверка, подпись, — сказал он.
— И акты, — добавил Слава. — Брак здесь не просто лежит в шкафу, а числится. Плюс у Научного центра свои большие ЭВМ, свои программы и порядок записи на носители. Так что лучше сразу говорить честно: первый опыт, ручной ввод, никаких обещаний про чужие машинные массивы.
— Спасибо за предупреждение, — сухо сказал Громов.
Перед дверью зала техсоветов Слава остановился и перехватил рулон поудобнее.
— Спорить будут по делу. Каждый отвечает за свой участок.
— Так и должно быть, — ответил Морозов.
В зале уже шумели стульями. На боковой доске ещё не стёрли расчёт по выходу годных кристаллов с какого-то предыдущего обсуждения; рядом на передвижном экране булавками закрепили помятую диаграмму технологического маршрута. На подоконнике лежали две папки, перевязанные тесьмой, и картонный тубус с чертёжными копиями.
Савельев сидел ближе к середине стола и разговаривал с Руденко, но при входе владимирцев сразу поднял голову.
— Алексей Николаевич, проходите, — сказал он. — Начнём без промедления.
Морозов кивнул присутствующим и остановился у небольшой деревянной трибуны сбоку от доски. Лак на её краю холодил пальцы; поперёк поверхности тянулась старая царапина, будто кто-то когда-то провёл по дереву металлической линейкой. Он положил перед собой три карточки. На каждой было всего по нескольку слов: исходные данные, условия опыта, остановка.
Справа от трибуны устроились Громов и Липатов. Евгений поставил портфель на колени и прижал обеими руками; внутри лежали черновики программ, выписки и листы с пометками, которые он всю дорогу боялся перепутать. Сергей Дмитриевич разложил блокнот, карандаш и тонкую папку с выписками. Со стороны он казался спокойным, но Морозов уже знал эту неподвижность: перед спором Липатов всегда слушал именно так, будто заранее примерял каждую формулировку к будущему протоколу.
Напротив рассаживались зеленоградцы, и после слов Славы Морозов уже понимал, за каким участком сидит каждый. Ирина Павловна Ланская придвинула лист с координатной сеткой и положила рядом цанговый карандаш. Руденко сел чуть боком, чтобы видеть и доску, и докладчика. Ахметов аккуратно выровнял папку с актами испытаний. Кац посмотрел поверх очков на Громова и задержал взгляд дольше, чем требовала обычная вежливость. Гальперин держал перед собой чистый лист, но ручку пока не открыл. У стены, возле плотно задвинутых штор, сидел незнакомый Морозову человек в тёмно-сером костюме с раскрытым блокнотом на коленях.
Савельев постучал костяшками пальцев по столу. Разговоры стихли.
— Товарищи, переходим к вопросу о владимирском предложении, — сказал он. — Алексей Николаевич, прошлый разговор мы помним. Общий разговор о будущем автоматизации уже был. Сегодня нам нужен ограниченный опыт, который можно провести без ущерба для текущего маршрута. Слушаем вас.
Морозов на секунду посмотрел на свои карточки. После гостиничных черновиков они казались слишком простыми, зато на них осталось только то, за что можно было отвечать.
— Здравствуйте, товарищи, — сказал он. — Спасибо, что нашли время. Мы предлагаем начать с одного оформленного случая брака и одной проверочной задачи. Наша цель сейчас простая: показать, где малая машина может помочь на более раннем этапе, и сразу определить, где этот опыт должен остановиться.
Он сдвинул первую карточку к краю трибуны.
— Вы знаете, как возрастает стоимость отбраковки к концу маршрута, — сказал Морозов. — Я только напомню порядок. Сначала занято машинное время большой ЭВМ, затем подготовлены материалы, вырезан рубилит, сделан фотошаблон, проведены технологические операции по пластине. Потом кристалл идёт на контроль, а труд цеха уже затрачен. Если дефект найден после посадки в корпус и разварки выводов, к убыткам добавляются сам корпус, золото, повторные испытания, акты брака и расследование причин.
Ахметов чуть заметно повернул карандаш в пальцах. Ланская не записывала; она смотрела на доску, будто уже примеряла слова Морозова к реальному слою.
Морозов взял мел и на свободном краю доски набросал короткую цепочку: «геометрия слоя — проверка — ручная правка — маршрут». Подумал и рядом поставил вопросительный знак.
— Для удобства мы называем это «СЛОЙ-81», — сказал он. — Это комплекс промежуточной проверки топологии: программа, правила ввода, контрольная сверка и лист результата. Он может работать на малой машине вроде будущей «Сферы-82», потому что у нас уже есть задел по железу и программам. При свободном машинном времени тот же порядок можно перенести и на большую ЭВМ. Сейчас на столе практический порядок работы для первого опыта: взять разрешённые данные, бумажные или машинные, привести их к единой записи, проверить один фрагмент и получить результат, который можно повторить.
Он постучал мелом по первому звену цепочки.
— В первом опыте «СЛОЙ-81» будет вспомогательной программой для предварительной проверки ограниченного фрагмента. Мы берём один слой или его часть, вручную вводим разрешённые координаты и смотрим только грубые геометрические нарушения: зазор, пересечение, неверное перекрытие контактного окна. На выходе программа должна дать таблицу подозрительных мест и контрольную сумму входных данных.
Кац чуть заметно усмехнулся при слове «ручной». Громов напрягся, но промолчал.
— Решение остаётся за топологом, — продолжил Морозов. — Машина ничего не передаёт в производство. Она помогает раньше увидеть место, которое человек потом проверит по своим правилам.
Морозов повернулся к Савельеву.
— Для первого шага нам нужен оформленный объект, на котором можно проверить саму пригодность подхода: известный случай брака и разрешённая выписка по нему.
Ланская наконец подняла карандаш.
— Сам он не появится, Алексей Николаевич. Кто будет делать выписку координат? Тополог? Тогда ему придётся потратить на это рабочий день. Техник? Тогда мы получим ошибки переписывания. Если выписка идёт от машинного массива, нужен человек, который понимает, где номер слоя, где масштаб, где служебная отметка. Для вас это один ограниченный опыт, а для отдела — сорванный пересчёт.
Она говорила без нажима. От этого вопрос звучал жёстче.
— И ещё, — Ланская постучала карандашом по своему листу, — какой именно допуск вы проверяете? Красивое слово «зазор» ничего не значит. На одном слое одно правило, на переходе другое, возле контактного окна третье. Если ваша программа выдаст мне двадцать подозрительных мест, кто решит, какие из них настоящие?
Морозов кивнул и сделал пометку на краю карточки.
Руденко не стал ждать своей очереди.
— Бумажная координата — ещё не фотошаблон, — сказал он. — На бумаге у вас линия получается
Он повернулся к Ланской:
— Ирина Павловна это каждый день руками ловит. Математика может быть верной, а материал всё равно живёт отдельно от бумажной сетки.
Ланская не улыбнулась, но карандаш перестала крутить.
Ахметов открыл папку. Бумага внутри была разлинована таблицами, и сама папка выглядела весомее любого устного согласия.
— Меня интересует, как вы этот результат собираетесь оформлять, — сказал он. — Допустим, вы получили выписку, ввели координаты и нашли совпадение с известным отказом. Что это доказывает? Что бумажную выписку без ошибки перенесли в память вашей машины? Что исходная геометрия была плохой? Что стенд правильно забраковал кристалл? Или что все три причины случайно сошлись?
Он перевернул лист.
— Средство контроля должно иметь границы. Кто подтверждает данные? Каким актом списан материал? Где лежит пластина? Кто поручится, что ваша работа не испортит отчётность отдела контроля? Списанный брак тоже не песок на дворе. Он числится, хранится, передаётся и уничтожается по правилам.
Липатов сделал короткую пометку. Морозов заметил: именно этот вопрос Сергей Дмитриевич ждал с самого утра.
Кац неторопливо снял очки, протёр стекла сложенным носовым платком и надел обратно.
— А я пока не услышал главного для своего участка, — сказал он. — В каком виде ваша группа получает данные? Бумажная распечатка — это один язык. Машинный массив на большой ЭВМ — другой. На ленте один формат записи, в перфокартах другой, в наших служебных программах третий. Там есть сетка, масштаб, условные номера слоёв, отметки библиотек, признаки повторяющихся ячеек. Ваша разработка может быть полезной, но вы не можете обещать, что она поймёт зеленоградские массивы по одному внешнему виду распечатки.
Громов резко вдохнул. Морозов краем глаза увидел, как его пальцы сжали защёлку портфеля.
— Роман Борисович, — начал Евгений.
Морозов поднял ладонь, останавливая его. Евгений сжал губы и откинулся на спинку стула. Вступать в спор о форматах без самих форматов на руках было самоубийством.
Савельев едва приметно кивнул, оценив, что владимирцы не сорвались в слепую защиту.
— Вопрос по форматам принимается как критический, — ровно сказал Морозов, делая пометку на карточке. — Мы к нему обязательно вернемся. Кто следующий?
Гальперин снял колпачок с ручки. До этого он слушал как человек, которого тревожила сама постановка задачи.
— Меня волнует не только формат одной выписки, — сказал он. — У Научного центра уже есть свои локальные вычислительные средства, свои программы, свои библиотеки и свой порядок работы с большими машинами. Если каждая группа начнёт приносить свою микро-ЭВМ со своим порядком записи, мы получим разнобой. Сегодня «СЛОЙ-81», завтра ещё три подобных средства, послезавтра никто не сможет понять, какие данные откуда пришли и кто за них отвечает.
Он посмотрел на Громова:
— Микро-ЭВМ мало быть удобной у стола. Ей придётся ужиться с уже существующей линией.
Савельев сцепил пальцы. В комнате стало тише; даже карандаш Ланской замер на полях.
— Алексей Николаевич, — сказал он, — в прошлом году вы уже приходили к нам с сильной идеей. Слишком смелой, чтобы от неё можно было просто отмахнуться. Но после доклада фотошаблон сам не появляется, и хорошая мысль не отменяет технологический план цеха.
Он говорил ровно, без прежней резкости, и от этого Морозову стало труднее.
— У нас уже был такой случай со стендом контроля, — продолжил Савельев. — Измерительная цепь дала паразитную ёмкость, сигнал кристалла исказился, линия встала, потом неделю разбирались, где дефект: в кристалле, стенде или самой проверке. Все хотели как лучше. В результате получили остановку и стопку объяснительных. Поэтому вопрос простой: как вы поставите опыт так, чтобы возможная ошибка проверки не оказалась вреднее самого дефекта?
Молчаливый наблюдатель у стены сделал запись. Ручка прошуршала по бумаге тихо, но отчетливо.
Морозов посмотрел на свои три карточки и понял, что часть написанного придётся убрать.
Он перевернул первую карточку лицом вниз.
— Тогда договоримся сразу: на первом шаге работаем без машинного времени ваших ЭВМ, — сказал он.
Кац чуть поднял брови. Громов повернул голову так резко, что скрипнул стул.
— Лёша…
— Без машинного времени, — повторил Морозов спокойно. — Роман Борисович прав. Пока у нас нет описания формата и ответственного человека с вашей стороны, любая программа преобразования данных будет самодеятельностью. Мы начнём с бумажной выписки и ручного ввода. Да, это медленнее. Зато сразу видно, где ошибка программы, где ошибка переписывания, а где дефект в исходной геометрии.
Липатов кивнул, не поднимая глаз.
— Топологов постараемся не отвлекать, — Морозов повернулся к Ланской. — Нам нужен уже оформленный фрагмент, на котором работа завершена и причина брака известна. Если выписку может подготовить техник из архива по имеющимся документам, хорошо. Если нет — мы сами введём только то, что вы разрешите переписать под контролем вашего человека. В маршрут мы не предлагаем вносить исправления: выдаём список координат, где наша проверка нашла нарушение, и сверяем его с уже известным отказом.
Ланская слегка прищурилась.
— То есть вы не просите мой отдел проверять все ваши находки?
— Нет. На первом опыте вы даёте нам один известный случай и потом смотрите, совпал ли наш вывод с уже оформленным браком. Если мы укажем двадцать ложных точек, опыт не удался. Если промолчим там, где отказ известен, тоже не удался.
Ланская провела карандашом по краю листа.
— Это честнее, — сказала она. — Но тогда не называйте это проверкой топологии. Это проверка вашей способности прочитать один оформленный случай.
— Запишем именно так, — сказал Морозов.
Липатов уже записывал.
Морозов повернулся к Руденко:
— Физику фотошаблона мы на первом шаге не заменяем. Плёнка, натяжение, масштаб и фотоповторитель остаются за вами. Мы берём тот случай, где производственный маршрут уже показал брак. Наша задача — понять, есть ли в исходной геометрии признак, который можно было увидеть раньше. Если брак возник только из-за материала, травления или смещения на оборудовании, «СЛОЙ-81» должен выдать пустой список подозрительных мест. Это тоже результат.
Руденко хмыкнул.
— Пустой список удобнее всего подогнать.
— Тогда увидите плохую программу и закроете вопрос, — ответил Морозов.
Громов тихо фыркнул. Кац чуть тронул уголок губ.
Ахметов постучал пальцем по папке.
— Со списанным материалом всё равно нужен порядок.
— Поэтому к
Ахметов не ответил сразу. Он перелистнул две страницы, нашёл чистое поле и сделал там короткую отметку.
— Изолятор брака по форме номер четыре, — сказал он. — Там есть оформленные случаи брака микросхем памяти. Но я не отдам вам даже бумагу без визы лаборатории и без отдельного журнала.
— Журнал заведём здесь, — вставил Липатов. — Номер объекта, источник выписки, кто разрешил переписать, кто вводил, контрольная сумма введённых данных, результат проверки, решение о продолжении или остановке. Никаких устных переносов. Если хотя бы один пункт не заполнен, опыт не засчитывается.
Ахметов посмотрел на Липатова внимательнее, чем раньше.
— Вы метролог?
— Я инженер, — ответил Липатов. — Если начать без журнала, потом все ищут крайних.
Савельев слегка шевельнул пальцами, но промолчал.
Кац откинулся на спинку стула.
— Ручной ввод всё равно требует порядка, — сказал Кац. — Как у вас будет устроена строка?
Громов уже был готов. Морозов кивнул ему: теперь можно.
— Сделаю жёсткую форму ввода, — сказал Громов, тщательно подбирая слова. — Номер слоя, порядок координат, признак брака, служебные отметки, контроль. Сначала всё будет идти с разрешённой бумажной выписки.
Кац, похоже, ожидал самоуверенного обещания прочитать любой формат и потому на секунду замолчал.
— Разумно, — сказал он наконец. — Но ручной ввод тысячи координат тоже породит мусор.
— Породит, — согласился Громов. — Поэтому и нужна контрольная сумма по каждой странице ввода. И сверка по распечатке. Если человек при вводе ошибся, это должно всплыть до проверки геометрии.
— Тот, кто будет вводить данные, — это вы?
— На первом шаге — я. Если Алексей Николаевич не найдёт мне человека, у которого глаза не устанут после третьей сотни чисел.
Ланская неожиданно сказала:
— У нас есть техник, которая ведёт архивные выписки аккуратнее половины инженеров. Но я не обещаю, что у неё будет на это время.
— Я и не прошу этого обещать, — ответил Морозов. — Сначала объект. Потом станет понятно, сколько труда потребует опыт.
Гальперин наконец сделал первую запись на своём листе.
— Я хочу, чтобы в решении было отдельно сказано: владимирская машина не вводится в линию Научного центра как обязательный элемент. Она работает рядом, на одном разрешённом случае. Если опыт даст пользу, следующий разговор будет о порядке обмена и общих правилах, а не о подчинении нашей линии вашему порядку записи.
Слово «подчинении» прозвучало сухо, без обиды. Громов перевёл взгляд на Каца.
— Согласен, — сказал Морозов раньше, чем Евгений успел ответить. — На вашу линию мы не претендуем. Если опыт даст пользу, порядок обмена обсудим отдельно.
— И слово «унифицированный» сегодня больше не произносите, — добавил Гальперин.
— Договорились, — спокойно ответил Морозов.
На обороте первой карточки он дописал в углу: «один разрешённый случай».
Савельев медленно расцепил пальцы.
— Хорошо, — сказал он. — Тогда так и запишем: речь идёт о подготовке ограниченного опыта. Доступа к линии и машинного времени это решение не даёт. Всё, что шире одной разрешённой выписки, пойдёт отдельным вопросом.
Морозов кивнул.
Савельев посмотрел на Ахметова.
— Тимур Рашидович?
Ахметов закрыл папку, но ладонь с неё не убрал.
— Только через изолятор брака, только оформленный случай и только журнал. К тому же я хочу видеть критерии прекращения опыта: при каком результате работу сворачиваем без споров.
Липатов поднял карандаш.
— Общие критерии лучше описать сразу. Если нет связанного акта, сорвался ввод или программа не нашла известный дефект, продолжать нечего. А предельное число ложных срабатываний установим после выбора объекта, но до ввода: пока мы не видели выписку, эту цифру можно только выдумать.
— До ввода, — уточнила Ланская.
— Именно, — сказал Липатов.
Руденко провёл большим пальцем по краю стола.
— Мне нужно видеть, что вы называете геометрическим признаком. Не общими словами. На одном примере: здесь контактное окно, здесь дорожка, здесь зазор. Если вы проверяете только прямоугольники на бумаге, так и пишите.
— Напишем, — сказал Морозов. — И попросим вас проверить формулировку до начала работы.
Руденко кивнул и отодвинул лист к Савельеву.
Кац посмотрел на Громова.
— А я хочу копию описания формата входных данных. Не код, не программу, а бумагу: как вы обозначаете слой, координаты, порядок обхода и контрольную сумму. Чтобы потом не выяснилось, что вы проверяли не зеленоградскую выписку, а собственную запись.
Громов ответил не сразу. Он провёл пальцем по защёлке портфеля и посмотрел на свой блокнот.
— Получите, — сказал он. — Только без права смеяться над почерком.
— Над почерком не обещаю, — сухо сказал Кац. — Над форматом — посмотрим.
Руденко молча поставил на своём листе короткую галочку. Савельев придвинул к себе чистый лист.
— Тогда решение такое, — произнёс он и начал писать, проговаривая вслух. — Разрешить группе из Владимира подготовку ограниченной опытной работы на базе тринадцатой лаборатории. Предмет — один оформленный случай брака микросхемы памяти из изолятора по форме номер четыре. Работа ведётся по разрешённой бумажной выписке, без изъятия образца, без вмешательства в действующие стенды, без загрузки вычислительного комплекса и без обращения к машинным массивам Научного центра.
Наблюдатель у стены поднял голову.
Савельев продолжил и быстро записал фамилии в столбик.
— Ланская, Руденко — топология и маршрут. Ахметов — брак и журнал. Громов, с вас описание формата входных данных для Каца. Гальперин смотрит, чтобы опыт не задел линию Научного центра. Со стороны Владимира ответственными считаем Морозова, Громова и Липатова. На подготовку объекта и методики — неделя. Потом соберёмся ещё раз и отдельно решим, можно ли делать первый прогон.
Морозов хотел было сказать, что управятся быстрее, но остановился. В зеленоградских условиях неделя выглядела почти щедрым сроком.
— Принимаем, — сказал он.
Савельев положил ручку.
— Алексей Николаевич, — сказал он уже тише, — меня смущает любая идея, последствия которой нельзя проконтролировать по бумагам. Покажете на одном браке, что умеете отвечать, — будем говорить дальше.
— Именно за этим мы и приехали, — ответил Морозов.
Он сказал это ровно. Липатов тем временем подчеркнул в блокноте слово «неделя».
Расходились не сразу. Ланская подошла к Руденко с листом, и они вполголоса стали спорить о том, какой случай брака вообще можно показывать владимирцам без лишних объяснений. Ахметов уже писал на полях своей папки номера форм. Кац задержался у стола Громова.
— Евгений Александрович, — сказал он, — я пришлю вам образец нашей записи. Там рядом стоят условный номер слоя и номер операции в маршруте. На бумажной выписке их легко спутать, особенно если не видеть полной папки.
— Тогда начнём с образца, — сказал Громов. — Разведу их в разные поля.
— И отдельно отметьте источник, — добавил Кац. — Одна и та же цифра в разных папках может означать разные вещи.
Громов кивнул. Раздражение ушло: Кац говорил не для того, чтобы поставить его на место, а чтобы первый опыт не утонул в чужой нумерации.
— Принято, — сказал он. — Сначала договоримся о записи, потом будем считать.
Липатов тем временем уточнил у Ахметова номер журнала и шифр папки изолятора брака, аккуратно переписал их в блокнот. Потом сверил запись с шифром на папке Ахметова и поставил рядом короткую черту.
В коридор они вышли молча. За дверью техсовета воздух казался прохладнее. Где-то в глубине здания звякнула тележка, потом послышались быстрые шаги и женский голос, называющий номер лаборатории.
У проходной Громов первым нарушил молчание:
— Значит, первый шаг даже не вычислительный, — сказал он. — Сначала придумываю, как эти координаты вообще записывать на бумаге так, чтобы потом самому же не утонуть в цифрах.
— Зато никто не сможет сказать, что ты исказил их машинный формат, — заметил Липатов.
— Сергей Дмитриевич, вы умеете утешить так, что хочется сразу списать себя по акту.
Липатов застегнул пальто.
— Сначала нужно получить саму выписку. Потом понять, кто её переписывал, по какой сетке, где масштаб, где слой, где признак брака. Если на бумаге третий слой, а в акте четвёртый, нас остановят раньше первого ввода.
— Кац остановит, — сказал Громов. — И будет прав, что самое неприятное.
Морозов толкнул тяжёлую дверь. Снаружи ударил январский воздух, сухой и резкий. По ступеням тянуло снежной пылью; у фонаря дворник сгребал жёсткий снег к бордюру.
— Вечером садимся за формат ввода, — сказал Морозов, спускаясь с крыльца. — И сразу отмечаем, что просим у Ахметова, Ланской и Руденко. Кац должен увидеть в нашей бумаге слой, координату, масштаб и контрольную сумму.
Липатов убрал блокнот во внутренний карман.
— По Научному центру отдельный лист не заводим, — добавил Морозов. — В протоколе уже сказано: их линию не трогаем.
Громов сунул руки в карманы и пошёл рядом.
— Ты понимаешь, что мы сейчас взялись за самую нудную часть работы? Ещё не программу писать, а готовить для неё чужой брак на бумаге.
Морозов усмехнулся, но не стал спорить.
— С этого и начинается нормальная рабочая программа.
Громов посмотрел на него исподлобья.
— С бумажной скуки?
— С исходных данных, — ответил Морозов. — Без них твоя программа будет ловить наши же ошибки.
Громов помолчал. Потом коротко кивнул.
— Ладно. Тогда вечером набросаю формат ввода. Без красоты. И отдельную проверку, чтобы сразу ловить самые грубые ошибки ввода.
— Начните с собственных, Евгений Александрович, — сказал Липатов.
— Договорились. Сегодня мои ошибки первые в списке.
Они свернули к ведомственной гостинице. В окнах соседнего корпуса горел ровный белый свет; за стеклом двигались люди в халатах и тёмных пиджаках.
Алексей шёл первым. В кармане пальто у него лежали те самые три карточки. На обороте первой так и осталась короткая пометка: «один разрешённый случай».
Глава 12
Блок цветности
Свист гетеродина резал слух. Олег Тимофеев чуть довернул ручку настройки самодельного трансивера, и тонкий визг сполз ниже, захлебнулся в шипении помех и распался на пульсирующие куски морзянки.
Восемьдесят метров. Любительский диапазон.
Олег сидел в углу квартиры, превращенном в радиорубку. Январский вечер дышал в приоткрытую форточку морозным сквозняком. На столе, заваленном обрезками монтажного провода и пустыми спичечными коробками, тускло светилась шкала настройки. Индикаторная лампа подмигивала в такт помехам. Пахло нагретой пылью и лаком.
Тимофеев нажал ножную педаль передачи, оставляя руки свободными для записей. Щелкнуло мощное реле перехода с приема на передачу.
— Ульяна-Анна-Три-Анна-Харитон. Всем на восьмидесятке. Кто в канале, ответьте Владимиру.
Он отпустил педаль. В динамике остались несущие глушилок, обрывки чужих разговоров и сухой треск помех.
Олега не интересовали карточки-квитанции для спортивного зачета. Ему требовалось железо.
Официальный маршрут уже взял на себя Николай Петрович, и Тимофеев прекрасно помнил его последнее предупреждение: без самодеятельности, всё строго по описи. Но ждать до среды, не понимая реального масштаба проблемы, он не умел. Эфир служил грубой разведкой местности: важно было проверить, прав ли старый хозяйственник насчёт ремонтных фондов и однотипных трупов УПИМЦТ.
Гаражная привычка добывать дефицит через эфир въелась в подкорку. Советская система снабжения работала по жестким, неповоротливым планам, а рядом с ней существовала живая сеть радиолюбителей. Они паяли, чинили, обменивали и доставали то, чего официально не существовало в природе. Если где-то на складе списывали партию осциллографов, эфир узнавал об этом раньше ведомственной переписки.
Эта сеть говорила на своем языке кодов и сокращений. Здесь многое решали позывной, репутация и мощность передатчика. В углах комнаты, заставленных стеллажами, тускло поблескивали алюминиевые шасси списанных радиостанций. Олег знал: если на Дальнем Востоке военная часть списывает партию измерительных приборов, через несколько дней схема переделки этих приборов под любительские нужды уже будет гулять по коротким волнам.
Трансивер Олега, собранный вручную долгими вечерами, отдавал ровное тепло. Внутри металлического кожуха светились нити накала мощных радиоламп ГУ-50. Воздух вокруг них пах прогретой технической пылью и горячим лаком.
За окном завывал ледяной январский ветер, швыряя снежную крупу в стекло, но в радиорубке было тепло. Олег, ссутулившись в старом свитере, не сводил глаз с индикатора, вслушиваясь в эфирный шум — он искал не романтику дальних связей, а следы чужих мастерских, складов и списаний.
Сквозь треск пробился голос. Хриплый, искаженный замираниями сигнала, но разборчивый.
— … Владимир, здесь Саныч, третий район… принимаю на пять-семь… Олег, ты?
Тимофеев пододвинул к себе общую тетрадь в клеточку. Карандаш уже был зажат между пальцами.
— Я, Саныч. Привет Рязани. Слушай, у меня интерес специфический. Нужна цветная база. Блоки цветности, развертки. Что у вас в городе по мастерским оседает?
Динамик выплюнул
— … цветное? Ты рехнулся, Олег?…это же дефицит дикий. У нас в четвертом ателье очередь на замену кинескопов на полгода расписана. Но погоди… Жора с радиозавода говорил, у них в подсобке валяется…
Карандаш чиркнул по бумаге.
Олег писал быстро, сокращая слова. Ему не нужны были байки. Ему нужны были модели и симптомы.
На листе появилась первая строчка. «Рубин-714». Большой, тяжёлый аппарат, который в одиночку лучше не переносить. Рязанский корреспондент вещал про мужика, у которого этот «Рубин» свалился с тумбочки. Кинескоп вдребезги, корпус в щепки, но шасси якобы уцелело. Мужик готов был отдать его за два блока питания от старых ламповых радиол.
Олег не написал слово «берем». Он поставил тире и вывел вопрос: «годен?». Выжили ли тиристоры после удара? Не треснула ли плата по текстолиту?
Эфир кашлянул и сменил корреспондента. Теперь вещал Суздаль. Голос звучал чище, без федингов.
— … Славутич-714 есть. Сосед на дачу свез. Говорит, умножитель шьет так, что коты слепнут. Выбросить жалко, чинить дорого. Забирай самовывозом.
Карандаш Олега вывел: «Славутич-714». И рядом новые вопросы: «есть схема?», «кто ремонтировал?». Советские телевизоры часто собирались по обходным технологиям. Если на заводе не было нужного транзистора, ставили аналог. Схема в паспорте переставала совпадать с реальностью. А если туда уже лазил подвыпивший деревенский мастер с паяльником на сто ватт — плата превращалась в минное поле из отслоившихся дорожек и соплей припоя.
Час за часом. Модель за моделью.
Тетрадь покрывалась записями. «Березка-715» из Коврова — выгорел блок питания. УПИМЦТ-61-II — голая рама без модулей, зато с целым кинескопом. Кто-то предлагал разобранный «Электрон», кто-то хвастался доступом к некондиционным платам декодеров прямо с конвейера.
Азарт охотника горячил кровь, но список быстро перестал быть списком добычи. Цвет лежал по гаражам, пылился в подсобках и ждал, когда его заберут, только каждая запись тянула за собой новые вопросы: паспорт, схема, состояние кинескопа, кто уже лазил в плату и чем заменял штатные детали.
Он выключил трансивер далеко за полночь: щелкнул тумблер анодного напряжения, и погасла зеленая лампа индикатора. Гудение трансформатора медленно сошло на нет. В квартире стало слышно, как за окном скрежещет о стекло обледеневшая ветка тополя.
Олег сидел в полутьме, подсвечиваемый только уличным фонарем через окно. Он смотрел на исписанный лист. Десяток моделей. Десяток возможных основ для ВКУ. Руки чесались начать пайку, скрестить процессор К580 с аналоговым железом. Но записи в тетради говорили о другом: нужного оборудования в свободном доступе не было.
* * *
Птицын сидел над раскрытой тетрадью Громова, чувствуя себя человеком, которому дали карту без масштаба. Задача казалась простой: написать служебную программу «LSTAT.ASM» для отображения состояния сетевого обмена. Главное условие — не трогать рабочий код «LAN.ASM», маркер и прерывания.
Проблема заключалась в почерке ведущего программиста. И в его лаконичности.
Птицын вгляделся в убористые строки: «соб. — кольц. табл. — печ. после», «журн. не из цикла», «экран не дергать на маркере».
Он потер переносицу. Поймать событие обмена, сохранить его и напечатать на экране. Три действия сливались в один запутанный ком. Если печатать сразу — рушился ритм обмена. Если не печатать — как понять, что произошло?
— Люба, — Птицын повернулся к соседнему столу. — Посмотри, пожалуйста. Я половину букв не разбираю.
Люба аккуратно отложила карандаш и подвинула к себе тетрадь. Склонившись над записями, она без запинки прочла:
— «Событие — в кольцевую таблицу. Печать — после. Писать на экран вне обработчика прерывания. И сам маркер на экран не выводить».
— Спасибо, — выдохнул Птицын. — А программный смысл?
Люба виновато улыбнулась.
— Женя всегда переходит на шифровки, когда мысль бежит слишком быстро, — она легонько провела пальцем по угловатым строчкам, словно защищая этот неразборчивый почерк. — Слова здесь русские. Но как именно это должно лечь в программу, я тебе не объясню. Извини.
Еще днем Птицын пытался сунуться с этим вопросом к Олегу и Наташе. Железячники честно попытались помочь. Они засыпали его номерами портов, битовыми масками, адресами контрольных точек и распиновкой разъемов. Это был другой уровень задачи. Они мыслили сигналами, а Птицыну нужна была структура программы.
От безысходности он собрал листинги и пошел в вычислительный центр.
Вычислительный центр жил своим вечерним ритмом: гудели стойки ЕС-1035, щелкали перфораторы, в воздухе смешивались запах бумаги, машинного масла и табачного дыма. В машинном зале царили операторы, тасующие колоды перфокарт и бобины с магнитными лентами. ЕС-1035 имела мало общего со «Сферой-82» на микропроцессоре К580: другие команды, другая память, другие задачи. Птицын понимал это, но надеялся на общий инженерный принцип.
Он толкнул дверь в комнату подготовки программ. Здесь, в сизом дыму «Примы», у приоткрытой форточки сидели уставшие после смены программисты. На столе высилась стопка широких распечаток с АЦПУ, рядом шуршала сматываемая перфолента.
— О, смена растет! Ну привет, Птицын, — хмыкнул бородатый системщик в вытянутом свитере, заметив тетрадь Громова. — Никак, Евгений оставил мальцу «маленькую задачку»? Размером с полмашинного зала?
В голосе не было злобы. Громова здесь уважали безоговорочно.
Птицын развернул тетрадь.
— Я застрял на логике вывода. Сеть быстрая, а экран медленный.
Бородатый затушил сигарету в жестяной банке из-под леденцов, придвинул к себе чистую оборотную сторону распечатки АЦПУ и достал ручку.
— Код я тебе, сам понимаешь, не дам, ассемблеры у нас слишком разные, — он нарисовал на чистом листе крупный круг. — Но алгоритм везде один. Смотри. Событие обмена нельзя печатать на экран сразу. Ты затормозишь шину и сорвешь сеть. Поэтому ты делаешь короткую запись в кольцевую таблицу. Это твой буфер.
Ручка быстро набросала структуру байтов.
— Запись фиксированного формата. Номер узла, номер блока, код состояния, признак ошибки или контрольная сумма. И метка времени или порядковый номер.
К столу подошел еще один программист, с кружкой остывшего чая.
— Коды состояния держи отдельной таблицей, — посоветовал он. — Чтобы потом, если что, поменять текст вывода на экране, не переписывая твою логику. И не лезь в маркер и рабочие прерывания. Твоя служебная программа должна только читать буфер в свободное время.
— Понял. А если мне потом само железо тестировать? — спросил Птицын, торопливо записывая. — Громов еще велел набросать тесты для нового цветного видеоблока. Там тоже буфер городить?
— Смотря что отлаживаешь, — ответил второй. — Если просто проверяешь порты и адреса — буфер не нужен. Но базовый принцип тот же: программа задает железу
Птицын возвращался в лабораторию КБ «Сфера» с таким чувством, будто нес в руках не исписанную оборотную сторону распечатки, а хрупкий стеклянный шар.
В комнате было зябко. Олег возился с толстыми жгутами макетных проводов, Наташа вычерчивала графики на миллиметровке, а Люба тихо щелкала костяшками конторских счет — ей так было привычнее и быстрее сводить предварительные балансы по токам.
Саша сел за клавиатуру «Сферы-82», отодвинул в сторону старые ведомости и положил перед собой чистый лист. Он нарисовал круг. Поставил две точки: «запись» и «чтение». Логика, которая полчаса назад казалась непроходимым лесом, вдруг выстроилась в ясную шеренгу команд. Если аппаратное прерывание от сети дергает процессор, нельзя тратить драгоценные миллисекунды на медленный вывод символа на экран. Нужно просто бросить полученный байт в следующую свободную ячейку по кругу, сдвинуть указатель и мгновенно вернуть процессор к прослушиванию линии. А уже потом, в свободное время, основная программа не спеша прочитает этот байт по второму указателю и нарисует его на мониторе.
— Развязал, — вдруг сказал он вслух, отрываясь от экрана.
Щелканье счет прекратилось. Олег поднял голову от проводов.
— Что развязал, Саш?
— Обмен и печать, — Птицын обернулся к ним, глаза его горели. — Я всё пытался впихнуть в одно действие. А сеть быстрая, экран медленный. Они друг друга тормозили. Надо было просто поставить между ними кольцевой буфер. Прерывание только кидает цифру в память и убегает обратно. А на экран она ползет отдельной очередью, когда процессор свободен.
Олег медленно опустил кусачки на стол и переглянулся с Наташей. Та чуть заметно улыбнулась, отложив карандаш.
— Помнишь, как ты пытался выводить загрузку с кассеты прямо на экран бегущей строкой? — негромко спросила она Олега.
— Помню, — хмыкнул Тимофеев. — У меня тогда лента постоянно теряла синхронизацию, потому что процессор отвлекался на рисование букв. Я тогда чуть магнитофон об стену не разбил, пока мы с Женей буфер не сделали.
Он посмотрел на Птицына уже не как на толкового монтажника, а как на инженера.
— Добро пожаловать в реальное время, Саша. Поздравляю.
— Коды ошибок в отдельную таблицу вынес? — строго, но с явной теплотой в голосе поинтересовалась Люба. — Чтобы Женя потом не ругался, выковыривая твои буквы из рабочего кода?
— Вынес, — с гордостью кивнул Птицын. — Всё по полочкам.
Олег удовлетворенно кивнул и вернулся к своим жгутам, а Саша снова повернулся к мерцающему экрану макета, методично вбивая команды ассемблера.
Позже, когда Птицын в пустом институтском буфете дожевывал холодный пирожок с повидлом, за соседний столик опустились двое из курилки вычислительного центра.
— Ну что, студент? — спросил бородатый системщик, размешивая сахар в граненом стакане. — Победил буфер?
Птицын вытер пальцы жесткой бумажной салфеткой.
— Первая таблица уже не путает обмен и печать, — спокойно ответил он, без лишней гордости, но с твердой уверенностью человека, чей код только что заработал. — Логику развязал. Но надо еще проверять на живом стенде с реальными прерываниями.
Бородатый одобрительно кивнул.
* * *
В лаборатории КБ «Сфера» батареи едва справлялись с январскими морозами, и воздух отдавал металлической стылостью.
Олег Тимофеев положил на стол общую тетрадь. Пружинки переплета сухо звякнули о стекло.
— Вариантов в эфире хватает, — бодро сообщил он, усаживаясь и потирая покрасневшие от бессонницы глаза. — Я посидел ночь на восьмидесятке, поспрашивал народ. Если кинуть клич по личным контактам, уже к выходным у нас тут будет три-четыре цветных шасси. В Рязани мужики отдают битый «Рубин» с живым блоком цветности. В Суздале на даче стоит «Славутич» с пробитым умножителем. Можно не ждать, а собирать макет прямо сейчас!
Андрей Горелов сидел ровно, не касаясь спинки стула. Перед ним лежала папка с черновиками спецификаций закрытой «Сферы-82В». Он перевел взгляд с бумаг на исписанный лист.
— Россыпь разных аппаратов, — спокойно констатировал Горелов.
— Разнобой, — отмахнулся Олег. — Но электрически сигналы можно выровнять на любом железе. Картинку я стабилизирую, зато мы не теряем целую неделю на согласование актов.
Горелов задумчиво коснулся края папки. Он говорил не как проверяющий, а как инженер, привыкший закладывать эксплуатационную надежность с первого дня.
— Вы можете заставить работать любую плату на лабораторном столе, — негромко произнес он. — Но случайная смесь разных аппаратов нам не подойдет. Даже для опытного образца. Как мы и договаривались, за закрытой машиной будет сидеть оператор, а за его спиной — дежурный техник. Если сегодня в нашей опытной партии стоит блок от «Рубина», а завтра — от «Славутича», у нас поедут параметры.
Олег подался вперед, опираясь локтями о стол, готовясь защищать свою идею, но Горелов не дал ему перехватить инициативу.
— У них разное время прогрева кинескопа, дрейф напряжений, свои помехи по питанию, — продолжил Андрей Витальевич, сохраняя ровный тон. — На одном экране аварийный режим получится резким и контрастным, на другом — смазанным. Признак отказа должен быть одинаковым. Порядок ремонта — единым. Если ваш уникальный макет сгорит на объекте, где техник возьмет к нему запасной модуль без разгадывания чужих схем? К радиолюбителю в Рязань поедет?
Тимофеев взглянул на свой список позывных и моделей. Спор приобретал правильные, сухие инженерные очертания. Крыть логику эксплуатации было нечем.
Наташа Рогова подошла к столу бесшумно. На ней был толстый шерстяной свитер грубой вязки, поверх которого небрежно накинут синий рабочий халат. В руках она держала вчерашний бланк дефектовочной ведомости.
Она выслушала концовку спора, подошла вплотную к Олегу, легонько пихнула его бедром, заставляя чуть подвинуться, и положила свою ведомость прямо поверх его исписанной ночной тетради.
— Твой энтузиазм заразителен, Олег, — с мягкой иронией сказала Наташа. — Но мы вчера всё решили. Музей телевизионного зодчества СССР мы не строим. Если договорились искать УПИМЦТ — значит, тащим в КБ только УПИМЦТ. Строго одной модификации.
Олег тяжело выдохнул. Хотелось собрать макет уже сегодня, из того, что удалось найти в эфире. Но он посмотрел на жесткую структуру дефектовки: проверка блока питания, прогрев, снятие напряжений, гальваническая развязка. Без этой строгости первый же опыт превратился бы в угадывание: где виновата «Сфера», где телевизор, а где их собственная спешка.
Он пододвинул к себе общую тетрадь, взял графитовый карандаш и начал решительно вычёркивать неподходящие варианты. У рязанского «Рубина» и суздальского «Славутича» он сразу поставил жирные кресты.
— Сдаюсь. Ищем строго однотипную
Он вывел осторожную галочку рядом с аббревиатурой УПИМЦТ и похлопал ладонью по исписанному листу.
— Но ночь у рации я просидел не зря. Мужики в эфире матом кроют городские телемастерские. Говорят, ателье просто задыхаются от сгоревших цветных аппаратов, на которые не завозят дефицитные запчасти. Умножителей нет, блоков развертки нет. Телевизоры мертвым грузом висят на балансе, списывать их сложно, мастера воют. Если это так, то гарантийный возврат — это наша золотая жила. Нам не нужно собирать доноров по одному из сараев. В одной хорошей мастерской этих УПИМЦТ могут стоять штабеля.
Горелов чуть заметно кивнул.
* * *
Олег сунул тетрадь с ночными записями в карман халата. Сон как рукой сняло.
— Наташ, готовь измерительный стенд и собирай схему гальванической развязки, — сказал он, быстро поднимаясь. — Адрес ателье на Горького у нас уже есть. Николай Петрович только к среде получит добро на обмен по актам, но ждать я не могу. Попробую дозвониться до их старшего мастера прямо сейчас или добегу до конца смены. Бумаги бумагами, а посмотреть на эти залежи глазами и договориться по-человечески лучше заранее.
Наташа кивнула, поправляя воротник свитера.
— Только без самодеятельности. И если потом впишешь в официальный акт хлам с выдранными дорожками — я заставлю тебя тащить его обратно на собственном горбу, — строго предупредила она, но в глазах мелькнула теплая улыбка. — И раз уж побежишь на Горького, зайди на обратном пути в овощной. Купи свёклы и хлеба, а то я с этой гальванической развязкой до ночи просижу.
Олег усмехнулся и вытащил из ящика стола чистую общую тетрадь. Графитовым карандашом он вывел на картонной обложке то, с чего теперь начиналась настоящая работа: «УПИМЦТ. Журнал дефектов».
Глава 13
Испытательный полигон
Тяжелая картонная папка с истрепанными тесемками шлепнулась на исцарапанный стол. Следом легли скрученные в тугие рулоны листы синек, стопка перфокарт, перетянутая аптечной резинкой, и пухлый прошнурованный журнал с квадратной печатью ОТК на серой обложке.
— Вот ваш испытательный полигон, — сказал Ахметов, придвигая бумажную гору к центру столешницы. — Списанные партии. То, что уже прошло через наши измерительные комплексы, признано негодным и дожидается утилизации в изоляторе брака.
Савельев, сидевший во главе стола в строгой белой рубашке с закатанными рукавами, неспешно снял колпачок с чернильной ручки. Он постучал им по столу, привлекая внимание малого рабочего состава. Кабинет при тринадцатой лаборатории дышал рабочей повседневностью — монотонно гудели люминесцентные лампы, а воздух пах нагретой изоляцией и бумажной пылью.
— Начнем с полей паспорта, товарищи, — голос Савельева звучал ровно и твердо. — Номер партии. Основание списания. Кто выдает материалы из изолятора брака. Кто принимает ваш итоговый отчет со списком координат. Кто ставит подпись под расхождением. Пока эти графы пустые, вчерашнее решение техсовета остается лишь разговором.
Алексей Морозов внимательно слушал, сцепив руки перед собой. На костяшке указательного пальца въелось синее пятно от чернил — след ночной подготовки форматов. Условия зеленоградцев были жесткими. Савельев говорил как человек, которому потом разгребать последствия чужих быстрых инициатив и отвечать за падение выхода годных на реальных заводах.
Липатов, сидевший по правую руку от Алексея, придвинул к себе чистый лист бумаги.
— Нас это вполне устраивает, — подтвердил Липатов, педантично выравнивая лист параллельно краю стола. В его голосе звучал обычный для таких встреч прагматизм. — Тогда первое поле: объект опыта. Не «динамическая память» вообще, а конкретная партия, конкретная пластина, конкретный участок. И рядом сразу поле для критерия: что именно считается совпадением результата.
— Написать красивые критерии недолго, — с тяжелым выдохом сказал Ахметов. Начальник испытаний потянул за тесемки папки. Внутри обнаружились распечатки, испещренные колонками восьмеричных кодов, и пожелтевшие акты отбраковки пластин. — В бумагу можно много чего вписать, — буркнул он. — У меня другой вопрос к вам, товарищи владимирцы. Как вы собираетесь этот результат соотносить с нашими журналами?
Ахметов достал один из листов и развернул его, демонстрируя сложную сетку координат.
— Смотрите сюда. Вот реальные производственные данные. Карта брака. Отметки по каждому кристаллу на пластине. Журналы. У нас всё это проверяется штатным оборудованием. Если вы берете выписку по забракованной пластине, прогоняете ее через свою программу и заявляете, что нашли причину отказа — как я пойму, что ваша математика не врет? У вас во Владимире своя архитектура, свои алгоритмы обхода. У меня здесь нет ни времени, ни людей разбираться, реальный физический дефект вы отловили или это сбой вашей же программы от банальной ошибки в коде. Мне нужна привязка к распечаткам нашего стенда, которые я проверю здесь. Своими руками.
Морозов придвинул к себе лист с картой брака. Ахметов защищал свой участок, опираясь на производственный опыт. Без сертифицированного стенда, внесенного в реестр, любые программные расчеты останутся для него просто набором символов.
— Наша программа выдаст только математический расчёт, — ответил Алексей, глядя прямо на испытателя. — Мы не пытаемся подменить ваше сертифицированное оборудование. Значит, в паспорте опыта нужно жестко развести две подписи: нашу — под вычисленным списком координат, и вашу — под фактическим подтверждением по архивному журналу стенда.
Ахметов нахмурился, его густые брови сошлись на переносице:
— А как вы тогда свяжете свою физическую точку на маске с моим электрическим отказом? — недоверчиво спросил Ахметов. — Стенд выдает мне номер битого столбца, а не геометрические координаты. На глазок прикидывать будете?
— Берем вашу выписку по топологии, — ровно продолжил Морозов. — В ответ отдаём две вещи: список подозрительных координат на кристалле и их логическую привязку к электрической схеме. В паспорте это можно записать как два разных выхода: геометрический адрес для технолога и логический узел для ваших журналов отказов. Если ваш архивный журнал со стенда показывает отказ именно в этом узле, опыт засчитывается. Если расходится — расходится именно по этой строке, без спора о том, кто виноват во всей партии.
Савельев перестал крутить в пальцах ручку и положил её на край папки. Несколько секунд слышно было только, как за стеной глухо стукнула дверь. Схема, предложенная Морозовым, была предельно деловой. Она обходила главное бюрократическое препятствие — необходимость долгой и мучительной сертификации нового испытательного оборудования.
Евгений Громов, до этого молча изучавший маркировку на папках ОТК, включился в разговор. Как программист, он прекрасно знал цену ручному труду при переносе данных.
— Я просматривал в
— Коды отказов выводятся на цифробуквенный печатающий узел протоколом испытания, — негромко произнес Слава Крылов, сидевший у окна. Молодой инженер Научного Центра держал в голове порядок работы их стендов и владимирские ограничения. — Стандартная кодировка КОИ-7. Линии, столбцы, номера ячеек.
Громов кивнул и тут же записал это в блокнот.
— Отлично. Значит, мы заложим эти коды в свой вывод. Выдадим вам распечатку с теми же обозначениями узлов, которые печатает ваш стенд. Никакого ручного перевода. Вы просто положите наш лист рядом со своим журналом.
— Допустим, — Савельев придвинул к себе бланк протокола. — Память мы вчера утвердили. Теперь уточняем: тип изделия, структура, контролируемый признак. Произвольную логику сюда не впишешь, в деталях закопаетесь.
— Берём регулярную матрицу, — ответил Морозов, кивнув на пухлый журнал ОТК, лежащий перед Ахметовым. — Произвольную логику наша машина сейчас просто не переварит, вы правы. Нам нужна жестко повторяющаяся структура.
Ахметов шумно втянул воздух, словно у него разом заныли все зубы, и с силой потер подбородок.
— Динамическая память. Шестьдесят четыре килобита, — тяжело констатировал начальник испытаний, глядя на владимирцев так, будто они попросили у него ключи от сейфа. — Наш самый кровавый участок. Плотность упаковки на физическом пределе оборудования. Малейший уход температуры при диффузии в печи, пылинка в чистой зоне, крошечный сдвиг маски — и кристалл идет в брак. Адресные ошибки там сыплются пачками, мы их целыми пластинами в изолятор отправляем.
— Именно поэтому память хорошо подходит для первого опыта, — сказал Алексей. — Матрица состоит из тысяч повторяющихся ячеек. Если технолог ошибся в зазоре или на пластину легла пыль при фотолитографии, дефект многократно тиражируется. Сейчас на вашем стенде вы получаете отказ всей линии адресации. Стенд просто печатает «ошибка столбца» или «пробой строки». И вы не знаете, где конкретно нарушена физика — в дешифраторе, в буферном каскаде или перемкнуло саму металлизацию. Наша задача — выдать вам точную координату этого пробоя. Помните, что я говорил в свой прошлый приезд?
Ахметов нахмурился, вспоминая.
— Если вы точно знаете, что топология коротнула строго в одной половине матрицы и дефект не потянет за собой остальную логику, вы этот кристалл в изолятор брака не списываете, — продолжил Алексей. — Вы аппаратно отсекаете битую половину и выпускаете чип как память на 32 килобита. Заказчики вроде нас такой «брак» с руками оторвут для школьных и бытовых машин. Дешево, сердито, и процент выхода годных по цеху не летит в пропасть. Но чтобы пускать это в ширпотреб с чистой совестью, вам нужно точно понимать геометрию дефекта. Мы дадим вам эту координату.
Савельев, до этого молча слушавший, медленно кивнул. Аргумент про спасение заводского плана работал безотказно.
— Звучит крайне прагматично, — Савельев аккуратно вывел на чистом бланке заголовок: «Паспорт опытной работы». — Но в кристалле динамической памяти несколько слоев: поликремний, диэлектрик, металл первого уровня, второго. Значит, нужно сразу и жестко зафиксировать в паспорте конкретный проверяемый уровень.
Липатов, внимательно следивший за каждым движением ручки председателя, негромко добавил:
— Совершенно верно. В графе «контролируемый признак» должна стоять одна проверяемая вещь, иначе мы потом не поймем, сработал метод или нам повезло с конкретным образцом.
* * *
От батарей центрального отопления тянуло сухим жаром. Дискуссия спустилась с уровня системной архитектуры к топологии и производственному маршруту.
Ланская достала из картонного тубуса свернутый в плотную трубку лист. Синька легла на переговорный стол, громко зашуршав. Чтобы края не скручивались обратно, в ход пошла массивная стеклянная пепельница и чей-то пухлый блокнот.
— Посмотрите сюда, Морозов, — Ланская провела тупым концом карандаша по лабиринту пересекающихся синих линий. Фрагмент кристалла, увеличенный в сотни раз, рябил в глазах, напоминая план безумного мегаполиса, расчерченный под прямыми углами. — Вы исходите из того, что чертеж идеален. Но в цехе у нас рубилит, скальпель и допуск на усталость руки оператора.
Она уперла грифель в едва заметный излом на длинной магистрали проводника.
— Вот это — технологическая отметка для совмещения. А здесь заложен намеренный сдвиг под расплывание металла при травлении. Машина решит, что перед ней задир или ошибка чертежника. Реальному кремнию плевать на вашу математику.
— Мы и не пытаемся заменить цеховой микроскоп программой, — ответил Морозов, не поддаваясь на резкий тон. — Наше программное решение не выносит окончательный приговор и не объявляет кристалл браком. Она проверяет узкое формальное правило на выбранном участке. Если видит сближение линий больше заданного — выдает координату. Мы передаем вам список подозрений, а технолог смотрит в окуляр и решает: здесь расплывание в пределах допуска, а здесь — реальное короткое замыкание.
Руденко подвинулся ближе к чертежу, опираясь широкими ладонями о столешницу.
— Двухслойная пленка деформируется, — произнес он основательным тоном практика. — Полиэфирная основа дышит. Даже в чистом помещении пленка реагирует на микроколебания влажности и температуры. Плюс координатограф управляется руками. Оператор к концу смены устает, дает микроскопический люфт при резке. Программа возьмет идеальную модель и выдаст ошибку зазора. А технолог посмотрит на пластину и пропустит её дальше, потому что для фотошаблона отклонение в десятую долю микрона — это норма.
— Принимается как условие опыта, — Морозов сделал короткую пометку на своем листе. — Первый прогон — это один слой, один проверяемый зазор и один небольшой фрагмент. Физические допуски остаются полностью на вашей стороне. Наша задача — выдать подозрительную точку, чтобы вам не пришлось искать её вслепую по всей пластине.
Кац поправил на переносице очки в роговой оправе. Программист Научного центра перевел разговор из плоскости физики в плоскость данных.
— Допустим, фрагмент маски мы выделим, — произнес он, глядя на Алексея поверх линз. — Тогда мне нужна графа «форма выдачи». Не общие слова про топологию, а что именно уходит из НЦ. Прямого доступа к внутренним носителям мы вам дать не можем. Откуда берутся координаты, чья подпись, какая контрольная сумма?
Евгений Громов перестал вычерчивать квадратные спирали в блокноте и поднял голову.
— Прямое
Кац снял очки, методично протер стекла краем носового платка.
— Раз договорились на бумагу, можем выдать листинг на АЦПУ. Широкая печать, сплошная таблица координат. Формат зафиксируем отдельной строкой.
— Только режьте этот листинг беспощадно, — Евгений выразительно похлопал ладонью по своему блокноту. — Дайте мне квадрат сто на сто микрон. Максимум двести на двести. Вычислительной машины у нас с собой нет, я набрасываю порядок ручного ввода пока в тетради. Вбивать восьмеричные массивы со слепого шрифта АЦПУ, где половина нулей похожа на букву «О», — верный способ ослепнуть. Ручной ввод килобайта данных я вытяну на кофе и упрямстве. Но если выкатите бумажный рулон на весь мегабайт, я буду вбивать его до следующей пятилетки, и вероятность моей собственной опечатки превысит вероятность брака на вашей маске.
Ограничения по памяти, скорости и режиму секретности окончательно сформировали рамки проекта. Морозов собрал разрозненные условия в рабочую схему.
— Тогда фиксируем это как рамку эксперимента, чтобы ни у кого не было искушения её расширить, — сказал он, прямо глядя на Савельева. — В паспорт пойдут ровно четыре строки. Класс проверяемого подозрения: только нарушение проектного зазора. Рабочий слой: металлизация первого уровня. Участок: периферийная обвязка памяти 64К. Исходный материал: строго один списанный кристалл из вашего изолятора брака. Всё, что выходит за эти четыре пункта, нашей программой игнорируется.
Алексей снял колпачок с синей ручки и аккуратно, стараясь не задеть печатные линии, обвел небольшой прямоугольник на краю чертёжной копии Ланской.
— Например, контактный узел памяти. Вы выгружаете текстовую таблицу координат только этого участка. Мы вводим их в «Сферу». Программа отрабатывает алгоритм и выдает список подозрительных мест для сверки с результатами вашего стенда.
— Что вы вернете нам? — уточнил Кац. — В каком формате?
— Электрическая привязка для вашего журнала. Запись с номером сбойного столбца или строки, в формате вашей распечатки.
Руденко задумчиво постучал костяшками пальцев по столу.
— То есть последнее слово остается за технологом маршрута?
— Разумеется, — подтвердил Морозов. — В нашей строке будет только координата и причина подозрения. В вашей — отметка технолога: допуск, ложное срабатывание или реальное короткое замыкание на слое.
Ланская коротко переглянулась с Руденко. Производственник утвердительно кивнул.
— Один контактный узел, — повторил Руденко. — И мы дадим вам топологию только по списанному материалу из изолятора брака. Возьмем то, что уже забраковали при тестировании и занесли в карту дефектов.
— Согласен, — ответил Алексей, фиксируя компромисс.
* * *
Савельев придвинул к себе толстый конторский журнал с тканевым корешком. Разгладил ладонью страницу, взял ручку и аккуратно вывел текущую дату. Монотонный гул люминесцентных ламп словно стал тише — переговорная перешла в режим протоколирования.
— Рабочее название опытной работы, — Савельев не спрашивал, а обозначал графу.
— «СЛОЙ-81», — напомнил Морозов.
— Фиксируем как опытный проверочный пакет за пределами техпроцесса. Исключительно инструмент локального анализа, — председатель методично заполнял строчки. — Объект…
Липатов чуть подался вперед. Его карандаш завис над собственным блокнотом.
— Я бы записал это не одной строкой, а таблицей, — ровным, деловым тоном произнес Сергей Дмитриевич. — Слева данные НЦ: номер партии, номер пластины, слой, участок, контрольная сумма выписки. Справа наш результат: координата, категория отклонения, логический узел для сверки с журналом. Последняя графа ваша: подтверждено по журналу, снято технологом, требует повторной проверки.
Алексей согласно кивнул. Липатов сразу убирал из протокола все, что потом можно было бы прочитать как ответственность владимирцев за смежные производственные проблемы.
Савельев поджал губы, снова посмотрел на графы паспорта и быстро перенес формулировку в журнал.
Справа от Морозова выдохнул Громов. Фраза «текстовая выписка координат» теперь получила практический вес. Вчерашнее решение обрело форму: ему предстояло вручную вколачивать массивы цифр именно с широких листов АЦПУ, а не с аккуратных лабораторных таблиц. Программист потер переносицу, прикидывая, как адаптировать ночные наброски программы ввода под этот формат распечаток.
— Хорошо, — подал голос Ахметов. Начальник испытаний скрестил руки на груди. — Но мне нужен проверяемый критерий. Без плавающих ошибок и ложных срабатываний аппаратуры. Полное совпадение вашего результата с реакцией нашего стенда. Только тогда я признаю алгоритм рабочим.
— Принимается, — Алексей сделал пометку у себя.
— И еще один момент, — вмешалась Ланская. Она свернула свой чертеж, перетянув рулон резинкой. — После вашей математики остается физика процесса. Пылинка, микросдвиг фотошаблона, неравномерность травления. В чистовом листе нужна наша графа: ложное срабатывание по технологическому допуску. Реальный кристалл всегда отличается от чертежа.
— Согласовано, — Морозов понимал их правоту. Машина должна отсеять грубые подозрения, а не подменить технолога с микроскопом.
Савельев закончил писать блок условий.
— Отдельной строкой: следующий участок оформляется новым листом паспорта, — председатель подчеркнул последнюю фразу прямой линией. — Никаких устных добавлений по ходу работы.
На полях протокола, рядом с набросанной рамкой паспорта опытной работы, Савельев вывел убористым почерком рабочую пометку: «лист 13-А: металл, периферия, зазор».
Морозов посмотрел на глубокие складки у рта председателя. Савельев не искал легких путей: любой сбой в графике поставок означал срыв квартального плана. Этот компромисс был пределом его готовности рисковать.
Алексей откинулся на спинку стула. Теперь у них был легальный доступ к отбракованному кремнию и шанс проверить алгоритм на реальном материале.
Савельев закрыл журнал. Плотная картонная обложка глухо хлопнула, перекрыв гул ламп.
— Крылов, — председатель повернулся к инженеру, сидевшему у окна. — Оформи владимирской группе постоянные пропуска в тринадцатую лабораторию. В изолятор брака отведешь их лично, проконтролируешь передачу материалов.
Слава торопливо поднялся, забирая со стола свои записи.
— Приступайте, товарищи, — Савельев встал, опуская закатанные рукава рубашки. — Ждем ваших результатов.
Зеленоградцы загремели отодвигаемыми стульями. Начался привычный сбор: щелкали замки портфелей, шуршала бумага, обменивались короткими репликами технологи.
Морозов посмотрел на свои записи. На листе был обведен один-единственный квадрат — участок для первого эксперимента.
Глава 14
Рубилит и человеческая рука
Морозов потянул на себя дверь рядом с табличкой о классе чистоты и перешагнул высокий порог тамбура. Створка закрылась за ним с глухим пневматическим вздохом. На участке соблюдали строгий порядок: в шкафчике оставляли пиджаки, надевали халаты, бахилы и
Воздух здесь ощущался иначе. Промышленные кондиционеры высушивали его до легкого потрескивания статики, вентиляция тянула ровными, едва ощутимыми потоками. Пахло химией — резковатым, но быстро приедающимся запахом бутилацетата и сладким ароматом нагретого лавсана. Вдоль длинного зала, погруженного в искусственный полумрак, тянулись ряды световых столов. Широкие стеклянные панели светились ровным матовым светом, выхватывая из темноты склоненные фигуры женщин в халатах.
На участке стояла тишина, которую нарушал лишь низкий гул ламп дневного света да сухой скрежет лезвий по пластику. На светящихся поверхностях лежали листы рубилита — плотной прозрачной основы, покрытой светонепроницаемой пленкой глубокого красного цвета. Топологи вручную, миллиметр за миллиметром, вырезали и снимали эту пленку, формируя увеличенные в сотни раз контуры будущих микросхем. Так начинался физический путь фотошаблона.
Морозов неторопливо пошел между рядами, стараясь не создавать сильных воздушных потоков. Нужный стол находился в самом конце. Над широким пультом работали двое. Ланская сидела на высоком стуле и вела линию тонким резаком. Руденко стоял рядом, внимательно отслеживая каждый миллиметр пройденного пути.
Морозов подошел ближе.
— Не прислоняйтесь к бортику, Алексей Николаевич, — ровным, лишенным эмоций голосом произнесла Ланская, даже не подняв головы. Она плавно вела острие вдоль длинной полимерной полосы. — Стекло от веса играет, а мне этого хватит, чтобы уйти с координаты.
Алексей мгновенно замер в шаге от пульта и убрал руки за спину.
— Понял.
Ланская довела линию до угла, кончиком лезвия подцепила тончайшую красную нить отслоившегося полимера и пинцетом отложила ее в сторону. Только после этого выпрямилась, разминая затекшую шею, и посмотрела на Морозова. Белый свет от стола ложился на ее лицо резкими тенями.
Руденко обернулся. Инженер смерил Алексея долгим, оценивающим взглядом: сейчас станет ясно, пришел ли этот теоретик за живыми ограничениями участка или опять принес красивую схему.
— Пришли забирать наш хлеб, Морозов? — Руденко коротко хмыкнул. — Или принесли бумагу, где у рубилита всё послушно ложится в клеточку?
— Принес вопросы для документации опытного прогона, — Алексей проигнорировал подначку. — Техсовет отрезал нас от ваших машинных массивов. Так что мой ведущий программист сейчас в гостинице набрасывает на бумаге архитектуру ручного ввода, чтобы мы могли написать чистый код, когда вернемся к стенду во Владимир. А я пришел к вам за физикой. Мне нужны ваши группы признаков и рабочие допуски.
— Допусков? — Ланская аккуратно положила резак на специальную подставку.
— Именно, — Морозов достал из кармана сложенный лист бумаги с набросками. — На техсовете мы разделили расчет и производственный вердикт. Я набросал только поля будущей таблицы. Классы должны дать вы: иначе программа смешает короткое замыкание, суженный зазор и обычный след резака в одну общую ошибку. Для опытного прогона это непригодно.
Ланская перевела взгляд на подсвеченный пластик.
— Вы просите четкие классы, Алексей Николаевич, — негромко ответила Ланская. — Вчера вы услышали, что бумага отличается от пленки. Но вы все еще надеетесь, что это отличие можно вписать в ровную таблицу с одной универсальной цифрой погрешности.
Руденко глухо усмехнулся и шагнул ближе к световому столу.
— Допуски ему подавай, — протянул он. — Иди сюда, архитектор. Сейчас покажу тебе, почему твои ровные классы поплывут.
* * *
Руденко взял со стола плоский резак с обмотанной синей изолентой ручкой. Инструмент привычно лег в его широкую ладонь. Острие коснулось красного поля. Движение было обычным, заученным тысячами повторений.
Раздался сухой скрип стали по полимеру. Ланская молча подвинула пинцет.
Руденко подцепил крошечный вырезанный прямоугольник и потянул вверх. Красный слой с тихим шелестом отделился от прозрачной основы. В образовавшееся окно ударил резкий свет ламп.
— Угол, — Руденко указал кончиком лезвия на пересечение резов.
Морозов прищурился, всматриваясь в освещенную границу. Стык двух линий не сходился в острую иглу. Пленка чуть потянулась за резаком, оставив микроскопический скругленный заусенец. То, что на ватмане выглядело строгим прямым углом, на рубилите получило заметный материальный след.
Алексей ждал этого. Он пришел на участок именно за границами допустимого.
— Какое здесь значение погрешности? — Морозов достал из нагрудного кармана ручку.
— Десятые доли микрона, — спокойно отозвалась Ланская. Она стояла рядом со световым столом. — Сегодня сухо, полимер режется жестко. Вчера в цехе было влажно, материал набрал воду и стал вязким. Заусенец получился бы заметнее.
Руденко сдвинул лист рубилита, выводя в центр светового пятна другой участок.
— А вот тут смотри. Соседний транзистор. Проектный зазор — два микрона.
Морозов присмотрелся к узкой прозрачной полосе между двумя красными полигонами.
— Зазор уже расчетного, — заметил он.
— Именно, — подтвердил Руденко. — Стол греется от ламп, полимер дает усадку. Твоя программа проверит координатную таблицу и скажет, что всё идеально. Но ЭВМ слепая. Она не увидит ни фактического натяжения пленки, ни микроскопического следа от резака.
— Верно, — согласился Алексей. — Мы работаем только с векторной картой. Программа проверяет пересечения математических контуров и минимальные допуски.
Ланская оперлась о бортик стола.
— В этом и слабость голых цифр. Твоя математика считает, что зазор ровно два микрона. А здесь, на столе, он уже одна целая и восемь десятых. Если при копировании на стекло попадет пылинка или добавится погрешность оптики — получим короткое замыкание. Цифра остается идеальной, а физический лист летит в мусор.
Морозов раскрыл блокнот. За одной технологической проблемой проступали разные производственные причины, которые нельзя было списать на один сбой алгоритма.
— Значит, цифровую геометрию нужно проверять с запасом на ваши физические допуски, — Алексей набросал на странице две параллельные линии. — Давайте определимся. Где для вас граница между гарантированным браком и рабочим отклонением?
Руденко скептически хмыкнул, но резак из рук не выпустил. Он провел лезвием по пленке, намеренно не доведя рез до конца. Отделил кусок. Между двумя красными зонами осталась тончайшая перемычка.
— Вот это — мостик. Короткое замыкание. Абсолютный брак.
— В координатах это пересечение полигонов или нулевой зазор, — Морозов поставил крест в блокноте. — Критическая ошибка. Отбраковываем на этапе расчета. Дальше?
— Если зазор близок к пределу, фоторезист может не просветиться, — пояснила Ланская. — Ультрафиолет рассеивается на краях. Это пограничный участок. Алгоритм такого не решит. Мы смотрим на топологию целиком. Иногда сужение безопасно, иногда технологу приходится вручную подрезать край лезвием.
— Понял. В документации опытного прогона закладываем такие узкие места как предупреждение. Не приговор, а просто сигнал.
Руденко оторвал взгляд от светового стола.
— Предлагаешь оставить физический контроль за нами?
— Только так система будет работать, — Морозов постучал ручкой по бумаге. — Машина быстро прогоняет массив координат и отсеивает очевидный математический мусор — ваши мостики и полные пересечения. А пограничные места выводит отдельным списком. Она просто сужает зону поиска сомнительных участков среди тысяч полигонов. Окончательный вердикт выносите вы, глядя на реальный рубилит.
Руденко чуть склонил голову, оценивая логику. Ланская поправила манжету белоснежного халата.
— То есть алгоритм будет искать для нас сомнительные координаты?
— Да. Если грамотно составим карту допусков, программа снимет с вас часть рутинного поиска и сохранит ваш порядок работы.
Руденко задумчиво провел большим пальцем по синей изоленте на ручке резака.
— И распечатка выдаст только проблемные узлы…
— Если согласуем параметры.
— Карту допусков я составлю, — ровным голосом ответила Ланская. — Разобью отклонения на классы, как вы просите. Но применять мы эту таблицу начнем только тогда, когда убедимся, что ваша машина без ошибок ловит явный, стопроцентный брак. Тонкие настройки не имеют смысла, если алгоритм слеп к очевидным коротким замыканиям.
— Справедливо, — кивнул Алексей. Один пропущенный цифровой мостик перечеркнет для цеха весь смысл автоматизации.
Он прижал непослушную страницу блокнота к прохладной металлической окантовке светового стола.
— Давайте набрасывать раздел опытного прогона прямо здесь, — предложил Морозов. — Как нам разделить ограничения машины и решение человека?
Вместо ответа Ланская коснулась рубилита кончиком инструмента и провела от уже показанного мостика к узкой светлой полосе между магистралями.
— Вот эти места нельзя складывать в одну графу, — сказала она. — Здесь явное короткое замыкание. Здесь узкий зазор, который надо смотреть глазами. А вот острый угол: программа увидит только координату, а резак может скруглить край.
Морозов быстро переводил увиденное в рабочий текст: явный математический дефект, пограничный участок для визуального осмотра и места, где машине придется уступить решение технологу.
— Подпись подчеркни два раза, — глухо произнес Руденко, глядя на блокнот. — Каждое сомнительное место, которое выдаст твоя программа, живой человек должен осмотреть под микроскопом. И расписаться. Иначе, если запорем партию, потом концов не сыщешь. Железке выговор не впишешь и премии не лишишь.
Алексей кивнул, вычерчивая новую колонку. Он представлял, как Громов будет ругаться, пытаясь втиснуть дополнительные признаки в тесную память К580, но цех диктовал свои условия.
Морозов собрался перевернуть страницу, когда Ланская остановила его коротким жестом.
— Спорный участок — это половина дела. Сначала нужно доказать, что в машину попали правильные данные.
Она выдвинула нижний ящик и положила на стол прошнурованный рабочий журнал. Серые страницы пестрели столбцами цифр и аккуратными исправлениями, где тройка после подчистки становилась похожей на восьмерку. Ноль рядом с буквой «О» различался только привычным глазом.
— Смотрите, как это идет по рукам, — Ланская провела ногтем по строке. — Вот контур на рубилите. Тополог снимает координаты и пишет их в журнал. Затем делают выписку. С выписки составляют чистовую таблицу. Потом оператор набивает перфоленту. И только в самом конце машина начинает искать зазор.
Руденко усмехнулся, тяжело опираясь о край светового стола.
— Весной гнали срочный заказ, — начал он. — Партия была мелкая, зато все вокруг нее бегали так, будто завтра министерство лично приедет считать наши огрехи. На одном слое нашли короткое замыкание. Не большое, не явное, а такое, что его то видно, то нет: под одним углом светового стола дорожки будто слиплись, под другим расходятся. Мастер уже начал ворчать на резчицу, резчица на мастера, ОТК потребовал остановить лист, а я, как дурак, полсмены таскал этот рубилит от стола к микроскопу и обратно.
Он помолчал, будто снова видел перед собой тот лист.
— Сначала решили, что пленка потянулась от ламп. Потом грешили на пылинку. Потом нашли на краю царапину и полчаса спорили, могла ли она дать тень на фотошаблоне. Люди, между прочим, не железные: к концу смены все уже злые, глаза режет, рука дрожит, а план никто не отменял. Мастер мне говорит: «Руденко, у тебя короткое в металле, зуб даю». Я ему отвечаю: «Не жалко тебе зуба-то?».
Ланская, слушавшая с привычной невозмутимостью, едва заметно кивнула, подтверждая, что скандал тогда вышел знатный.
— И где оказалось? — спросил Морозов.
— В журнале, — хмыкнул Руденко. — Один ретивый переписчик сместил начало координат. Мы искали дефект в левом нижнем углу физического листа, а цифры описывали середину. Там, где в журнале сходились две линии, на рубилите вообще было пустое место. Короткое замыкание, понимаешь, сидело не в кристалле, а в шапке листа.
Он постучал тупым концом резака по полю журнала.
— С тех пор я к шапке отношусь уважительно. Номер слоя, начало координат, сетка, кто снимал, кто переписывал. Все это кажется канцелярией ровно до той минуты, пока смена не начинает искать брак, которого на листе нет.
Ланская сухо добавила:
— После того случая шапку листа у нас сверяют так же строго, как линию под микроскопом. И смеяться над этим перестали быстро.
Морозов провел пальцем по краю журнальной страницы. В машинном зале такую ошибку назвали бы пустяком: неверная строка, лишний ноль, сбитая отметка начала. Здесь этот пустяк превращался в чужие часы под лампами, в остановленный лист, в спор с мастером и в испорченный срок.
— Значит, машина должна проверять не только зазор, — сказал он. — Сначала она обязана убедиться, что ей дали тот лист.
— Тот лист и тот слой, — поправила Ланская. — И с той сеткой. И с тем началом отсчета. У нас на участке это видно глазами: метка совмещения, подпись, журнал, фамилия. А для вашей программы все цифры одинаковые. Она не понимает, откуда они взялись. Значит, происхождение цифр придется описать до проверки.
Руденко одобрительно крякнул.
— Вот это уже ближе к цеху. А то обычно к нам приходят с красивой машиной, а потом удивляются, что машина обиделась на кривую бумагу.
— Машины не обижаются, — машинально возразил Морозов.
— Зато люди потом очень выразительно обижаются, — сказал Руденко. — Особенно когда им объясняют, что они два часа искали чужую описку.
Морозов посмотрел на рубиновое поле под стеклом, затем снова на исчирканный журнал. До всякой математики нужно было доказать, что в машину попали именно те
Морозов озаглавил новый лист в блокноте: «Блок верификации входных данных».
— Значит, до любой геометрии мы закладываем программный фильтр шапки, — произнес Алексей, начиная писать. — Если оператор ввел номер слоя, начало координат или шаг сетки, которые не бьются с вашим заданием…
— То машина должна встать намертво и потребовать сверки, — жестко закончила Ланская.
— Сделаем. Громов зашьет подсчет контрольной суммы по каждой введенной странице. Если число не сходится — дальше программа просто не пустит. Напечатает «ошибка ввода» и заставит перебивать страницу.
— И фамилии в шапку добавьте. Тех, кто выписывал данные с нашей стороны, и тех, кто вбивал с вашей, — бросил Руденко, возвращаясь к своему пульту. — Чтобы безликих «ошибок ввода» не было. Должно быть ясно, кому именно идти руки отрывать.
— Внесу в обязательные поля, — кивнул Морозов, записывая.
— Карту отклонений я подготовлю только вместе с этим порядком переноса, — добавила Ланская, убирая журнал в стол.
— Принято.
Ланская уже склонилась над стеклом. Тонкое стальное лезвие мягко вошло в красный слой, отделяя микроскопическую полоску пленки.
Морозов зашагал по проходу. Тяжелая дверь с предупреждающей табличкой поддалась неохотно, а затем с пневматическим вздохом закрылась за спиной, отсекая чистую зону, направленный свет и запах бутилацетата. Оказавшись в обычном заводском коридоре, он пошел искать Липатова: практический разговор у светового стола теперь предстояло перевести в официальный раздел документации.
Глава 15
Программисты НЦ и чужое ПО
После шумного машинного зала коридоры Научного центра казались Громову слишком тихими. За плотно закрытыми дверями еще стучали печатающие устройства, где-то в глубине здания глухо тянула вентиляция, но этот шум становился дальним фоном.
Слава Крылов шагал рядом, легко огибая встречных лаборантов с папками. В своем институте он держался увереннее, чем на декабрьском техсовете: знал, где повернуть, кому кивнуть, у какой двери сбавить шаг.
— Евгений Александрович, помните ту восьмидюймовую дискету с CP/M? — спросил он, когда они свернули с основного коридора в боковой, более узкий. — Ту, что я вам в машинном зале передавал.
— Такое забыть трудно, — ответил Громов, перехватывая портфель с записями. — Я ее от Москвы до Владимира вез как государственный золотой запас. Только в лаборатории тогда было не до восторгов: олимпиада, сборка «Сферы-82», Петров со своим доносом. А вот когда Алексей Николаевич показал на ней «Смету» Седых, там уже считали деньги. Виктор Петрович, кажется, впервые увидел в машине вещь, с которой можно идти к бухгалтерии и наверх.
Слава улыбнулся, но улыбка быстро стала осторожной.
— Я тогда передал вам один готовый диск. Сейчас хочу показать среду, из которой он появился. Только сразу предупреждаю: это узкая рабочая кухня, где готовые западные программы сразу обрастают неприятными подробностями.
— Если неприятность имеет систематический характер, я почти счастлив, — сухо сказал Громов. — Ее хотя бы можно описать.
— Вот это Юрию Беспалову и скажите, — сказал Слава. — Он как раз занимается теми местами, где программа упирается в накопитель, терминал и чужой порядок записи.
Они остановились у двери с простой табличкой, где стоял только номер комнаты и фамилия ответственного за помещение. Слава коротко постучал костяшками пальцев и, не дожидаясь долгого ответа, приоткрыл дверь.
Внутри пахло бумажной пылью, сухим картоном и нагретой изоляцией. Комната занимала промежуточное место между машинным залом и библиотекой. Вдоль стен стояли металлические стеллажи: серые скоросшиватели, папки с машинописными ярлыками, широкие гармошки распечаток АЦПУ, коробки с перфолентами, журналы записи на машинное время. У окна стоял видеотерминал, потемневший экран отражал лампу под зеленым абажуром. Рядом, в отдельном шкафу, лежали пластиковые боксы с восьмидюймовыми гибкими дисками.
За столом у окна молодой инженер вытаскивал из дискового конверта бумажную карточку и сверял ее с записью в журнале. Худой, взъерошенный, в очках с тонкой металлической оправой, он хмурился так, будто карточка лично нарушила закон сохранения энергии.
— Юра, — сказал Слава. — Это Евгений Громов из владимирской группы.
Беспалов поднял голову.
— МикроДОС, — сказал он вместо приветствия.
— Иногда меня зовут и по фамилии, — заметил Громов.
— Фамилию я запомнил. Просто Слава неделю рассказывал, что у вас система умеет и по-русски разговаривать, и под CP/M маскироваться. Я тогда сказал, что в одном из двух вы врете.
— И что решили?
— Пока не решил. Поэтому и пустил.
Он протянул руку. Рукопожатие оказалось сухим и крепким: на пальцах чувствовались мелкие следы работы с разъемами, отверткой и сухой карточной бумагой.
Слава прикрыл за собой дверь.
— Юра у нас как раз связывает программы с нестандартной аппаратурой, — пояснил Слава. — Учит их понимать чужие схемы и капризные контроллеры.
— По бумагам нестандартная, — поправил Беспалов. — В работе самая обычная: включил, проверил, выругался, поправил. Странности начинаются у тех, кто пишет красивую процедуру вывода символа и думает, что символ сам попадет на экран.
Громов оглядел полки с дисками.
— Значит, та таблица была отсюда?
Беспалов помолчал, глядя на Славу. Тот едва заметно кивнул.
— Из нашего круга, — наконец сказал Юрий. — В обход обычной выдачи и заявочного шкафа. В Зеленограде есть несколько опытных комплектов, есть иностранные носители, есть люди, которые умеют с ними обращаться и не задают лишних вопросов вслух. Диск, который Слава передал вашей группе, был рабочей копией. Мы сначала сами проверили, что он читается, потом уже он пошел к вам.
— А первоисточник?
— Вам лучше этого не знать. Нам тоже иногда лучше не знать. Достаточно, что система там CP/M, диск восьмидюймовый, программа работает с файлами и держится в положенных границах обращения к железу. Поэтому у вас и появился шанс.
Он уже собирался убрать конверт обратно в бокс, но вдруг задержал взгляд на раскрытом портфеле Громова.
— А это у вас что?
Громов машинально прижал портфель коленом, как человек, у которого в голодный год спросили про лишний кусок хлеба.
— Где?
— Да вот. Конверты с дисками. Спокойно, я по технической части.
Слава повернул голову. Громов с видимым неудовольствием достал из портфеля две плотные бумажные оболочки. На одной аккуратным почерком Любы Ветровой было написано: «чистый носитель, 8 дюймов». На другой стоял только карандашный крестик, поставленный, видимо, самим Громовым, чтобы не перепутать сторону.
— Взял на всякий случай, — сказал Евгений. —
— Разумная привычка, — одобрил Беспалов.
— Опасная привычка, — поправил Слава. — Если ее заметит случайный проверяющий, Евгений еще полдня будет объяснять, почему в технической командировке у него в портфеле неучтенные диски.
Громов усмехнулся, но диски обратно не убрал.
Беспалов постучал пальцем по верхнему конверту.
— Тогда я вам кое-что запишу.
— Только избавьте меня от очередного редактора, — попросил Громов. — С редакторами я уже разобрался. Один работает, пока у него родной терминал, второй держится за свой накопитель, третий пишет на экран в обход общего порядка.
— Транслятор языка Си.
Громов посмотрел на него с таким лицом, будто Беспалов предложил ему изучить бухгалтерский учет добровольно и без командировочных.
— Какого языка?
— Си, — терпеливо повторил Юрий Сергеевич. — Есть такая рабочая копия под CP/M. BDS C. Небольшой микромашинный транслятор: без роскоши, местами грубый, зато помещается в разумный объём памяти и даёт код для восьмиразрядной машины. Пишете программу на Си, он переводит её в машинные команды.
— С языками высокого уровня я знаком, — сказал Громов, скрестив руки на груди. — Фортран знаю очень хорошо, тяжеловесным PL/I под ЕС меня тоже не испугать. Бейсик я вообще своими руками изнутри реализовывал, Алгол в теории разбирал. Но когда лезешь к устройствам, я предпочитаю машинные коды и ассемблер. Команды, которые сам вижу. Там хотя бы понятно, кто виноват. Я виноват. Процессор виноват. Иногда бумага виновата. А тут появится еще один посредник, который будет делать вид, что он умнее меня.
Беспалов оживился: похоже, именно такой реакции он и ждал.
— Вот поэтому и надо посмотреть. Для регистров и обращения к устройствам ассемблер останется. А если вам нужно разобрать текстовый файл, пройти по таблице, посчитать сумму, сравнить строки, собрать простую проверочную программу — зачем каждый раз руками вылизывать переходы и счетчики? Си держится ближе к машине, чем Фортран или Алгол, и позволяет уйти от одной и той же канители в сотый раз.
Громов скептически повертел чистый конверт.
— Ближе к машине, чем Фортран, но дальше, чем ассемблер. То есть ровно там, где можно получить и медленно, и непонятно.
— Можно, — согласился Беспалов. — Если писать без головы. А если с головой, то часть работы быстрее. BDS C требует такой же дисциплины, как любой транслятор. Сложные вычисления ему противопоказаны, с действительными числами там надо осторожно, библиотека небогатая. Зато для текстовых программ и маленьких средств проверки он очень удобен. Главное — требовать от него посильной работы, а ассемблер и бессонную ночь оставлять для своего участка.
Слава тихо рассмеялся.
— Юра, ты сейчас рекламируешь так, что Евгений Александрович обязан отказаться из чувства самосохранения.
— Я предупреждаю, — сказал Беспалов. — Пусть лучше человек сразу узнает правду. Си — хороший напильник. Им можно поправить деталь, а можно испортить палец.
Громов всё еще держал дискету двумя пальцами. Потом провел ногтем по краю бумажного конверта и спросил уже тише, без прежней гримасы:
— Команды какие?
Беспалов улыбнулся.
— Вот теперь разговор пошел правильно. Запишу рабочую копию и короткую памятку. Как включать, как собирать, где смотреть ошибки. Ваш накопитель может споткнуться о наш диск с первого раза.
— При таком исходе, — сказал Громов, — я буду считать, что судьба спасла меня от лишнего языка.
— При таком исходе, — ответил Беспалов, — я дам вам распечатку начального примера и список файлов. Всё равно вернетесь.
Он взял верхний конверт, аккуратно проверил, не загнут ли угол, и сделал на бумажной оболочке маленькую помету карандашом: «Си / CP/M / BDS». Потом полез к соседнему столу, где стоял дисковод, прикрытый серым чехлом, и начал освобождать место среди журналов машинного времени.
Громов наблюдал за ним с видом человека, которому только что всучили долговую расписку.
— Учить новый язык в командировке, — пробормотал он. — Прекрасно. Просто прекрасно. У меня теперь есть МИЭТ, топологи, форматы данных, контрольные суммы, Липатов с вопросами, Кац со своими выписками, и еще Си. Полный комплект счастья.
— Вы же программист, — сказал Слава. — Вам положено страдать от новых способов облегчить себе жизнь.
— Мне положено писать работающие программы, — буркнул Громов. — А страдать я умею и старыми способами.
Дисковод щелкнул, принимая чистый диск. Короткий механический звук прозвучал буднично: чужой накопитель взял владимирский носитель без лишних вопросов. Громов задержал взгляд на сером чехле с тем раздраженным любопытством, с каким смотрел на любой инструмент, который сначала хочется обругать, а потом всё равно приходится разбирать.
Громов провел пальцем по корешкам папок. На одних были аккуратные машинописные наклейки: «транслятор ассемблера», «программа сравнения файлов», «редактор исходных текстов», «контрольные суммы». На других стояли только внутренние номера и инициалы.
— Вы это как используете?
— Осторожно, — сказал Беспалов. — На отдельных стендах, в основном для своих задач. Где-то смотрим приемы, где-то переносим идею, где-то просто сравниваем, как люди пишут. Если начальству рассказать, что здесь лежит готовая западная библиотека, они решат, что завтра можно закрыть все наши работы и копировать. А на деле половина этого добра живет только вместе со своим терминалом, своим накопителем и своей таблицей знаков.
Он посмотрел на часы над дверью.
— Для ваших дисков я пригожусь. Для «СЛОЯ-81» вам нужен Кац. Я попросил его зайти, если он выберется от Ахметова.
Дверь открылась, и в комнату вошел Роман Борисович Кац. Он нес под мышкой тонкую папку с закладками и широкую распечатку, сложенную гармошкой. Очки были сдвинуты на кончик носа, лицо усталое, но внимательное: так смотрят на новый прибор, сразу прикидывая, куда его можно включить, чтобы он не испортил действующую схему.
— Уже выбрался, — сказал он, проходя к столу.
— Слава сказал, что вы наконец добрались до нашей программной кухни. Тогда лучше сразу снять лишние надежды. Здесь несколько разных порядков работы, и каждый оставляет после себя данные в своем виде.
Он положил распечатку на край стола.
— Большие ЭВМ считают тяжелые вещи: матрицы, участки топологии, технологические таблицы, статистику по партиям. Задания идут через машинное бюро, через перфокарты, перфоленты, иногда через магнитную ленту. Часть результата человек видит
— И правильно сделают, — сухо сказал Громов. — Я бы тоже держал чужих людей подальше от своих массивов.
Кац кивнул, оценив здравый смысл.
— Дальше есть наши служебные программы. Они сортируют координаты, печатают выписки, сверяют номера слоев, пересчитывают партии, готовят куски для технологов. До законченной САПР в красивом смысле тут далеко: пока это рабочий набор программ, поправок и привычек, который держится на людях, журналах и конкретных машинах. Один человек знает, какой номер слоя в какой папке означает металл, другой помнит, что в старой выписке координаты шли от другого начала. Формально всё записано. Практически без живого проводника легко перепутать.
Беспалов постучал пальцем по дисковому боксу.
— А CP/M-круг живет рядом с этим маршрутом. Мы можем на малой машине посмотреть текст, сравнить два файла, быстро проверить таблицу, записать что-то на диск. Это мастерская около линии, с удобным столом и хорошими инструментами, но без права самовольно лезть в цеховую работу.
Громов провел взглядом от распечатки к коробкам с дисками.
— Значит, если мы привезли МикроДОС, главный вопрос — сможет ли она прочитать вашу разрешенную выписку.
— Именно, — сказал Кац. — Один узкий, оформленный кусок данных. «СЛОЙ-81» может встать сбоку от маршрута: НЦ подготовил выписку по одному участку топологии, затем ваша малая машина проверила формальное правило, а потом технолог снова смотрит глазами уже подозрительные места.
— То есть проверочная программа у стола тополога, — сказал Громов. — Обрабатывает выписку и печатает подозрительные координаты. Чертеж остается за технологом, маршрут — за НЦ, большие машины — за вашими людьми.
— Если вы так и запишете, я первым перестану морщиться, — ответил Кац. — Вторая польза: ваши маленькие программы могут готовить этот опыт. Проверить заголовок, пересчитать строки, сравнить две выписки, посчитать сумму по блоку. Работа скромная, зато именно на таких местах потом тонут большие доклады.
Слава, до этого молчавший у двери, сказал:
— Я поэтому и хотел, чтобы вы это увидели. В прошлый раз к вам попал готовый диск: вставили в накопитель, загрузили систему, таблица ожила. А здесь к каждому диску тянется хвост: машина, экран, листинг, журнал и человек, который помнит, как это записали.
— Да, — сказал Кац. — Программа без своего порядка работы быстро становится просто аккуратной распечаткой.
Громов достал из кармана тетрадь, оставил названия папок на потом, провел на чистом листе короткую черту и написал: «что переносится». Под ней вывел: «порядок работы», «формат файла», «кодировка», «проверка».
— Ладно, — сказал Громов. — Программы мы отложим. Вернемся к пути данных для «СЛОЯ-81». На техсовете мы договорились на выписку АЦПУ. Но я хочу понимать: как именно этот рулон появится на свет?
В комнате стало заметно тише. Даже Беспалов перестал вертеть дисковый конверт.
— Вот это правильный вопрос, — с уважением произнес Кац.
Он открыл нижний ящик шкафа и начал выкладывать предметы на стол: туго свернутую перфоленту в коричневой бумажной обертке, широкую гармошку распечатки АЦПУ, общую тетрадь с рукописными поправками и серый конверт с гибким диском.
— Вчера вы мужественно вызвались вбивать данные с распечатки, — сказал он, заметив, как Громов настороженно покосился на перфоленту. — Решение техсовета не меняется: первый опыт идет только по бумаге. Но вы должны понимать, что эта бумага не рождается из воздуха. До того как стать рулоном АЦПУ, эти же данные могут жить на ленте, в машинном массиве или в тетради с поправками тополога. Если вы этого не учтете, вы аккуратно, байт за байтом, перенесете в свою машину уже испорченную кем-то строку.
— А в этой тетради живет то, что между людьми: поправки, подписи, отметки «сверено», — указал Кац.
— Для машины она годится только после переписи в чистый вид, — добавил Беспалов. — А диск для наших внутренних работ удобен. Для вашего первого опыта он пока предупреждение на будущее: разметка, плотность, порядок секторов, символ конца строки и вопрос, прочтет ли ваш ИЗОТ наш носитель. Сейчас проще идти от утверждённого листинга, чем спорить с двумя накопителями и первым отделом.
Громов взял распечатку. На листе шли столбцы чисел, обозначения слоя, координаты, короткие служебные пометки. Для непосвященного это была серая каша. Для программиста — будущий файл, еще не получивший формы.
— Тогда шапка должна быть полной, — сказал он, водя карандашом над первой строкой. — Начало координат, единицы, номер слоя, порядок обхода контуров. Иначе я прочитаю участок правильно, а машина повернет его не туда.
— На разных участках бывает по-разному, — подтвердил Кац. — Одна группа описывает внешний контур, потом окна, другая идет строками. Для человека это видно на чертеже. Для машины это два разных мира.
Беспалов поднял палец.
— И ваша идея с контрольной суммой. Обязательно. Я буду выдавать распечатку строго с готовой суммой по каждому блоку. Ввели блок — пересчитали — сверили. При расхождении прекращаем работу. Никаких догадок.
— Программа должна останавливаться на таких местах, — поддержал Кац. — Намерения технолога угадывают люди, а машина сверяет запись.
Громов быстро писал. Теперь тетрадь наполнялась условиями первого обмена: «заголовок слоя», «начало координат», «единицы», «порядок контуров», «кодировка», «конец строки», «контрольная сумма», «подписи».
Дверь тихо открылась, и в комнату заглянула Лидия Борисовна Веденеева. Невысокая женщина в халате держала под мышкой папку с перфолентами и смотрела на стол так, будто сразу увидела главное нарушение порядка.
— Юрий Сергеевич, вы опять положили чистые конверты рядом с рабочими?
Беспалов поморщился.
— Лида, у нас тут высокий разговор о совместимости.
— Тем более, — спокойно сказала она и вошла. — У вас чистое лежит вперемешку с рабочим. Потом начнут гадать, где исходник, а где копия после правки.
Слава улыбнулся Громову:
— Лидия Борисовна как раз тот человек, который знает, как ваши красивые данные проходят через руки.
— Красота в данных начинается там, где два человека прочитали их одинаково, — сказала Веденеева.
Кац кивнул ей на стол.
— Мы обсуждаем первый обмен для «СЛОЯ-81». Громову нужен путь от нашей топологической выписки до их проверочной программы.
Лидия Борисовна поставила папку на край стола и, не спрашивая разрешения, развернула одну из перфолент.
— Тогда пишите формат строки вместе с маршрутом. Кто сделал выписку. Кто сверил слой. С какого листинга её переписывали. Кто пересчитал контрольную сумму. Где лежит бумажный лист, с которым сравнивали. А ленты и диски
Громов поднял глаза от тетради.
— Вы предлагаете останавливать проверку до выяснения?
— А что еще? — Веденеева посмотрела на него без улыбки. — Если у вас ошибка в исходных данных, самая умная программа только быстрее умножит ее на весь участок. Потом технолог будет смотреть на вашу распечатку и спрашивать, почему машина забраковала нормальное место.
— Лида постоянно ловит чужие «дефекты» в слое, — сказал Беспалов с видимым удовольствием. — Которые сидят в заголовке.
Веденеева бросила на него быстрый взгляд.
— Ищут другие. Я нахожу.
— Как обычно? — попросил Слава.
Она вздохнула, но папку не закрыла.
— Идет срочный заказ. Все нервные, начальство ходит кругами. На световом столе видят странный разрыв: по одной выписке проводник должен пройти рядом с окном, по другой будто пересекает его. Технолог ругается, тополог ругается, оператор клянется, что режет точно. Начинают проверять рубилит, пленку, журнал смены. Полсмены уходит. Потом я смотрю шапку листа: слой переписали правильно, а номер варианта оставили от предыдущей правки. Внизу все красиво, с подписью. Наверху одна строка чужая. И вся работа становится чужой.
Беспалов щелкнул пальцами.
— Вот вам и вся авария в одной строке.
— Вот именно, — сказала Лидия Борисовна. — После этого у нас шапка, контрольное число и подпись сверившего стали такой же частью работы, как резак и микроскоп. Машина только умножит ошибку, если ей с самого начала дали чужой лист.
Громов записал отдельной строкой: «ошибка в заголовке = останов».
— Значит, принимающая программа сперва проверяет заголовок, кодировку, номер слоя и сумму, — сказал он. — К геометрии переходит после подтверждения исходных данных.
— Вот теперь похоже на работу, — сказала Веденеева.
Кац аккуратно собрал разложенные предметы в одну линию.
— Видите, Громов, почему я морщусь при словах о готовых программах? Договоримся о среде — программа станет полезной. А пока всё держится на скучных вещах: как записали, кто сверил, чем прочитали, что считается ошибкой.
— Работы хватит, — сказал Громов. — У меня ощущение, что мы за один день нашли больше способов ошибиться, чем я успею запрограммировать за неделю.
— Это хорошее начало, — ответил Кац. — Теперь вы хотя бы знаете, от чего защищаться.
Беспалов положил перед Громовым пустую карточку из журнала.
— Напишите мне ваш минимальный формат. На одной карточке, пригодной для человека у перфоратора и человека у диска. Если они поймут одинаково, значит, у вас есть шанс.
Громов взял карточку и несколько секунд смотрел на чистое поле. Затем вывел первую строку: «объект; слой; начало координат; единицы; число записей; сумма».
— Так?
Беспалов прочитал, кивнул, потом дописал сбоку: «ответственный за подготовку».
Лидия Борисовна добавила еще ниже: «ответственный за сверку».
Кац поставил точку карандашом.
— А теперь это можно обсуждать с Ахметовым и Липатовым. Без подписи методиста такой обмен останется дружеской запиской.
Громов убрал карточку в тетрадь. Шкаф с дисками теперь выглядел иначе: там лежал ценный материал, а главная находка все равно оставалась на столе. Утверждённая распечатка, тетрадь сверки и карточка в несколько строк превращали чужой порядок записи в проверяемую работу.
* * *
Вечером в ведомственной гостинице батареи жарили так, что воздух казался сухим и колючим. На подоконнике остывали граненые стаканы с чаем. За стеной кто-то долго и безуспешно пытался настроить радиоприемник; в шуме то всплывал голос диктора, то снова тонул в треске.
Громов сидел на скрипучем стуле, вытянув ноги. Портфель стоял рядом, раздутый от тетрадей и разрешенных выписок. Морозов, закатав рукава рубашки, держал карточку Беспалова двумя пальцами и читал ее так внимательно, будто перед ним лежала первая страница будущего технического задания.
Липатов расположился напротив. Его двусторонний карандаш лежал параллельно краю блокнота, а сам Сергей Дмитриевич слушал молча, с тем выражением, при котором любой лишний оптимизм в комнате начинал чувствовать себя неуютно.
— Если коротко, — сказал Громов, откидывая голову на спинку стула, — то у них там зоопарк. Несколько порядков, которые держатся на честном слове и людской памяти. Большие ЭВМ жуют перфокарты и ленты по своему расписанию. У отдела Каца — терминалы, диски и свои привычки. А CP/M там вообще живет полулегально, как удобный напильник для тех, кто понимает.
— Практический вывод? — Морозов присел на край стола.
— Вывод такой: МикроДОС спасет нас в будущем, — ответил Громов. — Если мы когда-нибудь подружим их восьмидюймовые диски с нашими дисководами, мы будем перегонять тексты за секунды. Но сейчас мы туда не лезем. Первый опыт пойдет строго по бумаге, как и решили. И мне придется зашивать в программу проверки жесткие правила: кодировку, символ конца строки, порядок контуров и, главное, контрольные суммы по блокам. Потому что если оператор ошибся в шапке листа, их брак станет нашей проблемой.
— Да. Основной результат — формат обмена. Один слой, один участок, один порядок записи. Бумажная выписка остается исходным материалом и контрольным экземпляром. Перфолента или диск могут появиться только отдельным решением, когда Кац и Гальперин разрешат машинный путь. При расхождении контрольной суммы программа останавливается до выяснения. При расхождении заголовка с бумажной выпиской программа ждет исправленных исходных данных.
Морозов положил карточку на стол.
— Это хорошо. Мы предлагаем Зеленограду малую машину рядом с их маршрутом и проверку участка по формальному правилу. Чем уже первый опыт, тем сложнее зарубить его общими возражениями.
— И тем меньше соблазн у Громова написать половину чужой системы за две ночи, — сухо добавил Липатов.
Громов развел руками.
— После Каца у меня другой соблазн: попросить сразу их машинный массив и написать преобразование. Но это как раз та глупость, на которой нас остановят раньше первого прогона.
Морозов усмехнулся.
— Потому что вместо опыта получится самодеятельность.
— Да. Один человек помнит, что в этой папке слой считается от другого начала координат, другой ушел в отпуск, третий выдал листинг без шапки, и вся наша проверка начинает спорить с чужим порядком записи вместо топологии.
Липатов поднял карандаш.
— Тогда я пишу так, — сказал он и подвинул к себе блокнот. — Для «СЛОЯ-81» нужен официальный формат исходных данных. Бумажная выписка остается единственным материалом первого опыта и контрольным экземпляром. Диск или перфоленту выносим в отдельный вопрос.
— И контрольная сумма по блоку, — напомнил Громов. — Плюс журнал ошибок чтения и расхождений. В совместимом режиме МикроДОС читаем текстовые данные и служебные
Липатов записал и это.
— Формулировку смягчим, — сказал он. — «На изучение принципов»; вопрос переноса пока закрыт. Иначе Кац решит, что мы пришли оценивать их работу свысока.
— Кац и так решит, — сказал Громов. — Но оценит точность.
Морозов встал, подошел к окну и провел пальцем по тонкой полоске инея на стекле. За черным квадратом двора светились несколько окон соседнего корпуса. Где-то там лежали рубилитовые слои, журналы, перфоленты, диски, чужие программы, осторожные люди — и шанс, что завтрашний обмен данными не превратится в катастрофу.
— Завтра, — сказал он, не оборачиваясь, — начинаем с их данных. Что они готовы дать, кто подпишет, кто сверит и как мы поймем, что прочитали именно то, что они подготовили.
— Для демонстрации слишком много условий, — заметил Липатов.
— Это работа, — ответил Морозов.
Липатов закрыл блокнот, выровнял край обложки по краю стола и поднялся.
— Тогда я пойду к себе. Надо переписать это в нормальный порядок, пока вы оба не превратили рабочую договоренность в спор о прекрасном будущем. Завтра утром сверим формулировки.
— Сергей Дмитриевич, — сказал Громов, — если мы превратим рабочую договоренность в спор о прекрасном будущем, вы всё равно придете и вычеркнете половину.
— Разумеется, — ответил Липатов. — Для этого я здесь и нужен.
Он ушел в соседний номер. Дверь закрылась. За стеной послышался короткий скрип стула, потом щелчок настольной лампы: Липатов снова сел за свои формулировки.
Громов подождал несколько секунд, убедился, что Сергей Дмитриевич действительно занят своими бумагами, и только после этого достал из портфеля конверт с дискетой.
— Кстати, — сказал он почти небрежно. — Беспалов мне еще одну радость подложил. Транслятор Си. BDS C. Сказал, под CP/M, для восьмиразрядных машин. Велел смотреть, если я окончательно устану от ассемблера.
Морозов, бравший с подоконника остывший чай, замер со стаканом в руке.
— Повтори.
— Что, «окончательно устану от ассемблера»?
— Нет. Что он дал.
Громов насторожился. Морозов редко оживлялся так резко из-за чужой дискеты.
— Си, — медленно произнес Евгений. — Компилятор. Под CP/M. Небольшой, как они говорят. Ты чего?
Морозов поставил стакан на стол так резко, что чай плеснул на блюдце. Потом вдруг рассмеялся открыто, почти мальчишески. Он прошелся по комнате, вернулся к столу, снова посмотрел на конверт и хлопнул ладонью по подоконнику — обычно он позволял себе лишь сухую усмешку.
— Вот это подарок.
Громов смотрел на него с подозрением.
— Ты радуешься чужому компилятору так, будто тебе выдали персональный машзал.
— В некотором смысле — да.
— Лёш, — Евгений сел ровнее. — Ты сейчас меня пугаешь. Мне Беспалов весь день объяснял, что чудес нет, Кац объяснял, что чужие программы ломаются о чужие терминалы, Липатов объяснял, что каждую радость надо записывать в методику. И вдруг ты радуешься. Значит, либо я чего-то не понял, либо это действительно опасно.
Морозов взял конверт осторожно, будто внутри лежала тонкая пластина с будущим.
— Я радуюсь потому, что теперь, если прижмет, я смогу сам быстро написать часть рабочих программ. Твой участок остается за тобой, а я говорю о разборке данных, таблицах, проверках, форматах, маленьких расчетах. О местах, где ассемблер слишком дорог по времени.
Громов моргнул.
— Ты?
— Я.
— На Си?
— На Си.
Евгений откинулся на спинку стула. В его лице постепенно проступало предчувствие большой несправедливости.
— Подожди. Ты хочешь сказать, что в твоем две тысячи двадцать шестом году ты писал на этом языке?
— Да.
— На языке, который Беспалов сейчас записал мне на дискету как экзотику для CP/M?
— На его потомке, — поправил Морозов. — Очень далеком. Сильно выросшем. Обросшем правилами, библиотеками, привычками, школами. Но в основе — всё тот же Си. Байты, указатели, массивы, память и знакомая досада от того, что ошибка чаще всего принадлежит тебе лично.
Громов молчал. Потом медленно потер лицо ладонями.
— Значит, я только что получил язык из твоего будущего.
— Из моего будущего ты получил пока только одну ниточку, которая дотянется до него.
— Красиво сказал. Липатов бы сейчас потребовал определить термин «нитка» и указать сечение.
— А потом завел бы для нее отдельную графу в методике.
Громов фыркнул, но тут же снова стал серьезным.
— А второй твой язык? Ты как-то говорил про схемы, про кристаллы, про то, что всё это потом будут делать иначе. Был еще какой-то основной?
Морозов сел напротив. В комнате стало тише. За стеной Липатов перелистнул бумагу; этот бытовой шорох, наоборот, делал разговор более тайным. Алексей говорил негромко, без театральности, но в голосе у него появился тот самый оттенок, который Громов слышал зимой у Золотых ворот: человек из будущего пытался перевести огромную невидимую эпоху на язык, понятный инженеру восемьдесят первого года.
— В двадцать шестом мой основной рабочий язык для схем назывался Verilog. Это язык описания аппаратной логики: текст, из которого потом специальные программы строят цифровую схему.
Громов уставился на него.
— Текст строит схему?
— Текст описывает, как должна вести себя схема. Какие сигналы куда идут, какие регистры в каком такте меняются, что происходит при сбросе, где счетчик, где память, где управляющий автомат. Потом этот текст проверяют, моделируют, переводят в структуру элементов и дальше в кристалл.
— То есть в будущем ты задаешь схему текстом?
— Для цифровой логики такого уровня — да. Представь, что вместо листа с нарисованными вентилями и триггерами ты пишешь: вот регистр, вот условие, вот переход. А программа-синтезатор сама раскладывает это в логические элементы.
Громов подался вперед, явно пытаясь уложить это в своей программистской картине мира.
— Подожди. Когда я транслирую ассемблер или этот твой Си, мой текст превращается в нули и единицы. В команды для уже готовой машины. А когда ты транслируешь этот свой Верилог… во что превращается он?
— В саму машину, — просто ответил Морозов. — Мой текст не говорит процессору, что делать. Мой текст создает процессор. На выходе получается не работающий код, а физическая топология связей. После завода ты держишь мой откомпилированный текст в руках в виде кремниевого кристалла.
Громов уставился на него с почти суеверным ужасом.
— Текст, который при компиляции превращается в кусок железа.
— Да. И
Громов тяжело сглотнул.
— Миллионы?
— Миллионы, потом миллиарды.
— В одном кристалле?
— В одном кристалле.
Евгений тихо сказал что-то непечатное и посмотрел на конверт с BDS C уже иначе: будто в руках у него оказалась не просто дискета, а ключ от чужого, непонятного механизма.
— А Си тогда зачем, если у вас есть этот… Верилог?
— Потому что железо без программ остается железом. На Си пишут системные программы, куски операционных систем, программы для микроконтроллеров, проверочные средства — всё, что живет рядом с памятью и машиной. Си опасный, резкий язык: ошибка там часто прячется дальше, чем в ассемблере. Зато он переносится с одной архитектуры на другую.
— То есть ассемблер для ленивых?
— Ассемблер — для задач, где каждая команда должна быть твоей. Си — для задач, где важнее быстро описать работу с байтами, таблицами, файлами и памятью. Иногда компилятор сделает хуже, чем ты руками. Иногда достаточно хорошо. А иногда он спасет неделю жизни.
Громов прищурился.
— И в твоем будущем на нем пишут серьезные вещи?
Морозов улыбнулся.
— В моем будущем на нем пишут такие серьезные вещи, что если бы я перечислил, ты бы решил, что я тебя разыгрываю. Управление приборами, связь, низкоуровневые части больших систем, программы для маленьких контроллеров. И да, Жень, теперь самое смешное.
— Куда уж смешнее-то?
— Перед тем как проснуться здесь, я работал над кристаллом для бытовой линейки. Дешевый однокристальный контроллер: маленькая управляющая машина в одном корпусе. По сути — мозги для таких приборов, которые человек твоего времени назвал бы чайником, кофеваркой, стиральной машиной или чем-нибудь еще более обидным.
Громов несколько секунд смотрел на него без выражения. Потом спросил очень тихо:
— Для чайника?
— В том числе.
— Микросхему.
— Да.
— Для чайника.
— Для умного чайника, если угодно. Хотя слово «умный» там часто означало, что люди из сбыта придумали прибору лишнюю бесполезную кнопку, которая удваивала цену, но прекрасно смотрелась на рекламных плакатах.
Евгений зажал рот ладонью. Плечи у него дрогнули. Он попытался удержаться, но смех вырвался коротким хриплым звуком, потом перешел в почти беззвучный приступ. Громов согнулся над столом, одной рукой держась за край, другой показывая на Морозова и задыхаясь от смеха.
— Тише, — сказал Алексей, но сам улыбался.
— Подожди, — выдавил Громов. — Сейчас. Сейчас я должен это осознать. Ты приходишь из будущего, рассказываешь мне про миллиарды элементов в кристалле, про язык, который строит схемы из текста, про машины, которые стоят у каждого на столе… а сам в это время делал микросхему для чайника?
Он снова сорвался. Смех стал освобождающим. За последние дни в Зеленограде на него навалились рубилит, форматы, допуски, чужие машины, закрытые кабинеты, люди в очках, которые задают правильные вопросы. И вдруг всё это будущее, с его миллиардами транзисторов, оказалось привязано к кухонному чайнику. К предмету настолько простому, что рядом с ним смешно было произносить слово «кристалл».
— Для чайника! — шепотом повторил Громов и снова прыснул. — Лёша, я тебя умоляю, никогда не говори это Олегу. Он тебя до конца жизни будет спрашивать, сколько тактов нужно, чтобы вскипятить воду.
— Олег бы первым делом спросил про развязку с сетью.
— А Люба — про потребление!
— А Липатов — про методику испытаний чайника в крайних режимах.
Громов окончательно сдался и смеялся уже открыто, уткнувшись лбом в ладонь. Морозов дал ему выдохнуться. Евгений вытер глаза, поднял голову и посмотрел на конверт с BDS C уже без прежней злости.
— Господи. Микросхемы для чайников. Значит, мы тут мечтаем о персональных ЭВМ, а вы там сорок лет спустя снова воюете за чайник.
— За миллионы чайников, — поправил Морозов. — В этом как раз суть. Процессоры расползутся из вычислительных машин в приборы, станки, автомобили, связь, медицинскую технику, игрушки, замки, счетчики, лампы. Сначала люди поставят компьютер на стол, а потом начнут прятать микросхемы и полноценные компьютеры внутрь всего подряд.
Громов перестал улыбаться.
— Внутрь всего?
— Почти всего, до чего дотянутся деньги и фантазия. Иногда разумно, иногда — бессмысленно. Но это произойдет. И там везде понадобится кто-то, кто умеет говорить с железом на уровне отдельных команд процессора и на уровне переносимого описания: вот данные, вот память, вот состояние, вот проверка, вот ошибка.
Евгений постучал пальцем по конверту.
— Си.
— Си. И его потомки. Плюс языки описания аппаратуры, вроде Верилога. Плюс еще множество языков, которые будут появляться, спорить между собой, обещать счастье и частично его давать.
— А наши?
— Что «наши»?
— Мои языки. Ассемблер К580, машинные коды. Да тот же Фортран и PL/I, в конце концов. Всё, на чем я сейчас живу и что так хорошо знаю.
Морозов помедлил. Он понимал, что для Громова язык был профессией, привычкой думать, рукой, которая сама тянется к регистру A, к HL, к стеку, к флагу переноса. Сказать «умрет» значило ударить по человеку, который в нем жил.
— Почти всё уйдет, — сказал Алексей мягче. — Постепенно. Твой любимый Фортран надолго застрянет в узких нишах тяжелой математики у физиков, а PL/I вымрет, как динозавр, не выдержав собственного веса. Ассемблер останется как ювелирный инструмент, но каждый ассемблер привязан к своему железу. Умрет семейство процессоров — вместе с ним уходит и живой язык команд. Его можно хранить, изучать, создавать работающие математические модели (мы называем это словом эмулировать), но писать на нем новую жизнь уже почти некому и незачем.
— К580 тоже?
— Конечно.
Громов посмотрел на свои руки.
— Забавно. Я, значит, сейчас пишу на языке, который обречен.
— Ты пишешь на языке, который нужен сейчас. Благодаря ему будет сегодняшняя машина. Но если ты хочешь понимать, куда всё пойдет дальше, тебе нужен Си.
Морозов кивнул на конверт в руках программиста.
— Си — это не просто один транслятор. Это целая грамматика будущего. Его синтаксис — фигурные скобки, точки с запятой, структура функций — станет родоначальником целого древа языков.
Громов сдвинул брови, пытаясь представить это древо.
— Например?
— Скоро появится C++. Это развитие Си: он сохранит работу с памятью и адресами, но позволит строить сложные программные объекты, описывающие реальный мир. На нем будут писать самые тяжелые, быстрые и требовательные к железу вещи: операционные системы, графику с миллионами точек, системы управления станками.
— То
— А дальше, через десятилетие с лишним, появится язык Джава, а за ним Си-шарп. Их придумают для других задач. Они будут работать поверх гигантских мировых сетей, связывая между собой огромные вычислительные центры банков, заводов и корпораций. Там главная задача — чтобы программа, написанная на одном конце света, гарантированно запустилась на любом железе на другом конце.
— Машинная независимость в квадрате, — усмехнулся Громов. — А еще?
— А еще Джава станет основным языком для тех самых карманных машин с триллионами байт, про которые я тебе зимой рассказывал.
Громов замер.
— Для аппаратов с экраном, картой города, библиотекой и фотоаппаратом?
— Да. И забавно то, что в моем времени этот вычислительный монстр в кармане всё еще по привычке будут называть просто «телефоном». Хотя, учитывая, сколько туда напихали процессоров, памяти и датчиков, от первоначального телефона там осталось только название. Впрочем, звонить он тоже будет уметь.
Громов потер лоб.
— Я в некотором замешательстве, Лёша. Выходит, изучая этот ваш Си сейчас, я заодно учу половину языков будущего?
— Синтаксис и логику чтения — да.
— Ладно. А как же Бейсик? Мы ведь только-только продавили МикроБейсик для школ как универсальный входной билет для новичков. Он тоже умрет?
— Бейсик умрет, — спокойно кивнул Морозов. — Он выполнит свою историческую миссию: покажет людям, что с машиной можно говорить по-английски, а не кодами. И уйдет. Для школьников, студентов и ученых появится другой язык с очень низким порогом вхождения. Он называется Питон.
— Питон, — эхом повторил Громов. Названия из будущего начинали звучать как издевательство. — И в чем его сила?
— В том, что он прячет от человека вообще всю физику машины. Там нет типов переменных, которые ты задаешь заранее. Нет ручного выделения памяти. Нет фигурных скобок для блоков — блоки выделяются просто отступами на странице. Пишешь: `х равно списку чисел`, потом `напечатать сумму х` — и он сам понимает, где взять память, как сложить и когда освободить место.
У Громова дернулась бровь. Как человек, привыкший лично контролировать каждый байт и следить за переполнением регистров, он испытал почти физическую боль.
— Он сам понимает, где взять память? Без моего приказа?
— Да. И сам ее за собой убирает. У него внутри работает автоматический сборщик мусора.
— И типы данных не проверяет при трансляции?
— Их можно менять прямо на лету. В одной строке `x` — это число, в другой — строка текста, в третьей — сложный массив данных.
Громов уставился на Морозова остановившимся взглядом.
— Лёша, это не язык программирования. Это анархия. Это поощрение умственной деградации! Человек же вообще перестанет понимать, сколько тактов и байтов он только что сжег одной строчкой! Да такой язык должен работать медленнее черепахи!
— Он и работает медленнее черепахи. По меркам Си или ассемблера Питон — это чудовищно прожорливый и медленный интерпретатор.
— Так зачем он нужен⁈
— Потому что время программиста станет дороже машинного времени, — жестко отчеканил Морозов. — В твоем времени машина стоит миллионы, а программист получает сто сорок рублей в месяц. В моем времени вычислительная мощность стоит копейки, а час хорошего разработчика — целое состояние. Питон позволяет ученому-физику, биологу или школьнику написать сложную программу за вечер, не тратя полгода на изучение того, как устроен стек и где происходит утечка памяти. Железо всё стерпит.
Евгений молча положил конверт с дискетой на стол. Повертел его, будто взвешивал новую неприятность, которая вдруг стала необходимой.
— Я недооценил этот ваш Си, — сказал он наконец, глядя на диск как на спасательный круг. — Если альтернатива — это анархия, где машина сама решает, когда ей убирать за мной мусор, я лучше буду писать на Си.
— Ты только начинаешь его оценивать. Так точнее.
— Хорошо. Тогда завтра вытащу из Беспалова всё, что у него есть: памятку, примеры, команды, что можно читать, чего нельзя трогать. И буду учить.
— Но ассемблер не забывай, он нам ещё долго нужен будет.
— Разумеется. Если этот ваш чайниковый язык переживет мои машинные коды, надо хотя бы узнать, за что такая честь.
Морозов поднял стакан.
— За чайники, значит.
— За чайники, — сказал Громов и впервые за весь вечер посмотрел на диск без раздражения.
Они посидели молча. За стеной Липатов аккуратно кашлянул, перевернул страницу и снова начал писать. В соседнем корпусе гудела вентиляция. На столе рядом лежали бумажная карточка формата обмена и скромный конверт с BDS C.
Громов открыл тетрадь и крупно написал: «Формат обмена СЛОЙ-81. Минимальная спецификация». Ниже вывел первую строку: «Заголовок: объект, слой, начало координат, единицы, записи, сумма, ответственные».
Он остановился, подумал и добавил еще одну строку: «До проверки геометрии проверить исходные данные».
На следующей странице он поставил отдельный заголовок: «Си. Разобраться. Написать пробную программу».
Глава 16
Телемастерская
Тугая пружина с грохотом захлопнула дверь, отрезав мастерскую от колючей январской улицы. Олег сдёрнул ушанку. У барьера приёмки толпилась мрачная очередь в массивных зимних пальто — люди ругались из-за сроков и караулили свои поставленные прямо на мокрый кафель неподъёмные ящики «Горизонтов» и «Рубинов».
За барьером кипела работа. На длинных столах стояли выпотрошенные телевизоры, тускло светились экраны осциллографов, громоздились стеклянные колбы извлечённых кинескопов. Помещение заполнял непрерывный технический гул: щелчки реле, вибрация понижающих трансформаторов и назойливый, режущий ухо высокочастотный писк работающих строчников.
Олег уверенно обошел гудящую очередь и приблизился к краю стойки, крепко прижимая к груди рабочую картонную папку.
Рабочее место заведующего располагалось тут же, за деревянной перегородкой. Мужчина в выцветшем синем халате с закатанными рукавами сидел перед распотрошенным нутром телевизора и методично зачищал скальпелем контакты переключателя.
— Добрый день, Семен Кузьмич. Я из НИИ «Электронмаш», — Олег оперся о шершавый барьер. — Мне не в ремонт. Нам для макетов нужны блоки цветности и развертки УПИМЦТ. Наше снабжение уже готовит письмо на обмен по актам списания, всё будет официально. Я принес опись того, что мы можем отдать из запасов нашего КБ взамен. Радиаторы, тумблеры, медный провод, измерительная техника.
— И нужны не полностью разграбленные платы, а с живыми краевыми разъемами и целыми посадочными местами, — сразу добавил он.
Пахло здесь совершенно иначе, чем в стерильных лабораториях НИИ или пропахших канифолью кабинетах владимирского КБ. Это был густой, застоявшийся
Олег глубоко втянул этот воздух, чувствуя странную профессиональную солидарность с людьми по ту сторону барьера. Это была передовая, грязный фронт бытовой электроники, где красивые теоретические схемы из справочников разбивались о суровую реальность высохших электролитических конденсаторов и микротрещин в дорожках печатных плат. Вдоль стен высились штабеля массивных деревянных ящиков, похожих на полированную мебель — безмолвных свидетелей того, как часто в квартирах горожан гасли экраны.
Мастера работали сосредоточенно, в каком-то глухом, выученном раздражении. То и дело слышался сухой треск статического разряда, шипение жала, коснувшегося влажной губки, и обрывки фраз, понятных только посвященным: «гетеродины ушли», «кадровую завернуло», «цоколевку смотри». Это был целый изолированный мир со своими законами дефицита, своими трагедиями и жестким прагматизмом, который Олегу сейчас предстояло как-то пробить, чтобы добыть заветный цвет.
Мастер сдул пыль с контактов, отложил инструмент на резиновый коврик и медленно выпрямился. Из-под толстых стекол очков на посетителей посмотрели усталые глаза человека, привыкшего ежедневно отбиваться от просьб починить аппарат без очереди. Он достал из кармана ветошь и принялся неспешно стирать темный налет с пальцев, даже не взглянув на список Олега.
— Обмен, говорите, — хмыкнул он. — Думаете, мастерская — это бездонная бочка? Знаете, сколько у меня этих цветных гробов в очереди стоит? Полгорода. Умножители и развертка летят постоянно, а запчастей с завода нет. Каждая дохлая плата — это мой золотой запас. Я с нее резисторы скручиваю, конденсаторы живые выпаиваю.
— Но вы же всё равно их потом списываете, — попытался возразить Олег.
— Списываю. По весу, — отрезал мастер. — Там медь, припой, палладий. Я за каждый грамм перед ревизией отвечаю. А ваши старые радиаторы и осциллографы мне телевизор не починят. Отдам я вам платы, пусть даже по самой красивой министерской бумаге, а дыру в своем резерве деталей чем закрою? Мне план выполнять надо, а не запасами КБ любоваться. Нет, товарищи. От вашего обмена мастерской выгоды ноль. Разговор окончен.
Он отвернулся и снова взялся за скальпель.
Олег нахмурился, собираясь продолжить спор, но внезапно осекся и замолчал. Он посмотрел направо, за соседний стол, где молодой радиомеханик отчаянно воевал с массивным шасси.
Плата была откинута на металлических петлях, напоминая открытый капот грузовика. Механик держал в руке измерительный провод, пытаясь поймать сигнал на тусклом экране громоздкого лампового осциллографа. Картинка на кинескопе самого телевизора дергалась, срываясь в косые полосы. Механик ругнулся сквозь зубы, выключил питание, быстро перепаял какую-то деталь и снова щелкнул тумблером. Раздался пронзительный свист, затем громкий щелчок — сработала защита блока питания. Свист оборвался. Телевизор погас.
— Да чтоб тебя! — механик в сердцах бросил паяльник на подставку. — Опять защита рубит! Генератор это или выходной каскад коротит?
Олег смотрел на эту сцену не отрываясь.
— Замкнутый круг, — едва слышно пробормотал он. — Если строчная развертка не заводится, высокое напряжение не идет, питание проседает, и телевизор сам себя глушит. Парень гадает на кофейной гуще. Ему, чтобы понять, какой узел сдох, нужно полтелевизора перепаять наугад.
Олег перевел взгляд с механика на дверь и быстро направился на выход.
На улице ветер тут же пробрал до костей. Олег плотнее замотал шарф, не глядя на мастерскую.
— Сидит на куче текстолита и трясется за каждый резистор! — в сердцах буркнул он, выпуская облако пара. Но, немного остыв, добавил: — Хотя мастер по-своему прав. Просто так он нам запчасти не отдаст. Ему нужно план по ремонтам выполнять, а не наши старые радиаторы коллекционировать. Придется искать другой подход.
* * *
В кабинете снабжения пахло старой бумагой и табаком. Николай Петрович сидел за столом и методично размешивал сахар в стакане.
Олег вошел следом за Наташей и опустился на стул, даже не расстегнув куртку.
— Отказал, — сказал он. — Даже список смотреть не стал. Говорит, наши детали ему телевизор не починят и план не закроют. Требует реальную выгоду.
Звякнула ложечка — начальник отдела положил ее на блюдце.
— Я же предупреждал: без самодеятельности, — спокойно констатировал Николай Петрович. — Мастерские сейчас задыхаются. Им ваши тумблеры и списанные осциллографы ни к чему, когда у них очередь на месяц вперед расписана. Отдаст он вам остатки плат, а работать с чем будет? Принципиально я вопрос прояснил, горком такую шефскую помощь одобряет. Но одной бумагой телевизор не починишь. Чтобы мастер подписал акт, вы должны предложить ему то, что реально облегчит жизнь.
Николай Петрович отпил чая и поморщился от крепости.
Олег подошел к столу и оперся о столешницу.
— Я видел, в чем у них проблема. Мастера работают вслепую. Шасси УПИМЦТ связано системой защиты. Если вылетает строчная развертка, питание глушится. Мастер не понимает: это сгорел задающий генератор импульсов или пробило силовой каскад? Чтобы найти один дохлый тиристор, они тратят часы на перепайку узлов и беготню с тяжелым осциллографом.
Олег знал эту особенность схемы УПИМЦТ, и сейчас, вспоминая потного, измученного парня с паяльником, физически ощущал его отчаяние. Конструкторы этих телевизоров заложили в них сложнейшую систему кольцевой защиты. Идея была красивой — спасти дорогой кинескоп и предотвратить пожар при малейшем скачке напряжения в сети. Но на практике, в условиях ремонтной мастерской, это превращалось в настоящий кошмар для любого механика.
Когда аппарат уходил в глухую защиту, он не давал совершенно никаких подсказок. Телевизор просто выключался, обрубая все контрольные точки и гася экран. Механик оставался слепым. Ему приходилось наугад разрывать цепи, вешать балластные лампы накаливания вместо реальной нагрузки и шаг за шагом, выпаивая тяжелые радиаторы, искать тот единственный пробитый элемент, который сводил с ума всю логику защиты блока питания.
Это был труд не диагноста, а сапера, который ошибается даже не один раз, а каждый раз, возвращаясь на исходную позицию с пережженным предохранителем. Олег видел, как парень снова тянулся к щупу старого осциллографа, и понимал, что без внешнего опорного сигнала этот ремонт может растянуться еще на полдня, выматывая нервы и сжигая дефицитные детали из подменного фонда. В этом и заключался их главный козырь.
Наташа открыла принесенную с собой картонную папку, достала чистый лист бумаги и карандаш.
— А если заменить штатный генератор телевизора своим, чистым сигналом? — предложила она. — Соберем внешний диагностический блок. Выводим шлейф, подключаем
— Да, — глаза Олега загорелись. — Собираем логику на нашей проверенной 155-й серии. Ставим кварц, делители и выдаем им идеальные синхроимпульсы. Строго по стандарту: и на строчную, и на кадровую. Независимо от того, жив ли родной генератор самого телевизора.
Наташа начала быстро набрасывать прямоугольники микросхем.
— И никакой беготни с приборами! — продолжила она. — Выводим на лицевую панель обычные светодиоды. Мастер просто втыкает шлейф в плату и сразу видит: питание есть, строчный импульс ушел. А главное — пришел ли ответный сигнал. Если наш диод передачи горит, а возврата нет — значит, обрыв или пробой в выходном каскаде. Ему даже осциллограф включать не надо, он глазами видит, какой блок мертв!
Николай Петрович внимательно слушал, переводя взгляд с Олега на Наташу. В словах инженеров проступала реальная экономия человеко-часов, а значит — процентов выполнения плана мастерской.
— Красиво, — Наташа постучала карандашом по бумаге, возвращая Олега к суровой физике. — Но ты помнишь, что там стоит в выходном каскаде?
— Тиристоры, — поморщился Олег. — Будь они неладны.
— Именно. Высоковольтные тиристоры. Когда эта штука работает, она дает обратные выбросы в сотни вольт. А если тиристор пробивает, эти выбросы полетят прямо по нашему шлейфу в приставку.
— Значит, закладываем такую же стену, как для основного макета, — отрезал Олег. Он выхватил карандаш и провел жирную черту между телевизором и логикой приставки. — Полная развязка.
— Трансформатор на питание свой, отдельный, — Наташа забрала у него карандаш и принялась быстро дорисовывать детали защиты. — Никакой общей земли с шасси телевизора. Передача сигналов только через оптроны. А на измерительные линии, которые будут ловить их дикие обратные выбросы, ставим быстрые защитные диоды и двухваттные ограничительные резисторы. Пусть лучше обуглится копеечный резистор на входе, чем сгорит наша логика.
Наташа говорила жестко, рублеными фразами, и грифель с силой вдавливался в бумагу, оставляя толстый след на наброске схемы.
Она терпеть не могла ситуативные, кустарные решения, когда дело касалось сопряжения цифровой логики и высоковольтной аналоговой техники. Для нее любой красивый замысел Олега ничего не стоил, если он мог сгореть при первом же неудачном броске напряжения или пробое.
Ее рука быстро, почти рефлекторно вычерчивала этот непреодолимый барьер. Наташа методично строила инженерную крепость, в которой нежные цифровые импульсы могли безопасно управлять бушующим океаном трехсотвольтных выбросов неисправного советского шасси.
Николай Петрович удовлетворенно кивнул.
— Вот это уже предметный разговор, — произнес он. — Настоящая инженерно-хозяйственная сделка. Знаете, почему я вообще под это подписываюсь?
Олег переглянулся с Наташей, но промолчал.
— Потому что если вы не добудете этот ремонтный фонд, завтра Седых положит мне на стол официальную заявку на пятнадцать новых цветных телевизоров для макетов «Сферы-82», — прагматично пояснил снабженец. — И мне придется выбивать их через министерство, сжигая наши квартальные лимиты и фонды. А горсть вашей логики К155, оптроны и кусок жести для корпуса приставки обойдутся институту в копейки. К тому же, горком скажет директору спасибо за шефскую техническую помощь городу. Но учтите: канал придется поддерживать. Отдадите прибор — они привыкнут. Сломается — будете чинить. Потребуют вторую приставку для филиала — придется собирать. Мастерская откроет доступ к фонду, только если вы реально облегчите им жизнь.
Олег кивнул. Нужна была нормальная документация, надежный металлический корпус и четкая инструкция, которую поймет уставший мастер в конце смены.
— Жду у себя на столе утверждённый проект вашего блока, — Николай Петрович придвинул к себе рабочий блокнот и сделал короткую пометку. — А я подготовлю проект письма от заместителя директора на городское управление.
* * *
Вторник начался с плотной метели. В мастерской на улице Горького пахло тающим снегом, канифолью и нагретым лаком от долго работающих телевизоров.
Заведующий стоял у стеллажа и переписывал инвентарные номера на картонных бирках. Заметив Олега с Наташей, он неторопливо закрыл журнал и подошел к барьеру.
— Снова наука? — спросил мастер ровным голосом, глядя на пустые руки визитеров. — Опять тумблеры менять пришли?
Олег молча достал сложенный лист на бланке «Электронмаша» с круглой печатью и подписью заместителя директора. Заведующий взял документ, сдвинул очки на кончик носа и вчитался в текст.
— Списание материальных остатков в рамках научно-технического сотрудничества, — произнес он вслух. — Грамотно составлено. Проверяющий к такой бумаге сразу не прицепится. Только вы мне зубы не заговаривайте. Что вы предлагаете? Очередной институтский прибор, к которому нужно инженера с двумя высшими образованиями приставлять? У меня ребята план гонят, им с вашими осциллограммами разбираться некогда.
Олег развернул на стойке черновик спецификации.
— Блок контроля для модулей УПИМЦТ, — спокойно ответил он. — Подключается шлейфом прямо в штатный разъем между кросс-платой и блоком развертки. Выдает контрольные кадровые и строчные синхроимпульсы, снимает ответные сигналы. Индикация на светодиодах.
Мастер оперся руками о стойку и склонился над чертежом, щурясь сквозь толстые линзы.
— Думаете, вы первые пробник изобретаете? — скептически хмыкнул он. — УПИМЦТ — машина капризная. Строчная развертка там на тиристорах КУ221. Это зверь, а не деталь. Там если обратный диод летит, он тянет за собой тиристор и всю шину. Искра по шасси гуляет так, что волосы на руках дыбом встают. Выброс в триста вольт ударит по вашей измерительной линии. Ваша нежная логика испарится при первом включении, а горелый пластик мне весь стол испортит. И кто за это будет отчитываться?
— Мы не самоубийцы, Семен Кузьмич, — твердо вмешалась Наташа, указывая карандашом на отдельный блок схемы. — Посмотрите на входные цепи. Заложена полная гальваническая развязка. Наша цифровая часть питается от собственного изолированного источника, мы вашу сеть не трогаем. Все сигналы передаются строго через оптические пары.
Мастер недоверчиво повел пальцем по нарисованным линиям.
— Допустим. А обратный импульс от умножителя? Он же ваши оптроны в уголь превратит.
— Не превратит, — добавил Олег. — На измерительных входах стоят токоограничивающие двухваттные резисторы и быстрая защита на стабилитронах, сброс идет на землю. Высоковольтный пробой физически не пройдет дальше входа. Если тиристор прошибет, на нашей плате сгорит пятикопеечный резистор. Мы его выведем на колодку, ваш мастер поменяет его за минуту паяльником. А логика останется жива.
Заведующий замолчал, оценивая компоновку.
— Светодиоды, говорите… — пробормотал мастер. — Так… Значит… Нет индикации — мертв выходной каскад…
— Именно, — кивнула Наташа. — Снимаем самую нудную часть работы. Тиристоры идут по порядку, без выпайки наугад
Мастер выпрямился. Потер подбородок, глядя поверх очков на Олега.
— Звучит складно. Если в железе будет работать так же, как на бумаге. Только вы за нее сразу полсклада просите. Пятнадцать шасси, блоки, кабели…
— Это потолок на перспективу, — пояснил Олег. — Мы готовы начать с малого. Списанные узлы, некондиция из ремонтного фонда. Чтобы мы могли собрать и отладить этот самый прибор на живом железе.
— Прямо сейчас я вам пятнадцать комплектов не выпишу, — мастер постучал костяшками пальцев по стойке. — Сделаем так. Выдаю три комплекта плат — блоки цветности БОС и развертки с целыми разъемами. Оформляем акт первичной передачи. Остальные шасси пущу через склад, когда подпишут списание. Но условия такие: собираете приставку, приносите сюда. Мы ее гоняем в хвост и в гриву на самых тяжелых неисправных аппаратах. Ремонт вашего прибора — за счет института. Документацию с методикой оставляете нам. И если приставка покажет себя в деле, соберете вторую для нашего филиала.
Олег кивнул.
— Договорились.
— Валера! — окликнул заведующий кого-то в глубине помещения, где шипели паяльники. — Выдай товарищам из науки три комплекта БОС и БР-2 из утиля. И акт неси, я распишусь.
Спустя сорок минут они вышли на улицу Горького. Ветер усилился, бросая в лицо сухую снежную крупу.
Олег нес тяжелую картонную коробку, перевязанную толстой бечевкой. Внутри глухо постукивали массивные печатные платы с алюминиевыми радиаторами транзисторов.
— Три комплекта, — сказал Олег, перекрывая гул ветра. — Для начала отладки хватит. Проверим входные сопротивления, снимем характеристики с видеоусилителей. Надо будет понять, какие узлы можно использовать прямо так, а где придется паять собственные схемы согласования уровней.
Коробка оттягивала руки. Олег чувствовал вес каждого радиатора, каждого электролита — это был долгожданный набор для сборки стенда. Он прижал коробку плотнее, чувствуя сквозь картон холодный металл.
Снег хлестал по лицу, залеплял глаза, но Олег шагал размашисто, почти не замечая холода. В его голове уже вовсю собиралась схема будущего испытательного стенда. Он мысленно отрезал от этих телевизионных блоков все лишнее, оставляя только видеоусилители и цепи формирования сигнала. Им предстояло заставить эти неповоротливые аналоговые потроха понимать четкий, дискретный язык компьютера, не допуская срывов синхронизации, дрожания картинки и искажения уровней.
Олег представил, как будет вскрывать эти блоки. Теперь всё зависело от того, как поведет себя приставка в железе. Если заработает — мастерская станет их постоянным источником деталей. Если нет — всё вернется к бесконечным согласованиям и пустым заявкам.
Наташа шла рядом, прижимая к груди папку с подписанным актом.
Глава 17
Разные архитектуры
Слава потянул на себя обычную дверь с матовым стеклом. Из комнаты донеслись гул вентиляторов, тихое жужжание трансформатора и короткий щелчок тумблера: за дверью шла зеленоградская работа с платами, кабелями и собственными схемами.
Лаборатория нестандартного оборудования выглядела обжитой и тесной. Сдвинутые столы образовывали два длинных рабочих острова. На одном высился разобранный осциллограф С1–65 с пульсирующей зеленоватой линией на экране, мотки тонкого провода МГТФ, россыпь керамических конденсаторов и коробки с логическими микросхемами. На другом соседствовали макет видеоконтрольного устройства со снятой задней стенкой и шеренга разномастных чайных кружек. Торцевую стену целиком занимала потертая меловая доска. Она была плотно исписана: схемы дешифраторов, колонки адресов, графики сигналов и вычерченные под линейку раскладки клавиатур.
Внутри находились трое. Старший, лет тридцати, стоял у доски с мокрой тряпкой в руке. У клавиатурного макета возился знакомый им инженер Юрий Беспалов. Третий — худой парень в очках, в свитере грубой вязки — методично сортировал резисторы по номиналам.
При виде вошедших худой парень замер, не донеся деталь до нужной коробки.
— Алексей? — он отложил пинцет и сделал шаг навстречу. — Дмитрий Меркушев. Мы виделись после большого совета, вы еще телефон оставляли… Я тогда спрашивал, можно ли будет собрать вашу «Сферу» здесь, у нас, для простых расчетов.
Морозов коротко кивнул, узнавая молодого инженера. Прошлый разговор после совета не пропал зря.
— Добрый день, Дмитрий. Я помню. Мы пришли, чтобы разговор о совместимости «Сферы» и ваших перспективных разработок перестал быть красивым словом.
Старший бросил тряпку на подоконник и медленно повернулся, скрестив руки на груди, пытаясь понять: пришли к ним за содержательным разговором или за очередной пустой тратой времени.
Сидевший рядом Беспалов, оторвавшись от макета, молча кивнул Громову.
— Наслышаны. Сам архитектор владимирской системы, — голос Гальперина прозвучал ровно, без открытой враждебности, но с холодком. — Пришли смотреть, что из макетов НЦ можно загнать под ваш стандарт? Мы предварительные спецификации вашей новой машины видели. У вас опрос клавиш зашит в ПЗУ, а вывод на экран жестко привязан к конкретным адресам памяти… Скажите сразу, какая у вас цель? Хотите, чтобы мы свои разработки свернули и начали клепать переходники под вашу шину?
Морозов остановился у края стола. Он прекрасно понимал эту реакцию. Для инженеров любая громкая инициатива со стороны выглядела как угроза. Придет ведомство, утвердит единую марку, и уникальные решения отправятся в корзину ради усредненного ГОСТа.
— Смотрите, коллеги. У нас во Владимире уже есть открытая восьмидесятая машина — простая, школьная, рассчитанная на кружки и мастерские. Есть и более тяжелый опытный вариант восемьдесят второй — пока не серия, а рабочее направление с дисковой памятью и МикроДОС — Морозов обвел взглядом зеленоградскую лабораторию, — У вас здесь своя линия: НЦ, локальные вычислительные средства, нестандартная периферия, опыт с чужими и своими терминалами. Поэтому я не хочу спорить, чья марка станет главной. Нам нужен стык, который не уничтожит ни вашу работу, ни нашу, но даст общую точку развития, минимальный стандарт.
Слово «НЦ» для человека вне зеленоградских коридоров тогда почти ничего не объясняло. Оно не означало готовую домашнюю машину, о которой писали бы в газетах, или привычную большую ЭВМ за стеклом вычислительного зала. Это было семейство рабочих замыслов Научного центра: одноплатные микро-ЭВМ, лабораторные терминалы, платы ввода-вывода, клавиатурные корпуса, попытки приспособить отечественный микропроцессор к обычному телевизору и магнитофону. Из таких вещей редко сразу выходит готовый продукт. Сначала появляются макеты, исправленные чертежи, широкие листы АЦПУ, корпуса, которые кто-то подгоняет руками не потому, что так положено по серии, а потому, что иначе машину не поставить на стол.
Позже эту линию будут вспоминать по другому имени. После переделок, упрощений и заводской борьбы из зеленоградского опыта вырастет «БК» — та самая бэкашка, бытовой компьютер, который будут помнить
Морозову было трудно говорить честно. Холодная, системная часть его опыта хотела бы отсечь лишнее разнообразие сразу: один учебный формат, один порядок записи программ, один набор системных переходов, один бейсик, в котором школьная задача, лабораторная таблица и простая расчетная программа переходят с машины на машину без переписывания заново. Он слишком хорошо знал, во что превращается страна, где каждый завод и каждый институт приносит в школу собственный алфавит, собственный магнитофонный заголовок и собственный способ вывести русский символ.
Но такую мысль нельзя было положить на стол целиком. Она прозвучала бы как приговор всем, кто стоял сейчас вокруг макетов НЦ. Он оставил себе задачу-максимум, а вслух сказал только задачу-минимум: общий словарь данных, базовое подмножество бейсика, одинаковые правила сохранения простых программ и таблиц. Пусть железо спорит. Пусть экраны отличаются. Пусть у каждой машины будет свой нижний обработчик. Нельзя было позволить, чтобы программа, набранная в одном городе, становилась мертвой бумагой в другом.
Гальперин сухо усмехнулся и скрестил руки на груди.
— Да, Алексей Николаевич. У вас 80-я машина дешевле, проще, шум вокруг нее заметнее. А у нас здесь уже есть свои решения. Мы боимся не ваших макетов, а того, что завтра кто-нибудь наверху решит: раз школьникам годится владимирская плата, значит, все остальное лишнее.
— Поэтому я и пришел сюда до всяких бумажных решений, — ответил Морозов. — Не за тем, чтобы продавить владимирский образец, а чтобы заранее отделить общее от частного. Пусть железо остается разным. Общее должно быть выше: символ, системный переход, проверочная программа, понятный отказ.
Слава поднял ладонь, будто останавливая не спор, а неверное слово.
— Виктор Самойлович, он говорит не про «стандарт Сферы». Скорее про условия: что программа вправе ожидать от машины, если машина сама объявила себя совместимой. Не приказ, а проверяемое обещание.
Гальперин скептически прищурился.
— Совместимость — удобное слово. Только на практике оно часто означает: «откажитесь от своего и делайте как мы». У нас другие принципы обработки сигналов. Мы не станем ломать свою логику.
— И не надо, — сказал Громов.
До этого программист слушал спор молча, но теперь положил свою толстую рабочую тетрадь на стул и шагнул вплотную к меловой доске. Вместо того чтобы спорить о министерских приказах, он начал жадно вчитываться в зеленоградские схемы. Его взгляд быстро скользил по колонкам шестнадцатеричных адресов, губы беззвучно шевелились.
— У вас тут отдельный регистр на данные выделен, — произнес Евгений, считывая архитектуру прямо с меловых набросков. — А в соседнем регистре вы признак готовности отдаете. Вы контроллером аппаратное прерывание дергаете, когда символ с клавиатуры готов?
Гальперин удивленно моргнул. Владимирский гость читал их железо с листа, мгновенно улавливая суть без лишних вопросов.
— Дергаем, — подтвердил инженер, машинально опираясь о край рабочего стола. — Аппаратно. Процессор в это время свободен.
Громов наконец обернулся к зеленоградцам. Он смотрел на схему без ведомственной дипломатии, как системный программист, которому показали хорошее аппаратное решение.
— Грамотно, — признал Евгений, указывая на схему на доске. — А покажите временные диаграммы. Вы дребезг контактов до контроллера гасите или внутри?
Гальперин переглянулся с Беспаловым. Осторожность никуда не делась, но настороженность уступила место профессиональному азарту: спор перешел на территорию сигналов, регистров и признаков готовности. Старший группы кивнул в сторону доски.
Беспалов подошел к доске, смахнул ладонью часть утренних расчетов и быстро набросал схему клавиатурного узла.
— У нас вот такое решение, — сказал он. — Отдельная логика опроса. Она сама следит за клавишами, аппаратно гасит дребезг контактов и отдает процессору уже готовый код. Рядом есть признак: символ можно брать. Так что если хотите совместимости диалектов бейсика, это тоже надо учитывать.
— Хорошее решение, изящное, — сказал Евгений. — У нас матрица висит на шине, мы опрашиваем ряды программно.
Гальперин хмыкнул, явно ожидая лекции о том, почему владимирский путь единственно верный. Но вмешался Морозов.
— Виктор Самойлович, Юрий Сергеевич, давайте сразу разделим две темы разговора, — он сделал шаг к столу. — Есть архитектура машины, где решается, какие у нее шины, какие регистры, какие узлы ввода-вывода. Это ваша территория. В НЦ уже умеют делать мощные микро-ЭВМ, и глупо было бы притворяться, будто их можно свести к нашей дешевой учебной плате. А есть другой слой: что видит программа сверху. Ей нужен не номер вашего регистра и не способ опроса рядов, а символ, признак готовности, понятная ошибка. Вот об этом я и говорю. Не одна шина для всех, не один корпус, не одна марка. Общий минимум поверх разных машин.
Громов, слушавший Алексея с легкой улыбкой, шагнул к доске и протянул руку. Беспалов коротко взглянул на Гальперина и отдал владимирцу кусок мела, словно временно уступая право чертить на своей территории.
— Чтобы этот зоопарк обменивался программами на бейсике, мы не железо должны ломать, а договориться о стандарте ввода-вывода, — Громов нарисовал на доске большой прямоугольник, разделив его на три горизонтальных уровня. — В нашей МикроДОС система расслоена. На самом верху сидит интерпретатор бейсика. Посередине — базовая операционная система. Она знает, как найти файл на диске, но понятия не имеет, как устроен экран или клавиатура.
Евгений провел внутри нижнего блока короткую вертикальную черту.
— Наверху интерпретатор бейсика не должен знать, где лежит признак готовности. Ему нужен один вызов: «дай следующий символ». Для владимирской машины этот вызов ведет в нашу подпрограмму, которая опрашивает ряды. Для вашей шестнадцатибитной — в вашу, которая читает готовый код из своего узла. Наружу обе возвращают одно и то же: код символа из таблицы и понятный признак состояния.
Беспалов медленно кивнул.
— То есть спор не о номерах портов и подобных аппаратных привязках?
— Именно, — сказал Громов. — Номера портов у каждого свои. Наш общий стандарт должен фиксировать не их, а формат таблицы символов, кодировку и функции вывода для бейсика. Тогда программа в исходном тексте остается той же, а железо не становится одинаковым.
Гальперин задумчиво потер подбородок. Предложение выглядело разумно. Оно переносило спор из плоскости перепайки дефицитного железа в плоскость бумаги и кода: две школы могли сохранить свои технические принципы и договориться хотя бы
— Допустим, — кивнул старший группы. — С клавиатурой можно спрятать разницу. А что делать с геометрией экрана?
Гальперин подошел к столу у окна и указал на макет видеоконтрольного устройства. Рядом лежала выносная клавиатура, а на листе миллиметровки была набросана другая сетка вывода — плотнее владимирской, удобнее для таблиц.
— Для расчетов и листингов нам нужна другая геометрия, — сказал он. — Больше текста на экране, другой терминальный режим. У вас, насколько я понимаю, вывод рассчитан на обычный телевизор и крупную сетку. Если наша программа полезет туда со своими таблицами, она просто развалит вывод.
Морозов вгляделся в мелкие строки на экране. Физику и удобство чтения не обманешь: школа должна жить с доступной трубкой, лаборатория — с тем, что позволяет работа.
— Делать вид, что экраны одинаковые, нельзя, — признал Алексей.
— Значит, совместимость отменяется? — прищурился Гальперин.
— Значит, совместимость должна быть настоящей, — ответил Громов, перелистывая тетрадь. — В паспорте программы пишем минимум: какой нужен экран, сколько памяти, требуется ли дисковая память, какие знаки и управляющие коды обязательны. Если машина этот минимум не объявляет — программа не делает вид, что справится. Либо запускается в простом режиме, либо выдает понятное сообщение об ошибке.
— Это не готовая спецификация, — добавил Морозов. — Это принцип унификации параметров. Сложная расчетная программа останется у вас. Простая учебная — пойдет шире. Главное, чтобы пользователь видел не мусор на экране, а ответ машины.
Меркушев тяжело вздохнул и указал отверткой на кассетный магнитофон, сиротливо стоявший на краю стола в путанице проводов с «крокодилами».
— Если вообще дойдет до загрузки, мы состаримся, пока ваши проверки пройдут, — Меркушев недовольно покачал головой. — Пленка — это мучение. Уровень сигнала постоянно плавает. Чуть замялась лента на кассете, дрогнул мотор — теряем бит. Мы пытаемся применять свои способы восстановления сигнала, чтобы хоть как-то повысить надежность. Но скорость падает катастрофически.
Он перехватил отвертку и покрутил ее в пальцах.
— Транслятор грузится бесконечно долго. За это время можно в столовую сходить, покурить и забыть, зачем вообще включал питание.
Морозов переглянулся с Громовым.
— Дмитрий, тяжелые трансляторы — это задача для перспективной «Сферы-82», там мы ставим болгарские дисководы, — мягко поправил молодого инженера Морозов. — А кассета — это интерфейс «народной» восьмидесятки. Там у людей магнитофон «Весна» и затертая пленка. Но вы абсолютно правы: для школ и любителей аудиокассета — это сущий мрак. Мы бьемся с тем же самым. Жесткий порог срабатывания аппаратного компаратора сразу дает ошибку: достаточно задеть ручку громкости или пустить ленту вкривь, и байт потерян.
Меркушев понимающе кивнул.
— Мы на макетах пробовали привязать порог к среднему уровню сигнала, — Морозов взял мел и набросал поверх старых записей черновую схему входного узла: конденсатор, пара резисторов, треугольник операционного усилителя. — Схема пытается сама подстроиться под уровень записи. Компаратор сравнивает текущий фронт не с нулем, а с усредненным фоном.
— Если подобрать постоянную времени, — медленно проговорил Меркушев, — то на плохой ленте схема успеет подстроиться под провал громкости, не потеряв импульс.
— Именно, — подтвердил Морозов. — У нас на советской МК-60 эта схема работает с переменным успехом, пленка там осыпается прямо в лентопротяге. Устойчивого решения пока нет, нужно подбирать сопротивления.
— Вы можете собрать этот узел у себя на макетке и прогнать через осциллограф, — предложил Громов. — Мы оставим цоколевку и саму идею фильтра. Это не законченный блок, а просто схема для проверки.
Гальперин скрестил руки на груди, внимательно глядя на владимирцев.
— А взамен что?
— А взамен мы садимся и сверяем логические форматы, — ответил Евгений, постучав карандашом по столу. — Мне нужно знать вашу синхропоследовательность, длину заголовка файла, как вы считаете контрольную сумму. Аппаратный усилитель можете паять любой, хоть на лампах. Но если структура файла на ленте разъедется, мы друг друга никогда не прочитаем. Вы даете нам перечень своих сигналов и тестовые записи, мы вам — свои.
Слава, до этого тихо стоявший у стеллажей с приборами, чуть заметно улыбнулся. Разговор перестал быть обменом подозрениями и стал нормальным инженерным спором.
После кассет разговор перешел к программам. Гальперин пододвинул к себе толстую картонную папку, развязал тесемки и выложил на стол стопку распечаток. Широкие листы АЦПУ пестрели колонками цифр, перфорационными отверстиями по краям и карандашными правками.
— Наш вариант бейсика, — сказал он. — Нацелен на специалистов, а не обучающихся. Мы добавляем подмножество инженерных расширений: вычисления для лаборатории, работу с таблицами, обращение к приборам. Он сложнее школьного, зато люди здесь решают на нем настоящие задачи.
Громов придвинул распечатку к себе и просмотрел несколько строк листинга.
— Для лаборатории — правильно, — сказал он. — Наша версия для «Сферы-80» беднее и меньше. Мы делали ее как общий вход для школьных классов, кружков и простого управления внешними устройствами. Значит, спорить надо не о том, чей бейсик главный, а о том, какое подмножество обязано работать везде.
— Подмножество — это опять красиво, — заметил Беспалов. — А на практике что?
Морозов повернул к себе чистый лист и провел посередине короткую черту.
— На практике — две колонки. Слева то, что обязано переноситься: простая арифметика, строки, числа, массивы, циклы, условия, ввод с клавиатуры, печать на экран, сохранение и чтение простого файла. Справа — все, что каждая машина добавляет для себя: ваши инженерные функции, наши школьные сокращения, работа с приборами, особенности экрана.
Гальперин не перебивал, но пальцы его легли на папку с распечатками жестче.
— То есть вы хотите, чтобы наш бейсик стал вашим?
— Нет, — сказал Морозов. — Я хочу, чтобы расчетная таблица, набранная у вас, не выдавала ошибку нас только потому, что одна машина иначе помечает строку или конец записи. Пусть сложная программа прямо скажет: мне нужен зеленоградский режим. Но простой листинг и простой набор данных должны пройти дорогу от школы до лаборатории без переписывания от руки. Отсутствие единого стандарта будет вредить конечным пользователям. А в «Сфере-82» мы можем максимально приблизиться к вашему видению бейсика, все от этого только выиграют.
Громов кивнул.
— Тогда в бумаге фиксируем не весь язык, а базовый уровень. Ниже него падать нельзя, выше — сколько угодно. Наш малый бейсик остается малым. Но если программа написана в общем подмножестве, она должна читаться и исполняться на обеих машинах или хотя бы выдавать понятный отказ.
—
Услышав про самопроверку, инженеры НЦ оживились. Гальперин отложил папку с распечатками и снова повернулся к доске.
— Память мы сейчас гоняем простыми шаблонами, — ответил Гальперин. — Пишем в ячейки разные шаблоны, прогоняем несколько проходов, смотрим, нет ли повторяющихся ошибок. Для макетного стола хватает.
— Для обеспечения совместимости этого мало, — сказал Морозов. — Если машина обещает запускать общие программы, она должна сначала доказать, что умеет считать одинаково. Память, клавиатура, экран, носитель, простая арифметика — все это проверяется не словами, а проверочной программой и протоколом результатов.
— Готовые тесты под вашу плату мы писать не будем.
— И не надо, — ответил Морозов. — Нам нужна методика: какие случаи вы считаете опасными, какие ошибки ловили на своих макетах, какие входные примеры должны дать один и тот же ответ. Код под наше железо напишем мы. Код под ваше — вы, если решите поддержать этот стандарт.
— Списки составить можем, — медленно произнес руководитель группы, принимая такое разделение труда. — Выдадим перечень требований по математике. Заодно набросаем наши аппаратные вопросы по работе с клавиатурой и выводу на экран.
— Отлично. А я подготовлю набросок базовых функций для бейсика, — сказал Громов. — Не под вашу плату и не под нашу, а поверх: чтение символа, вывод знака, проверка носителя, сообщение об ошибке, паспорт экрана. Отдельно — формат таблицы символов для русского и латинского режимов. Нижние обработчики каждый пишет сам.
Гальперин перевел взгляд на Беспалова, потом на Меркушева.
— С нашей стороны — замечания к переходам и к проверочным программам. Плюс список вопросов по сборке вашей восьмидесятки здесь, в лаборатории. Хотим понять, где она полезна, а где нет.
— С нашей — ваш список того, что проверить во Владимире, — сказал Морозов.
Глава 18
Первый цветной макет на бумаге
Наташа развернула ватман на наклонной доске кульмана. Края плотной бумаги пружинили, сопротивляясь. Она методично прошлась по углам, вдавливая канцелярские кнопки в деревянный щит, пока лист не натянулся с глухим барабанным звуком. Взяла цанговый карандаш с грифелем 2Т. Острие вывело в правом нижнем углу ровный чертежный шрифт: «Блок сопряжения видеосигнала. БСВ-80/82».
Под столом стояла картонная коробка. Внутри плотно лежали три комплекта плат из мастерской. От снятых модулей пахло холодной пылью, старым текстолитом и высохшим лаком. В лаборатории пока оказались только узлы для предварительной разведки; кинескопы и тяжелые телевизионные рамы предстояло искать отдельно.
Стенд входного контроля они уже продумали. Диагностическая приставка для проверки телевизионных блоков лежала отдельным листом на соседнем столе. Наташа спроектировала ее жестко и однозначно: собственная линия стабилизированного питания для цифровой части, оптронная развязка, защита измерительных входов диодными ограничителями. Общие земли с высоковольтными цепями телевизора были разведены, прямые контакты логики с импульсами строчной развертки исключены. Эта схема давала прибору запас при пробое в телевизоре, а лаборанту — понятную локализацию неисправности по семи световым признакам.
Теперь предстояло решить главную задачу — безопасно подключить советский телевизор к шине вычислительной машины в качестве цветного монитора.
Олег Тимофеев пододвинул табурет к кульману. На полях черновика он сразу начал прикидывать разъемы, корпуса микросхем, свободное место на плате и то, сколько таких узлов реально сможет повторить завод.
— Нам нужен рабочий макет, Наташа, — сказал он, глядя на пустой лист. — Цветной вывод для двух машин. Для текущей «Сферы-80» в виде платы расширения и как базовый узел для будущей восемьдесят второй.
Наташа провела первую горизонтальную линию — шину данных.
— У нас лимит корпусов, — продолжил Олег, отстукивая ритм пальцами по доске. — Работаем на сто пятьдесят пятой и пятьсот пятьдесят пятой сериях. Микросхема — это потребление тока, место и проблемы с трассировкой. Если мы раздуем видеоконтроллер до пятидесяти корпусов, завод просто не возьмет плату в производство. Разводка медных дорожек превратится в кашу.
— Значит, упаковываем принятую базу, — Наташа нарисовала два прямоугольника один под другим. — Килобайт базовой статической памяти под коды символов и параллельно килобайт под нашу атрибутную память. Восемь цветов, никаких градаций яркости, как и решили.
Олег потер переносицу, прикидывая обвязку.
— Синхронная адресация сожрет нам корпуса. Чтобы видеоконтроллер читал их одновременно, не заставляя процессор ждать в цикле, нам придется развязывать шины адреса. Мультиплексоры КП2 займут минимум четыре корпуса.
— Плюс шинные формирователи АП6, чтобы отсечь видеопамять от основной магистрали, — кивнула Наташа, быстро вычерчивая на ватмане цепочку коммутаторов. — Я ужимаю логику дешифрации до двух корпусов, но мы всё равно балансируем на пределе габаритов стандартной платы расширения. Дополнительный бит интенсивности мы сюда физически не впихнем.
Олег согласно хмыкнул. Восемь цветов — красный, зеленый, синий, их попарные комбинации, черный и белый — для отображения текста, графиков и базовых схем этого хватало с запасом. Главное было уместить всю обвязку на один текстолит.
Слева от кульмана появился Андрей Горелов. Он подошел тихо, без суеты, и некоторое время молча смотрел, как на ватман ложатся шины, регистры и выходные цепи.
— Чертите красиво, — произнес Горелов, открывая свою папку. — Только покажите мне, где здесь врезка от аппаратного сторожевого таймера. Той самой красной рамки, которая должна загораться при зависании процессора. Если вы пустили ее через общую шину данных, такой вариант не примут.
Он упер палец в пустое место рядом с выходными цепями видеотракта.
Наташа перестала чертить. Она не любила, когда в ее стройную логику вторгались с грубыми обходными путями, но требование первого отдела было законом. Она сдвинула линейку, открывая правый край ватмана.
— В центральный сдвиговый регистр мы не лезем, иначе у нас поплывет фаза и изображение на экране превратится в кашу, — жестко ответила она. — Вот отдельный регистр бордюра. Сигнал от вашей схемы контроля заходит прямо на его управляющий вход. Общую магистраль мы вообще не трогаем.
Олег повернулся к Горелову, подтверждая слова Наташи:
— Процессор может висеть намертво. Шина может закоротить. А рамка все равно аппаратно зальется красным, потому что синхроимпульсы живут независимо.
Горелов провел пальцем по нарисованной линии, сверяя ее со своими записями.
— Изоляция обеспечена, это хорошо, — сказал он ровнее. — Но мне нужен физический доступ к этому пути. Продублируйте этот флаг на контрольную колодку. Оператор видит рамку, а техник сзади снимает подтверждающий уровень прибором, не вскрывая опломбированный
Наташа тяжело вздохнула, взяла ластик и стерла аккуратно выведенную линию аппаратного сброса, уводя ее сложным крюком в сторону системных портов.
— Выведем, — сказала она, сдувая катышки резинки. — Заложим лишнюю дорожку на резервный контакт. Главное, что видеоблок отработает аварию сам, не дожидаясь процессора.
— Переключение займет доли микросекунды, — прикинул в уме Олег. — Для глаза оператора это практически мгновенно.
— Годится, — Горелов заложил руки за спину. — Главное, чтобы состояние можно было снять осциллографом прямо с разъема при закрытом корпусе. И запишите в примечании: признак отказа живет за пределами видеотракта. Тогда я не буду потом требовать отдельную плату для восемьдесят второй «В».
От стола поднялся Птицын. В руках он держал распечатанную таблицу точек, которую они начали на прошлом разборе. Саша выглядел сосредоточенным: к готовому чертежу он подходил осторожнее, чем к полке с деталями.
— Олег, Наташа, — Птицын подошел к кульману. — Я свел в единую таблицу ваши аппаратные данные и черновики Евгения Николаевича по маскам для проверочной программы. Посмотрите, пожалуйста. Хочу убедиться, что я ничего не перепутал при переписывании.
Он положил распечатанную таблицу на край доски. В ней были аккуратно заполнены колонки: адрес порта, битовая маска, номер контрольной точки и код состояния.
Олег пробежал глазами по строкам, проверяя аппаратную часть.
— Порт E0 отведен под управление, E1 — под базу палитры. Перенес верно, без ошибок.
— Тут я как раз застрял, — признался Птицын, указывая на колонку с масками. — Если мы вешаем дешифратор цвета прямо на общие линии, хватит ли тока логическому нулю? У нас там уже висит матрица клавиатуры.
Олег провел пальцем по схеме на ватмане.
— Нагрузка в норме. Наташа заложила шинные формирователи АП6 на входе в видеоконтроллер. Они изолируют внутреннюю шину модуля от системной магистрали. Запаса по току хватит.
Наташа, в свою очередь, проверила логику сигналов.
— Коды состояний совпадают с битовыми масками, — подтвердила она. — Молодец, Саша. Оставляй таблицу, она понадобится при трассировке.
Птицын задержался у доски, неловко переминаясь с ноги на ногу.
— Олег, я тут графу с контактами разъема пока пустой оставил, — признался он. — Я не понимаю, как ее заполнять. У старой «Сферы-80» мы эту плату будем втыкать в боковой порт расширения, там один шаг контактов. А для новой восемьдесят второй вы вроде хотели развести видео прямо на материнской плате. Мне для тестов делать две разные таблицы?
Олег впервые за утро оторвался от схемы и посмотрел на техника с открытым одобрением.
— Молодец, Саша. Зришь в корень. Таблица остается одна, потому что для программы это одна и та же машина. Порты те же, биты цвета те же. Евгений в своем коде разницы не увидит. А вот для сборщиков делай разделение на две колонки физики.
Он постучал карандашом по краю ватмана.
— В первой колонке пиши распайку под старый системный разъем — это для тех, кто будет паять плату-приставку по журнальным схемам к своей «восьмидесятке». А во второй колонке давай штатные внутренние линии. Логика общая, железо разное.
— И сразу подпиши, какие цепи требуют экранированного провода, — добавила Наташа. — Строчную и кадровую синхронизацию нельзя тащить как попало рядом с линиями данных. Иначе потом будем искать помеху не в схеме, а в косой укладке жгута.
Птицын торопливо внес новые графы: общая логика, переходники для «Сферы-80», штатные линии для «Сферы-82», примечание для сборщика.
Саша с облегчением выдохнул и отошел к своему рабочему месту.
Наташа вернулась к чертежу. Теперь начиналась самая тонкая часть — выходной каскад. Телевизионное шасси УПИМЦТ не понимало цифровых уровней. Ему требовались аналоговые сигналы.
Она нарисовала три линии: R, G, B. На каждой появились буферы и цепочки резисторов.
— Эмиттерные повторители и делители, — прокомментировала она. — Микросхема выдает уровень ТТЛ — около четырех вольт. На видеоусилители УПИМЦТ нужно подавать не больше полутора вольт, так что уровни придется подбирать, как и говорил Петр Иванович. Иначе выжжем входные транзисторы.
Затем она вывела отдельный блок для формирования синхросмеси.
— Кадровые и строчные импульсы мы собираем на элементе ЛЛ1. Получаем композитную синхронизацию.
— А программная совместимость? — уточнил Олег. — Если мы загружаем старую черно-белую программу, которая не знает про адреса атрибутной памяти?
— Схема инициализируется нулями. Нулевой атрибут — это белый текст на черном фоне. Черно-белый режим сохраняется аппаратно.
На ватмане вырисовывался законченный тракт: восемь цветов, совместимость со старым кодом, аппаратная индикация ошибок. Наташа отодвинула в сторону лишние варианты и оставила на схеме только ту логику, которая уместится на стандартном куске текстолита и не потребует дефицитных деталей. Рядом с резистивными делителями она вычертила выходной разъем и проставила три короткие надписи.
ЦВЕТ. СИНХРОСМЕСЬ. ЗЕМЛЯ.
Дверь лаборатории приоткрылась. Иван Михайлович остановился на пороге, придерживая под мышкой пухлую папку с накладными. Он обвел взглядом троицу у кульмана: Наташа методично дочерчивала выходные цепи, Олег вполголоса диктовал адреса портов, а Горелов сверял пути прохождения сигнала со своими допусками.
— Вижу, сопряжение открытого и закрытого контуров идет полным ходом, — негромко сказал Иван Михайлович. — Андрей Витальевич, как согласуете схему, свои эксплуатационные требования проведите отдельным актом через общий журнал КБ. Олег, Наталья, это и к вам: раз уж вы ради будущей восемьдесят второй «В» закладываете резерв в общий узел, на чертеже четко маркируйте, что относится к гражданской базе, а что уходит в приложение. Мне потом эту спецификацию защищать перед директором, а не ребусы по вашим стрелкам разгадывать.
— Поняли, Иван Михайлович, — ответил Олег.
Михалыч кивнул и прикрыл дверь. Олег поставил рядом с требованием Горелова пометку: «общий узел; приложение 82В».
К полудню черновой макет БСВ-80/82 полностью занял лист формата А1. Ватман лежал на доске кульмана. Плотная сеть карандашных линий объединяла буферные регистры, счетчики и элементы жесткой логики.
Люба Ветрова подошла к столу неслышно. В одной руке она держала раскрытый рабочий журнал, в другой — стандартный тестер Ц4315. Аккуратно положив прибор на свободный край стола, она склонилась над чертежом.
Несколько минут в лаборатории стояла абсолютная тишина. Люба водила колпачком ручки по линиям связи, надолго задерживаясь на узлах сопряжения цифровой части и видеовыхода.
— Токи считали, теоретики? — сухо поинтересовалась она, выпрямляясь и глядя на Наташу.
Олег скрестил руки на груди.
— Нагрузочная способность выходов проверена. Циклы ожидания процессора просчитаны. Логика сходится.
— Логика у вас на бумаге сходится, — Люба склонилась над ватманом. —
Она провела воображаемую границу, отделяя цифровую часть от земляного контура телевизионных видеоусилителей.
— Сто пятьдесят пятая серия при переключении дает крутые фронты. Чтобы на экране не плясал снег, мы жестко разводим контуры на плате, как и обсуждали. Иначе просадки потенциала пойдут прямо на вход в телевизор.
Наташа кивнула.
— Все так, — спокойно подтвердила она. — Цифровой полигон ведем отдельно, аналоговый отдельно. Сводим их в одну общую точку только у силового разъема, как мы и договаривались с Петром Ивановичем.
— Верно, — Люба перенесла карандаш к рядам регистров. — А где места под конденсаторы на корпусах логики? Ставим керамику КМ. Без исключений, как и договаривались. Иначе помехи по питанию сведут процессор с ума при первой же заливке.
Олег вздохнул.
— Места заложены, просто не перенесены на ватман. Плата из-за них неизбежно расползается в габаритах. Это тридцать деталей, а нам еще предстоит разместить узел питания, раз телевизионное мы не трогаем.
— Именно, никакого питания от УПИМЦТ, — категорично ответила Люба, обводя свободный участок текстолита. — У телевизора там тиристоры в строчной развертке лупят так, что на соседних столах осциллографы с ума сходят. Если мы возьмем их грязные пять вольт, ваш процессор повиснет при первом же кадре. Питание берем от машины. Ставим свой линейный стабилизатор, пятую «КРЕНку», и глушим помехи дросселем.
Горелов одобрительно кивнул: надежность питания в закрытом контуре проверяли в первую очередь.
— И не забудьте про тепло, — непререкаемым тоном добавила Люба. — Логика жрет прилично. «КРЕНка» будет рассеивать три-четыре ватта. Ей нужен нормальный алюминиевый радиатор, иначе плата прогорит до дыр через час работы. Резервируй место.
Олег скрипнул зубами и с явной тоской посмотрел на плотную, изящную компоновку микросхем, которую они выстраивали все утро.
— Люба, кусок алюминия такого размера съест мне четверть платы! — возмутился он. — Куда я дешифратор дену? Навесным монтажом сверху припаяю?
— Сдвинешь буферы, — отрезала Люба. — Зато схема будет железно держать частоту. И еще одно. Площадки контрольных точек у вас раскиданы по всему листу. Сведите их в один ряд на свободный край: питание, синхросмесь, три канала цвета. Вы же сами не подлезете щупом в центр работающей платы, когда она вставлена!
Олег потер лоб, сдаваясь. В вопросах компоновки и выживания железа с Ветровой спорить было бесполезно.
— Ладно. Сгруппируем, — буркнул он и вдруг щелкнул пальцами, поймав новую мысль. — Слушайте, если мы выводим контрольные точки в один ряд, нам нужен эталонный сигнал, чтобы их щупать.
Он резко обернулся к соседнему столу.
— Саша!
Птицын, сидевший над таблицей кодов состояния, тут же поднял голову.
— Громов тебе показывал, как прошивать маленькие ПЗУ? — спросил Олег. — С тебя простая проверочная программа для макета. Буквально на пару десятков байт. Включили тумблер — машина сразу, без загрузки системы, плюет на экран калибровочную сетку, все восемь цветов и рамку по краям. Мы осциллографом ткнем в наши контрольные точки и сразу поймем, где завалили фронты.
Птицын молча кивнул, быстро делая пометку в блокноте. Для него это была понятная, осязаемая задача. Он тут же уточнил у Олега базовый адрес порта для инициализации и подписал рядом: «зашить в тестовое ПЗУ».
Люба удовлетворенно хмыкнула и достала из тубуса чистый лист плотной кальки. Она расстелила его рядом с ватманом поверх миллиметровой сетки и тщательно закрепила по углам канцелярскими кнопками.
— Пересчитываем разводку, — подытожила Люба, беря карандаш.
Спустя час на полупрозрачной бумаге проступила новая топология. Появились широкие заштрихованные полигоны раздельной земли, квадратные контактные площадки для плановых измерений и пунктирный контур радиатора охлаждения. Рядом лег заполненный от руки список деталей. Олег снял кальку с кульмана, подержал ее на свету и положил рядом с коробкой плат из мастерской.
Глава 19
Красный карандаш
Тяжелая, обитая темно-коричневым дерматином дверь режимной переговорной надежно отсекала кабинет от привычного гула коридоров зеленоградского научного центра. Внутри не было ни паяльных станций, ни разбросанных рулонов перфоленты, ни вечного запаха нагретого текстолита, который пропитывал владимирские лаборатории. Здесь пахло сухой бумажной пылью, старой мебельной полировкой и едва уловимо — сургучом.
На массивном дубовом столе царил абсолютный канцелярский порядок. Слева лежали две аккуратные стопки отпечатанных на машинке листов, чётко разделяющие железо и программную часть. Первая — проектная документация на базовую аппаратную архитектуру перспективной микро-ЭВМ «Сфера-82». Вторая — отдельный пакет по программному комплексу проверки топологий «СЛОЙ-81». За литерой «р», чуть сильнее пробивающей бумагу во втором документе, скрывались адреса блоков памяти на шестьдесят четыре килобайта, тестовые векторы, контрольные суммы и графики использования машинного времени БЭСМ-6, выделенного по лимитам Липатова.
Справа оставалось пустое полированное пространство, предназначенное для страниц, прошедших первичное согласование.
Сергеев сидел во главе стола. Сейчас перед ним лежал первый пакет — аппаратная часть «Сферы-82». Куратор читал машинописные листы медленно, строка за строкой. На полях его экземпляра уже стояли короткие пометы: исполнитель, допуск, журнал. Иногда он задерживал карандаш над словом и смотрел в сторону, будто мысленно проверял, существует ли для этой фразы нужный человек с подписью.
Морозов сидел напротив, чуть подавшись вперед и сцепив руки в замок. Пока Сергеев читал, Алексей отмечал в уме, какие формулировки можно заменить без ущерба для совместимости, а где уступка меняет саму архитектуру. Схема могла безупречно работать на испытательном стенде, но в сопроводительной записке один неправильный глагол останавливал проект перед первой же стальной дверью спецчасти.
Липатов сидел по правую руку от Алексея. Он расчертил страницу своего рабочего блокнота на две колонки: слева — термины из описи, справа — безопасные эквиваленты для первого отдела. Напротив спорной строки было дважды подчеркнуто слово «открытая», а рядом выведена готовая замена.
Липатов придвинул блокнот ближе к Морозову и произнес вполголоса:
— Алексей, я же предлагал убрать «открытую архитектуру». Нам завернут папку на первой инстанции.
— Оставь пока в рабочем экземпляре, — так же тихо ответил Морозов. — Посмотрим, какую формулировку пропустят. Вместе и определим.
Сухой шелест переворачиваемой страницы прервал их перешептывание. Сергеев выровнял край бумажного листа по границе столешницы. В его пальцах блеснули грани красного карандаша. Острие опустилось точно на спорную строку.
— «Открытая архитектура взаимодействия», — ровно прочитал куратор, глядя на разработчиков поверх бумаг. — Звучит масштабно. Но в министерстве слово «открытая» рядом с режимным объектом читается как приглашение к несанкционированному доступу.
Липатов коротко кивнул.
—
Красный грифель с царапающим звуком перечеркнул целую строку. Выше зачеркнутого текста Сергеев убористыми печатными буквами вывел предложенную Липатовым замену.
Морозов сделал пометку на своей копии документа.
— Хорошо, пусть будет унифицированный профиль, — произнес Алексей. — Главное, чтобы за сменой вывески не исчезла суть. Если закрытые ведомства начнут менять архитектуру под себя, прикрываясь секретностью, мы получим десяток несовместимых машин. В одном НИИ перепаяют адресные линии дешифратора под локальные задачи. В другом изменят временные параметры прерываний.
— Изолированные системы, — Сергеев чуть приподнял бровь. — Меньше риск утечки.
— И нулевая переносимость программ, — ответил Морозов. — Завтра министерство прикажет передать алгоритм из первого института во второй, а программа там просто зациклится. Нам нужен единый легальный стык. Строго определенные адреса портов и неизменный формат данных. Эта база должна работать абсолютно одинаково и на гражданской плате, и в закрытом ящике.
— Единый стык обеспечивается государственным стандартом и отраслевым приказом, — спокойно парировал Сергеев. — То, что вы называете унификацией, будет закреплено регламентом.
— Если профиль применения станет исключительно спущенным сверху приказом, разработка начнет дробиться, — произнес Морозов, тщательно формулируя аргументы. — Каждое закрытое конструкторское бюро, получив базовую машину, захочет свою специфику. Один ведомственный заказчик потребует отдельный загрузчик. Другой перепишет порядок вызовов памяти под свои задачи. Третий настоит на особом формате экранов. И все будут ссылаться на исключительные требования секретности и надежности.
Сергеев перестал писать. Он положил красный карандаш рядом с листом и приготовился слушать.
— Вы считаете, что унификация спровоцирует хаос? — уточнил куратор.
— Я считаю, что жесткий приказ без гибкости развалит систему, — твердо ответил Морозов. — Формально все будут соблюдать спущенный регламент, а фактически каждая площадка получит собственную машину. Нам нужен утвержденный минимум. Жесткий, защищенный, но с правом на проверяемые расширения. Иначе мы вернемся к набору уникальных машин, которые не умеют обмениваться данными друг с другом.
Сергеев обдумал услышанное и постучал тупым концом карандаша по полю аппаратной спецификации. Несовместимые версии означали для него не свободу инженеров, а лишние журналы, отдельные допуски и новые точки утечки.
— Допустим, — коротко произнес куратор, принимая аргумент к сведению. Он отложил пакет по «Сфере-82» в сторону и придвинул к себе вторую стопку листов. — С железом разобрались. Теперь перейдем к вашей программной части. Комплекс «СЛОЙ-81».
Грифель замер над первой страницей программного раздела.
— «Свободное распространение методики предварительного контроля», — зачитал Сергеев. На этот раз в его голосе промелькнула нескрываемая ирония. — Вы, Морозов, всерьез намерены раздавать пакеты для проверки топологии секретных микросхем по первому требованию? В любой гражданский институт?
— Радиокружкам и школьникам алгоритмы фотолитографии ни к чему, если вы об этом, — спокойно ответил Морозов. — Пакет «СЛОЙ-81» — это узкоспециализированный инструмент. Он пишется специально под перспективную «Сферу-82» и МикроДОС. И раздавать его профильным КБ, которые занимаются проектированием микросхем, — это суровая производственная необходимость.
Алексей подался вперед.
— Посмотрите на это со стороны заводской экономики Зеленограда. Сейчас любой смежный институт, спроектировавший свою микросхему, отправляет «сырые» чертежи на завод. Завод выделяет драгоценное машинное время, делает фотошаблоны, запускает печи, травит тестовую партию кремния… и только тут выясняется, что какой-то инженер в другом городе наложил контактное окно на соседнюю дорожку. Десятки тысяч рублей государственных средств летят в корзину.
— И что меняет ваша методика?
— Если мы дадим смежным НИИ формат обмена и наш алгоритм, они поставят у себя в лабораториях «Сферу-82» и будут гонять эти проверки на местах, до отправки чертежей на завод. Они будут присылать в Зеленоград уже выверенную, чистую геометрию. Мы децентрализуем контроль брака и сбережем заводам тонны дефицитного кремния.
Куратор мысленно взвесил аргументы. Железная экономическая логика его устраивала: это решало реальную проблему отрасли. Но само слово «свободное» в режимном документе оставалось недопустимым. Красная линия перечеркнула машинописный текст.
— Значит, переведем вашу децентрализацию в рабочее русло, — Сергеев хладнокровно вывел новые слова поверх зачеркнутых. — «Согласованная передача программно-методических комплексов». Суть сохраняем, форму меняем. Передаете алгоритмы профильным предприятиям только по обоснованному письменному запросу. Фиксируете факт передачи в журнале. Назначаете ответственного за учет. Никакого «свободного распространения» в документах быть не должно.
Красный карандаш пошел по тексту быстрее. Закончив с программным комплексом, Сергеев вернулся к общему разделу, описывающему аппаратные испытания и сбор статистики отказов. Грифель добрался до слов «пользовательская инициатива» — они были немедленно зачеркнуты, а на полях появилась замена: «регламентированная обратная связь».
Сергеев занес карандаш над следующим абзацем. Острие нацелилось на словосочетание «Гражданская апробация архитектуры». Он одним уверенным движением перечеркнул фразу, вписывая сверху громоздкое «зарегистрированная эксплуатационная выборка».
Морозов молча наблюдал. Каждая новая формулировка сужала ход: железо — учитывать, программные запросы — обосновывать, ответственных — назначать. Если уступить дальше, перспективная «Сфера-82» окончательно оторвется от своих корней и легко превратится в закрытый ведомственный продукт, который нельзя будет проверить массовыми аппаратными испытаниями.
Морозов положил ладонь на край документа, задерживая внимание Сергеева на словах «зарегистрированная эксплуатационная выборка».
— Олимпиада закончилась, вы правы, — произнес Алексей, убирая руку со стола. — Мы собрали отличные алгоритмы. С программным обеспечением вроде «СЛОЯ-81» всё понятно — это изолированный продукт для лабораторий и заводов. Но базовая аппаратная логика интерфейсов у учебной «Сферы-80» и перспективной «Сферы-82В» — общая. Если мы сейчас по вашей логике полностью оторвем закрытый аппаратный контур от гражданского, мы запрём будущую военную машину в тепличных условиях. Стабилизированное питание, чистые комнаты, разъемы с золочением.
Сергеев чуть повернул карандаш в пальцах.
— У вас в лаборатории лежат мешки писем от школьников и энтузиастов. Вы собрали обратную связь. Зачем вам дальше поддерживать эту любительскую вольницу?
— Затем, что военная приемка идеально маскирует системные просчеты архитектуры, — жестко ответил Морозов. — Инженер в закрытом НИИ знает, что при обращении к магнитофону или диску нельзя щелкать тумблером соседнего пульта — пойдет наводка. И он не щелкает. А в схеме при этом остается скрытый дефект, который никто не замечает. Мне нужен постоянный жесткий прогон железа на выживаемость.
Сергеев слушал не перебивая, только сделал короткую пометку на полях.
— Гражданская эксплуатация спровоцирует сбои ЭВМ во всех возможных нештатных режимах, — продолжил Морозов. — Радиолюбитель собирает нашу базовую «Сферу-80» на дискретной логике и питает плату от перемотанного трансформатора старого телевизора «Рекорд». У
— По ГОСТу мы должны провести климатические и вибрационные испытания, — негромко, но веско добавил Липатов. — Но никакой ГОСТ не предусматривает статического разряда от синтетического свитера прямо на клавиатуру в сухом воздухе панельной хрущевки. Ни один военный стенд не сымитирует нам ту степень электромагнитного шума, которую дает искрящее реле холодильника «ЗИЛ», воткнутого в одну розетку с микро-ЭВМ.
Морозов подвел итог:
— Один аппаратный сбой, пойманный через письмо из кружка ДОСААФ, обходится государству ровно в стоимость почтовой марки. Тот же дефект интерфейса, всплывший через год на этапе внедрения в закрытом конструкторском бюро, это ЧП и сорванные сроки военного заказа. Широкая гражданская эксплуатация восьмидесятой модели — это бесплатный, безжалостный полигон, на котором мы обкатаем узлы для военной восемьдесят второй.
Сергеев аккуратно положил карандаш на стол параллельно краю папки.
— Экономия испытательного времени — весомый аргумент, Алексей Николаевич. Но вы упускаете из виду проблему достоверности.
Сергеев сцепил пальцы в замок.
— Я видел эти ваши мешки писем. Люди обожают писать жалобы в духе «я нажал, а оно загудело и сломалось». Это колоссальный информационный шум. Кто будет вычленять из этого лирического мусора системные ошибки архитектуры? Как вы отделите реальный аппаратный сбой от некомпетентности школьника с паяльником?
В разговор вступил Липатов.
— Мы не будем принимать этот народный хаос в КБ напрямую, — Липатов придвинул свой блокнот к центру стола. — Олимпиада сразу показала нам слабое место обратной связи, которое мы научились обходить. Поэтому вводится жесткий фильтр. Стандартизированный бланк. Карточка отказа.
Сергеев перевел тяжелый взгляд на инженера.
— Как именно вы заставите их это заполнять?
— В инструкцию по сборке вшивается строгий формуляр. Человек будет обязан зафиксировать техническую картину, — Липатов провел ручкой вдоль нарисованных колонок. — Состояние светодиодов на отладочной панели. Напряжение в контрольных точках. Точное время непрерывной работы до сбоя. Номер конкретной микросхемы, которая греется сильнее других. Бумажная рутина, которая сразу отсеет эмоции и превратит жалобу в полноценный технический срез системы.
Морозов едва заметно кивнул: именно такой порядок устроит и Наталью Сергеевну, и режимную часть.
— И когда в КБ приходит сто таких карточек, мы видим систему, — подхватил Алексей. — Если у пятидесяти человек машина стабильно сбоит при чтении с кассеты — мы понимаем, что дело не в плохой пайке. Дело в том, что наш базовый компаратор не прощает плавающей скорости ленты. КБ отбрасывает случайные факторы, корректирует аппаратную логику интерфейса, и вот этот сухой, отфильтрованный и многократно проверенный узел переносится в закрытую 82-ю ветку на К580 как подтвержденная аппаратная доработка. Ведомство получает железобетонную надежность, за которую расплатились своим временем и нервами энтузиасты.
Сергеев смотрел на схему Липатова. Взгляд куратора скользил по вычерченным прямоугольникам, оценивая предложенный механизм.
— То есть закрытый ведомственный контур изолируется от прямого потока, — резюмировал Сергеев. — Внутрь попадает только отфильтрованная и проверенная статистика отказов.
— Именно, — подтвердил Морозов. — Готовые векторы ошибок. Сухой остаток, на базе которого мы вносим изменения в унифицированный профиль применения.
Сергеев взял паузу. В кабинете было слышно только глухое гудение люминесцентной лампы под потолком. Куратор перечитал графы, которые Липатов набросал в блокноте, и снова потянулся к красному карандашу.
— Формулировку «зарегистрированная эксплуатационная выборка» мы оставляем, — произнес Сергеев, четко выделяя каждое слово. — Право гражданского контура собирать статистику с гражданских площадок утверждается.
Он перевернул лист описи и на чистой стороне вывел крупными печатными буквами: «ЖУРНАЛ РЕГИСТРАЦИИ ОТКЛОНЕНИЙ».
— Вся входящая документация от пользователей оседает здесь. Карточки отказов нумеруются и подшиваются. В закрытую ветку разработки поступают только верифицированные запросы на изменение архитектуры с обязательной ссылкой на номер записи в этом журнале.
Сергеев посмотрел прямо на Морозова.
— Фильтр должен быть непроницаемым для несанкционированных доработок. Если под видом исправления гражданской ошибки в унифицированный профиль пройдет незадокументированная аппаратная функция, отвечать будет тот, чья подпись стоит под классификатором.
Морозов сделал пометку в своем блокноте.
— Под классификатором будет подпись КБ, — сказал он. — И отдельная подпись ответственного за передачу в закрытую ветку.
Липатов с тихим шорохом перелистнул страницу своего блокнота и аккуратным, убористым почерком вывел заголовок для нового инструмента: «Журнал отклонений. Форма №1».
Спустя час бумаги были готовы.
Красный карандаш сделал свое дело. Опись материалов по аппаратной архитектуре «Сферы-82» и программному пакету «СЛОЙ-81» теперь выглядела сухой, канцелярской и пригодной для первичной проверки.
Опытный программный комплекс нулевой редакции допускался к первичному оформлению, а гражданская линия железа получила жесткий, но легальный фильтр для сбора статистики.
Спорные формулировки получили учетные названия.
Сергеев собрал листы в аккуратную стопку. Выровнял края. Убрал красный карандаш обратно в деревянный стакан.
Взгляд Алексея скользнул по исчерканным страницам. Красный графит выделялся на белой бумаге плотной сеткой правок. Внизу каждого листа оставалось место для подписи ответственного.
— Документ согласован в первичной редакции, — сухо подытожил куратор. — И помните о границах допуска, Морозов. Ваш унифицированный профиль — это хорошо. Но появится незадокументированный вызов — и мы проект заморозим.
Алексей встал.
— Я понял.
Они с Липатовым вышли из кабинета в длинный, натертый до блеска коридор. Дверь за их спинами захлопнулась с глухим стуком.
Глава 20
Физика данных
В машинном зале стоял плотный, вибрирующий гул. Десятки мощных вентиляторов, охлаждающих стойки вычислительных комплексов, сливались в единый акустический фон, перекрывающий все остальные звуки. Воздух здесь был тяжелым, пересушенным и пах специфической смесью нагретого металла, трансформаторного масла и бумажной пыли от перфокарт. Помещение напоминало не стерильную «чистую комнату» кристального производства с бахилами и масками, а суровую индустриальную зону — преддверие вычислительного контура Научного центра.
Алексей Морозов стоял у массивного металлического шкафа питания, скрестив руки на груди, и ждал. В кармане его пиджака лежал подписанный майором Сергеевым регламент, разрешающий этот опыт, но бумага с гербовыми печатями не могла заставить магнитные головки читать данные быстрее или точнее. Всё решала не дипломатия, а физика процесса и технологическая дисциплина.
Присутствие здесь, у гудящих стоек, почти всех ключевых специалистов Зеленограда не было случайностью или проявлением праздного любопытства. Изъятие данных о бракованном кристалле для передачи сторонней владимирской группе требовало соблюдения жесткой межведомственной
Тимур Рашидович Ахметов стоял у стола подготовки данных. Перед начальником испытаний лежала тонкая серая папка из Изолятора брака.
— Фиксируем объект передачи, — ровным, лишенным интонаций голосом произнес Ахметов, открывая папку. — Дефектный случай номер сорок семь-бис. Фрагмент периферийной обвязки макроячейки динамического ОЗУ. Контрольный стенд выявил глухое замыкание на первом слое металлизации. Кристалл забракован и списан по акту.
Ирина Павловна Ланская, стоявшая по другую сторону стола, развернула плотный рулон кальки. Синие линии топологического чертежа легли на столешницу. Рядом с ней возвышался Павел Николаевич Руденко, хмуро сверяя изломы линий на чертеже с собственными записями.
— Координаты участка подтверждаю, — сухо сказала Ланская, придавив край кальки тяжелым металлическим дыроколом. — Машинный массив, который сейчас находится на магнитной ленте вычислительного центра, полностью соответствует этой геометрии. Версия маски — четвертая.
Младший инженер Лидия Веденеева, стоявшая у стойки с бобинами магнитных лент, привычно скользнула пальцами по краям широкой перфоленты контрольного журнала, проверяя маркеры начала и конца блока.
— Пятый физический том, четвертая версия, — негромко произнесла Веденеева, не отрывая взгляда от бумаги. — Лента совпадает с контрольным листом Ирины Павловны. Журнал готов к отметке о выгрузке.
Она проговорила это скорее для собственного протокола. Веденеева слишком хорошо знала, что половина «аппаратных сбоев» в вычислительном центре начинается с перепутанной коробки перфолент. Выгрузи они сейчас владимирцам третью версию вместо четвертой — и те убьют недели, выискивая ошибки в уже исправленном слое.
В нескольких шагах от них Сергей Липатов методично расчерчивал страницу рабочего блокнота. Его не интересовали мигающие индикаторы пультов. Его интересовало лишь одно: запротоколировать ход передачи так, чтобы опыт был юридически и технически кристально чистым.
Евгений Громов стоял у консоли оператора, где Роман Кац вводил команды загрузки. Именно отсюда, с АЦПУ, должна была появиться физическая копия массива для написания «СЛОЯ-81».
* * *
Широкая каретка АЦПУ дернулась, издала пронзительный металлический скрежет и начала с пулеметной скоростью выплевывать из себя бумагу. Процесс пошел.
Звук печати перекрыл гул вентиляторов. Широкий рулон пополз вверх, складываясь тяжелой гармошкой на специальном металлическом поддоне. Строка за строкой, страница за страницей. Сплошной монолитный поток информации.
Громов подошел вплотную, завороженно глядя на растущую гору бумаги. На ней сплошным потоком шли колонки цифр — координаты левых и правых углов прямоугольников, маркеры слоев, служебные соединения. И это был лишь один крошечный контактный узел опытной памяти, выделенный для их пробного прогона.
— И сколько здесь будет? — спросил Евгений, стараясь, чтобы голос не дрогнул.
Роман Кац, стоявший у пульта, скрестил руки на груди. Системщик откровенно наслаждался моментом, глядя на ошеломленного владимирца.
— Примерно три картонные коробки бумаги, если выводить этот слой целиком, — ответил Кац, невозмутимо поправляя очки. — Если посадите весь ваш отдел во Владимире вводить это в две смены, как раз к майским праздникам управитесь. Главное, нули с буквами «О» не перепутайте.
Громов сглотнул. Он живо представил, как сидит в лаборатории и неделями, вслепую, вбивает эти бесконечные шеренги цифр. Ошибка в одном символе при ручном вводе — и весь математический слой ломается, генерируя сотни ложных замыканий. Это была не программистская задача. Это была бессмысленная каторга, убивающая саму идею автоматизации предварительного контроля на корню.
Морозов молча стоял у шкафа питания, с интересом наблюдая за происходящим, но не вмешивался.
Кац выдержал театральную паузу, позволив Евгению в полной мере осознать масштаб надвигающейся катастрофы. Затем зеленоградский программист коротко вздохнул, выключил тумблер АЦПУ — грохот печати мгновенно оборвался — и кивнул в сторону соседней стойки, где в отдельном корпусе стоял восьмидюймовый накопитель.
— Не делай такое лицо, Громов, смотреть больно, — Кац потянулся к переключателям на пульте. — Давай свою восьмидюймовую дискету. Сольем копию напрямую. Только тихо, пока начальство не видит, что мы гоняем технологические массивы через нестандартные интерфейсы.
Евгений мгновенно расстегнул замки своего потертого портфеля. Он бережно, двумя руками извлек картонный конверт, внутри которого покоился чистый восьмидюймовый гибкий диск. Это был спасательный круг, брошенный одним системщиком другому поверх официальных барьеров.
Кац взял диск, вставил его в накопитель и с силой опустил рычаг. Внутри устройства тяжело зажужжал шпиндель. На панели заморгал красный индикатор записи. Массив топологических данных, только что грозивший завалить их бумажной лавиной, невидимо перетекал на тонкий пластиковый диск, покрытый оксидом железа. Дисковод издавал характерные глухие удары позиционирования головок.
Щелчок. Кац открыл задвижку и вытащил теплую дискету.
— Забирай. Структура файла последовательная. Распечатку АЦПУ возьми как контрольный образец, чтобы понимать, где кончается заголовок и начинаются данные.
Громов принял диск, аккуратно убрал его обратно в портфель, а увесистую бумажную «гармошку» положил на свободный край стола.
* * *
Магнитный носитель спасал от каторжного ручного труда, но для того, чтобы написать алгоритм «СЛОЯ-81», нужно было сверить реальные данные с тем, что должно было быть в теории. Громов вооружился остро отточенным карандашом, пододвинул к себе кусок контрольной распечатки и открыл рабочую тетрадь.
Он начал аккуратно вычерчивать структуру будущего массива. Вот идентификатор слоя. Вот координаты левого нижнего угла прямоугольника по осям X и Y. Вот ширина, вот высота. На первый взгляд, всё казалось предельно ясным. Обычная декартова геометрия. Будущая программа должна была просто считывать эти прямоугольники, проверять их наложения друг на друга и выдавать список тех мест, где зазор меньше допустимого.
Громов провел карандашом линию от одной колонки к другой, мысленно отрисовывая первый полигон металла. Затем взял координаты следующего элемента, который, судя по описанию топологии, должен был располагаться рядом, встык с первым.
Грифель остановился. Евгений нахмурился и поднес бумагу ближе к глазам, вчитываясь в тусклый шрифт.
Судя по координатам, левый край второго полигона грубо заходил на территорию первого. Окно контакта, которое должно было располагаться строго по центру контактной площадки, судя по цифрам, съезжало вбок, накладываясь на соседнюю линию изоляции.
Громов начал быстро чиркать карандашом в тетради. Ошибка выгрузки? Смещение формата? Может быть, машина Каца при конвертации пропустила служебный байт, и теперь весь массив съехал?
— Кац, у вас данные кривые, — бросил Громов, не отрываясь от бумаги и постукивая карандашом по столу. — У меня в третьем блоке координаты бьются друг о друга. Матрица не сходится геометрически.
Роман даже не повернул головы от пульта, где завершал сеанс работы.
— Данные прямые, как рельсы, Громов. Что на магнитной ленте, то и на диске. Читай, что написано.
— Я и читаю! — Евгений с раздражением
— Ничего ты выравнивать не будешь, — раздался за спиной спокойный, холодный женский голос.
Ланская достала из кармана белоснежного халата ручку и уверенно уперла её прямо в спорную строчку на распечатке, из-за которой кипятился программист.
— Не забывайте, что для вас, Евгений Александрович, любая линия на чертеже — это математическая абстракция нулевой толщины, — произнесла тополог. — А для нас это реальный, физический материал. То, что вы называете «наложением» и считаете ошибкой выгрузки, — это намеренный технологический запас.
— Запас на замыкание? — огрызнулся Громов, скрестив руки на груди.
— Запас на усадку и боковое подтравливание, — веско поправил Руденко. Технолог оперся тяжелыми, узловатыми ладонями о край стола, нависая над распечаткой. — Когда мы берем фоторезист, светим его ультрафиолетом, а потом пластина идет в кислотную ванну, ваш идеальный край растворяется. Кислота жрет металл не только вглубь, но и в стороны. То, что у вас на бумаге нарисовано с идеальной шириной, на живом кристалле после всей химии заметно стравливается. Мы специально рисуем окно контакта с запасом и легким смещением, чтобы после того, как кислота сделает свое дело, отверстие попало точно в центр площадки.
Громов уставился на колонки цифр. Идеальный мир чистой математики, в котором он привык выстраивать свои безупречные ассемблерные циклы, с треском рушился, разбиваясь о грязную, непредсказуемую заводскую химию.
— То есть, вы хотите сказать, что для разных слоев этот ваш… запас разный? — Евгений потер лоб, чувствуя, как начинает болеть голова.
— Естественно, — хмыкнул Руденко. — Металл первого уровня травится так. Поликремний — совершенно иначе. А зоны диффузии вообще расползаются в стороны при термическом нагреве в печи. И если ваша умная программа начнет искусственно округлять наши допуски по какой-то единой, выдуманной вами математической сетке, вы убьете нам всю годную топологию. Вы забракуете абсолютно здоровую микросхему.
Морозов подошел ближе. Он внимательно слушал спор и прекрасно понимал правоту зеленоградцев. Ошибка Громова была естественной: любой программист всегда стремится упорядочить хаос, загнать его в жесткие рамки предсказуемого алгоритма. Но программа, которая не учитывает агрессивную физику травления, останется просто красивой лабораторной игрушкой.
— Идеальная геометрия здесь не сработает, — резюмировал Алексей и повернулся к Липатову. — Сергей. Открывай новый лист.
Липатов мгновенно перелистнул страницу рабочего блокнота.
— Евгений, ты не будешь писать никакие фильтры округления, — отрезал Морозов, пресекая готовое сорваться с губ Громова возмущение. — Мы заложим их физику прямо в наш алгоритм. Инструмент должен понимать материал. Ирина Павловна, чтобы мы могли это сделать, мне нужна та самая карта допусков, о которой мы договаривались на вашем участке. Все запасы на стравливание, все минимальные зазоры для каждого конкретного слоя.
Ланская кивнула. Ей явно нравилось, что Морозов твердо держится их недавнего уговора и не пытается подменить реальные физические допуски строгой машинной логикой.
— Это толстая папка, Алексей Николаевич, — предупредила тополог. — В ней сотни параметров. И половина этих норм существует только в виде внутренних, цеховых инструкций для конкретной производственной линии.
— Значит, мы увезем копию этой папки во Владимир, — непререкаемым тоном ответил Морозов. — Без этих допусков писать код «СЛОЯ-81» бессмысленно. Мы переведем вашу производственную химию на язык математики.
* * *
Ахметов, до этого молча наблюдавший за разбором распечатки, подошел к столу и положил поверх зеленых листов АЦПУ отпечатанный в типографии желтоватый бланк.
— С физикой разобрались, теперь к отчетности, — ровным голосом произнес Тимур Рашидович. — Вы увезете допуски и напишете код во Владимире. Но я напоминаю: мне не нужны абстрактные машинные жалобы на сбой. Мне нужна точная, протоколируемая причина для журнала.
Липатов пододвинулся ближе, поправляя очки. Протоколы были его епархией.
— Таблица вывода уже согласована, — сказал Липатов, глядя в блокнот. — Мы выдадим координату, категорию отклонения и логический узел.
— К этой категории отклонения вы теперь обязаны добавить прямую ссылку на конкретное правило из той самой технологической папки, которую вам передаст Ирина Павловна, — уточнил Ахметов.
Веденеева, внимательно слушавшая разговор, добавила свою часть требований:
— И обязательно заставьте вашу программу выводить в шапку отчета номер версии чертежа. У нас технологи за одну смену могут три раза перекроить проблемный слой. Пришлете сбой без отметки листа — мы будем полдня искать ошибку там, где её уже исправили.
Липатов молча и методично дополнял согласованную таблицу. Координата. Категория. Номер правила. Версия листа. Резолюция технолога. Он превращал чужую производственную боль в жесткие, программируемые рамки будущего отчета.
Громов мрачно следил за тем, как быстро растет количество обязательных колонок в блокноте Липатова. Каждая новая графа означала десятки дополнительных команд на ассемблере, часы отладки и дополнительную нагрузку на и без того скромную оперативную память «Сферы-82».
— Принято, Тимур Рашидович, — сказал Морозов, заглянув в записи Липатова. — Программа будет не просто искать сбои, она будет сразу формировать выписку, полностью адаптированную под ваш производственный журнал. Ни один прогон во Владимире не будет считаться завершенным без заполнения этого формуляра.
К столу неспешно подошел Роман Кац. В руках он держал тонкую картонную папку с завязками.
— Раз уж мы тут делимся секретами выживания, — усмехнулся Кац, кладя папку рядом с распечатками Громова. — Держи, Евгений.
Громов с сомнением открыл картонную обложку. Внутри лежали несколько отпечатанных на машинке листов с плотными таблицами и структурами блоков данных.
— Это чтобы вы там во Владимире не написали алгоритм чтения, который насмерть подавится нашим первым же файлом, — пояснил Роман уже без иронии. — Здесь полная спецификация нашего формата выгрузки. Как пакуются координаты, где лежат метки слоев, как обозначается конец записи. И главное — точный формат выходного текстового файла, который мы ждем от вашей машины обратно.
Громов пробежал глазами по строкам. Кац передавал ему строгую структуру данных.
— Заголовки блоков читать строго по байтам, — жестко добавил Кац. — Попытаетесь пропустить служебные маркеры или проигнорировать контрольную сумму массива — получите кашу. Ваш итоговый файл с ошибками должен читаться нашей дисковой системой без дополнительных преобразований, иначе мы ваши результаты просто не сможем распечатать для журнала Ахметова.
Громов молча закрыл папку. Раздражение
* * *
Машинный зал начал пустеть. Гул оборудования казался еще более монотонным и тяжелым в наступившей рабочей тишине. Зеленоградские специалисты, передав данные и зафиксировав требования, расходились по своим лабораториям.
Липатов аккуратно закрыл блокнот, дождался легкого щелчка колпачка ручки и убрал её в нагрудный карман идеально отглаженной рубашки. Шапка будущего производственного отчета была окончательно сформирована.
Громов методично укладывал в портфель свое новое богатство. К уже лежащим там двум конвертам с дискетами добавилась толстая стопка машинописных листов от Ирины с физикой допусков. Затем спецификация форматов от Каца. И контрольный рулон распечатки АЦПУ. Кожаный портфель заметно потяжелел, раздувшись так, что замки защелкнулись с трудом.
Морозов стоял у дверей, наблюдая за сборами своей команды. Он смотрел на эти набитые под завязку портфели и папки. Эйфория от удачных переговоров осталась в кабинетах начальства. Здесь, внизу, начиналась настоящая, черновая инженерия.
Алексей молча поправил ремень сумки на плече.
— Всё собрали? — тихо спросил он.
Громов выпрямился. Под глазами залегли темные тени, свитер помялся, но во взгляде читалась упрямая решимость человека, которому бросили вызов. Он похлопал по туго набитому кожаному боку портфеля.
— Собрали, Алексей Николаевич. Писать — не переписать. До весны из-за клавиатуры не вылезем.
Глава 21
Списанный, но не мертвый
Металлический каркас лязгнул о старый линолеум. Грузчик в синем ватнике с шумом выдохнул, вытирая лоб рукавом. От него тянуло махоркой и морозной улицей. Второй, придерживая дверь плечом, втаскивал следующий аппарат — угловатый, лишенный деревянного корпуса и кинескопа скелет телевизора УПИМЦТ.
Морозов стоял в дверном проеме. После возвращения из Москвы он успел только бросить сумку в кабинете и сразу пошел на шум в лабораторию. Под мышкой лежала папка с зеленоградскими выписками и тридцатью семью технологическими замечаниями.
— Ребят, аккуратнее! — голос Олега звенел от напряжения. — Платы хрупкие. Грохнете — замучаемся восстанавливать.
Грузчики с угрюмой сосредоточенностью людей, которым платят за тяжелый груз, опустили на пол второе шасси. Затем третье, четвертое и пятое.
Без привычных полированных корпусов телевизоры выглядели сурово: нагромождение штампованного металла, пучки проводов, стянутых крученой нитью, массивные трансформаторы и ряды печатных плат в направляющих. В воздухе запахло поработавшим железом — смесью пересохшего гетинакса, слежавшейся пыли и старого парафина от катушек индуктивности. Каждое такое шасси при жизни потребляло под две сотни ватт мощности.
Морозов перешагнул через порог, отсекая сквозняк коридора, и положил папку на ближайший стол.
— Алексей Николаевич! — Тимофеев мгновенно обернулся и просиял, торопливо вытирая руки о ветошь. — Вернулись. А мы тут принимаем вторую передачу.
В лаборатории было тепло, почти жарко. Воздух после стерильных гермозон Зеленограда казался густым и домашним.
— Вижу, — Алексей подошел ближе. — Пять штук. Неплохо. С документами порядок?
— Да, оформили списание до конца, — закивал Олег. — Мастерская передала. Это уже не те три разрозненных комплекта плат, что мы выбили для макета в прошлый раз. Заведующий скрипел зубами, но бумаги подписал.
Олег смотрел на громоздкие конструкции с обожанием. За глубокими царапинами на металле и болтающимися картонными бирками телемастерской он сразу различал конкретные, крайне нужные детали.
— Посмотри на это устройство, — Тимофеев с любовью похлопал крайнее шасси по пыльной раме. — Набор готовых узлов. Модули цветности, развертка, блоки питания, нужные разъемы и контрольные точки. Нам не придется собирать аналоговый тракт с нуля. Подключим питание, найдем входы и заставим их выводить картинку с нашей «Сферы».
Тимофеев уже мысленно распределял добычу: с этого аппарата снять блок цветности, на том проверить строчную развертку, третье пустить под стенд.
Алексей смотрел на выстроенные в ряд железные рамы. Там, откуда он пришел, цветной сигнал формировался крошечной микросхемой и шел по кабелю в плоский монитор. Здесь, в 1981 году, цветной вывод представлял собой физическую проблему в пятнадцать килограммов весом, с десятками подстроечных резисторов и сложной настройкой аналогового тракта.
Морозов перевел взгляд.
Наташа Рогова стояла у противоположного края шеренги. Она явно не разделяла радости Тимофеева. Подтянув поближе настольную лампу на длинной ноге, она методично, миллиметр за миллиметром, осматривала прибывший груз.
Наташа чуть наклонилась. Ее пальцы коснулись металлической рамки, проведя по глубокой, до свежей стали, царапине на шасси. Затем она ухватила двумя пальцами кусок пожелтевшего картона, болтающийся на суровой нитке, привязанной к высоковольтному трансформатору.
— «Нет растра. Пробой ТВС. На списание», — ровно прочитала Наташа.
Она бросила бирку, и та качнулась, ударившись о пыльный радиатор. Наташа шагнула к следующему аппарату и подняла другую картонку.
— «Нет цвета. Замена модуля. На разбор».
Она посмотрела на Олега в упор.
— Сомнительное богатство, Олег. Обычная некомплектная партия, причём изрядно потрошёная.
— Нормальное железо, — возразил Тимофеев. Он провел пальцем по умножителю напряжения, стирая слой серой пыли. Она тут же скаталась в плотный валик. — Прозвоним, перепаяем. Половина деталей здесь проработает еще годы.
— Годы? — Наташа указала на первый в ряду аппарат. — Посмотри на гнездо радиоканала. Кто-то вырвал узел целиком, прямо с разъемом. А вон там, — она перевела взгляд на второе шасси, — электролитические конденсаторы в блоке питания вздулись. Рванут при первой же подаче напряжения.
Олег нахмурился, разглядывая пустые посадочные места на плате.
Морозов наблюдал за перепалкой. На линолеуме стояли пять одинаковых по названию шасси, но уже через минуту осмотра стало ясно: они совпадали только в бумажных накладных.
— Раскладывайте по столам, — предложил Алексей. — Проведем первичный разбор. Выясним, что пойдет в дело, а что придется распаять на запчасти.
* * *
Три самых перспективных на вид аппарата перекочевали на толстые листы резины поверх столешниц. Запах старого железа, въевшейся квартирной пыли и перегретого текстолита заполнил лабораторию, вытесняя привычный аромат свежей пайки.
Олег действовал с азартом. В его руках мелькала отвертка. Он снимал металлические экраны один за другим, с лязгом отправляя их на соседний стол. Тимофеев орудовал кусачками, освобождал стяжки жгутов, проверял плотность посадки штекеров. Он оценивал добычу крупными мазками: видел узел на месте и сразу переходил к следующему гнезду.
Наташа действовала методично. Она выложила перед собой пинцет, измерительные провода и мультиметр. Сначала Рогова осматривала плату под углом, ловила блики на лакированных дорожках. Искала микротрещины, следы кустарной пайки, потемневшие участки и потеки высохшего флюса.
Ее пальцы осторожно поворачивали
Здесь виднелись грубые капли олова — след торопливого ремонта паяльником с толстым жалом. Там текстолит вокруг мощных резисторов потемнел и рассохся, выдавая постоянный, хронический перегрев модуля цветности. Наташа подцепила пинцетом край отслоившейся медной дорожки. В этом масштабе работала простая физика износа. Металл уставал, пайка деградировала от перепадов температур, а остатки активного флюса медленно разъедали контакты.
Для нее каждый такой дефект означал будущий аппаратный сбой. Запусти плату с подобным износом — и она проработает пару недель, а потом внезапно исказит видеосигнал или зальет экран сплошным красным фоном из-за пробитого выходного каскада.
Лязг инструмента перемежался сухими комментариями.
— Блок цветности БОС, — Олег вытащил из направляющих прямоугольную плату, усеянную микросхемами. — Грязный, но вроде целый. Субмодули на месте.
Он дунул на плату. В воздух поднялось облако серой, мелкодисперсной пыли.
Наташа поморщилась и отмахнулась от пыли ладонью. Она перевернула второе шасси. Тяжелый металл скрипнул под ее руками.
— У меня блок развертки разграблен, — констатировала она, осторожно проверяя пустое гнездо. — Силовой транзистор выкушен. Под корень. Вместе с радиатором унесли, варвары.
Олег отложил свой блок цветности. Его плечи чуть опустились.
Прошло два часа. Олег с силой бросил кусачки на стол, и те со звоном отскочили от резинового коврика. Первичный разбор показывал неутешительную картину. Из пяти добытых шасси ни одно не оказалось полностью укомплектованным. Телемастерская, прежде чем списать аппараты, сняла с них всё, что ещё могло пригодиться для текущего ремонта: дефицитные микросхемы, мощные высоковольтные транзисторы и целые модули.
То, что досталось лаборатории «Сфера», требовало долгой сортировки и осторожной проверки.
— Ладно, — Олег упрямо сжал губы. — Хватит визуального осмотра. Давайте дадим питание. Посмотрим, как они поведут себя под нагрузкой.
Олег подтащил к столу ЛАТР. Морозов устроился на высоком табурете.
Тимофеев накинул провода на клеммы питания первого шасси.
Щелкнул тумблер.
Олег медленно, миллиметр за миллиметром, начал вращать ручку трансформатора наверх. Стрелка вольтметра поползла вправо. Восемьдесят вольт. Сто. Сто двадцать.
Аппарат молчал.
Сто восемьдесят. Двести.
Раздался низкий, утробный гул. Массивный силовой трансформатор на шасси завибрировал, передавая дрожь на стол. Следом послышался высокий, едва уловимый писк строчной развертки.
В воздухе мгновенно запахло горелой пылью и нагретым лаком. Запах был специфический — так пахнет старая электроника, которая годами стояла в углу пыльной советской квартиры, впитывая в себя влагу, дым сигарет и кухонный чад, а теперь внезапно получила удар тока. Пыль на горячих резисторах начала обугливаться.
— Прогревается, — прошептал Олег, словно боясь спугнуть аппарат.
Ждать пришлось долго. Полупроводниковая схемотехника УПИМЦТ не знала мгновенных стартов. Тепло медленно растекалось по радиаторам, заставляя электроны пробивать путь через окислившиеся переходы транзисторов и высохший электролит конденсаторов.
Прошло три минуты. Писк развертки стал нестабильным. Он то срывался в хрип, то уходил за верхнюю границу слуха.
Олег вернул ручку ЛАТРа к нулю, дождался, пока стихнет писк развертки, проверил посадку разъёма питания и снова плавно поднял напряжение. Потом подключил осциллограф к контрольной точке. На зеленом круглом экране заметалась рваная, хаотичная синусоида.
— Не держит синхронизацию, — констатировал Тимофеев. Он покрутил ручку настройки на осциллографе, пытаясь поймать форму сигнала. Бесполезно. Линия дергалась, как в агонии. — Питание плывет. Емкости пустые.
Он резко выключил ЛАТР. Гул оборвался.
Олег стоял над столом, опершись руками о край. Он смотрел на хитросплетение проводов и плат. Его уверенность в том, что достаточно просто достать дефицитное железо, рушилась на глазах. Достать оказалось самым простым этапом.
Каждое шасси болело своими, уникальными болезнями.
— Тогда давайте так, — Олег поднял голову от хитросплетения проводов. — Все пять мы не поднимем. Деталей не хватит. Два самых безнадежных пускаем на запчасти: снимаем силовые транзисторы, выпаиваем целые модули и собираем три рабочих аппарата. Сборных, но живых.
Наташа, до этого молча проверявшая напряжения на втором блоке, отложила измерительные провода на край стола.
— Нет.
Слово прозвучало тихо, но веско.
Олег непонимающе моргнул.
— В смысле «нет»? Наташа, выбора у нас нет. Ты сама видела некомплект. Если мы не перекинем блоки, вообще ни один не запустим!
— Если мы начнем перекидывать детали туда-сюда, — Рогова посмотрела на него в упор, — мы соберем трех уникальных «франкенштейнов». Как ты потом поймешь, какие глюки у нас системные, а какие вылезли просто из-за того, что ты воткнул чужой блок?
Она шагнула к Олегу, указывая тонким пальцем на раскуроченный блок развертки.
— Выпаяешь транзистор из третьего шасси, впаяешь в первое. У них разный износ, разный коэффициент усиления. Схема запустится, но режимы поплывут. Завтра ты подключишь к такому аппарату нашу «Сферу», и цвета поедут. Будешь неделю ковырять проверочную программу, думая, что ошибка в коде. А проблема в том, что ты поставил в аналоговый тракт случайную деталь.
Олег стиснул зубы. Он хотел спорить. Он привык собирать приемники из того, что удавалось достать, заменяя номиналы на ходу, подстраивая контуры на глаз и слух. Для радиолюбителя это был нормальный процесс.
Но Наташа подходила к делу как инженер.
— Нам нужна измерительная база, Олег, — ровно закончила Наташа. — Шасси должны вести себя одинаково в пределах допуска. Если детали негодные — ищем одинаковую замену через снабжение или мастерскую и оформляем по ведомости. Кустарная сборка нам сейчас только всё запутает.
Тимофеев ссутулился. Он посмотрел на Морозова, ища поддержки.
Алексей покачал головой.
— Она права. Ошибка должна быть воспроизводимой, иначе мы даже не поймем, где она родилась.
* * *
Наташа отвернулась от стола, подошла к рабочему месту Олега и взяла его общую тетрадь.
Звук показался громким в наступившей тишине. На картонной обложке было выведено: «УПИМЦТ. Журнал дефектов».
Рогова взяла ручку. Вернулась к столам с разобранными шасси.
Она не ругалась и не вздыхала о потраченном времени. Грязная, сломанная реальность советского неликвида требовала аккуратного учета.
Наташа раскрыла тетрадь, разгладила страницу узкой ладонью. Ручка коснулась бумаги.
— Шасси номер один, — произнесла она вслух, вычерчивая ровную колонку. — Отсутствует модуль радиоканала. Высохли фильтрующие емкости по цепи питания сто тридцать вольт. Просадка напряжения.
Она перешла к следующему столу.
— Шасси номер два. Блок питания — электролиты под замену. Пробит высоковольтный умножитель. Замыкание в цепях строчной развертки.
Олег молча наблюдал, как его долгожданная добыча превращается в сухой перечень неисправностей.
— Мы можем поставить шунтирующие конденсаторы параллельно старым, — не выдержал Тимофеев, пытаясь найти компромисс.
Наташа перестала писать. Подняла на него глаза.
— Зачем?
— Чтобы увидеть на приборах, держится ли развертка! — Олег всплеснул руками. — Мы же вслепую работаем. Нам нужно подать видеосигнал и посмотреть, как эти блоки цветности его декодируют.
— Какой видеосигнал ты собрался туда подавать? — Рогова прищурилась.
— Ну… сигнал с нашего стенда. Со «Сферы». У нас же будет проверочная программа, таблица цветных полос. Подключим макет к видеотракту и будем крутить подстроечники на шасси, пока цвета не встанут на место.
Наташа с тихим стуком положила ручку на стол.
— То есть ты предлагаешь настраивать сломанное аналоговое шасси с плывущим питанием по сигналу от неаттестованного цифрового макета?
Олег замер.
— Если уровни цветовых каналов поедут, — голос Наташи стал почти ледяным от профессионального негодования, — как ты поймешь, кто врет? Высохший конденсатор в телевизоре? Кривая синхронизация на выходе контроллера? Или проверочная программа, которая неправильно переключает биты атрибутов?
Тимофеев открыл рот, чтобы ответить, и снова закрыл его. Аргументов не было.
— Ты будешь лечить симптомы, Олег, — припечатала Рогова. — Крутить резисторы на плате, компенсируя чужие ошибки. Потом подключим другой аппарат, и всё развалится.
Она повернулась к Морозову.
— Нам нужен эталонный сигнал, Алексей Николаевич. Промышленный генератор ГТИС. Поверенный, с нормальной таблицей цветных полос и правильными импульсами. Пока мы не добьемся от этих шасси идеальной картинки по эталону, подключать к ним нашу «Сферу» бессмысленно. Мы просто не поймем, кто из них врет.
Морозов спрыгнул с табурета. Жесткий линолеум скрипнул под подошвами.
Он посмотрел на пять раскуроченных шасси. Наташа была абсолютно права: без поверенного сигнала они будут каждый раз гадать, где прячется ошибка — в старом телевизионном тракте, в контроллере вывода Олега или в коде Громова. Рогова уже записывала потребность в тетрадь как обычный пункт работы, без скидки на Олегов восторг.
Проблема заключалась в другом.
— ГТИС — прибор дорогой и жутко дефицитный, Наташа, — тихо сказал Алексей. — У нас в лаборатории его отродясь не было. И в плановом отделе лимиты на такие игрушки не заложены, потому что телевизорами мы профильно не занимаемся.
— Значит, надо искать доступ, — упрямо ответила Рогова. Ее палец постучал по исписанной странице тетради. — Без него я не подпишу ни один акт готовности видеоконтрольного устройства. Каждый экземпляр будет вести себя по-своему, если нет измерительной базы.
Олег молча взял отвертку и принялся методично закручивать винт на защитном экране высоковольтного блока. Металл сухо скрежетал по резьбе.
Морозов смотрел на громоздкие каркасы телевизоров, занимающие половину лаборатории. В тетради Наташи уже стояло: на первом шасси нет блока радиоканала, на втором — электролиты блока питания под замену; на третьем Олег мелом поставил осторожный вопросительный знак.
— Хорошо, — Морозов посмотрел на исчерканную тетрадь. — Систематизируй дефекты, Наташа. Олег, составляй ведомость на замену сгоревших деталей. Никаких сборок из случайных плат. Ищем нормальные компоненты.
Он подошел к папке и раскрыл её на столе.
— А я пойду думать, где в этом городе можно найти работающий телевизионный генератор, к которому нас пустят с нашими платами.
Глава 22
Первый проход
Радиаторы отопления в углу лаборатории тихонько потрескивали, разгоняя застоявшийся за выходные воздух.
В помещении пахло пыльным линолеумом, бумагой и тёплой пылью приборов.
Морозов стоял у сдвинутых вместе лабораторных столов. Перед ним лежал груз, привезенный из Зеленограда.
Две серые, толстые картонные папки с завязками из суровой нити. Аккуратно заполненный рабочий блокнот Липатова. Сложенные гармошкой листы АЦПУ, испещренные колонками цифр и карандашными пометками. Выжимка их первой встречи с Научным центром.
Справа лежали материалы другой владимирской работы. Олег притащил цветные полупрозрачные пленки для раздельной проверки цветовых полей и мятую, пахнущую подвалом принципиальную схему телевизора УПИМЦТ.
Команда собиралась молча. Громов опустился на скрипнувший стул и раскрыл тетрадь с черновиками по МикроДОС. Липатов подошел к столу с привычной аккуратностью, положив перед собой чистый блокнот. Рябинина раскрыла блокнот рядом с Морозовым, ближе к папкам и перечню согласований. Горелов остановился у края стола, оставив перед собой место для чужих схем. Наташа и Люба встали у противоположного края столешницы. Олег переминался с ноги на ногу, то и дело поглядывая на серые папки.
Морозов положил ладонь на жесткий картон верхней папки.
— Зеленоград дал материалы, — сказал он. — Посмотрим, что можно пустить в работу сегодня.
Алексей потянул за завязку и откинул обложку. Внутри лежала черновая связка материалов: выписка АЦПУ, два конверта с дискетами — вопреки решению техсовета зеленоградцы всё же передали им магнитные носители с исходными данными и контрольными выгрузками, — карточки с описанием форматов, пометки Липатова и перечень условий, под которыми Научный центр соглашался пустить владимирцев к реальной топологии.
Отдельно Морозов положил на стол лист с регламентами от Каца, Ланской, Руденко и Ахметова: как в НЦ записывают координаты, где ставят номер слоя, как считают контрольное число, кто подписывает выписку, что можно выносить из машинного зала, а что должно остаться только на их стороне.
Олег вытянул шею, пытаясь заглянуть в бумаги.
— Техсовет согласился? — спросил Тимофеев с осторожной надеждой.
— Согласился, — Морозов сдвинул конверты с дискетами ближе к центру. — Данные у нас на руках, допуск оформлен. Это предварительный комплект материалов для «СЛОЯ-81». Научному центру нужен журнал, где по каждой ошибке видно место, правило и лист.
Алексей оперся костяшками пальцев о столешницу.
— Наша задача — превратить этот ворох материалов в рабочую программу на нашей «Сфере-82». Черновые вопросы топологии должны решаться рядом с рабочим столом инженера, а большие зеленоградские машины пусть получают уже подготовленную задачу. Их машинное время стоит дорого. Если мы сможем снять часть такой нагрузки и поймать грубый брак до производства, у «Сферы» появится доказуемый экономический эффект.
Взгляды инженеров переместились с распечаток на лицо Алексея. Радиатор в углу лязгнул металлом.
— Тогда сверяемся, — сказал Морозов. — Женя и Сергей Дмитриевич берут зеленоградские материалы: формат, носители, журнал для Научного центра. Цветной стенд остается по утвержденному графику. Сегодня разведем время машин и людей.
Громов не стал дожидаться паузы. Он придвинул к себе папку Каца, откинул картонную обложку и быстро пробежал глазами по машинописному тексту. Карандаш застучал по столешнице чаще.
Громов пролистал машинописный лист, задержался на строках с контрольными числами и отложил его к себе.
— Я сначала сверю бумагу с носителем: порядок полей и контрольные числа.
Громов быстро прикинул поля в тетради и поставил жирную черту рядом с графой памяти.
— Плотность упаковки координат у них бешеная, — сказал программист, постучав карандашом по распечатке АЦПУ. — Целый слой мы в память за один раз точно не запихнем.
Морозов посмотрел на него.
— Подтверждаешь первоначальную гипотезу?
— Абсолютно. Под МикроДОС у нас свободно от силы двадцать килобайт. Экран, ввод и системные буферы откусили свое. Зеленоградский массив сожрет этот остаток на первой же сотне сложных полигонов.
Морозов кивнул. Сейчас требовалось заставить работать то железо, которое уже стояло в лаборатории, без разговоров о будущих расширениях памяти.
— Значит, режем на окна? — спросил Алексей.
— Режем, — Громов снова уткнулся в распечатку, делая пометки на полях. — Будем читать данные с дисковода порциями. Загрузили блок в буфер, проверили контрольную сумму, как требовал Кац. Сошлось — берем фрагмент в работу. Прогнали через допуски Ланской. Если нашли подозрительное место, выплевываем в журнал Ахметова только его координату. Отработанный кусок слоя стираем из ОЗУ, дергаем дисковод, подтягиваем следующую порцию.
— Медленно выйдет, — заметил Липатов. — Дисковод задергаем.
— Так влезем в ограничения, — отрезал Евгений. — Я напишу обработку на ассемблере, лишние пересылки уберу. Нам не нужно держать в памяти весь слой, нам нужно искать в нем ошибки.
— С этого и начнем, — сказал Морозов. — Сначала машина читает формат, сверяет строку с выпиской и ловит простую геометрическую ошибку. Связь с их большими машинами оставим на потом. Мне нужен надежный разбор данных.
Пока Громов делал пометки на листе Каца, Морозов отодвинул зеленоградские распечатки на край стола. Он повернулся к Олегу, Наташе и Любе.
— Научный центр оставим Жене, — сказал Алексей. — Олег, что у нас по цветному выводу?
Тимофеев раскрыл общую тетрадь. Поверх нее легла потертая копия принципиальной схемы.
— Разобрали УПИМЦТ до скелета, — отчитался он, водя тупым концом карандаша по бумаге. — Блоки цветности отмыли, они визуально живые. А вот по питанию беда. Одно шасси дает такую пилу по линии сто тридцать вольт, что луч осциллографа скачет на два деления.
— Поэтому пока вы ищете нам генератор эталонного сигнала, мы снимаем параметры «на холодную», — сказала Наташа. Она открыла свою дефектовочную ведомость. — Прозваниваем высохшие электролиты, проверяем целостность видеоусилителей. Без поверенного генератора цветных полос мы логику к ним всё равно подключать не будем, как и договорились вчера. Иначе не поймем: это наша микросхема врет или старый телевизор плывет от нагрева.
Ветрова согласно кивнула, накручивая на палец обрезок провода МГТФ.
— И землю сразу разводим по-чистовому, — добавила Люба. — Цифровая часть отдельно, высоковольтное шасси отдельно. Никаких временных перемычек на столе, иначе первый же пробой в умножителе спалит нам центральный процессор.
— Главное, чтобы на твоих защитных эмиттерных повторителях не завалился фронт импульса, — озабоченно возразил Олег. — Для четкого пикселя на экране мне нужна скорость нарастания. Делители могут смазать переходы.
— Фронты будем ловить после того, как перестанем рисковать машиной, — спокойно ответила Люба. — На этих телевизионных рамах такие блуждающие токи гуляют, что стрелка тестера дергается. Обезопасим процессор — тогда будем спорить о наносекундах.
Олег уже тянулся к схеме, Наташа диктовала Любе номера контрольных точек. Морозов дал им договорить, фиксируя, что цветная группа работает слаженно и не требует микроменеджмента, а затем постучал пальцем по зеленоградскому листу.
— Женя, первый шаг по носителям?
Громов подтянул к себе конверт с дискетой.
— Сверяю бумажный перечень с тем, что реально читается. Потом беру одну контрольную строку и считаю число. Если сходится, пишем ввод формата. Постоянную память оставляем под загрузку и экран.
Морозов кивнул. Это возвращало разговор от красивой схемы к той части работы, которую предстояло проверить руками.
— Зеленоградский диск оставляем для служебной программы, — сказал Громов, глядя в лист Каца. — Она читает блок, сверяет контрольное число, перекладывает строку в наш буфер. МикроДОС работает своим порядком.
— То есть диск нужен только для зеленоградской работы? — уточнил Олег. — Цветной стенд к нему привязывать не будем?
— Так и надо развести в решении, — сказал Липатов. — Носитель Научного центра обслуживает задачу «СЛОЯ», а цветной стенд идет своим порядком.
— Тогда так и держим, — сказал Морозов. — Диск и формат относятся к «СЛОЮ». Базовый запуск машины остается как есть, пока не увидим первый проход на стенде.
Громов коротко кивнул.
— Тогда считаю только ввод и буфер, — сказал он. — Без лишних признаков в загрузчике.
— Хорошо, — сказал Морозов. — На лист вынеси границу: что делает служебная программа «СЛОЯ», а что остается в базовой машине. Потом посчитаем память.
Алексей отошел к окну. Провел пальцем по стеклу, оставляя чистую полосу в намерзшем слое, и обернулся к лаборатории.
— Через две-три недели нужен рабочий пробный макет «СЛОЯ», — сказал он, повернувшись к Громову. — Расчет памяти, формат входных данных с диска и выписок, вопросы Кацу по порядку доступа. По цвету — измерительный стенд и стабильный эталонный сигнал. И гражданская обратная связь: письма от радиолюбителей, отклики из школ и кружков идут своим порядком. Их нужно законно оформить, чтобы не смешивать с зеленоградскими задачами.
Липатов молча поставил на своем листе три короткие пометки: «НЦ», «ВКУ», «письма».
— Второй выезд в Научный центр назначают на февраль, — сказал Морозов. — Туда надо везти кусок работы, который можно включить и показать на их данных.
Олег вернулся к схеме, Наташа — к тетради, Люба — к расчету питания; Громов уже листал зеленоградские материалы.
Морозов вернулся к столу и открыл общий рабочий журнал на чистой странице.
— Женя, начни с бумажного перечня и носителя, — сказал он. — Сегодня нужен первый проход на нашей машине: что читается сразу, где придется резать слой на части.
Громов кивнул, не отрываясь от зеленоградских материалов.
— Сначала чтение, потом простая проверка зазоров, — пробормотал он. — Если всё упрется в размер памяти, придется резать слой на окна.
— Третьего стенда у нас нет, — напомнил Олег, кивнув на дальний стол. Там стояли две опытные «Сферы-82», собранные к началу января из всего, что удалось выцарапать у снабженцев и бывших соседних КБ. — Одну ты с Евгением заберешь под диск и свой «СЛОЙ». Вторую мы заберем под цвет. А третья у Седых в бухгалтерии,
— Забрать ее обратно нельзя, — сказал Морозов. — Седых на ней как раз показывает прикладную пользу машины: ведомости, расчеты, экономию. Пусть считает. Нам это сейчас полезнее, чем третий стенд на столе.
Громов поморщился, но спорить не стал. Для программы предварительной проверки топологии ему хватало одной машины, если никто не будет дергать ее каждые полчаса под цветные полосы, клавиатуру или очередной опыт с дисководом. Он быстро прикинул порядок работы: утром — чтение диска и контрольные числа, днем — проверка геометрии, вечером — печать подозрительных координат и ручная сверка с выпиской АЦПУ. Медленно, но без очереди к чужой большой машине.
— По стендам получается так, — сказал Морозов. — Зеленоградский у Жени. Цветной у Олега и Наташи. Птицын готовит для него проверочные поля и смену атрибутов под присмотром Жени, а к машине приходит по расписанию измерений.
— Сергей Дмитриевич, — Морозов посмотрел на Липатова. — Помоги с допусками по аппаратному сопряжению и формулировками для технического совета. Нужны строгие рамки порядка обмена: что проверяем на стенде и какие данные возвращаем в Научный центр.
Липатов придвинул к себе стопку справочников.
— Наталья Сергеевна, документационную часть по Зеленограду лучше вести у вас, — продолжил Алексей. — Нам понадобятся две версии: рабочая для своих и аккуратная справка наружу. Термины я попрошу сверить с Липатовым.
Рябинина пометила на полях сроки для своего отдела.
— Подготовлю, Алексей Николаевич, — ответила она. — Никаких нештатных режимов. Только утвержденные формулировки.
Морозов перевел взгляд на Олега, Наташу и Любу.
— По цветному стенду когда будет первый протокол? — спросил Морозов.
Олег переглянулся с Наташей; Люба осталась над своим листом питания.
— Таблицу по шасси я веду, — сказала Наташа. — В первый протокол войдут контрольные напряжения, прогрев, дрейф и замененные элементы.
Она похлопала ладонью по серой амбарной тетради.
— Источник эталонного сигнала ставим первым, — сказал Олег. — Снимем опорные осциллограммы, потом полезем в блок цветности.
— Хорошо, — сказал Морозов. — Олег, Наташа, Люба, сначала сигнал и измерения, потом пайка. Так этот стенд и вытащим.
Наташа чуть подняла глаза от тетради, и напряжение у нее на лице на мгновение ослабло. Олег повернул схему так, чтобы Любе был виден узел питания. Ветрова поставила рядом с графой «земля» маленькую галочку.
Горелов чуть подался вперед.
— По закрытой машине мне нужен тот же порядок, — сказал он. — Видимый режим, понятный отказ, проверка на стенде.
Он говорил сухо, но без прежней настороженности. На этот раз Горелов просил не отдельный обходной путь, а проверяемый порядок, который можно будет показать Седыху и первому отделу без лишних обещаний.
Морозов заметил это и кивнул. Спор о закрытой машине за последние недели сдвинулся: Горелов уже говорил языком общего стенда, журнала отказов и повторяемой проверки, а значит, оставался внутри общей архитектуры.
Саша Птицын, до этого молча слушавший старших товарищей у соседнего стола, переступил с ноги на ногу и приоткрыл свою тетрадь.
— Евгений Николаевич, я по локальному обмену доделал ту часть, что вы просили, — негромко сказал техник. — Логику развязал. Состояния сети теперь падают в кольцевой буфер. А маркер и прерывания я не трогал, как вы и запретили.
Громов оторвался от зеленоградских спецификаций и бросил быстрый взгляд на блок-схемы в тетради Птицына. По губам программиста скользнула скупая, но одобрительная усмешка.
— Буфер придумал правильно. Маркер не убил — значит, понял суть аппаратной задачи, — констатировал Громов. — Вывод на экран причешешь потом. А сейчас переключайся на помощь железячникам.
Громов кивнул в сторону Тимофеева.
— Олегу для цветного стенда нужна маленькая, дубовая мини-программа. Вывод сплошных полей, шахматка и перебор всех восьми атрибутов цвета по кругу. Пишешь компактно, чтобы влезло в тестовое ПЗУ. Это будет их фонарик в темной комнате, пока они там свои телевизионные каскады осциллографом тыкают.
Птицын моргнул, быстро спрятал довольную улыбку, прижал тетрадь к груди и кивнул Олегу, подтверждая, что готов взять задачу.
— Люба, развязка и питание остаются за тобой, — сказал Морозов. — Там главное — разделение земляных контуров видеовыхода. При пробое высоковольтного умножителя системная плата должна пережить бросок напряжения.
Ветрова поправила заколку в светлых волосах.
— Прослежу за раздельными полигонами на плате, а питание узла согласования пущу через линейный стабилизатор и дроссель.
Громов уткнулся в зеленоградские материалы, подозвал Птицына и подвинул ему чистый лист для таблиц. Липатов выписывал ГОСТы на изоляцию цепей. Рябинина забрала черновики для отдела документации.
Олег с Наташей склонились над первым металлическим каркасом УПИМЦТ, уже лежащим на резиновом диэлектрическом коврике. Штампованный металл тихо лязгнул. Люба щелкнула тумблером блока питания паяльника. Вскоре над столами потянуло теплой канифолью.
На столе разошлись первые листы: зеленоградские материалы к Громову, тетрадь измерений к Наташе, чертеж питания к Любе.
Морозов подошел к собственному столу, заваленному черновиками. Открыл чистую страницу блокнота и коротко вывел: «Февраль. НЦ. Вторая фаза».
Глава 23
Малая серия
На следующий день Морозов задержал Громова и Птицына в кофейной комнате перед общим сбором. В плане здания она числилась складом списанных приборов и всё ещё напоминала кладовку: у стены стояли стеллажи из гнутого уголка, под окном — выцветший канцелярский стол, возле раковины теснились эмалированный чайник, ручная мельница и пузатая кофеварка с почерневшим тэном. На гвозде у двери висело полотенце с выцветшей синей каймой. Между жестяной банкой с зерном, блюдцем рафинада и пачкой сухого печенья стояла пол-литровая бутылка молока с фольгированной крышкой; кто-то принёс её утром и сразу поставил ближе к холодному стеклу.
Кофе в этот раз получился нормальным: тёмным, горьким, с живым запахом, ради которого хотелось отложить бумаги хотя бы на пять минут. Морозов налил себе чёрный, крепкий, без сахара. Громов и Птицын плеснули молока, размешали ложками и на минуту замолчали с одинаковым довольным видом.
— Вот за это я готов простить бухгалтерии утренние заявки, — сказал Громов, глядя в чашку.
— Бухгалтерия как раз хочет ещё пару машин, — ответил Морозов. — Седых просил. И АЦПУ к ним подключить.
Птицын поперхнулся кофе.
— Алексей Николаевич, у нас три машины. Одна у Седых, одна под цвет, одна у Евгения Александровича под Зеленоград.
— Поэтому и говорю сейчас, до того как нас снова разведут по срочным делам, — сказал Морозов. — Каждому разработчику нужна своя «Сфера». Плюс отдельная машина под локальный обмен, отдельная под цвет и
Громов отпил кофе, поморщился от горячего и всё равно сделал второй глоток.
— На сколько комплектов у нас реально хватает деталей?
— Процессоры и часть плат есть с запасом, — сказал Морозов. — Полная машина упирается в набор микросхем К580, память, дисководы и нормальные корпуса. Сергеева попрошу добрать дефицитные детали через Зеленоград. А пока поднимаем сборку по декабрьскому стандарту: комплектовочная карта, монтаж, жгуты и порядок проверки идут один к одному с первыми тремя «Сферами-82».
Морозов постучал пальцем по блюдцу.
— Остаётся вопрос в людях. Кто нам эти «Сферы» соберёт?
— Нужны те, кто умеет держать паяльник и сможет сидеть над этим каждый день, — сказал Громов. — По часу между чужими поручениями серия не выйдет.
Птицын поставил чашку на блюдце.
— Володя Артемьев. Он в монтажной быстро соображает, у него пайка ровная. И Зоя Мельникова из бывшего КБ-2. Она детали держит в голове лучше ведомости: где кварцы, где разъёмы, какие панельки уже с нормальными ножками.
— Зоя с Любиными жгутами справится? — спросил Морозов.
— Если Люба даст ей первый жгут и комплектовочную карту, справится, — сказал Птицын. — А Володе я проведу ликбез по логике схемы и монтажу: шины, питание, разъёмы, контрольные точки. Собирать он будет по карте; понимание схемы сэкономит нам время на проверке.
Громов прищурился.
— Паять многие умеют, — сказал он. — Нужно, чтобы Володя читал монтажную карту без фантазий. Сигналы, питание, контрольные точки. Одна перепутанная перемычка — и потом неделю ищи замыкание на шине.
— Прочитает, — упрямо сказал Птицын. — Мы с ним в радиокружке две зимы за одним столом паяли. Володя схему чувствует.
Морозов посмотрел на часы, допил кофе одним глотком и поставил чашку в раковину.
— Тогда делаем так. Я ввожу их в работу. Ты, Саша, берёшь Володю на первое объяснение. Люба возьмёт Зою по сборке и питанию. Липатов проверит карту и порядок приёмки серии.
— А я подключусь, если машина откажется грузиться, — сказал Громов. — Это уже мой участок.
* * *
Через полчаса Морозов привёл Володю Артемьева и Зою Мельникову в лабораторную половину КБ. Володя, худой парень в вытертом свитере, держал под мышкой тетрадь в клетку. Зоя несла коробку с панельками; на крышке уже лежали три бумажные полоски с её аккуратными пометками.
— Работа будет важная и непростая, — сказал Морозов. — Собираем малую серию «Сфер-82» по декабрьским схемам. Первые экземпляры идут разработчикам и на испытания. Потом бухгалтерия и печать. Нам нужны одинаковые машины, чтобы одна программа вела себя одинаково на каждом столе.
Он показал на дальний стол с разложенными платами.
— Володя, начни с системных плат. Саша покажет карту и контрольные точки. Зоя, тебе — комплектация и первые жгуты. Люба пройдётся с тобой по питанию, земле и разъёмам видеовывода. Спорные места сначала отмечаете на схеме; паяльник берёте после проверки.
Птицын сразу подвёл его к коробке с микросхемами.
— Садись сюда. Помнишь, как у нас в кружке приёмник оживал только после хорошего удара по корпусу?
— Тут тоже так?
— Тут за удар по корпусу Громов взглядом убивает. Значит, действуем культурно.
Он развернул перед Володей лист: процессор К580, рядом микросхемы обмена, счётчики, шинные буферы, память, разъём дисковода, клавиатура.
— Процессор тут главный, но один он только считает. Ему нужны часы, память, путь к клавиатуре, путь к диску и место, куда вывести строку. Сеть потом пойдёт через обмен, поэтому нам важны одинаковые адреса и одинаковая разводка. Перепутаешь линию — программа будет разговаривать с пустотой.
Володя быстро записал две строки и посмотрел на плату уже с интересом, а не с уважительным страхом.
Люба тем временем подвинула Зое монтажный лист и три жгута разной длины.
— Смотри: питание отдельно, земля по общей точке, видеовывод трогаем после проверки Олега. Пакетики подписывай так, чтобы я утром поняла без вопросов. Красная метка — питание, синяя — земля, белая — сигнальные.
Зоя чуть улыбнулась.
— Люблю, когда железки лежат по порядку.
— Тогда мы поладим, — сказала Люба. — Здесь от порядка больше толку, чем от героизма.
Они обменялись короткой деловой улыбкой: Любе понравилась Зоина аккуратность, Зое — что её сразу приняли всерьёз.
* * *
У окна Олег с Наташей склонились над одним из телевизионных шасси и спорили вполголоса о том, какую точку брать за общую при первых измерениях. Возле них Люба раскладывала детали по маленьким бумажным пакетам: номинал, источник снятия, примечание по состоянию каждого конденсатора. На дальнем столе стояла «Сфера», выделенная под цветной стенд.
Вторая «Сфера-82» стояла ближе к стене, на отдельном столе. Громов ещё вечером проверил её дисковод ИЗОТ, положил рядом пачку бумаги и тетрадь. Крышка машины была снята, обнажая плоские кабели; Громов время от времени поглядывал внутрь, словно проверяя ночное молчание железа.
Третья «Сфера-82» стояла в бухгалтерии у Седых, и это обстоятельство за утро уже дважды вспоминали недобрым словом.
Птицын появился у двери с кипой листов и конвертом для дискеты.
— Можно пять минут на вашу машину? Цветной выход пока у Олега на столе, зато для обычного монитора я уже собрал проверку.
Громов оставил взгляд в тетради.
— Для обычного монитора — это как?
— Чёрно-белая вариация. Рамка по краю, центральные оси, сетка знакомест, шахматка, полосы через инверсию. Геометрию экрана видно сразу: где край съеден, где строка плывёт, где знакоместо кривит.
Морозов, входивший с папкой под мышкой, задержался у стола.
— Покажи.
Птицын сел за «Сферу-82» очень прямо, будто от осанки зависела надёжность программы. Дисковод коротко щёлкнул. На экране появилась тонкая рамка, затем крест по центру, потом плотная сетка. Громов придвинулся ближе и сразу ткнул пальцем в правый нижний угол.
— Тут край уходил бы первым. Хорошо. Теперь шахматку.
Птицын нажал клавишу. Экран мигнул и заполнился чередованием светлых и тёмных клеток.
— Цветные признаки добавлю, когда Олег даст живой видеовыход, — сказал он. — Пока оставил те же шаги, только через яркость и инверсию.
Морозов посмотрел на Громова.
— Для стенда годится?
— Годится, — сказал Громов. — Саша, подпиши режимы и оставь рядом лист с порядком проверки. Потом по этому же скелету сделаешь цветную версию: поле, полосы, шахматка, признаки по знакоместам. Начал правильно.
Птицын кивнул уже спокойно и ушёл к соседнему столу, прижимая
Морозов придвинул стул, сел и открыл свою папку. Поверх зеленоградских рабочих выписок и распечаток на столе лежал большой картонный конверт с дискетой. На обложке конверта рукой Каца было выведено: «Рабочая копия. Формат НЦ. Хранить особо».
Громов посмотрел на надпись и усмехнулся.
— Грозно написано, — сказал он. — Давай сначала узнаем, читается ли она.
Громов раскрыл свою тетрадь. На первом развороте уже стояла грубая схема памяти «Сферы-82»: нижняя область для МикроДОС, дальше рабочая память программы, отдельно экранная область, сверху — короткие служебные буферы. Против свободного места стояла жирная пометка: «мало».
— Я вчера прикинул, — сказал Громов. — Если работать на наших текущих тридцати двух килобайтах, целый слой выходит далеко за пределы памяти. Адресное поле у К580 теоретически шестьдесят четыре килобайта, но у нас сейчас живая машина на столе, вот эта. Система, экран, буферы диска, переменные — и от памяти остаётся узкая грядка.
— Значит, читаем слой кусками.
— Кусками, — кивнул Громов. — Последовательный файл с диска читаем порциями, как договаривались. Подозрительные места складываем в отдельный список. Но это всё базовые функции. Чтение, буфер, разбор записи, контроль, вывод ответа. Это я понимаю.
Он перевернул страницу. На следующем листе было другое: прямоугольники, стрелки, номера слоёв, зазоры. Карандашные линии сбивались в плотную кашу.
— Дальше начинается геометрия. Где прямоугольник, где технологический припуск, где намеренное наложение, где ошибка, которую Ланская признает настоящей. Я могу написать проверку в лоб: сравнить каждый участок с каждым. Машина будет думать до второго пришествия, если объём данных вырастет.
Он постучал карандашом по листу.
— Я могу сделать быстро. Но если мы начнём всё это пришивать к машинным командам, через неделю сами потеряем понимание, где у нас правило технолога, а где мой обход тесной памяти. Ошибка Ланской станет похожа на ошибку Громова. Это плохой путь. Есть ещё микробейсик, но он — интерпретатор, а значит, медленный.
Морозов молча раскрыл принесённую папку и достал ещё один лист. На нём была собственная схема Морозова вместо зеленоградской распечатки: три прямоугольника, соединённые стрелками. Под первым было написано: «чтение и разбор записи». Под вторым: «проверка правила». Под третьим: «ведомость замечаний».
— Вот поэтому делим работу, — сказал он. — Ты пишешь машинную часть: дисковод, буфер, контрольное число, разбор строки, выдача результата. На ассемблере. Там каждый байт на счету и каждый лишний переход будет слышен.
Громов прищурился.
— А середину?
— Середину пишу я.
Несколько секунд Громов смотрел на него с каменным лицом.
— Ты.
— Я.
— На чём?
Морозов достал из папки вторую дискету, с пустой стороной конверта, в обычном бумажном конверте.
— На Си. Транслятор с этой дискеты должен завестись. Полной свободы там нет, зато для проверки правил его хватит.
Громов взял конверт двумя пальцами, как берут незнакомую микросхему с сомнительной маркировкой.
— Я всё ещё пытаюсь понять, когда ты успел стать программистом.
— У меня была другая школа и слишком много практики, — спокойно сказал Морозов.
Громов хмыкнул, и в этот раз удержался от шутки. Он положил дискету рядом с зеленоградской и постучал ногтем по столу.
— Ты же пять лет рядом со мной ходишь. Схемы, системная шина, память, организация работ, будущее, чёрт бы его побрал. А программ за тобой почти никто здесь раньше не видел.
— Потому что мне пришлось бы учить Фортран ваших больших машин, Алгол в тех вариантах, в которых он у вас живёт, и ассемблер К580. Я могу читать машинную логику, но писать на К580 так, как пишешь ты, — это годы привычки. А Си ближе к моей школе. Не такой, каким я пользовался дома, беднее, без привычных библиотек, с тяжёлой работой с памятью. Но фундамент те же.
Громов медленно сел.
— Покажи.
Морозов ответил делом. Он сбросил «Сферу-82», дождался короткой строки начального пуска и запустил МикроДОС в исходном, англоязычном режиме. На черно-белом экране возникла сухая строка приглашения. Громов придвинул стул ближе и оперся локтем о край стола.
Сначала они проверили вторую дискету. Дисковод несколько раз коротко щёлкнул, головка шагнула по дорожкам, и на экране появился каталог файлов. Громов наклонился вперёд.
— Живой.
— Тише.
— Оставь радиолюбительские приметы, — буркнул Громов. — Показывай, что ты там собрался писать.
Морозов взял чистый лист и прежде чем коснуться клавиатуры, набросал на бумаге маленькую таблицу.
«X1, Y1, ×2, Y2, слой, правило».
— Зеленоградская топология для первого опыта — это строго выбранный фрагмент. Значит, каждый проводник можно на первом шаге свести к прямоугольнику или к группе прямоугольников. Берём участок вместо всего кристалла и всей маски, где надо поймать грубое нарушение зазора.
— Ланская тебя за это прибьёт.
— Если скажу, что этого достаточно для производства, — да. Если скажу, что это первая грубая проверка перед её глазами, — выслушает. Наша программа оставляет последнее слово технологу. Она отсекает места, на которые человеку стоит посмотреть в первую очередь.
Морозов начал вводить текст программы. Он печатал медленнее, чем Громов набирал код на ассемблере, но странно ровно: сначала имена полей, потом одна короткая подпрограмма чтения прямоугольника из буфера, потом функция проверки пересечения по двум осям. В обозначениях держался один порядок; каждая новая строка вставала на место, будто в голове у него уже лежала готовая литейная форма, а теперь он только заливал её металлом.
Громов молчал. Потом придвинулся ещё ближе.
— Стой. Ты два раза используешь одну и ту же проверку.
— Именно.
— Для X и для Y?
— Да. Если проекции прямоугольников на ось разошлись, дальнейшее сравнение теряет смысл. Если сходятся — считаем зазор. Одно правило, две оси. Потом добавим поправки Ланской по слою.
— А если прямоугольник длинный, через пол-участка?
— Тогда он попадает в несколько полос.
Морозов нарисовал рядом с таблицей вертикальные линии.
— Сравнение всего со всем отбрасываем. Делим участок на грубые полосы по координате. У каждой полосы свой короткий список прямоугольников, которые её задевают. Приходит новый прямоугольник — смотрим только соседей в этих полосах. Ошибку на границе полос удержим, если добавим запас на минимальный зазор.
Громов забрал у него карандаш и сам дорисовал две полосы.
— Список будет расти.
— Будет. Поэтому старые прямоугольники выбрасываем, когда их правая граница ушла дальше проверяемой зоны. Читаем файл по порядку, вместо хранения всего массива сразу.
— Если файл отсортирован.
— Поэтому первый вопрос Кацу: в каком порядке выгружаются записи.
Громов откинулся на спинку стула. Его лицо стало сосредоточенным, почти сердитым, как всякий раз, когда хорошая идея заставляла выбросить любимое решение.
— То есть ты предлагаешь дисциплинированную программу. Она ведёт счёт прямоугольникам, помнит зазоры и оставляет технологу те места, где нужна живая производственная оценка.
— Да.
— И на Си это будет читабельно.
— Должно быть.
— А потом я самые медленные места перепишу на ассемблере.
— Когда увидим, что именно медленно.
Громов помолчал, потом тихо рассмеялся.
— Вот это, Алексей Николаевич, уже похоже на преступление против моей профессиональной гордости.
— Почему?
— Потому что я бы начал с красивого машинного ядра и через три дня сам запутался бы в собственных переходах. А ты начал с того, что правило должно быть видно глазами.
Морозов пожал плечами.
— В моём деле иначе вся работа разваливалась. Когда проектируешь кристалл, ошибка редко выглядит как одна героическая поломка. Чаще это мелкая погрешность, которая прошла через десять рук и стала дорогим браком.
— Ты опять про свои чайники?
Морозов покосился на него.
Громов улыбнулся шире.
— Извини. Я всё ещё привыкаю, что человек, который рисовал микросхемы для чайников, теперь учит меня экономить машинное время для Зеленограда. Голова сопротивляется.
— Чайник тоже плохо переносит, когда у него на кристалле зазор пропал.
Громов коротко фыркнул, уже с другой интонацией.
— Ладно. Пиши дальше.
Они работали почти два часа.
Олег за это время дважды подходил спросить, можно ли на минуту занять линию с нормальной землей, и оба раза уходил, услышав от Громова невнятное рычание. Наташа принесла лист с перечнем контрольных точек шасси, посмотрела на экран, где мелькали скобки и короткие английские слова, и осторожно спросила, можно ли подойти ближе. Громов даже понял вопрос с задержкой.
Птицын один раз принёс свой лист с проверочными картинками. Морозов просмотрел его, вычеркнул слишком сложный пункт про плавный переход яркости и оставил поля, полосы, шахматку, смену признака знакоместа и отдельную строку «ошибка чтения цветной платы».
— Вот это годится, — сказал Алексей. — Только называй её точнее. Пиши: «цветной блок отсутствует». Человек должен понимать, что делать дальше.
— Это инструкция как для школьников? — спросил Птицын.
— Это из опыта всех, кто когда-нибудь сидел перед молчащей машиной, — сказал Громов, глядя в экран. — Иди, Саша. У тебя хорошая задача. Не порть её лишней умностью.
Птицын ушёл довольный.
К полудню первая программа Морозова заработала, но пока только с пробным участком топологии. Она читала короткий искусственный набор из семи прямоугольников, занесённых вручную в простой текстовый файл. Два прямоугольника были безопасны. Один нарушал зазор. Один лежал на другом слое и должен был пройти мимо проверки. Ещё один был вписан с ошибкой в координате, чтобы проверить, поймает ли программа неправильный порядок углов.
Громов настоял на том, чтобы все семь строк сначала переписали на бумагу и рядом руками посчитали ожидаемый результат.
— Первым программам я доверяю с карандашом в руке, — сказал он. — Особенно чужим.
— Моим?
— Любым. Своим меньше всего.
Морозов запустил трансляцию. «Сфера-82» задумалась. Дисковод щёлкал короткими сериями, потом надолго замолкал. На экране сменялись сухие строки сообщений транслятора. Один раз машина выдала ошибку, и Громов тут же ткнул пальцем в строку.
Морозов исправил строку. Второй прогон дошёл до конца. Объём получившейся программы Громова огорчил; он сразу выписал на полях, какие куски потом надо будет заменить машинным кодом. Но программа запустилась.
На экране появились четыре строки:
«READ 7»
«CHECK 5»
«BAD GAP 3»
«BAD ORDER 6»
Громов долго смотрел на них, будто пытался поймать машину на обмане.
— Номера совпали, — сказал Морозов.
— На игрушечном наборе.
— На проверочном наборе.
— Рамки опыта. Снова в ход пошли твои словесные фокусы.
— Хорошо. На семи строках.
Громов взял бумажный лист с ручным расчётом и положил рядом с экраном. Потом аккуратно обвёл карандашом две строки: третью и шестую.
— Семь строк — это семь строк, до Зеленограда ещё далеко, — сказал он. — Но я понял. Середина должна быть такой. Чистой. Чтобы Ланская могла посмотреть правило и сказать: здесь вы поняли технологию, а здесь придумали за неё.
Морозов кивнул.
— А твоя часть должна сделать так, чтобы эта середина получала данные без ручной набивки.
— Получит, — Громов уже перевел взгляд с экрана в свою тетрадь. — Я сделаю программу чтения последовательного файла. Без попытки глотать весь слой. Буфер на несколько записей, проверка контрольного числа, перевод координат в твой внутренний вид. На выходе — такой же простой набор, только из рабочей дискеты вместо семи строк.
— И ведомость замечаний.
— Да. Структуру ведомости надо взять у Липатова.
Морозов провёл ладонью по лицу и снова наклонился к листу.
— Значит, после обеда зовём Липатова.
— После обеда ты покажешь мне, как эта штука работает с таблицей допусков.
— Ты же только что сказал, что поверил.
— Я сказал, что понял середину. Это разные вещи.
После обеда лаборатория стала тише.
Олег с Наташей унесли одно шасси вместе с ЛАТРом в соседнюю комнату, чтобы оставить остальным тишину. Люба ушла к кладовщице сверять список недостающих деталей. Птицын сидел на подоконнике с тетрадью и переписывал проверочные картинки уже в виде последовательности действий для будущей служебной программы: очистить экран, вывести поле, подождать нажатия, сменить признак, снова подождать. Громов ему велел писать так, чтобы через неделю он сам понял, что имел в виду.
У «Сферы-82» остались Морозов и Громов.
На столе лежала распечатка из папки Ланской. Они выбрали часть данных, достаточную для первого участка: слой металлизации, минимальный зазор, технологический запас, отметки, которые принимаются за дефект только после просмотра технологом.
Громов, глядя на таблицу, недовольно постукивал пальцем по краю стола.
— Вот здесь начинается сложность. Алгоритм проверки примитивен: зазор меньше допустимого — выдаём замечание. А Ланская говорит: на этом слое допустимый зазор один, рядом технологический выступ, здесь припуск на травление, там метка совмещения. Если мы всё это напишем отдельными исключениями, программа превратится в мешанину частных случаев.
Морозов придвинул к себе лист и написал сверху: «таблица правил».
— Данными, а не исключениями.
— Объясни.
— Правило прибивать к тексту программы каждый раз заново опасно. Для первого опыта у нас будет маленькая таблица: номер слоя, вид
Громов смотрел на лист с явным недоверием.
— Ты хочешь сделать программу, которая сама себя настраивает таблицей.
— Таблица задаёт условия. Мы задаём ей условия опыта. Это обычная инженерная аккуратность: что проверяем, по какому правилу, с каким допуском.
— На Си это удобно.
— На ассемблере тоже можно, но чуть больнее.
Громов усмехнулся.
— Слово «больнее» принимается как техническое.
Морозов начал менять программу. Он не просто правил текст изнутри, а словно вынимал из него жёстко прибитые гвозди и заменял их винтами. Там, где утром стояло число, появлялось обращение к строке таблицы. Там, где проверка знала только один слой, возникал короткий поиск по номеру. Громов сначала молчал, потом стал задавать вопросы чаще.
— А если правило отсутствует?
— Пропускаем проверку и пишем в ведомость: слой без описания.
— Это будет выглядеть как отказ программы.
— Это рамки опыта. Мы прямо записываем: для этого слоя правило ещё отсутствует.
Громов поднял палец.
— Рамки опыта. Сам же запретил мне эти красивые слова.
Морозов зачеркнул свою запись и написал: «правило в таблице отсутствует».
— Согласен.
— А если запись повреждена?
— Твоя часть должна отсеивать повреждённую запись до моей. Сначала контрольное число, потом геометрия.
— А если контрольное число сошлось, но координаты бессмысленные?
— Тогда моя часть выдаёт замечание о порядке координат. Как шестая строка утром.
Громов кивнул. Он спорил уже не ради спора. Он проверял стыки, как проверяют пайку под лупой.
Через час они снова запустили программу. Теперь в проверочном наборе было десять строк и две строки правил. Морозов специально изменил допуск для одного слоя. То, что утром считалось ошибкой, теперь проходило как допустимое место; другой прямоугольник, на соседнем слое, получил замечание.
Громов откинулся на спинку стула и положил карандаш на стол.
— Вот теперь мне особенно интересно, почему ты раньше держался в стороне от программ.
Морозов отодвинул клавиатуру.
— Потому что до сих пор у нас было много людей, которые лучше меня писали на здешних машинах. Ты, например.
— Ответь прямо.
— Отвечаю прямо. На твоём ассемблере я пишу плохо. С ним я как в чужом теле. Я бы потратил больше времени и всё равно сделал хуже. А Си — другое дело. Он ближе к тому, как я привык раскладывать задачу: данные отдельно, правило отдельно, машинная хитрость отдельно.
Громов молчал.
— В моём времени так пишут очень многие, — продолжил Морозов тише. — Железо остаётся железом. Но большая часть работы уходит туда, где надо удержать сложность. Чтобы через месяц ты понял собственный текст. Чтобы Липатов мог сверить правило по бумаге. Чтобы одно изменение в таблице сохраняло машину целой.
— А ассемблер?
— Останется там, где каждый такт и каждый байт решают исход. В пуске, в обмене, в узких местах, где важна скорость. Но всё остальное будет уходить выше.
Громов усмехнулся, но взгляд у него стал серьёзным.
— Фортран умрёт?
— Долго и по-разному. Фортран ещё долго будет держаться там, где считают большие научные задачи. Алгол оставит след больше в головах, чем в цехах. Бейсики расползутся по школам и домашним машинам. А Си, по-моему, вырастет очень далеко. Дальше, чем ты сейчас готов поверить.
— Дальше чайников?
— Намного дальше чайников.
Громов взял карандаш, покрутил его в пальцах.
— Значит, я его недооценивал.
— Ты оценивал его как ещё один язык. А он может стать удобным инструментом между железом и большой программой. Опасным, требующим дисциплины, далёким от идеала. Но очень живучим.
— Ножом, значит.
— Именно инструментом, — сказал Морозов.
Громов снова посмотрел на экран. Там стояли сухие строки второго прогона:
«READ 10»
«RULES 2»
«CHECK 8»
«NO RULE 1»
«BAD GAP 1»
— Ладно, — сказал он наконец. — Делаем так. Ты пишешь проверку правил и таблицу допусков. Я пишу чтение зеленоградского файла, буферы и выдачу ведомости. Когда у тебя появится медленное место, я заберу его в машинный код. Когда у меня появится непонятное правило, ты объяснишь его на человеческом языке, а потом мы понесём Ланской и дадим ей разнести нас по делу.
— По делу можно.
Громов придвинул к себе чистый лист и в верхней строке вывел:
«СЛОЙ-81. Рабочее деление программы.»
Ниже он написал три пункта.
Первый: «Чтение НЦ и контроль записи — Громов».
Второй: «Проверка геометрического правила — Морозов».
Третий: «Ведомость замечаний — совместно с Липатовым».
Он немного подумал и добавил четвёртую строку: «Служебные программы КБ — Птицын, под отдельным присмотром».
— Чтобы Саша из обиды не полез туда, где ему рано, — пояснил он.
— Хорошо.
Громов ещё раз посмотрел на экран и вдруг сказал уже совсем иначе:
— Знаешь, Лёша, я пять лет думал, что ты у нас главным образом человек общей схемы. Видишь, куда всё должно идти. Иногда слишком далеко видишь. А сегодня ты впервые показал ремесло.
Морозов ответил не сразу.
За окном темнело. В соседней комнате Олег что-то негромко сказал Наташе, и через стену донёсся короткий смешок. В лаборатории пахло нагретой изоляцией от приборного стола и чаем, который кто-то забыл долить в стакан.
— Ремесло и спасает, — сказал Морозов. — Без него всё остальное — просто слова.
Громов взял лист с четырьмя пунктами и положил его в папку поверх зеленоградских материалов.
— Тогда завтра начну с программы чтения файла. А ты свою таблицу правил оставь здесь. Я хочу вечером ещё раз посмотреть, где твой Си раздувается.
— Хорошо.
— И сам транслятор оставь мне.
— Уже заинтересовался?
— Я его буду ругать профессиональнее. Для этого надо знать предмет.
Морозов улыбнулся, но промолчал.
На экране «Сферы-82» светились пять строк отчёта. Теперь у «СЛОЙ-81» появились две части: машинная, за которую отвечал Громов, и проверочная, написанная Морозовым.
Громов погасил экран, оставив машину включённой, и накрыл клавиатуру чистым листом бумаги. На листе он крупно написал: «ВКЛЮЧЕНО. ОСТАВИТЬ ДО УТРА».
Птицын, проходя мимо, остановился и прочитал надпись.
— Уже работает?
— Уже ошибается правильно, — сказал Громов. — Для первого дня этого достаточно.
Глава 24
Цветная память
Утром инженеры собрались у свободного кульмана в лаборатории КБ «Сфера». Горелов подтянул к доске табурет. Морозов пристроился
На узкой полке под чертежом теснился привычный рабочий набор: общая тетрадь Наташи, листы Громова с раскладкой памяти и лист Птицына с проверочными картинками. Поверх справочника по микросхемам лежало несколько полосок бумаги, которыми Олег отмечал спорные места в телевизионном шасси. В трубах отопления глухо постукивала горячая вода. От приборного стола за спинами тянуло нагретой изоляцией.
Наташа придерживала страницу тетради. На развороте была вычерчена матрица: адрес знакоместа, код символа, цвет знака и фона. Рядом лежал эскиз новой платы расширения для «Сферы-80М».
— Обращение идёт напрямую, — пояснила она. — Записью в видеопорт. Адресная логика дешифрирует сигнал, и если плата установлена, она отзывается и накладывает свой слой поверх чёрно-белого вывода.
Громов дописал адресную строку и отложил ручку.
— ЦУБ восьмидесятой машины выдает байт, клетка окрашивается. Но базовая процедура переноса строк поднимает текст вверх. Буквы уходят, а цветовой атрибут остается по прежнему адресу. Значит, нужна подпрограмма синхронного сдвига атрибутов.
Морозов опёрся о край стола.
— Для восьмидесятой это остаётся необязательным дополнением. Старые чёрно-белые процедуры обязательно сохраняем, чтобы школы и радиокружки не потеряли совместимость.
Олег сдвинул справочник.
— Удобные команды для работы с цветом появятся только в отдельной прошивке?
— В будущей «Сфере-80Ц», — ответил Морозов. — Сейчас главный приоритет — штатный цвет для «Сферы-82» на стенде под МикроДОС. Старый парк не ломаем.
Горелов пододвинул к себе черновик разводки.
— С восьмидесятой машиной для школ понятно. Цветная плата как добавка. Теперь давайте к моей модификации: цеховой пульт на базе «82В».
Он обвёл ручкой край контактов на чертеже.
— Красный бордюр при отказе мы заложили. Но если говорить об автоматике, то ей картинка на экране бесполезна. Ей нужен внешний выход на станочный шкаф: отдельная развязанная линия на останов.
Наташа кивнула на эскиз.
— Атрибуты цвета идут через видеоплату. Линия аварийного останова должна проходить отдельно и не зависеть от закраски экрана.
Люба подняла глаза от тетради.
— Андрей, это надо записать в требования к закрытой сборке. Прямое подключение нашей шины к станку недопустимо. На выходе нужна гальваническая развязка: оптопара или релейный контакт. Иначе цеховые наводки от пускателей полезут обратно в логику.
Горелов коротко кивнул и внёс требование по развязке в свой блокнот.
Морозов вытянул из кипы бумаг расчерченный лист Громова. Карта постоянной памяти старой «восьмидесятки» пестрела шестнадцатеричными адресами, занимая всю ширину страницы. Поля почти отсутствовали, каждый логический блок сопровождался убористой подписью. Инициализация рабочих регистров, опрос матрицы клавиатуры по строкам и столбцам, формирование монохромного видеосигнала, процедуры записи и чтения фазокодированной информации с бытовой магнитной ленты, итоговая проверка контрольной суммы.
Громов перехватил взгляд Алексея, потянулся к краю стола и звонко постучал тупым концом карандаша по столешнице.
— Даже не начинай. Свободных байтов там нет. Всё забито машинным кодом под завязку, от нулевого адреса до верхней границы.
— Вижу, — ответил Морозов, внимательно изучая плотную сетку распределения памяти.
Стартовая область являлась жёстким программным монолитом. Базовое ПЗУ «Сферы-80М» оставалось фундаментом, переписывать его запрещалось. Попытка втиснуть туда запуск цвета неминуемо сдвигала жестко заданные точки входа для служебных процедур. Морозов вспомнил недавние письма из школ и радиокружков. Учителя, ночами разбиравшие схемы, и подростки, кропотливо переписывавшие программы с бумаги, заслуживали того, чтобы новая техника работала без переделок паяльником. Изменение базовой памяти лишало пользователей предсказуемости. Старые кассеты перестали бы читаться на модернизированных платах, опубликованные примеры кода привели бы к сбросу логики.
Громов потёр переносицу.
— ЦУБ дешифрирует обращение к внешним устройствам штатно. Центральный управляющий блок выставит нужный порт, цветная плата отзовётся. Дальше тупик. Штатные процедуры вывода продолжат отправлять монохромный сигнал в видеотракт, полностью игнорируя новую память атрибутов. Базовый код о ней просто не знает.
Наташа пододвинула рабочую тетрадь с набросками требований к матрице цвета.
— Значит, нужен программный обход. Дополнительный слой поверх основного вывода.
Олег постучал карандашом по карте адресов.
— Можно отдавать команды прямо в порт вывода. Дешево. Базовую память бережет.
— И заставляет школьника сидеть с общей тетрадкой, высчитывая смещения для каждой цветной линии, — возразил Морозов. Он слишком хорошо помнил путаные письма из областных радиокружков. — Машина превращается в шифровальный аппарат. Дети будут заучивать младшие и старшие байты системных адресов, а не алгоритмы. Для восьмидесятой модели цвет должен включаться простым понятным словом.
Андрей присоединился к обсуждению аппаратной части.
— Для станочной модификации требуется аппаратный вывод текста. Человек за закрытой стойкой должен видеть красную рамку и надпись об аварии отдельным слоем, минуя основной видеотракт.
Люба отрицательно покачала головой, проводя карандашом по колонке тепловых расчетов.
— Это дает лишнюю емкость на магистрали. Ток потребления по пяти вольтам поплывет вверх, радиаторы стабилизаторов раскалятся. В цеховых условиях мы получим перегрев корпуса через полчаса работы.
— Разводка дорожек усложнится в разы, — поддержала Наташа. — Появятся отражения сигнала, пойдет рассинхронизация тактов.
Громов хмуро разглядывал раскладку старой машины. Отдавать верхние ячейки оперативной памяти под покраску текста казалось чудовищным расточительством. Каждый байт отнимался у пользователя. Но изменение базовой логики убивало всю накопленную совместимость программ.
Программист перехватил шариковую ручку и с силой, прорывая бумагу, вывел на полях схемы: «не в ПЗУ». Затем придвинул соседний бланк и с тем же нажимом повторил: «не в ПЗУ».
— Базовую прошивку старой машины сейчас не трогаем, — отрезал Громов. — Загрузим «ЦВЕТ-80» с кассеты как временный испытательный слой. Да, это отнимет кусок оперативной памяти, зато цветные подпрограммы можно будет спокойно обкатать на практике. Ошибку на магнитной ленте я исправлю за вечер, и школы просто перепишут кассету. А вот когда код очистится от сбоев, мы возьмем эти проверенные подпрограммы и перенесем их в новую версию постоянной памяти. Уже для будущей «Сферы-80Ц».
Морозов мысленно зафиксировал издержки. Это стоило времени на томительное ожидание загрузки под писк магнитофона и съедало кусок дефицитной памяти. Зато старая машина сохраняла абсолютную предсказуемость в привычном монохромном режиме.
— С закрытой версией держим один видеопорядок, — решил Морозов, посмотрев на Андрея. — Закрытая версия работает через общую цветную плату. Аварийные рамки идут штатным путем. А физический останов станка мы организуем отдельной развязанной линией. Оптопара и мощное реле разорвут питание приводов. Человеку — предупреждение на экран, станку — жесткий аппаратный обрыв цепи.
Горелов кивнул. Развязанная линия решала проблему безопасности.
— Эта «Сфера-82» на стенде сейчас для нас главная задача, — Морозов кивнул на макетную плату цветного тракта, усыпанную
Олег посмотрел на пустые контакты макетки, затем перевел взгляд на усиленные стеллажи у дальней стены. Там громоздились пять тяжелых шасси цветных телевизоров УПИМЦТ. Массивные умножители напряжения и платы цветности с торчащими рядами подстроечных резисторов ждали своей очереди.
— Пять шасси УПИМЦТ у нас уже лежат, — Олег кивнул на стеллажи. — Но с ними мы договорились еще вчера. До получения ГТИС и полной калибровки телевизоры стоят в стороне.
Наташа переложила рабочую тетрадь с матрицей цветовых атрибутов и кивнула.
— И не путайте схемы защиты. Оптопары, которые мы только что заложили для аварийной остановки станка, видеотракт не спасут. Оптрон и мощное реле отлично изолируют управляющую логику от силовых приводов, жестко обрывая цепь. Но аналоговый видеосигнал так не развяжешь.
Морозов мысленно оценил названные риски прямого подключения макета к телевизионному тракту.
— Значит, реальный телевизионный блок пока точно стоит в стороне. Разность потенциалов между массами УПИМЦТ и нулем нашей логики непредсказуема.
— Выгорит всё, — жестко подтвердила Наташа. — Без эталонного генератора телевизионных сигналов прямое подключение к старому приемному тракту даст грязную проверку. Чуть исказится длительность строчного импульса, и мы утонем в ложных выводах: то ли наша разводка фонит, то ли высохла переходная емкость в самом телевизоре. Сначала — чистая сетка ГТИС и проверка уровней напряжения.
Олег задумчиво покрутил в пальцах отрезок монтажного провода. Тонкая белая фторопластовая изоляция МГТФ чуть блеснула под потолочными лампами.
— Железо почти собрано. Сигнал с регистров скоро пойдет, — он указал зачищенным медным концом на пустые выводные контакты макетки. — Эквивалент нагрузки готов?
К столу подошел Горелов. Он придвинул к себе лист миллиметровки и щелкнул цанговым карандашом, выпуская тонкий графитовый стержень.
— Почти, — произнес он. — Рисковать макетом глупо. При работе с закрытыми изделиями мы за такое били по рукам.
Горелов быстро набросал на бумаге контур разъема.
— В начале семидесятых на сдаче вычислительной стойки один торопливый монтажник воткнул сырой блок прямо в центральное шасси. Отвалилась «земля» на плохо обжатом шлейфе, питание пошло по слаботочным линиям. Треск, дым, запах паленого гетинакса на весь цех. С тех пор правило жесткое: сначала гоняем плату на эквиваленте нагрузки. Дорогое изделие пока стоит в стороне, а мы спокойно смотрим уровни на осциллографе.
Олег перестал крутить кусок провода на пальце и заинтересованно шагнул ближе. Громов оторвал взгляд от тетради с листингами и одобрительно кивнул. Защита лишней не бывает.
— Допаяем переходной измерительный жгут, — Горелов уверенно чертил прямоугольники колодок. Темный грифель ложился на бледно-оранжевую сетку ровными линиями. — Возьмем экранированный кабель, жилы — только МГТФ. Фторопластовая изоляция не поплавится, если случайно заденем горячим жалом паяльника. Промаркируем линии цветными кембриками, чтобы не путать контакты при сборке. И обязательно ставим ключ.
Он густо заштриховал один из направляющих пазов на эскизе.
— Спиливаем один штырь или ставим пластиковую направляющую. Обычная защита от дурака. Случайная переполюсовка при стыковке сожжет микросхемы мгновенно, поэтому вставить колодку можно будет только в одном положении. А на другом конце жгута распаяем плату с эквивалентом нагрузки. Нагрузим выходы на резисторы.
Наташа подалась вперед, опираясь локтями на столешницу. Ее глаза быстро бегали по схеме, предложенной Гореловым, оценивая топологию.
— Имитируем входное сопротивление видеотракта, — утвердительно сказала она, постукивая ручкой по бумаге.
— Верно, — кивнул Горелов. — Точный набор сопротивлений. Наши полезные сигналы уходят в эти резисторы, греют их, а мы спокойно снимаем осциллограммы с контактов. Причем контрольные точки для измерительной аппаратуры выводим отдельными высокими штырьками прямо на жгуте, до физического входа в колодку.
— Отлично придумано, — поддержал Олег. — Если лезть толстым щупом осциллографа С1–65 прямо в разъём, рука дрогнет, и половина макета выгорит. Вынесем пяток штырей на отдельную планку и жёстко зафиксируем.
Люба придвинула к себе раскрытый блокнот и начала быстро выписывать номиналы деталей, сверяясь с формулами закона Ома для расчета рассеиваемой мощности.
— «Землю» сводим в одну точку со стороны источника, — сказала Люба, рисуя в блокноте топологию «звезды». — Иначе получим земляные петли и грязную осциллограмму. На эквивалент возьмём полуваттные МЛТ, они точно выдержат ток.
— Замеряем уровни трех основных цветов, — Наташа уже методично расчерчивала длинную таблицу на соседнем листе, подготавливая графы для будущих измерений. — Отдельно ловим амплитуду синхросмеси. Мне нужно увидеть реальные фронты сигналов, время нарастания и спада, оценив их искажения паразитными емкостями монтажа. И главное — тщательно ищем короткие всплески напряжения при частой смене цветовых атрибутов. На чертежах схема выглядит красиво, а в реальном кристалле одновременное переключение десятков триггеров может дать серьезные иголки по питанию шины.
Олег решительно направился к металлическому шкафу с кассами радиодеталей. Звонко защелкали выдвигаемые пластиковые лотки, снабженные аккуратными бумажными бирками. Он методично отбирал резисторы нужного номинала, карболитовые колодки разъемов и достал увесистую катушку розовато-белого провода МГТФ. Щелкнул тумблер на стене, и над столом зашумел мощный промышленный вентилятор вытяжки. Воздух в лаборатории быстро потяжелел, наполняясь сладковато-едким, знакомым каждому электронщику запахом разогреваемой сосновой канифоли и плавящегося оловянно-свинцового припоя.
Громов сгреб в аккуратную стопку свои исписанные листы и задумчиво посмотрел на Горелова. Предложенный аппаратный барьер отлично дополнял его собственные идеи по проверке макета.
— Толково, — сказал Громов, постукивая ручкой по столу. — Для отладки голого макета тестовое ПЗУ Птицына — то, что нужно. А я эту идею перенесу на уровень системы.
Громов взял ручку и начал набрасывать алгоритм опроса прямо на полях своей тетради.
— Заложу проверку железа прямо в драйвер вывода МикроДОС, — кивнул Громов. — Пусть система при старте стучится в порты атрибутов. Если на шине сплошные нули или единицы — значит, цветной платы нет или отвалилось питание. Тогда драйвер спокойно переходит в монохромный режим и работает как обычно, не ломая вывод.
— А если макетная плата откликается ожидаемым кодом? — спросил Олег, откусывая кусачками длинные выводы резистора. Откусанный кусочек со звоном упал на гладкую столешницу.
— Тогда, для ваших измерений, я могу написать отдельную тестовую утилиту на дискету, — предложил Громов. — Запустите её, и она даст частую запись в память атрибутов. Код пойдет плотным циклом: нули, единицы, снова нули. Вы посмотрите на осциллографе, где полезут задержки дешифратора и просадки напряжения на шине, а потом уже будете грузить нормальную систему.
— Вот на выносной колодке мы эти задержки и поймаем, — отозвался Горелов. — При плотном цикле сразу будет видно, где проседает
Он взял карандаш и пометил на эскизе эквивалента нагрузки точки для подключения осциллографа. Морозов посмотрел на этот эскиз и молча кивнул.
Наташа придвинула общую тетрадь и вписала новые графы в таблицу замеров.
— Андрей, эскиз колодки оставь у меня, — попросила она, выравнивая линейку по краю страницы.
Олег без привычных пререканий согласился с разметкой контрольных точек. Он вытянул из катушки конец розового провода МГТФ и приготовился паять. Громов сгреб со стола исписанные черновики.
— Пойду к себе за стол, — бросил программист. — Набросаю логику автоопределения, пока вы тут собираете эквивалент нагрузки. Птицына дёргать не буду, пусть спокойно шьёт вам ПЗУ.
Морозов отошел к окну. Люба опустила жало паяльника на скрутку. Капля припоя мягко растеклась от жара, плотно охватив медную жилу.
Глава 25
Телецентр
Тяжёлая, обитая дерматином дверь телецентра отрезала звуки улицы. Провожатая с вахты молча провела гостей по петляющим коридорам и толкнула неприметную серую створку.
Из аппаратной донёсся плотный гул трансформаторов. Воздух пах нагретой изоляцией, пылью и металлом. Вдоль стен высились глухие стойки, выкрашенные серой молотковой эмалью. Лицевые панели пестрели рядами тумблеров, массивными ручками потенциометров и круглыми шкалами стрелочных приборов.
Олег сразу посмотрел на экраны.
Видеоконтрольные устройства выдавали ровную тестовую таблицу. Строки стояли на месте. Цветовые поля держали границы, белый прямоугольник оставался белым. Олегу захотелось немедленно забрать один такой блок, поставить на стол в лаборатории и оставить позади бесконечные перепайки с нестабильными платами из телемастерских.
Наташа задержалась у стойки не перед экраном, а у кабельного ввода. Толстые жгуты коаксиальных кабелей уходили под пол и в потолочные короба. Её интересовало, откуда на стойки приходит внешняя синхронизация и насколько эта громоздкая схема требовательна к согласованию линий.
Горелов провёл взглядом по врезным замкам на панелях, физическим кнопкам блокировок и чёткой маркировке режимов. Ведомственный порядок был ему понятен: у каждого тумблера есть единственно верное положение, у каждой операции — запись в журнале.
От крайнего пульта отделилась фигура. Мужчина лет сорока, в потёртом коричневом вельветовом пиджаке поверх водолазки, не спешил здороваться. Он неотрывно смотрел на контрольный экран, где чуть подрагивала кадровая развёртка.
Незнакомец поднял руку. Пальцы со въевшимися следами смазки легли на металлический разъём коаксиального кабеля. Короткий поворот ребристого кольца до щелчка. Картинка дернулась и снова ровно встала на место.
Только после этого мужчина повернулся к гостям.
— Из конструкторского бюро? — он говорил хрипловато, перекрывая гул аппаратуры. — Валерий. Старший инженер смены. Звонили, предупреждали.
Олег шагнул ближе к стойке.
— Тимофеев, из КБ «Сфера», — представился Олег. — Нам сказали, у вас есть списанные видеоконтрольные устройства. Хотим понять, можно ли их приспособить к нашей машине.
Валерий хмыкнул. Достал из нагрудного кармана шлицевую отвёртку с прозрачной ручкой и принялся рассеянно крутить её между пальцами.
— Списанные блоки лежат вон там, — он кивнул в дальний угол. — Бумаги подпишем, забирайте. Только пользы от них будет меньше, чем кажется.
— Почему? — Горелов подошёл к работающей сборке. — Аппаратура выглядит надёжной. Если поставить такой блок на стол оператору, получится хорошее рабочее место.
— Перед вами студийный контрольный экран, — Валерий подошёл к ближайшему экрану и постучал костяшкой пальца по толстому стеклу. Звук вышел глухим. — Вы смотрите на лицевую панель и думаете: какая геометрия, какая чистота. Надо брать и подключать.
— Именно так мы и думаем, — сухо подтвердил Горелов.
Валерий коротко усмехнулся. Он перехватил отвёртку поудобнее и указал ей в сторону узкого прохода за аппаратными стойками.
— Пойдёмте.
Они протиснулись за пульты. Гул давил на уши, разговор приходилось вести громче. Температура за стойками оказалась градусов на пять выше: ребристые радиаторы сбрасывали тепло в узкий проход. Задние панели ВКУ скрывались за плотной разводкой проводов. Толстые коаксиальные кабели в чёрной оплётке расходились по медным шинам заземления, тянулись к распределительным коробкам и уходили под пол. В воздухе стоял сухой запах нагретого поливинилхлорида.
— Изучайте, — Валерий обвёл кабельную трассу коротким жестом. — Видите, сколько сюда заведено? Это не домашний телевизор. В самих ящиках стоят видеоусилители и силовые каскады развёрток. Ток в отклоняющих катушках они, конечно, создают, а вот собственных задающих генераторов тут нет. Аппарат полностью ведомый, он сам не решает, когда начинать строку или кадр.
Наташа шагнула ближе к разъёмам.
— У вас внешняя синхронизация.
— Именно. Вся геометрия кадра формируется в аппаратной этажом ниже. Там стоит стойка синхрогенератора. Она выдаёт эталонные импульсы и раздаёт их по кабелям на всю студию. Линии согласованы, сопротивление выверено.
Олег смотрел на толстые жилы и понимал, что забрать такой монитор в лабораторию просто так не выйдет. Без внешней опоры картинка развалится.
Наташа достала блокнот.
— Размах видеосигнала?
— Один вольт на нагрузке семьдесят пять ом, — привычно ответил Валерий. — Синхросмесь отрицательной полярности.
— Амплитуда сигналов основных цветов?
— Стандартная, ноль семь вольта. Титры и графику мы часто пускаем на мониторы напрямую, в обход кодеров.
Ручка Наташи быстро зачеркала по бумаге.
— Олег, мы это не унесём, — она подняла взгляд от записей. — Чтобы зажечь этот экран у нас, придётся собирать внешний блок управления и заново согласовывать линии.
— Подождите, — Горелов прищурился, разглядывая заднюю панель. — Допустим, мы скопируем вашу синхронизацию. Соберём генератор прямо на плате нашей машины и выдадим правильную смесь импульсов. Откажемся от внешней стойки, но возьмём сами экраны. Будут они нормально показывать?
Валерий молча протиснулся обратно к лицевой панели и откинул узкую металлическую планку под экраном. Внутри плотным рядом сидели подстроечные резисторы.
— Это студийное оборудование, — сказал инженер. — Раз в неделю сюда садится техник с осциллографом и полчаса крутит эти ручки. Подтягивает баланс белого, сводит лучи, правит линейность. Кинескоп стареет, режимы уходят от температуры. Хорошая картинка держится на постоянном обслуживании. Без моей кабельной трассы и без техника этот экран через месяц работы уйдёт из нормы.
Горелов наклонился к открытому блоку, разглядывая резисторы.
— К каждой машине специалиста с отвёрткой не приставишь, — произнёс Горелов, разглядывая ряды подстроечных резисторов. — Шасси обязано держать тепловой режим само. Закрыли крышку на заводе, и телевизор работает без еженедельных поверок.
— Значит, ведомственный стандарт отпадает, — кивнул Олег. — Берём УПИМЦТ. Блок развёртки там спроектирован для работы годами в углу гостиной.
Наташа повернулась к инженеру.
— Валерий, вы не могли бы вывести эталонную синхросмесь на двухлучевой осциллограф? — попросила она. —
Валерий кивнул. Щёлкнув тумблером на генераторе телевизионных испытательных сигналов, он подключил щуп через делитель и накинул согласующую нагрузку. На экране осциллографа, поверх масштабной сетки, вспыхнули два зелёных луча. Развёртка зафиксировала картинку, прочертив чёткие, жёсткие прямоугольники.
— Нижний ярус, — телевизионщик коснулся стекла остриём щупа. — Уровень синхронизации. Вот строчный импульс, передняя и задняя площадки. А теперь смотрите, переключаю развёртку… — он щёлкнул галетником на панели прибора, лучи сжались, показывая более длинный интервал. — А вот пошли широкие кадровые синхроимпульсы.
Наташа достала из сумки фотоаппарат «Зенит» с макрокольцом и сделала несколько снимков светящихся графиков в обоих режимах. Затем открыла блокнот, записывая показания вольтметра: размах от уровня белого до низа синхроимпульса.
— Одной крутизны фронта мало, — добавил Валерий. — Телевизор цепляется за порядок. Сначала гашение луча. Потом чёрная площадка. Затем сам синхроимпульс. Ошибётесь с длительностью задней площадки — схема потеряет цветовую вспышку, и кадр посыплется.
Горелов следил за экраном контрольного монитора.
— Сымитируйте сбой генератора, — попросил он.
Валерий крутнул ручку подстройки. Осциллограмма дёрнулась. На ВКУ мгновенно закрутился край картинки, а затем весь кадр пополз вниз.
— Наглядно, — кивнул Горелов. — Значит, если полетит логика самой машины — получим на экране кашу из символов. А если поползёт кадр или уедет геометрия, как сейчас, — виноват видеотракт. Картинка сама покажет, где искать обрыв.
В промёрзшем салоне троллейбуса пахло талым снегом и сырым металлом. Олег прижимал к коленям картонную папку. Внутри лежали листы с вычерченными вольтажами. А в сумке у Наташи лежал «Зенит» с отснятой плёнкой — снимками экранов осциллографа. Готовых мониторов им не досталось, зато теперь они везли с собой физический эталон сигнала.
Наташа глубже засунула озябшие руки в карманы пальто.
— Собери мы макет наугад, — проговорила она, — и первый же расшатанный штекер дал бы нам плавающую сетку. Зато теперь известны точные уровни и размах.
Горелов стоял рядом, крепко держась за верхний поручень.
— Красивая аппаратура, — произнёс он сквозь гул мотора. — Но к ней в комплекте требуются толстые коаксиальные кабели, жесткая термостабилизация и дежурный техник. Такую стойку в серию не пустишь.
Блок питания отладочного стенда в лаборатории КБ издавал тихое монотонное гудение. Алексей Морозов сидел за рабочим столом. Рядом с кальками топологии лежал вскрытый конверт из владимирской школы номер шесть. Учительница прислала официальную благодарность за подаренную машину. Ниже, синими чернилами, школьник Коля добавил свои наблюдения: компьютер плохо читает кассеты, контакты отходят, инструкция слишком сложная.
Дверь открылась, впуская морозный воздух коридора. Олег зашёл первым, стягивая на ходу шарф. Следом появились Наташа и Горелов.
— Готовых мониторов не будет, — Олег положил папку на край стола. — Зато привезли точные замеры эталонной синхросмеси.
Наташа подвинула кальки топологии и разложила листы с таблицами напряжений и временными диаграммами.
— Базой оставляем УПИМЦТ, — подтвердила она. — Студийный генератор держит площадки до и после синхроимпульса с микросекундной точностью. Вот длительности гасящих, вот уровни чёрного и белого. Эту форму нам придётся повторять цифровой частью машины.
Олег наклонился над столом. Пальцы отстукивали быстрый ритм по столешнице — решение уже собиралось в схему.
— Набросаем макет генератора, — рассуждал он вслух, перебирая листы. — Счётчиками поделим тактовую частоту. На выход просится простой резистивный сумматор, он даст нужные ступеньки напряжений. Точные номиналы резисторов и токи отдадим Любе, пусть проверит по нагрузочной способности. Если угадаем, старое телевизионное шасси зацепится за такой сигнал само.
Олег потянулся за карандашом и придвинул чистый лист кальки. Быстрые штрихи ложились на бумагу, складываясь в каскад делителей.
— Синхросмесь собираем здесь на логике, — он обвёл кружком точку слияния выходов счётчиков. — А дальше через резистивный делитель замешаем её с уровнями видеосигнала прямо на выходе.
Наташа пододвинула таблицу замеров вплотную к его наброску.
— Размах полного видеосигнала по нашему эталону равен одному вольту. Синхроимпульс уходит вниз на ноль целых три десятых. Твои вентили выдадут около пяти вольт логической единицы, придётся сильно гасить амплитуду.
Она взяла из стопки осциллограмму со студийными ступеньками и положила поверх кальки Олега.
— Форма правильная, но без точного подбора сопротивлений мы получим мешанину уровней. Селектор в телевизоре просто не распознает, где кончается чёрное поле и начинается обратный ход луча.
Олег оглянулся на соседний стол.
— Люба, глянешь?
Любовь отложила кусачки, стряхнула с халата обрезки монтажного провода и подошла к их краю стола. Олег подвинул ей лист со схемой сумматора.
— Нужно рассчитать токи для этой цепочки, — попросил он. — Нагрузка предстоит нестандартная. Ошибёмся с номиналами резисторов — сорвём телевизору кадровую синхронизацию.
Люба прищурилась, изучая нарисованные квадраты логики и зигзаги сопротивлений. Её палец остановился на нижней линии, к которой сходились все выводы схемы.
— Планируешь повесить возврат видеосигнала на общую цифровую землю? — спросила она, поднимая взгляд на Олега. — Прямо рядом с делителями частоты?
— Так короче.
— Короче будет и путь для помех, — Люба решительно забрала карандаш из его пальцев и перечеркнула линию. — Вся высокочастотная грязь от переключения счетчиков полезет прямиком в телевизор. Получишь рябь вместо картинки. Общий провод для видеовыхода потащим отдельной линией от самого блока питания. Я посчитаю номиналы под входное сопротивление шасси, но разводку делай отдельно.
Горелов обошёл стол и встал рядом с Наташей. Его интересовала жизнеспособность макета в реальных условиях.
— Собрать схему мало, — произнёс он, разглядывая телецентровские графики. — Как макет поведет себя при прогреве? Аналоговый тракт телевизора уплывёт через полчаса работы.
Олег коротко пожал плечами.
— Подстроим.
— В лаборатории подстроишь, — согласился Горелов. — А в учебном классе кто полезет крутить потенциометры? Я бы записал проверку сразу: холодный старт, форма сигнала на осциллографе, потом час прогона под нагрузкой и повторный замер. Все отклонения в Наташину таблицу. Иначе поймаете удачный момент, обрадуетесь, а назавтра аппарат откажется работать.
Морозов всё это время молча слушал, переводя взгляд с инженерных расчётов на лежащее с краю стола письмо Коли. Рядом с идеальными осциллограммами телевизионного эфира эти кривоватые строчки о зажёванных кассетах и отходящих штекерах смотрелись упрямым напоминанием о будущей эксплуатации.
Он прижал ладонью графики.
— Телецентр дал нам хорошую мерную линейку, — сказал Морозов. — От неё и отталкивайтесь. Собирайте макет генератора и отдавайте Любе на выверку по питанию. Первое включение проведете на заведомо исправном телевизионном блоке. Нам нужно подтвердить саму возможность цифровой
Он сдвинул письмо школьника ближе к осциллограммам.
— А когда получите стабильную форму сигнала, перенесёте макет на наш ремонтный фонд. На партию пойдут платы с высохшими конденсаторами и поплывшими параметрами. Ваша схема должна удерживать строчную и кадровую развертку старого УПИМЦТ в обычных бытовых условиях, без дежурного специалиста за спиной.
Горелов, до этого молча изучавший графики, кивнул.
— Студийной геометрии на каждом телевизоре не будет. Картинка будет дышать. Нужна таблица допусков: до каких пределов искажение цвета или уход края считаются допустимыми, а где начинается брак.
Из-за соседнего стола поднялся Громов. Услышав про геометрию, он подошёл ближе.
— Раз картинка будет плавать, мне нужны границы. Какие проверочные поля готовить для железа? Какая нужна сетка для проверки сведения лучей и вертикальные цветные полосы? Мы с Сашей напишем. Только дайте пределы видимой области: столбцы и строки, которые гарантированно не срежет рамка корпуса.
— Дадим, — ответил Олег, не отрываясь от чертежа. — Заложим программный запас по краям, чтобы текст не улетал за скругления экрана.
Морозов сдвинул вычерченные осциллограммы, освобождая место для тетрадного листка.
— Вы равняете схему по эталону, — Алексей прижал письмо ладонью. — Дело нужное. Но работать машина будет не в кондиционированной аппаратной телецентра. Розетки искрят, штекеры отходят, бытовые магнитофоны жуют плёнку. Олег, глянь.
Тимофеев скользнул взглядом по исписанному в клетку листу.
— На студии дежурный просто ткнётся щупом и найдёт просадку, — заметил Горелов, заглядывая Олегу через плечо. — А человек без осциллографа увидит мусор на экране и решит, что мы прислали брак.
— Именно. Железо мы собрали, а методику отдали в виде черновых записок для своих.
Морозов повернулся к программисту.
— Женя, нужен перечень затыков при чтении с ленты.
Громов с шумом выдохнул, не отрываясь от распечаток.
— Лёш, у меня сейчас зеленоградские массивы горят. Надо память под «СЛОЙ-81» распределять. Если я сяду расписывать школьникам, как втыкать кабель в «Маяк», выдам сплошные шестнадцатеричные коды.
— Художественную литературу оставим Анне, — Морозов усмехнулся. — Журналу всё равно нужен материал по частым ошибкам, вот и попросим её сделать толковую рубрику с советами для новичков. От тебя требуется только голая техническая база. Лента тянет, уровень сигнала мал, чтение слетело на середине блока, пошёл неверный заголовок. Сведи это в сухой список, а она уже переведет твой птичий язык на нормальный человеческий.
— Ладно, напишу, — неохотно протянул Евгений.
Тимофеев молча забрал папку с графиками и пошёл к своему стенду. Громов снова склонился над тетрадью. Зашуршали листы документации, щёлкнул тумблер измерительного прибора.
Глава 26
Закрытая комната
Резкий, почти химический запах недавно натертого мастикой пола намертво въелся в пересушенный чугунными радиаторами воздух.
За спиной Алексея тяжело и глухо щелкнул ригель замка. Привычный многоголосый гул институтского коридора — торопливые шаги, металлическое дребезжание тележек с осциллографами, обрывки споров и приглушенные голоса лаборантов — мгновенно отрезало толстым слоем дверной звукоизоляции. Помещение встретило его давящей, искусственной тишиной, сквозь которую пробивался только низкий, тягучий гул электромагнитных дросселей в потолочных светильниках. Одна из люминесцентных трубок мелко подрагивала, раздражая глаза холодным лиловым мерцанием на периферии зрения.
Морозов отлично знал такие казенные, наспех подготовленные к особому режиму кабинеты. Четыре массивных двухтумбовых стола выстроились в центре комнаты строгим прямоугольником. На ближнем к двери краю стола лежал прошитый канцелярский журнал. Косая красная полоса пересекала его картонную обложку от угла до угла. Рядом с выверенной геометрической точностью покоились стопка чистых бланков с типографскими номерами в правом верхнем углу, металлическая коробочка штемпельной подушки и заточенный с обеих сторон карандаш.
У глухой стены замер тяжелый металлический сейф, выкрашенный тусклой мышиной эмалью. Замочную скважину перекрывала откидная дюралевая плашка, прижатая к потемневшему комку пластилина с четким оттиском номерной печати. Тяжелые светомаскировочные шторы на окнах были наглухо задернуты, чтобы полностью отсечь бледный февральский свет, оставляя комнату во власти электрического освещения.
Кремовая коробка аппарата спецсвязи занимала край стола. На ее корпусе отсутствовал диск номеронабирателя — связь устанавливалась только напрямую через коммутатор. Чуть выше аппарата к стене канцелярскими кнопками пришпилили отпечатанную на машинке инструкцию по допуску в помещение. Рядом висел строгий перечень правил сдачи рабочих черновиков. В углу, под столом, стояла специальная проволочная корзина с мелкими ячейками — исключительно для использованной копировальной бумаги, которую запрещалось выбрасывать в обычный мусор.
Седых, вошедший следом за Алексеем, остановился у края стола. Он достал из-под мышки картонную папку с красной диагональной полосой, перетянутую бумажной лентой.
— Распишитесь в карточке формы, Алексей Николаевич, — попросил он, протягивая автоматическую ручку.
Морозов поставил подпись в узкой графе. Седых проверил росчерк, сверил дату, убрал карточку обратно в папку и коротко кивнул присутствующим.
Люди за сдвинутыми столами терялись на фоне пустующих мест. На свободных столешницах аккуратными стопками лежали заведенные личные папки с напечатанными на машинках фамилиями. «Шрамов». «Чернов». «Егорова». «Петраковский». Самих инженеров еще не перевели в этот кабинет. Они завершали передачу текущих гражданских проектов, закрывали лабораторные журналы и проходили последние инструктажи.
Слева от Морозова расположился Горелов. Светлая рубашка тщательно выглажена, манжеты застегнуты на все пуговицы, перед ним на зеленом сукне — чистый номерной лист и разложенный чертеж. Он сидел собранно, готовый к предметной работе. Теперь это был жесткий, дотошный инженер, глубоко понимающий физику процессов на аппаратном уровне.
Прямо перед Гореловым лежал рабочий аппаратный узел. На куске желтоватого стеклотекстолита с рядами просверленных отверстий плотно сидели промышленные кнопки ПКН. От контактов тянулась густая косичка проводов в розовой фторопластовой изоляции МГТФ. В материал платы и стянутый жгут глубоко въелся остаточный запах мастерской — застарелый дух канифоли. Макет попал в закрытую комнату легально: на углу белела приклеенная бирка спецчасти с учетным номером и штампом допуска.
Макет был запитан. К нему аккуратно, через карболитовый клеммник, подключался увесистый лабораторный блок питания, выдающий стабилизированное низкое напряжение. Рядом лежала узкая контрольная планка с миниатюрными лампами накаливания. Горелов заранее согласовал пронос схемы через охрану и теперь методично проверял дребезг контактов, не дожидаясь общей сборки всей машины.
Напротив Ширяев тяжело опирался предплечьями на столешницу. Представитель заказчика перебирал края внутреннего документа с круглыми учетными печатями. От его плотного темного пиджака тянуло крепким табаком, запахом машинного масла и той застарелой канцелярской пылью, которая всегда присутствует в цеховых конторах крупных заводов.
Во главе стола сидел Кирсанов — местный представитель Первого отдела в строгом темно-сером костюме. Именно он лично заверил допуск гореловского макета в эту комнату, строго
— Присаживайтесь, Алексей Николаевич, — голос Кирсанова прозвучал глухо. Толстые стены, плотные жалюзи и отсутствие лишней мебели полностью поглощали звуковые волны, делая слова тяжелыми, лишенными привычного комнатного эха.
Морозов выдвинул свободный стул. Металлические ножки неприятно скрипнули по жесткому казенному линолеуму. Он сел, положив свою секретную папку перед собой, прямо на зеленое сукно. Не стал открывать завязки.
— Начнем с прямого назначения изделия, — Кирсанов раскрыл свою папку, аккуратно перелистнув страницу с перечнем приложений. — Требуется создать расчетно-оптимизационное рабочее место. Назначение сугубо прикладное: рассчитывать раскрой дефицитных материалов, прокладывать маршруты по цехам, проверять планы поставок и комплектовать особые партии. Заказчику не нужна вычислительная игрушка, ему нужен проверяемый производственный инструмент с жестким контролем. Важно четко фиксировать: кто именно сидел за пультом, какая версия алгоритма считала норму, на каком этапе расчёты разошлись с реальностью конвейера и чья подпись стоит под финальным документом.
Иван Михайлович сделал короткую пометку в своем блокноте, не поднимая глаз.
Ширяев шумно выдохнул. Деревянный стул натужно скрипнул. Отложив документ, он уперся широкими ладонями в край столешницы.
— Меня здесь интересует акт приемки и конкретная фамилия виноватого, — пробасил Ширяев. Густой бас заполнил глухую комнату, выдавая многолетнюю привычку перекрывать цеховой шум. — Вы мне тут можете рисовать передовые архитектуры и совместимость. Но у нас на Урале условия производства другие. В моем цеху кузнечный пресс через стенку бьет так, что побелка с потолка сыплется. Рядом сварочные посты гонят в силовую сеть такую высокочастотную помеху, от которой обычные приборы с ума сходят. А оператор стоит в промасленной спецовке.
Ширяев тяжело посмотрел на сидящих за столом, задержав взгляд на Морозове.
— Оператор вбивает цифры длины реза на вашей клавиатуре. Машина прокручивает алгоритм. Распечатывает сопроводительную ведомость на АЦПУ, а параллельно бьет управляющую перфоленту для станка с ЧПУ. Готовая лента уходит в цех, заряжается в оптический считыватель. Резак кромсает дорогую легированную сталь. Жесткие лимиты Госснаба. Если в логике сбой, получаем тридцать процентов брака. Тонны металла в утиль, план сорван. Я прихожу с актом списания. Кто ответит за испорченную партию?
Представитель заказчика постучал толстым пальцем по зеленому сукну.
— Цеховой скажет: я нажал правильные кнопки, это ваша коробка моргнула и добавила лишний разряд от вибрации. Разработчики ответят: аппаратура исправна, рабочий ошибся при вводе в конце тяжелой смены. Мне этот футбол не нужен. Требуется железобетонная гарантия, что ложная команда физически не проскочит на перфоратор. Бумажную распечатку мастер еще может глазами проверить, а перфолента идет прямиком в железо.
Горелов перестал крутить колпачок ручки. Пододвинул к себе кусок желтого текстолита с припаянными кнопками.
— Товарищ Ширяев обозначает абсолютно реальную аппаратную проблему, — произнес Горелов. Он придвинул тяжелый лабораторный блок питания и щелкнул тумблером. Внутри металлического кожуха низко загудел понижающий трансформатор. — Мы договорились о единой архитектуре, Алексей Николаевич. Общие порты ввода-вывода, штатное ПЗУ, базовая система команд. Но стандартная программная обработка прерываний в цеху не выживет. Смотрите.
Инженер взял со стола заранее подготовленную контактную гребенку — кусок жесткой медной проволоки с зачищенными выводами. Прижал один конец к шине питания на текстолитовом макете, а зубчатой стороной с микроскопическими паузами с силой провел по оголенной клемме ввода.
На длинной контрольной планке вспыхнула гирлянда ламп. Желтые, красные и зеленые огни заморгали в рваном ритме, фиксируя дикую, непредсказуемую серию ложных сигналов. Подключенный рядом осциллограф показал хаотичный забор из паразитных всплесков.
— Это имитация искрящего пускателя на соседнем станке и дрожащей руки оператора в плотной брезентовой рукавице, — пояснил Горелов под слабое искрение меди. — Цена вашей универсальности. Базовая МикроДОС честно попытается интерпретировать весь этот электрический хаос как нажатия клавиш. Одно случайное срабатывание, непредвиденный выход в командную строку — и универсальная подпрограмма воспримет системный мусор как новую вводную. Перфоратор послушно пробьет ложную комбинацию отверстий на ленте. Станок отработает команду. Резец въедет в шпиндель.
Лампы продолжали хаотично вспыхивать под рукой Горелова. Ширяев мрачно кивнул, глядя на пульсирующий свет.
— Чтобы исключить самодеятельность, мне нужна отдельная программно-аппаратная оболочка, — Горелов отложил гребенку в сторону. — Специализированная машина и свой загрузчик. Жесткие бланки ввода прямо на экране, разрешенные поля и глухие служебные режимы. Никаких ваших общих прерываний и циклов ожидания. Только целевой аппаратный фильтр и закрытый формат.
Морозов смотрел на медленно остывающие нити накаливания.
— Логика заказчика понятна, Андрей Витальевич, — ответил Морозов. В низкое гудение трансформатора вклинился шум приточной вентиляции. — Операторский контур цеха действительно требует жестких рамок. Специализированная оболочка нужна.
Ширяев с шумом выдохнул и тяжело оперся на стол, собираясь возразить против усложнения программы, но Морозов поднял ладонь, останавливая его.
— Но эта закрытая оболочка не должна превращать «82В» в несовместимую машину. Мы ставим вашу защиту, фиксируем формат бланков и аппаратно глушим лишние клавиши. Однако ваша надстройка должна работать исключительно поверх общего профиля, а не вместо него. Базовый опрос клавиатуры, стартовый тест памяти и вывод на экран остаются штатными.
Морозов коснулся пальцами края текстолитовой платы, очерчивая невидимую границу модулей.
— Векторы прерываний и системные вызовы не меняются. Мы закладываем на системной шине специальный управляющий сигнал блокировки. Вы получаете свое ПЗУ-82В на съемной кросс-плате. Вставили её в разъем — аппаратный дешифратор физически гасит выборку базового гражданского кристалла с МикроДОС и жестко подставляет процессору свои адреса. Машина стартует в вашей абсолютно глухой среде, даже не подозревая о существовании гражданской ОС.
Алексей перевел взгляд на Ширяева.
— Но ядро остается нашим. Вытащили вашу плату — машина снова стала стандартной. Если на станке произойдет глухой сбой, придет заводской электронщик. Он просто вынет вашу секретную плату из слота, подключит сервисный дисковод или загрузит общую диагностику со стендовой перфоленты. Машина штатно прогонит свои тесты и покажет, жива ли физически память, процессор и порты. Нам не нужно плодить зоопарк из десятка несовместимых материнских плат под каждый завод, мы делаем режимную надстройку поверх серийного железа.
Горелов прищурился, оценивая предложенный маршрут сигнала. Технически плата усложнялась, требовала дополнительных корпусов жесткой логики для перехвата шины, но изящно сохраняла абсолютную совместимость базового устройства.
— А кто за этот бутерброд из дополнительных плат распишется? — насупился Ширяев. Его совершенно не интересовали адреса портов и изящество дешифраторов, его интересовала юридическая ответственность. — И за чей счет банкет? Эти ваши платы аппаратного ключа стоят денег. У меня смета не резиновая.
Виктор Петрович Седых,
— Расчетная стоимость модуля ПЗУ-82В будет проведена по отдельной статье как средства производственной автоматизации, — ровным, бухгалтерским тоном пояснил Седых. — Завод оплачивает только специализированную надстройку и защищенный корпус, а саму базовую микро-ЭВМ мы проводим по унифицированному тарифу. Это сэкономит вам, товарищ Ширяев, минимум треть ведомственных фондов по сравнению с разработкой уникальной стойки ЧПУ с нуля.
Ширяев тяжело засопел, но цифры экономии явно смягчили его настрой.
— Допустим. Но где гарантия, что ваш аппаратный фильтр сам по себе не исказит расчет? Кто ответит за сбой?
Алексей посмотрел на пустующий край стола, затем перевел взгляд на Кирсанова.
Морозов притянул поближе толстый прошитый журнал с красной полосой. Жесткий картон обложки привычно шурхнул по зеленому сукну. Алексей открыл нужный раздел, пролистнув несколько уже заполненных листов, и нашел чистую строку.
— Для этого у нас есть Журнал отклонений, — сказал он. — Любое аппаратно-программное отличие от общего профиля вносится сюда до внедрения. Указываем суть, причину и способ отката назад. Контрольный набор докажет, что ваша закрытая оболочка решает проблему цеха, но не ломает базовую систему команд.
Иван Михайлович перестал писать в блокнот.
— Нашему КБ необходимо точно знать каждый узел, где расчетная машина расходится с базовой сборкой, — произнес он, поддерживая Морозова со стороны администрации. — Если пустить в цех индивидуальные поделки под каждую задачу, мы тут захлебнемся в их сопровождении. Журнал локализует такие места. Отклонение зафиксировано, проверено и привязано к конкретному блоку.
Кирсанов согласно кивнул.
Кирсанов сделал отметку в своем бланке.
— Согласовано. Аппаратные доработки фиксируются под роспись и проверяются контрольным набором.
Горелов подвинул к себе лист с наброском макета, чиркнул ручкой прямую линию на полях.
— Я принимаю процедуру. Сигнал от моей защелки пойдет через базовый порт. Но предупреждаю: если штатный алгоритм не выдержит ритма прерываний или не заметит обрыв линии при вибрации, я остановлю прогон. Потребую изменить цепь опроса, добавить аппаратный контрольный вход или полностью обойти вашу адресацию. И сделаю это строго по вашим правилам, Алексей Николаевич. Через следующую запись в журнале.
— Договорились, Андрей Витальевич. Готовьте макет к тестам.
— Каждое изменение интерфейса или формата обязано иметь режимную ссылку на страницу в этой книге, — веско добавил Кирсанов. — Самовольная смена системных вызовов без записи запрещена. Вечером бумаги сдаются в спецчасть или запираются в ваш сейф.
Ширяев тяжело засопел, разглядывая прошитый суровой ниткой корешок.
— Здесь будет стоять фамилия человека, который потребовал изменить штатный порядок под цех?
— Фамилия инициатора и подпись проверяющего, — подтвердил Морозов. — Плюс четкий контрольный набор тестов.
— Годится, — отрезал Ширяев. — Если машина выдаст брак на конвейер, я открою эту страницу и найду с кого спросить за ущерб. Запись делаем строго до вмешательства в код или схему.
Кирсанов невозмутимо закрыл толстую папку, подводя черту под многочасовым обсуждением.
— На этом организационная часть закончена. Товарищи, прошу сдать рабочие материалы.
Начался строгий, отработанный ритуал. Горелов выключил лабораторный блок питания, трансформатор гулко щелкнул и затих. Инженер аккуратно отсоединил провода, свернул их кольцом и уложил макет в специальный короб. Липатов передал Ивану Михайловичу свои выписки, которые тут же исчезли в недрах номерной папки с красной полосой.
Седых собрал бланки и подошел к сейфу. Кирсанов лично проконтролировал, как документы легли на стальную полку. Каждое отклонение от базового чертежа, каждый новый системный вызов отныне становились номерным документом, получающим свой децимальный номер в архивах спецчасти. Тяжелая дверца захлопнулась с лязгом, отдавшимся в полу пустой комнаты. Представитель первого отдела взял металлическую печать, подышал на нее и с силой вдавил в податливый комок пластилина поверх опущенной плашки.
— Свободны, товарищи.
Они выходили по одному. Морозов шагнул за порог, и толстая дерматиновая дверь тут же отсекла мертвую тишину спецкомнаты.
На Алексея мгновенно обрушилась привычная какофония института. Где-то на лестничной клетке громко спорили технологи, пронзительно трезвонил дисковый телефон, из открытой двери соседней лаборатории тянуло сладковатым дымом канифоли и доносился резкий, рваный визг перфоленты, прогоняемой через скоростной считыватель. После стерильного, пропитанного мастикой воздуха закрытого кабинета здесь было шумно, суетливо и по-настоящему живо.
Иван Михайлович поравнялся с Морозовым, когда они свернули в сторону лестницы. Старый инженер шел чуть ссутулившись, заложив руки за спину.
— Ты выстроил забор, Лёша, — негромко произнес Михалыч, глядя себе под ноги. — Хороший, крепкий забор. Журнал отклонений, съемное ПЗУ. Архитектуру ты сегодня отстоял. Ширяев с Кирсановым успокоились, потому что увидели понятные им бумажные рамки.
— Это не просто бумажные рамки, Иван Михайлович. Это единственный способ не дать растащить «Сферу» на удельные княжества.
— Знаю, — вздохнул Михалыч. — Только ты не обольщайся. Это по бумагам всё красиво. А на практике нам теперь под эти съемные платы ПЗУ-82В придется выделять отдельную линию сборки, перекраивать лимиты на разъемы и логику. И Горелов — мужик хваткий. Он твой забор теперь будет на прочность проверять каждый день. Любой сбой, любая наводка в цеху — и он будет требовать внести в журнал новую аппаратную защиту. Будет откусывать от базовой архитектуры по кусочку, совершенно легально, под подпись. Успеешь уследить?
— Успею, — жестко ответил Морозов. — Горелов проверяет на прочность не из вредности, а потому что железо в цеху должно выживать. Его дотошность нам только на пользу. Если базовая шина «Сферы-82» выдержит его издевательства с гребенкой и искрением, значит, гражданские машины в школах будут работать годами.
Они подошли к дверям своей лаборатории. За матовым стеклом угадывались силуэты: Олег Тимофеев опять что-то горячо доказывал Наташе у кульмана, размахивая линейкой.
Морозов взялся за холодную латунную ручку и толкнул дверь. Рабочий шум КБ окатил его с головой.
Громов, сидевший над сплошной простыней распечаток шестнадцатеричных кодов, мгновенно поднял голову. Под глазами программиста залегли глубокие тени, но взгляд оставался цепким.
— Ну как? — спросил Евгений, откладывая карандаш. В его голосе сквозило напряжение человека, ожидающего, что его код прямо сейчас заставят переписывать с нуля. — Расстреляли нашу архитектуру? Заставили делать им отдельную операционную систему под военную приемку?
— Нет, Женя, — Морозов прошел к своему столу и бросил на него пустую гражданскую папку. — Систему мы пишем одну. Просто мы выдали им отдельную песочницу со своими игрушками. Они получают приоритетный разъем расширения и пишут туда свой глухой код. А системные вызовы и порты остаются нашими.
Громов на секунду замер, переваривая услышанное, а затем
— Блестяще, — выдохнул программист, возвращаясь к распечаткам. — Пусть городят в своих платах что хотят. Главное, что ядро останется чистым.
Алексей сел на стул. Единого монолита из «Сферы» больше не было, но и распада на несовместимые острова не случилось. Появилась система шлюзов. Тяжелая, бюрократическая, требующая кучи подписей, но она давала гражданской машине законное право на жизнь. Закрытая комната «82В» осталась позади, подчинившись общим правилам.
Глава 27
Кофейная: как написать слой
Громов постучал тупым концом карандаша по колонке цифр. Широкая простыня распечатки с результатами утренней трансляции занимала половину выцветшего канцелярского стола. Рядом с перфолентой лежала распечатка Ланской и набросанная от руки карта адресного пространства «Сферы-82».
В бывшей кладовке, заставленной тяжелыми стеллажами из стального уголка, густо пахло свежемолотым зерном. Ручная мельница примостилась на самом краю столешницы. Морозов налил себе кофе. Громов плеснул в кружку молока — стеклянная бутылка как раз согрелась в эмалированном ковшике с горячей водой.
— Транслятор Беспалова отработал, — Громов сдвинул край распечатки. — Базовые структуры собрались в объектный модуль без ошибок. Но посмотри на итоговый объем.
Громов с нажимом обвел итоговую сумму.
— Шесть байт на каждое прямое обращение к массиву. Восемь байт на элементарный сдвиг указателя, — Громов ткнул пальцем в колонку ассемблерного листинга, который компилятор выдал на экран. — Смотри сюда. Транслятор языка Си писался под архитектуры, которые умеют аппаратно работать со структурами. А наш К580 этого не умеет, у него нет базово-индексной адресации. Чтобы сдвинуть указатель на следующий прямоугольник, твой хваленый компилятор не использует простую команду инкремента. Он кидает адреса в стек, делает вызов внешней арифметической подпрограммы, вычисляет смещение, потом вытаскивает результат обратно…
Громов раздраженно отпил молока.
— Программа переводит твой синтаксис, но если я пущу этот сгенерированный код в плотный цикл на проверку десяти тысяч пересечений, процессор просто захлебнется в пересылках стека. Машина встанет колом.
Морозов сделал глоток. Кофе получился отличным — крепким, без малейшей горечи.
— Зато этот текст скомпилировался за две минуты, и логика проверки прозрачна как стекло, — парировал Алексей. — Женя, мы не можем писать весь «СЛОЙ» на чистом ассемблере, мы утонем в отладке. Правило простое: мы пишем общую структуру на Си. Ищем узкое место — ту самую функцию, которая сжирает девяносто процентов времени на пересечениях. И вот ее, одну-единственную, ты переписываешь вручную на идеальном ассемблере, подменяя стандартную библиотеку компилятора.
Громов нахмурился, обдумывая этот подход. Комбинирование языков было не самой привычной практикой, но оно решало проблему сроков.
— Допустим. Вынесем математику пересечений в ассемблерный модуль. Но оперативной памяти он нам не прибавит.
— Значит, новые машины надо собирать сразу с полным адресным полем, — сказал Морозов. — Выжимать все шестьдесят четыре килобайта.
— Текущий живой стенд работает на тридцати двух, — напомнил Громов. — Новая полная карта — это дополнительные банки памяти, старшие адресные линии, усложненная дешифрация и увеличенная нагрузка на шину. Нам нужна абсолютная стабильность и одинаковость всех новых плат. Транслятор генерирует объемный код, а мы еще ни одной координаты с гибкого диска не считали. А дисковод ИЗОТ, между прочим, читает сектора не со скоростью света.
— Файл Каца придется читать порциями, — Алексей поставил кружку на стол.
— Файл Каца — это просто свалка координат, — отрезал Громов. — Чтобы читать его порциями по оси X, как ты хочешь, данные должны быть отсортированы слева направо. А топологи так не рисуют. Значит, до твоей красивой проверки на Си мне придется написать грубый сортировщик. Она будет заглатывать сырой массив с дискеты, сортировать прямоугольники в памяти и писать обратно на диск временные файлы. Мы упремся в физику магнитных головок.
Морозов кивнул, признавая проблему.
— Си удобен для описания структур данных, таблиц и общей логики, Женя. Нам проще оперировать терминами: слой, зазор, контактная площадка. Язык берет на себя рутину: мы видим размер записи и обращаемся по указателям, не высчитывая физическое смещение адреса в уме.
Громов скрестил руки на груди.
— Критичные участки, буферы, побайтовый ввод-вывод — это ассемблер, — подтвердил Морозов. — Куски, где важен каждый байт. Но общая структура «СЛОЯ» и форматы обмена остаются на Си.
— На бумаге всё выглядит красиво: общая логика на Си, узкие места на ассемблере, — протянул Громов. — А неприятности начнутся на стыке. Там, где пойдут вызовы функций, работа с памятью и соглашения о передаче параметров.
Морозов придвинул к себе распечатку Ланской. Страница пестрела карандашными эскизами печатных проводников. На мелкой сетке миллиметровки пересекались два прямоугольника.
— Давай от споров к рабочему примеру, — Морозов обвел ручкой узкую светлую полоску между фигурами. — Строгое зеленоградское правило. Минимальный допустимый зазор между двумя трассами на этом слое — две десятых миллиметра.
Он вывел на полях цифры «0,20».
— Плюс технологический запас на боковое подтравливание меди в ванне, — добавил он. — Три сотых. Итого — ноль двадцать три.
Морозов записал сумму рядом с эскизом.
— Нам нужно превратить это правило в числовую таблицу, — Морозов перевернул страницу. Ручка заскользила по бумаге, выстраивая колонки. — Первый байт — номер слоя. Второй байт — код проводимой проверки: замыкание, обрыв или нарушение зазора.
Громов наклонился ближе к столу.
— Дальше переводим миллиметры в целые единицы координатной сетки, — диктовал Морозов. — Дробная арифметика здесь не нужна. Это еще два байта.
— Четыре, — подсчитал Громов.
— Один байт на запас по травлению. Один байт — битовая маска свойств: флаг метки совмещения, признак контакта, маркер цепи питания.
— Шесть.
— И два байта под номер исходной строки из зеленоградского файла. — Морозов дважды подчеркнул последние цифры. — Иначе, найдя ошибку, мы не сможем объяснить топологам, где она находится на ватмане.
— Восемь байт на запись, — прикинул в уме Громов. — Тысяча правил уложится в восемь килобайт ОЗУ.
— Именно.
— Вполне приемлемо, — кивнул Громов. — Но это статический справочник. В реальной работе мы получим стопку гибких дисков с десятками тысяч координат. Причем мы понятия не имеем, в каком порядке зеленоградские операторы вбивали эти отрезки.
Он придвинул к себе чистый лист.
— Потребуется первый проход. Считываем текстовый файл построчно. Номер слоя, координаты, контрольное число. Мой модуль сверяет арифметическую сумму кодов с числом Каца. Это гарантирует только то,
Громов быстро набросал схему на бумаге.
— После проверки строки придется переводить текст в двоичный формат и раскладывать записи. Группировать по слоям, строить компактный индекс в памяти. Здесь работает чистый ассемблер.
— А проверка геометрии? — спросил Морозов.
— Вычисляем прямоугольник охвата для каждого отрезка: минимальные и максимальные значения по осям. Точную математику запускаем только при пересечении рамок. Сверяем с таблицей правил. Нашли нарушение — формируем запись в журнал.
Морозов кивнул. Он провел длинную горизонтальную линию под схемой Громова.
— Проблема в масштабах топологии, — произнес он. — Платы огромные, записей сотни тысяч. Даже в полные шестьдесят четыре килобайта целый слой со всеми деталями не влезет. Значит, мы обязаны резать проверку на координатные окна.
Морозов отметил на линии два штриха.
— Берем узкое окно. Например, по оси икс от тысячной координаты до тысячи четырехсотой. Грузим отрезки, проверяем. Но резать встык нельзя.
Он нарисовал два параллельных отрезка, пересекающих отметку «1400».
— Разорвем проводник, — кивнул Громов, постучав карандашом по нарисованной границе. — Программа проверит левую часть, потом правую, а замыкание прямо на линии разреза пропустит.
— Значит, нужно перекрытие, — Морозов забрал карандаш и добавил к чертежу еще одну вертикаль. — На величину максимального зазора.
— Именно. Грузим окно от тысячи до тысячи четырехсот. Но реальную проверку ведем только до отметки тысяча триста восемьдесят.
— Оставшиеся двадцать единиц уходят в буфер, — Морозов провел тонкую черту под колонкой цифр.
— Мертвая зона, — согласился Громов. — При следующем проходе загрузка стартует не с тысячи четырехсот. Мы откатываемся назад и захватываем этот край заново. Да, машина прожует границу дважды, тратя машинное время, зато мы не упустим контакт на стыке.
Он сделал короткую запись в рабочей тетради: «Двойной буфер на краях. Откат».
Дверные петли коротко скрипнули. В комнату шагнул Птицын, постукивая указательным пальцем по пустой фаянсовой кружке.
— Сетку прогнал, — с порога сообщил он, направляясь к раковине у противоположной стены. — Луч ровный, без перекосов. Цвет пока отложил, жду, когда видеовыход допаяют.
Пустив холодную воду, он сполоснул кружку, стряхнул капли и покосился на разложенные по столу листы с пересекающимися отрезками.
— Пойду собирать макет сопряжения, — Птицын перекрыл кран. — Слушайте, я хотел узнать: когда вы свой файл с геометрией читаете, как проверяете, что кусок пришел целым? У меня пакеты по кабелю иногда бьются из-за рассинхронизации. Автомат приема просто виснет, бесконечно ожидая хвоста данных. У вас там в конце блоков есть проверка целостности?
Громов, не отрываясь от таблицы технологических допусков, ответил:
— Мы обязательно проверяем, чтобы файл с данными не побился. Раз при чтении аппаратура может давать сбои, то у нас там контрольная сумма есть.
— Прямо как с твоим обменом, Саша, — Морозов отложил карандаш. — Сначала убеждаемся, что байты прочитались без порчи. А уже потом программа разбирает смысл: пересекаются трассы или нет.
Птицын оперся бедром о подоконник, разглядывая белое дно чистой кружки.
— Значит, нужно жестко отсекать испорченные пакеты, а не пытаться их склеить? — Птицын вытащил из кармана рубашки сложенный вчетверо листок бумаги с набросками автомата приема. — Я сейчас расписываю логику работы порта. А если на середине происходит помеха на линии, машина глотает мусор и застревает в цикле ожидания.
Громов оторвал взгляд от распечатки Ланской и посмотрел на измятый листок.
— У тебя автомат виснет, потому что ты пытаешься ловить голые байты в потоке, — пояснил Громов, отодвигая распечатку Ланской. — Заверни их в конверт. Установи стартовый байт, уникальный маркер, например, шестнадцатеричное «7E». За ним — байт длины пакета. Потом сами данные. И в самом конце — контрольную сумму. Аппаратный контроллер порта ВВ51 умеет ловить ошибки кадра. Если приемник видит сбой синхронизации, или итоговая сумма не сошлась — не пытайся угадать, что тебе прислали. Весь конверт немедленно летит в мусорную корзину.
Громов указал карандашом на бумажку Птицына.
— Брось рисовать эти бесконечные ветвления. В голове все переходы автомата при сбоях не удержишь. Сделай нормальный программный журнал обмена. Выдели область в памяти, выводи на экран каждое изменение статуса: «старт», «прием», «ошибка КС», «таймаут». И посади прерывание на аппаратный таймер. Если передатчик замолчал и следующего байта нет больше ста миллисекунд — печатай код ошибки и немедленно сбрасывай регистр приемника в исходное состояние. Сеть не должна вешать машину.
— И напиши короткий стресс-тест, — добавил Морозов. — Напиши программу, которая будет намеренно гадить в линию. Отправь себе заведомо искаженный байт, нарушь контрольную сумму или искусственно обрежь пакет на середине. Посмотри, как твоя программа из этого выберется. Отработает она сброс или снова намертво повиснет. Тебе нужен четкий протокол поведения при авариях, а не гадания на зависших регистрах.
— Понял, сделаю, — Птицын спрятал листок обратно в карман. — Журнал кодов сбоя и таймер сброса.
Он кивнул, на ходу вполголоса бормоча последовательность команд для инициализации порта, и присел на край соседнего стола.
Дверь снова скрипнула. На пороге появились Володя и Зоя. Зоя положила поверх чертежа бланк комплектовки, густо исписанный инвентарными номерами.
— А со склада микросхемы выдали на полную набивку, — пояснила она. — Вместе с блокировочными конденсаторами. Нам бы сразу решить, какой лист брать. Если по старой схеме оставим пустоты, а потом скажете допаивать — опять текстолит греть и грязь разводить.
Громов отодвинул стопку распечаток.
— Никаких пустот, запаивайте сплошным массивом, — распорядился он.
Морозов перехватил растерянный взгляд лаборанта. Володя смотрел на бланки комплектовки с легкой опаской.
— Новые машины собирайте сразу на полные шестьдесят четыре килобайта, — распорядился Алексей. — Нам под зеленоградский проект нужен весь объем, до последнего байта.
— Ру-третьи ставим? — деловито уточнил Володя, имея в виду микросхемы динамической памяти К565РУ3. — Это же тридцать два корпуса на плату. Плюс к ним мультиплексоры шины адреса КП2 и жесткая логика регенерации. Если всё это запаять вплотную, на текстолите живого места не останется.
— Именно их, — подтвердил Громов. — Тридцать два корпуса. И учти: динамическая память при стробировании строк и столбцов дает дикие иголки по питанию. Проследи, чтобы Зоя впаяла блокировочные керамические конденсаторы КМ прямо на ноги питания каждого второго чипа. Сэкономите на керамике — память начнет сыпать случайными ошибками от собственных же помех.
— Как закончите пайку, — добавил Морозов, — пройдитесь осциллографом по старшим адресам и
Володя кивнул, достал из нагрудного кармана шариковую ручку и сделал жирную отметку на полях журнала.
— Понял. Значит, запаиваем тридцать два корпуса динамики, мультиплексоры и глушим всё конденсаторами по питанию. Без пустых мест и экспериментальных каскадов.
— Какую версию платы ставить в документации для учета? — спросила Зоя, занося ручку над бланком комплектовки.
— Пиши «Ноль-три, базовая», — ответил Морозов. — Все последующие эксперименты с расширением памяти поведем отдельной веткой, когда программное ядро проверки слоев будет полностью отлаженным.
Володя выпрямился, закрывая журнал. Он оглянулся и глубоко втянул носом воздух. В тесной комнате, среди металлических стеллажей со списанными приборами и высоких стопок технической документации, густо и уютно пахло кофе.
— Знаете, — Володя смущенно улыбнулся, разглядывая прикрученную к полке массивную ручную мельницу с потемневшей медной воронкой. — У вас здесь запах точь-в-точь как у моего отца в ванной, когда он там лабораторию разворачивает. Красный фонарь горит, в кюветах вода поблескивает, мокрой фотобумагой несет, фиксажем… и кофе. Прямо один в один.
Птицын, до этого момента изучавший таблицу состояний линейного приемника, удивленно поднял голову от бумаг.
— У тебя отец фотограф? А откуда там кофе взялся?
— Любитель, — Володя переступил с ноги на ногу, прижимая к груди пухлый монтажный журнал. — Вечно что-то изобретает по вечерам. Одно время сильно увлекся экспериментами с тонированием снимков. Сначала шла обычная проявка, промывка, а потом он брал готовые влажные отпечатки и долго держал их в крепчайшем растворе кофе с пищевой содой. Добивался теплого коричневого оттенка. Картинка выходила очень контрастной, с глубокими темными тенями. Он там часами запирался, елозил пластиковым пинцетом по ванночкам. У нас тогда весь коридор насквозь пропах баритовой бумагой, кислым уксусом и кофейной гущей.
Громов хмыкнул, тяжело откинулся на спинку скрипучего стула и сцепил руки на затылке, разглядывая потолок.
— Шикарная идея. Именно этим я и займусь на пенсии. Если доживу.
Дверь снова приоткрылась. На пороге появилась Люба с пустой чашкой в руках.
— Доживёшь, куда ты денешься, — сказала она, ставя чашку на металлическую полку.
Громов потер затылок, усмехнулся и снова подался к столу. Он сгреб перфоленту и распечатку, глядя на Морозова уже без улыбки.
— Так, воспоминания в сторону. Мне нужен новый прогон. Дай мне окончательные допуски по зазорам, я пересоберу структуру данных и посмотрю размер кода. Нужно знать, сколько памяти это сожрет в реальности. Иначе мы просто не влезем.
Птицын похлопал по карману с набросками.
— Можно я после обеда займу машину на короткий прогон программы обмена?
Громов махнул ему свернутой лентой: сначала тест обмена, потом таблица прямоугольников, и чтобы результаты легли в одну папку, а не расползлись по тетрадям. Володя дождался, пока Зоя допишет номер версии, и шагнул к двери. Морозов придвинул к себе общую тетрадь Ланской и аккуратно перевел миллиметровый допуск технологической метки совмещения в целые единицы координатной сетки.
Глава 28
Находка
Шаговый двигатель ИЗОТа издавал звуки, похожие на работу бормашины, застрявшей в плотной кости. Тяжелые магнитные головки с лязгом перемещались по направляющим, выискивая нужные сектора на восьмидюймовой дискете. Гудение трансформатора блока питания сливалось с этим ритмичным хрустом, заполняя тесное пространство лаборатории механическим напряжением.
Громов сидел перед мерцающим экраном «Сферы-82», наглухо скрестив руки на груди. Он не сводил глаз с тусклого зеленого индикатора обращения к диску. Его написанная на ассемблере утилита прямо сейчас пережевывала сырой массив координат, привезенный из Зеленограда. Программа заглатывала текстовый мусор, выискивала привязки, резала общую площадь кристалла на координатные окна и мучительно медленно, сектор за сектором, укладывала отсортированные данные во временные файлы обратно на магнитный носитель.
Морозов стоял у окна, прислонившись плечом к холодной раме. В руке он держал фаянсовую кружку с давно остывшим кофе. Наблюдать за работой ИЗОТа было физически тяжело. Дисковод казался неповоротливым чудовищем, чья механика отчаянно не поспевала за кремниевой логикой микропроцессора.
На соседнем столе, отделенном от цифровой зоны баррикадой из коробок с радиодеталями, кипела совершенно иная жизнь. Там пахло жженой канифолью и остывающим гетинаксом. Шасси УПИМЦТ было полностью обесточено. Олег, закатав рукава фланелевой рубашки, придирчиво осмотрел плотную пайку, затем выдернул вилку паяльника из розетки и со звоном бросил инструмент на металлическую подставку. Для надежности он коснулся отверткой выводов высоковольтного конденсатора, сбрасывая остаточный заряд.
— Да кто так льет припой, руки бы оторвать, — пробормотал Олег, вытирая лоб тыльной стороной ладони. — Заводская пайка, называется. Пятак холодный, дорожка отслаивается. Всё, контур перепаял, развязка готова. Теперь можно включать.
Только убедившись, что руки Олега убраны от платы, Наташа щелкнула тумблером ЛАТРа, плавно подавая питание на шасси. Тяжелый телевизионный трансформатор загудел.
Андрей Горелов, стоявший у края стола с распечаткой допусков, удовлетворенно кивнул.
— Грамотно. В закрытом контуре за ковыряние под напряжением я бы сразу лишил допуска, — произнес он своим ровным, лишенным эмоций голосом. — У вас умножитель напряжения в двадцати сантиметрах от руки. Одно неверное движение с паяльником при включенной сети, и вас бы током к противоположной стене отбросило.
Наташа проигнорировала его ремарку, хотя была с ней полностью согласна. Она стояла сбоку, педантично перекидывая щупы осциллографа по контрольным точкам ожившего видеотракта. Ее лицо выражало абсолютную профессиональную отстраненность.
— Уровень черного плывет, — констатировала она, глядя на экран прибора. — Тимофеев, ты землю на блоке цветности точно нормально закрепил? У нас от самодельного генератора идеальная синхросмесь идет, телецентр позавидует. А на входе в шасси фронты всё равно заваливаются.
— Железобетонно закрепил, — огрызнулся Олег. — Значит, высохла переходная емкость. Выключай питание, буду искать этого дохляка.
Их аналоговая возня — с реальными напряжениями, пробитыми конденсаторами и строгими правилами безопасности — создавала разительный контраст с невидимой математической битвой, идущей внутри процессора К580. Олег, Наташа и Горелов пытались заставить старое телевизионное железо стабильно держать цветной кадр. А в нескольких метрах от них Громов пытался заставить магнитные головки не захлебнуться в потоке координат.
Дисковод издал финальный, особенно громкий удар позиционером. Красный светодиод на передней панели моргнул и погас. Шпиндель продолжил вращаться с тихим шелестом, но лязг прекратился.
Громов шумно выдохнул, разворачиваясь на стуле. Он потер покрасневшие глаза.
— Отсортировал, — голос программиста звучал хрипло. — Массив готов и разбит на окна с учетом перекрытия. Мертвые зоны учтены.
Алексей отставил кружку на подоконник. Подошел к рабочему столу.
— Ни одного сбоя
— Ни одного, — Громов ткнул пальцем в экран, где застыла сухая статистика прогона. — Аппаратная часть отработала чисто. Формат переварили. Твой выход, Алексей Николаевич. Посмотрим, как твой хваленый Си справится с геометрией.
Морозов опустился на скрипнувший стул. Пальцы легли на тугие, высокие клавиши. Он набрал имя второго исполняемого файла — модуля математической проверки. Модуля, который должен был взять подготовленные окна и наложить на них правила из таблицы допусков.
Палец нажал Ввод.
* * *
Программа стартовала без малейшей задержки. Если утилита Громова боролась с физикой магнитного диска, то код Морозова работал исключительно в оперативной памяти.
Экран ожил. Сверху вниз побежали строки шестнадцатеричных адресов — номера обрабатываемых окон. Цифры мелькали с такой скоростью, что сливались в сплошной водопад.
Процессор брал массив прямоугольников, вычислял расстояния между их границами, сверял результат с минимальным зазором в ноль целых двадцать сотых миллиметра и переходил к следующему блоку.
Громов подался вперед, опираясь руками о край стола. Скорость вычислений завораживала. То, на что топологи с микроскопами тратили недели, выжигая глаза над светящимися столами, машина делала за минуты.
Водопад цифр на экране замер. Дисковод ИЗОТ коротко щелкнул, сохраняя итоговый файл на магнитный диск, и окончательно затих.
На дисплее высветилась финальная строка:
`CHECK COMPLETE. FOUND: 4. SAVED TO LOG.TXT`.
Громов вцепился пальцами в край стола. Лицо его начало медленно меняться. Ироничный прищур исчез, уступив место растерянности, а затем — нарастающей тревоге.
— Четыре? — голос программиста сорвался на злой шепот. — Лёш, у нас в контрольном задании Ахметова ровно один дефект. Пресловутый 47-бис. Откуда четыре⁈
— Выведи на экран, — спокойно попросил Морозов.
— Выведу, — огрызнулся Евгений, яростно набивая команду чтения текстового файла. — Как же нам не хватает своего, пусть самого паршивого принтера в КБ! А теперь нам придется бежать в ВЦ с дискетой наперевес, кланяться операторам больших машин и просить распечатать этот текстовик на их АЦПУ, чтобы было с чем ехать в Зеленоград.
Экран моргнул. На люминофоре проступили четыре строки координат. Первая точно совпадала со списанным в Зеленограде браком. Три остальные указывали на совершенно другие полигоны.
— Ну? — не выдержал Олег, обернувшись от своего стенда. — Нашла железяка зеленоградский дефект?
— Контрольный она нашла, — глухо произнес Громов, не отрывая взгляда от монитора. — Совпадает до микрона. Но программа выдала еще три ложных замыкания. Которых нет в ведомости Зеленограда! Ахметов нас на смех поднимет. Скажет, генератор случайных чисел привезли, а не систему контроля.
Алексей не ответил. Он выдвинул верхний ящик стола и достал тяжелый рулон кальки — ту самую копию фрагмента топологии, которую они с боем вывезли из Крюково.
— Освободите стол, — скомандовал Морозов.
Олег, Наташа и Горелов подошли ближе, чувствуя смену настроения. Наташа молча сдвинула в сторону пустые коробки. Алексей раскатал плотную полупрозрачную бумагу, прижав углы тяжелыми справочниками.
— Женя, давай проверять.
— Дай я сам проверю, — Громов решительно отодвинул Морозова от клавиатуры. — Я не верю абстрактным переменным твоего транслятора. Я хочу видеть голые байты, которые зашли в память.
Программист мгновенно сбросил систему, загрузил низкоуровневый системный монитор и вбил адрес смещения первого подозрительного блока из исходного массива Каца. На экране появилась строгая матрица сырого машинного кода.
Следующие двадцать минут в лаборатории стояла абсолютная тишина. Морозов находил на огромном чертеже первую лишнюю координату, выданную машиной. Это был участок плотной трассировки, где два широких полигона проходили рядом, огибая контактную площадку. На глаз расстояние между ними казалось совершенно нормальным.
Затем он диктовал номера полигонов Громову. Тот, щурясь на экран, выхватывал из шестнадцатеричной каши нужные байты.
— Смещение ноль-восемь, — диктовал Громов, переводя в уме шестнадцатеричные значения в десятичные. — Координата икс-один равна тысяче двести сорока. Икс-два у соседнего полигона… тысяча двести шестьдесят один.
Горелов, стоявший за их спинами, сверился со своими записями.
— Если по чертежу между ними двадцать одна единица, то это в допуске, — заметил он, привыкший к военной приемке. — Формально брака нет.
— Считаем физику, — сказал Морозов. Он взял карандаш и чистый лист бумаги. — Отнимаем зазоры.
Они произвели вычитание столбиком прямо на листе, применяя формулу бокового подтравливания металла для оценки реального контура проводника после кислотной ванны. Свет лампы отражался от гладкой поверхности кальки. Морозов закончил вычисления и обвел итоговую цифру.
Затем они проделали ту же изнурительную операцию перевода из hex-кода в десятичный и ручного вычитания для второй точки. И для третьей. Ошибка алгоритма исключалась: сырые исходные данные Каца и расчеты Морозова сходились бит в бит.
Громов стоял над ним, тяжело дыша.
Морозов отложил карандаш. Медленно выпрямился, разминая затекшую шею.
— Код чистый, Женя, — тихо, но абсолютно твердо произнес Алексей. — Программа не врет.
Громов нервно дернул плечом.
— Лёша, в акте ОТК один дефект. Один. Руденко и Ахметов свои матрицы знают наизусть.
— Они знают то, что видят контролеры в микроскоп, — Морозов постучал тупым концом карандаша по вычислениям на кальке. — Смотри сюда. По нормативам Ланской минимально допустимый зазор — ноль целых двадцать сотых миллиметра. Если меньше — брак, риск замыкания.
Алексей сдвинул калькулятор так, чтобы Громов видел цифры.
— В этих трех местах, — Морозов обвел спорные координаты, — расчетный зазор составляет ноль целых двадцать одну сотую миллиметра.
Громов замер, вглядываясь в чертеж. До него начало доходить.
— Одна сотая миллиметра разницы, — продолжил Морозов. — Человеческий глаз не способен поймать это отклонение на светящемся столе. Для женщины из ОТК, которая смотрит в окуляр восьмой час подряд, этот зазор выглядит нормальным. Он формально проходит по допуску.
Алексей обвел взглядом команду. Наташа поправила очки, внимательно разглядывая чертеж через плечо Громова.
— Но физика процесса травления не идеальна, — сказал Морозов. — Малейшее колебание температуры раствора, чуть передержали пластину — и эта сотка съедается. Возникает короткое замыкание на готовом кристалле. Зеленоград получает брак и не понимает, откуда он взялся, потому что на шаблоне всё было чисто. Математика не умеет уставать. Она просто вычла координаты и нашла места, где топология балансирует на грани катастрофы.
В комнате повисла тяжелая, густая пауза. Иллюзия ошибки растворилась, оставив после себя нечто гораздо более пугающее и масштабное.
* * *
— Если мы повезем им этот список в таком виде, Ахметов нас размажет, — голос Громова прорезал тишину. В нем больше не было
Из глубины лаборатории, из-за стеллажа с документацией, вышел Сергей Липатов. До этого момента он сидел за своим крошечным столом, перебирая картотеку элементной базы, и не вмешивался в процесс.
Липатов подошел к столу Морозова. Привычным жестом снял роговые очки, достал из нагрудного кармана идеально чистый носовой платок и принялся протирать линзы.
— Они размажут нас, Евгений Александрович, — произнес Липатов своим ровным, лишенным каких-либо эмоций голосом, — только в том случае, если мы назовем эти точки «ошибками топологии».
Он водрузил очки на переносицу, спрятал платок и взял со стола бумажную ленту АЦПУ. Внимательно изучил цифры. Затем посмотрел на карандашные расчеты Морозова.
— Ошибка — это нарушение утвержденного регламента, — пояснил Липатов, придвигая к себе стопку чистых ведомственных бланков с шапкой НИИ. — Если регламент не нарушен, значит, ошибки нет. А нападать на чужой безошибочный процесс — значит провоцировать конфликт ведомств.
Липатов вытащил из внутреннего кармана пиджака перьевую ручку. Отвинтил колпачок.
— Мы назовем это иначе.
Он склонился над бланком. Перо мягко заскользило по плотной бумаге, оставляя ровные, убористые строчки темно-синих чернил. Липатов не спрашивал совета, он формулировал реальность.
— Пункт первый, — диктовал Липатов вслух, не прекращая писать. — «Подтвержденное аппаратно-программным комплексом совпадение с дефектом 47-бис согласно предоставленной контрольной ведомости Заказчика». Это фиксирует нашу компетентность. Мы нашли то, что должны были найти.
Он перешел к следующему абзацу. Громов и Морозов следили за рождением документа с завораживающим чувством. В руках Липатова казенный канцелярит превращался из мертвой материи в идеальный, непробиваемый щит.
— Пункт второй, — голос Липатова оставался ледяным. — «Дополнительно выявленные скрытые угрозы критического сужения зазора на слоях металлизации, рассчитанные на основании предоставленной матрицы допусков».
Липатов поднял взгляд на Морозова.
— Заметьте, Алексей Николаевич. Мы не говорим, что они ошиблись. Мы говорим, что мы выявили «угрозу». И ссылаемся на их же собственные документы — матрицу допусков.
Он аккуратно переписал три спорные координаты с бумажной ленты в официальный бланк. Поставил точку. Промокнул чернила пресс-папье.
— При такой формулировке, — Липатов закрыл ручку, — товарищу Ахметову и инженерам Научного центра придется не нападать на ваш программный код, а идти к своим микроскопам. Им придется оправдываться, почему их процесс допускает трассировку на грани физического фола. Мы не обвиняем их в браке. Мы предоставляем им инструмент превентивного контроля.
Атмосфера в лаборатории неуловимо изменилась. Липкое напряжение, вызванное страхом перед ошибкой, исчезло. Его смыло резким выбросом адреналина.
Морозов взял исписанный бланк. Текст был безупречен. Это была не просто бумажка — это был пропуск на другой уровень разговора. Оружие, с которым можно было входить в кабинет Савельева без стука.
— Спасибо, Сергей Дмитриевич, — искренне сказал Морозов.
Липатов лишь коротко кивнул, собирая свои карточки.
— Проконтролирую внесение текущих изменений в Журнал отклонений по закрытой линии и подготовлю акты на списание деталей для Олега, — произнес Сергей Дмитриевич, словно речь шла об обычной канцелярии. — Ваша задача — распечатать это и довезти бумагу до Крюково.
Морозов повернулся к своему столу. Динамика сборов всегда была в КБ отработана до автоматизма. Он щелкнул замками старого потертого кожаного портфеля. Внутрь легли плотные картонные папки с актами Липатова. Громов аккуратно извлек из дисковода восьмидюймовую дискету с сохраненным файлом координат, убрал её в антистатический конверт и бережно опустил в отдельный карман портфеля.
— Бежим в ВЦ, пока операторы не ушли на пересменку, — бросил Евгений, накидывая куртку. — Выведем на бумагу всё, что насчитал твой Си, чтобы было чем бить Ахметова по носу.
Горелов, до этого изучавший схему эквивалента нагрузки, одобрительно хмыкнул.
— Правильно. Без бумажки вас там даже слушать не станут.
Олег вытащил вилку осциллографа из розетки.
— Удачи там, у микроэлектронщиков, — сказал он, вытирая руки тряпкой. — А мы тут с Наташей пока попробуем заставить этот гроб, — он кивнул на УПИМЦТ, — не срывать синхронизацию при прогреве строчника.
— Сделайте нормальный паспорт подключения, — напомнил Морозов, застегивая ремешки портфеля. — Без соплей и временных перемычек. Если цвет пойдет в серию, он должен подключаться к «Сфере» так же надежно, как черно-белый монитор.
Наташа серьезно кивнула.
— Сделаем. Уровни я вытяну.
Алексей надел теплое пальто, обмотал шею шарфом. Громов уже стоял в дверях, натягивая кроличью шапку-ушанку и прижимая к груди портфель.
Они вышли из душной, пропахшей канифолью лаборатории в гулкий коридор института. Спустя двадцать минут, получив в машинном зале ВЦ заветный бумажный рулон с распечаткой файла, они наконец покинули здание.
Февральский мороз мгновенно обжег лицо. Под ботинками хрустел сухой, вымороженный снег. Сумерки уже сгустились над Владимиром, зажигая желтые квадраты окон в панельных домах.
Морозов шел к автобусной остановке, чувствуя тяжесть портфеля в руке. Завтра рано утром их ждал вокзал, холодная электричка до Москвы, пересадка и дорога в Зеленоград.
Глава 29
Живой цвет
Лаборатория КБ «Сфера» полнилась привычным многослойным шумом. В коридоре кто-то с грохотом катил тележку с блоками питания. В дальнем углу мерно гудел вытяжной вентилятор, а над столами висел непрерывный писк измерительной аппаратуры.
Алексей Морозов, Евгений Громов и Сергей Липатов уехали в Зеленоград, забрав с собой дискету с координатами и подготовленные акты контроля. Олегу Тимофееву и Наташе Роговой предстояло заставить аппаратную схему видеовывода стабильно работать с реальным кинескопом здесь, во Владимире.
На центральном монтажном столе громоздилось выпотрошенное шасси УПИМЦТ — тяжелая, угловатая конструкция из штампованного металла и гетинакса, ощетинившаяся радиаторами транзисторов и высоковольтными проводами. Рядом располагался макет цифрового видеоконтроллера на базе микропроцессора К580. Плата макета пестрела ровными рядами микросхем, опутанными густой паутиной тонких монтажных проводов во фторопластовой изоляции.
Олег, закатав рукава, зачищал кусачками тонкие провода. Он подпаивал выходы цифрового макета напрямую к цепям видеоусилителя телевизора, минуя штатный радиотракт.
Люба Ветрова стояла над ним, сжимая щупы мультиметра. Волосы растрепались, пара прядей выбилась из-под заколки, но взгляд за стеклами очков оставался колючим.
— Тимофеев, убери руки от питания, — не отрывая взгляда от показаний мультиметра, произнесла она, прижимая минусовой щуп к металлической раме макета.
— Люба, да мы на пять минут включим, — поморщился Олег, не выпуская из пальцев зачищенный конец медного провода. — Я просто времянку кину на
— Времянку ты будешь у себя в гараже на аккумулятор кидать. — Люба переключила предел измерений на приборе, и стрелка дернулась, показывая сопротивление. — У тебя телевизионное шасси. Блок строчной развертки. Там импульсы обратного хода луча — киловольты. Если твоя «времянка» даст петлю по земле, или сопротивление контакта окажется выше нормы, весь этот высоковольтный мусор полетит прямо в шину данных.
Она отложила мультиметр и указала кончиком карандаша на хитросплетение дорожек.
— Цифровая логика питается пятью вольтами. Идеально чистыми пятью вольтами. Одно пробитие по массе из-за твоей спешки — и мы будем выковыривать кристаллы К580 из панелей, потому что они сплавятся. Земля должна сходиться в одной точке. Звезда, Олег. Никаких петель. Перепаивай.
Олег тяжело вздохнул, признавая поражение. Спорить с Ветровой в вопросах разводки и помех было бесполезно. Он молча взял кусачки и откусил злополучную времянку.
В паре метров от них, на краю стола, расчищенном от обрезков провода и пустых спичечных коробков, сидел Саша Птицын. Перед ним лежала клавиатура и толстая стопка распечаток. Младший инженер водил пальцем по колонкам шестнадцатеричных кодов, беззвучно шевеля губами. Тестовое ПЗУ уже было прошито и вставлено в цанговую панельку.
К столу неслышно подошел Андрей Горелов, чья безупречно выглаженная светлая рубашка резко контрастировала с рабочими халатами инженеров. Он положил на край стола неизменную общую тетрадь.
— Александр, отвлекитесь на минуту, — произнес Горелов. — Аппаратную часть видеовывода я изучил. Схемы Роговой мне понятны. Меня интересует программная реализация. Как именно логика управляет цветом?
Птицын оторвался от листинга.
— Сейчас мы реализуем атрибутный режим, — начал Птицын, придвигая к себе карту распределения памяти. — Цвет присваивается группе точек восемь на восемь.
Он обвел карандашом блок адресов на чертеже.
— Базовое текстовое поле, как в черно-белой версии. Но параллельно с кодом символа из отдельной области ОЗУ вычитывается байт атрибута.
Горелов быстро пробежал глазами по шестнадцатеричным адресам.
— Значит, цвет привязан к знакоместу аппаратно, — утвердительно произнес он.
— Именно, — кивнул Птицын. — Процессор пишет один байт, а красит сразу целую букву. Это экономит такты. Смотрите, как мы разбили этот атрибутный байт. Два старших бита мы пока отбросили, они резервные. Дальше идут три бита на цвет фона. И три бита на цвет самого знака.
— Три бита дают восемь комбинаций, — мгновенно подсчитал Горелов.
— Да, восемь простых цветов, — подтвердил Саша. — Палитра жестко зашита аппаратно. Программа просто кидает в память байт атрибута, а дешифратор уже сам на лету формирует нужные сигналы для кинескопа. Но здесь есть аппаратное ограничение, Андрей Витальевич, о котором ваши операторы должны знать. Внутри одного квадрата восемь на восемь точек мы можем вывести только два цвета одновременно: цвет знака и цвет фона. Если вы попытаетесь нарисовать красный график, пересекающий синюю таблицу, в месте их встречи цвета неизбежно сольются или затрут друг друга. Цветовой конфликт. За дешевизну памяти приходится платить.
Горелов понимающе кивнул. Для вывода графиков станочных резов и красных сообщений об ошибках двух цветов на блок хватало с лихвой. Он сделал аккуратную пометку в тетради: «ограничение наложения цветов в одной ячейке».
— Разумный компромисс, — сказал Горелов. — А рамка вокруг текста? Наш аварийный красный бордюр сидит отдельно?
— Это отдельная песня, — улыбнулся Птицын. — Бордюр не имеет адресов в видеопамяти. Под него выделен аппаратный порт. Процессор отправляет туда значение от нуля до семи, и контроллер заливает края кадра аппаратно, пока идет обратный ход луча.
— Независимое управление рамкой, — Горелов сделал короткую пометку в тетради. — Удобно. Если мы зашьем зеленый бордюр как маркер штатного ввода, а желтый — как ожидание данных по линии спецсвязи, оператор увидит состояние боковым зрением, не вчитываясь в текст.
Наташа Рогова, закончив проверку уровней на выходных каскадах макета, выпрямилась и отложила щупы. Она посмотрела на Олега, который затягивал последний винт на клемме заземления.
— Землю в одну точку свел, — доложил Олег, вытирая руки куском ветоши. — Питание развязал. Весь радиотракт отсечен к чертям, синхросмесь и цветовые каналы идут прямо на видеоусилители.
Наташа повернулась к Ветровой. Люба, прищурившись, еще раз окинула взглядом конструкцию, проверяя толщину проводов и надежность паек. Наконец она коротко кивнула.
— Замыканий нет. Можно подавать напряжение.
* * *
Разговоры за соседними столами стихли. Инженеры, отложив паяльники и чертежи, повернулись к стенду. В центре помещения возвышался выпуклый серый экран цветного кинескопа 61ЛК3Ц, зажатый в массивных тисках шасси УПИМЦТ.
— Птицын, тестовая программа готова? — спросила Наташа, вставая сбоку от экрана, чтобы контролировать геометрию луча под углом.
— ПЗУ на стартовом адресе. Цикл ждет питания, — отозвался Саша, положив руки на клавиши клавиатуры.
Люба шагнула к тяжелому автотрансформатору. Плавно, миллиметр за миллиметром, она начала поворачивать массивную черную ручку, повышая напряжение в сети.
Стрелка вольтметра поползла вверх. Сначала раздался низкий, утробный гул силового трансформатора. Затем тонко, на грани ультразвука, засвистела строчная развертка — пятнадцать с половиной килогерц прорезали воздух лаборатории.
На стекле кинескопа заплясали невидимые заряды. Раздался громкий, пугающий треск статического электричества. Волоски на руках инженеров встали дыбом от напряжения поля. В горле запершило от резкого, металлического запаха озона.
Экран моргнул. Из глубины колбы, разогревая нити накала, пробилось тусклое оранжевое свечение.
— Питание стабильно. Просадок по пяти вольтам нет, — констатировала Люба, не сводя глаз со стрелочных индикаторов.
— Пускаю тест атрибутов, — произнес Птицын и нажал широкую клавишу «Ввод».
Программа инициализировала счетчики и выплюнула в шину данных первый байт.
Кинескоп вспыхнул.
Стекло залило густым синим цветом, окаймленным желтой рамкой бордюра. Видеоконтроллер надежно держал геометрию: границы прямоугольника оставались ровными и не дрожали.
Непривычно яркие для лаборатории цвета подсветили лица собравшихся. Напряженное лицо Наташи и Птицына окрасились в синий фоновый оттенок кинескопа.
Олег шумно выдохнул, расплываясь в торжествующей улыбке.
— Есть синхронизация! — крикнул он, ударив ладонью по краю стола. — Держит кадр!
Птицын быстро пробежался пальцами по клавишам. Синий фон мгновенно, без задержек и мерцания, сменился на ядовито-зеленый, затем на глубокий красный, потом на розовый. Аппаратная логика смешивания сигналов работала безупречно.
— Отлично, сплошные заливки держит, — деловито произнесла Наташа. — Птицын, давай нагрузку. Запускай шахматку и мелкий текст. Посмотрим, как он отрабатывает резкие переходы.
Саша кивнул и ввел команду вызова подпрограммы вывода символов.
Улыбка Олега мгновенно погасла, он тревожно прищурился.
Картинка на экране болезненно дернулась.
Цвета мгновенно поплыли. Границы квадратов «шахматки», которые на статике казались вычерченными по линейке, мелко задрожали. За каждой белой буквой потянулась грязная, смазанная цветовая тень.
Хуже того, развалилась геометрия бордюра. Левый край желтой аппаратной рамки перестал быть прямой линией. Он рвался, «дышал», пульсируя в такт с выводом символов. Цвет бордюра неприятно наплывал на крайние левые буквы активной зоны, затапливая их желтизной из-за рассинхронизации сигналов гашения.
Олег отреагировал инстинктивно. В нем проснулся старый радиолюбитель, привыкший лечить любые болезни телевизоров паяльником и отверткой. Он схватил со стола шлицевую отвертку с длинным диэлектрическим жалом и потянулся к платам УПИМЦТ, выискивая подстроечные резисторы на модуле цветности и блоке развертки.
— Сейчас я уровень черного вытяну и фазу сдвину аналогом, — забормотал он, примериваясь к шлицу крошечного потенциометра. — Кадровая чуть уплыла, это ерунда…
Его пальцы уже легли на пластиковую ручку отвертки, когда Наташа Рогова сделала резкий шаг вперед и жестко перехватила руку Олега.
— Положи инструмент, Тимофеев, — холодно приказала она.
Олег недоуменно моргнул, пытаясь высвободить руку.
— Наташ, да я только подкорректирую. У нас телевизор не справляется с крутыми фронтами сигнала. Надо сгладить на входе…
— Мы не в телемастерской, — отчеканила Наташа, отпуская руку Олега. Она неотрывно смотрела на мерцающий экран: — Телевизор работает идеально. Он рисует ровно то, что мы ему даем. Это наша цифра врет. Если мы сейчас начнем крутить подстроечники, мы привяжем этот конкретный макет к этому конкретному телевизору. Сменишь трубку — и все поплывет заново. Мы не кустари. Проблема в логике.
Она обернулась к столу с измерительной аппаратурой.
— Люба, включи осциллограф, пожалуйста. Встаем щупами на штырьки жгута. Будем смотреть математику.
Олег, тяжело дыша, положил отвертку на стол. Он сжал кулаки и молча встал рядом с Наташей, глядя на зеленый экран осциллографа.
Люба подключила первый щуп к выходу генератора тактовой частоты. Второй щуп лег на выход сдвигового регистра, отвечающего за смену атрибута цвета.
На экране осциллографа побежали две зеленые кривые: верхняя — строчный синхроимпульс, нижняя — сигнал цветовых атрибутов.
— Вот и проблема, — Наташа ткнула пальцем в люминофор, где вертикальные фронты импульсов заваливались в пологие горки. — Сигнал не успевает нарастать. Сдвиговый регистр выталкивает бит цвета, но паразитная емкость монтажа и резистивные делители тянут фронт вниз. Пока напряжение поднимается до уровня единицы, луч кинескопа уже успевает пробежать пару миллиметров по стеклу. Вот вам и размазанный хвост за буквой.
— А бордюр почему дышит? — нахмурился Олег, вглядываясь в хитросплетение зеленых линий.
Наташа перекинула щуп на выход порта бордюра. Кривая сместилась.
— Фаза, — коротко бросила она. — Сигнал открытия бордюра приходит с дешифратора на долю микросекунды раньше, чем заканчивается вывод видеоданных из регистра. Они сталкиваются. Бордюр залезает на текст.
Люба Ветрова молча села за стол, вооружившись логарифмической линейкой и справочником по сопротивлениям. Она пересчитывала номиналы нагрузочных резисторов, выискивая компромисс между скоростью нарастания сигнала и током потребления.
— Олег, — Люба протянула ему исписанный листок. — Выпаивай делители на выходах цвета. Ставим номиналы в два раза меньше. И кинь керамический шунтирующий конденсатор прямо на ноги питания регистра, он у нас по току проседает в момент переключения.
Олег глубоко вздохнул и положил лист с настройками. Включил паяльник, дождался, пока канифоль расплавится на жале, и приступил к перепайке.
— А с фазой бордюра что делать? — спросил Птицын, наблюдая за ювелирными движениями пинцета в руках Олега. — Программно я задержку не вставлю, это аппаратный конфликт.
— Защелкнем триггером, — ответила Наташа, быстро набрасывая на полях распечатки новую схему. — Тимофеев, ищи в кассе свободную ТМ2. Пустим сигнал бордюра через нее, а тактировать будем тем же сдвиговым импульсом с регистра. Выйдут строго одновременно, фаза выровняется.
Следующие сорок минут лаборатория наполнилась щелчками кусачек, шипением припоя и короткими, рублеными командами. Олег врезал микросхему триггера прямо поверх готового монтажа, припаяв ее выводы короткими жесткими перемычками — некрасиво, но электрически надежно. Люба заменила резисторы, жестко контролируя качество пайки.
— Готово. Остывает, — Олег подул на плату, сдувая крошки канифоли.
— Питание, — скомандовала Наташа.
Люба снова вывела напряжение на ЛАТРе. Кинескоп привычно треснул статикой.
Птицын, не дожидаясь команды, ударил по клавишам, заполняя видеопамять самой плотной тестовой таблицей.
Экран вспыхнул.
Шахматка стабилизировалась. Грубое дрожание ушло, хотя по краям старого кинескопа геометрия все еще слегка заваливалась. Белые буквы системного шрифта читались уверенно, цветовые тени превратились в едва заметные аппаратные ореолы.
Желтая рамка бордюра больше не «дышала» и не наползала на текст. Сигналы защелкнулись в едином ритме тактового генератора.
— Вытянули аппаратно, — тихо сказала Наташа, сразу делая новую пометку в блокноте. — Но при прогреве шасси параметры снова уплывут. Надо гонять часами и составлять ведомость.
Олег устало опустился на стул, вытирая блестящий от пота лоб рукавом.
— Работает железяка. Осталось доказать, что мы сможем повторить это на другом телевизоре.
К столу снова подошел Андрей Горелов. До этого он молча наблюдал за процессом отладки, не вмешиваясь в аппаратные споры.
— Картинка впечатляет, — Горелов достал из нагрудного кармана ручку и щелкнул кнопкой. — Но эстетика цвета для закрытого контура вторична. Александр, помните наш разговор об аппаратной страховке?
Птицын кивнул, напрягшись.
— Сымитируйте программный или аппаратный останов, — потребовал Горелов. — Представьте, что оператор ввел неверную команду, произошел сбой памяти, и процессор зациклился. Программа не выполняется. Я хочу видеть, что произойдет с экраном.
Обычно зависание процессора приводило к тому, что на экране застывала последняя картинка, вводя оператора в заблуждение. Но Горелов и Морозов заложили в архитектуру «Сферы-82В» жесткое требование: отказ должен быть виден мгновенно.
Птицын потянулся к макету. Он нашел вывод на процессоре К580, отвечающий за сигнал готовности, и пинцетом замкнул его на общий провод.
Процессор мгновенно перешел в состояние бесконечного ожидания. Выполнение программного кода полностью прекратилось. Шина адреса замерла.
Текстовое поле на экране кинескопа застыло. Видеоконтроллер продолжал циклично вычитывать один и тот же кадр из памяти, поэтому буквы и шахматка остались висеть в фосфорном свечении неизменными, создавая иллюзию нормально работающей машины.
Но программа больше не выполнялась. А значит, она перестала посылать периодические сигналы сброса на независимый аппаратный счетчик — тот самый сторожевой таймер, который Горелов требовал заложить в архитектуру еще в январе.
Спустя долю секунды
Желтая рамка погасла. Вместо нее вокруг застывшего зеленого текста тревожно замигал ярко-красный бордюр аварии.
Горелов несколько секунд наблюдал за ритмичным мерцанием, затем повернулся к Наташе.
— А если программист сам задаст красный цвет бордюра в рабочем режиме? Как оператор отличит норму от сбоя?
— По аппаратному мерцанию, — с готовностью пояснила Рогова, которой не терпелось показать изящество своей схемы. — Сторожевой таймер не просто меняет цвет. При переполнении он аппаратно отрубает программный порт от видеовыхода и подключает красный канал напрямую к делителю кадровой частоты. Рамка мигает с частотой в два герца. Процессор висит, программная среда мертва, а железо продолжает бить тревогу совершенно независимо от них.
Горелов убрал ручку и медленно выпрямился, разминая затекшую спину.
— Идеально. Ошибка однозначно читается и не поддается программной имитации, — произнес он спокойно и твердо. — Страховка от зависания работает. Это пойдет в акт приемки рабочего места. Принимается, товарищи.
Горелов кивнул и отошел к своему столу, аккуратно закрывая прошнурованную тетрадь.
Олег Тимофеев щелкнул тумблером, снимая питание с макета. Красный бордюр погас, экран схлопнулся в яркую белую точку, которая медленно растаяла в темноте стекла. Кинескоп остывал, издавая тихое потрескивание.
Глава 30
Ловушка протокола
Воздух в зеленоградской переговорной застоялся. Пахло паркетом, мебельной мастикой и въевшимся в стены озоном — спутником больших вычислительных центров. Обстановка кабинета Савельева подчеркивала власть его хозяина. Длинный стол, крытый зеленым сукном, тяжелые стулья с высокими спинками, хрустальные графины с водой на серебряных подносиках.
Здесь не принимали случайных людей.
Алексей Морозов сидел на краю жесткого стула, чувствуя, как ноет спина после долгой дороги. Напротив располагалась зеленоградская номенклатура. Валерий Константинович Савельев занимал место во главе стола — спокоен, непроницаем, с аккуратно сложенными перед собой руками. Справа от него сидел Ахметов, чья легкая, почти снисходительная усмешка не сходила с лица с момента их приветствия. Дальше хмурился Руденко, то и дело поглядывая на часы — его явно оторвали от реального производства ради студенческих игрушек. Ланская привычно перебирала граненый карандаш тонкими пальцами. Кац смотрел на владимирцев с профессиональным, холодным интересом.
Чуть в стороне, почти сливаясь с темными деревянными панелями обшивки, находился майор Сергеев. Куратор выбрал кресло у окна и теперь молча разглядывал улицу, словно происходящее за суконным столом его совершенно не касалось.
Громов, сидевший рядом с Морозовым, нервно потер переносицу. Алексей тоже напряженно молчал, скрывая свое волнение. Последние дни во Владимире они писали код, а накануне прогнали зеленоградский массив данных через «Сферу-82», записав готовый результат на магнитный диск.
— Итак, товарищи, — голос Савельева прозвучал мягко, но в этой мягкости лязгал металл. — Мы предоставили вам опытный участок топологии. Контрольный массив. Вы утверждали, что ваш аппаратно-программный комплекс способен осуществить предварительную проверку зазоров быстрее и эффективнее, чем это делает человек за микроскопом. Мы готовы ознакомиться с результатом.
Ахметов чуть подался вперед. Усмешка стала шире. Он явно ждал либо пустой лист, либо «простыню» ложных срабатываний, где машина приняла бы технологические изгибы проводников за короткие замыкания.
Морозов промолчал. Он щелкнул замками потертого портфеля, достал сложенную гармошкой бумагу — стандартную ленту АЦПУ с перфорацией по краям — и положил ее на зеленое сукно.
Бледно-фиолетовые символы, отпечатанные старой красящей лентой, складывались в ровные колонки цифр.
— Вывод программы «СЛОЙ-81», — Морозов развернул распечатку так, чтобы она легла прямо перед Савельевым и Ахметовым. — Базовая машина — «Сфера-82». Время обработки массива — двадцать четыре минуты.
Ахметов скользнул взглядом по бумаге.
— И что мы здесь видим? — инженер ОТК хмыкнул. — Четыре координаты. Алексей Николаевич, вы хотите сказать, что на всем участке ваша умная программа нашла всего четыре ошибки?
— Одну ошибку и три угрозы, — ответил Морозов. — Первая строка показывает саму ошибку. Ее точные координаты полностью совпадают с вашим эталонным «Дефектом сорок семь-бис». Машина нашла то, что ваш ОТК заложил специально для проверки.
Усмешка Ахметова дрогнула, но не исчезла. Он посмотрел на Савельева, словно ища поддержки.
— Допустим. Вы нашли контрольную закладку. Это доказывает лишь то, что ваша программа умеет читать очевидное. А что это за три остальные строки? — Ахметов ткнул коротким пальцем в бумагу. — В этих координатах нет дефектов. Маршрутная карта чиста. Ваш алгоритм сыпет мусором. Он видит сужение там, где его нет. Я предупреждал, Валерий Константинович, гладкая математика не учитывает реальную физику кристалла.
— Математика учитывает то, что ей сказали учитывать, — сухо ответил Морозов. — Проблема не в алгоритме. Проблема в том, что ваш микроскоп видит только верхний слой маски.
В кабинете повисла тишина, нарушаемая лишь сухим тиканьем настенных часов. Руденко нахмурился, перестав барабанить пальцами по столу.
— Вы сейчас обвиняете мой отдел технического контроля в некомпетентности? — Ахметов понизил голос. — Вы, собравшие игрушку из телевизионных деталей, будете учить Зеленоград искать пробои?
Кац, до этого момента хранивший молчание, протянул руку и потянул к себе вторую стопку бумаг, лежавшую возле локтя Громова. Это были листинги исходного кода. Зеленоградский программист надел очки в роговой оправе и углубился в чтение.
— Подожди, Тимур, — бросил Кац, не отрываясь от строчек. — Тут не все так просто.
Его глаза быстро бегали по фиолетовым символам. Кац видел структуру. Он узнавал синтаксис BDS C — того самого компилятора, который неофициально передал владимирцам Юра Беспалов. Но дело было не в языке. Дело было в архитектуре. Кац видел, как грамотно высокоуровневая логика проверки состыкована с низкоуровневыми ассемблерными буферами. Громов не заставлял медленный Си работать с дисководом напрямую. Он написал жесткие, быстрые процедуры на машинном коде, которые выхватывали данные кусками и скармливали их математическому ядру. Логика проверки была кристально чисто отделена от возни с железом.
— Красиво, — тихо произнес Кац, глядя на Громова с внезапным уважением. — Вы не грузите всю маску в память. Вы решетите ее окнами. И перекрытие… вы сделали буферную зону перекрытия окон, чтобы не резать полигоны пополам.
Громов только молча кивнул, плотнее сжимая губы.
Ахметов раздраженно отмахнулся от Каца.
— Да какая разница, как они это запрограммировали! Я говорю о результате. Три ложных срабатывания! Три несуществующих дефекта, которые остановят маршрут, заставят тополога лезть в рубилит, тратить машинное время…
Ланская не участвовала в перепалке.
Тополог придвинула к себе распечатку Морозова. Ее лицо оставалось бесстрастным. Она достала из кармана жакета микрокалькулятор «Электроника Б3–21», положила его
Пластиковые клавиши сухо защелкали в наступившей тишине.
Ланская ввела координаты первой «ошибочной» точки. Проверила зазор по чертежу. Затем ее пальцы быстро набрали сложную дробь.
Морозов знал, что она делает. Она применяла формулу бокового подтравливания. Ту самую поправку на физику кислотного травления, которую человек за микроскопом может упустить из-за усталости глаз, но которую машина, получив правильный коэффициент, считает безжалостно точно. Слой за слоем.
Щелчки прекратились. Ланская записала результат на полях тетради. Ввела вторую координату. Снова расчет. Снова запись.
Ахметов насупился, глядя на Ланскую. Руденко подался вперед, опираясь локтями о стол. Савельев молча наблюдал.
Калькулятор пискнул в последний раз. Ланская аккуратно, почти педантично выключила тумблер питания. Красные цифры индикатора погасли. Она взяла свой граненый карандаш и положила его ровно поверх распечатки Морозова, перечеркивая колонку координат.
Затем она подняла глаза на Савельева.
— Они правы, Валерий Константинович, — голос Ланской прозвучал негромко, но в нем не было ни капли сомнения. — Машина поймала то, что пропустил микроскоп.
Ахметов открыл рот, чтобы возразить, но Ланская перебила его, не повышая тона:
— Проектный зазор в этих трех точках в норме. На чертеже все чисто. Но если наложить маску окисла и учесть коэффициент бокового подтравливания металла для этой партии… — она постучала ногтем по экрану выключенного калькулятора. — В этих трех координатах при травлении зазор уйдет за критический допуск. Будет замыкание. Мы бы получили брак на выходе с линии, и искали бы причину неделями. Программа посчитала физику сдвига.
В кабинете повисла тишина.
Савельев не стал спорить с Ланской. Он был слишком умным аппаратным игроком, чтобы отрицать очевидное поражение. Тополог высшей квалификации признала ошибку маршрута — спорить с цифрами стало бессмысленно.
Валерий Константинович мгновенно сменил тактику.
— Блестяще, — Савельев улыбнулся. Это была широкая, почти искренняя улыбка государственного мужа, оценившего хорошую работу подчиненных. — Просто блестяще. Алексей Николаевич, Евгений Александрович. Вы доказали состоятельность вашей разработки. Зеленоград умеет признавать чужие успехи.
Он открыл плотную картонную папку.
— Мы предвидели положительный исход, — Савельев достал несколько отпечатанных листов. — Отдел документации подготовил акт приемки по теме «СЛОЙ-81». Здесь зафиксировано успешное прохождение контрольного массива, подтверждение заявленных характеристик вашей машины и рекомендация к внедрению опытного комплекса на нашем предприятии.
Громов едва заметно улыбнулся и потянулся за ручкой. Это была победа. Официальная, задокументированная победа.
Савельев придвинул бумаги к Морозову, положив рядом тяжелую ручку с золотым пером.
— Ознакомьтесь и подпишите, Алексей Николаевич. И мы сможем перейти к обсуждению графиков поставок вашего оборудования.
Морозов взял листы. Бумага была гладкой, дорогой. Текст отпечатан на хорошей машинке с четким, не прыгающим шрифтом.
Алексей придвинул бумагу поближе и начал читать акт. Он читал медленно, методично скользя напряженным взглядом по строчкам.
Морозов внимательно смотрел на границы. Он искал, где именно зеленоградцы ставят забор, ведь опытные аппаратчики никогда не бьют в лоб, а мягко забирают контроль через определения.
Первый абзац. Подтверждение факта испытаний. Все верно.
Второй абзац. Фиксация времени и точности. Отлично.
Третий абзац. Рекомендация к развертыванию опытного участка. Прекрасно.
Пункт четыре точка два.
Алексей остановил свой палец на бумаге. Его глаза дважды пробежали по одному и тому же длинному, витиеватому предложению, густо пересыпанному канцелярскими оборотами.
*«…принимая во внимание критическую важность обрабатываемых топологических массивов и недопустимость утечки технологических норм, аппаратно-программный комплекс „Сфера-82“ и его базовая операционная система переводятся в статус закрытого отраслевого оборудования с присвоением грифа „Для служебного пользования“ (ДСП) и передачей исключительных прав на архитектуру Министерству электронной промышленности…»*
Алексей почувствовал, как внутри разливается холод.
Ловушка протокола. Идеальная, гладкая, непробиваемая.
Савельев планировал поглотить «Сферу» целиком. Если Морозов сейчас поставит свою подпись, гражданская ветка проекта умрет в ту же секунду. Школы не получат компьютеры. МикроДОС и базовая система ввода-вывода окажутся под замком в сейфах Первого отдела. Любая попытка опубликовать схему в журнале «Радио» станет разглашением государственной тайны.
Зеленоград получит прекрасный, дешевый инструмент для своих инженеров, а Морозов потеряет мечту о новой массовой персональной машине.
Алексей аккуратно положил золотую ручку Савельева обратно на зеленое сукно.
— Блестящий документ, Валерий Константинович, — Морозов поднял глаза на хозяина кабинета. Голос его звучал ровно, но Громов, сидевший рядом, мгновенно подобрался, почувствовав изменение тона. — Исчерпывающий. Но в таком виде я его не подпишу.
Улыбка Савельева стала чуть жестче, словно гипс начал схватываться.
— Что-то не так с формулировками, Алексей Николаевич? Мы упустили какую-то деталь вашего триумфа?
— Вы упустили границы применимости, — Морозов сдвинул акт приемки на середину стола. — Абзац номер четыре. Вы требуете закрыть грифом саму вычислительную платформу и базовую операционную систему.
— Разумеется, — Савельев развел руками, изображая искреннее непонимание. — Алексей Николаевич, вы же взрослый человек. Вы только что доказали, что ваша машина способна анализировать допуски новейших БИС. Это секретные матрицы. Государственная тайна. Мы не можем допустить, чтобы оборудование, работающее с такими данными, имело статус открытой гражданской поделки. Это вопрос режима и безопасности.
Ахметов закивал. Руденко хмуро подтвердил:
— У нас за вынос бракованного кристалла с линии статью шьют. А вы хотите, чтобы машина, которая эти кристаллы проектирует, по кружкам пионеров гуляла?
Морозов молчал. Он понимал, что логика Савельева для советской бюрократической машины звучит абсолютно железобетонно. Возражать против режима секретности в лоб — значит подписать себе приговор.
Алексей скосил глаза к окну.
Майор Сергеев сидел неподвижно. Он не произнес ни слова за все время совещания, но Морозов вдруг кристально ясно понял истинный расклад сил в этой комнате.
Сергееву не нужна была монополия Зеленограда.
Куратор от Комитета государственной безопасности играл в свою игру. Ведомству Сергеева было жизненно необходимо иметь независимый инструмент контроля над разжиревшим, всесильным Министерством электронной промышленности. Зеленоград привык диктовать условия. Зеленоградский ОТК скрывал брак, переписывал нормы, списывал неудачи на объективные трудности. И вот сейчас какие-то выскочки из Владимира приехали и математически доказали, что хваленый микроскопный контроль Зеленограда пропускает критические ошибки.
Для Сергеева этот момент был бесценным подарком. Это был аппаратный козырь колоссальной силы, который он положит на стол в высоких московских кабинетах. «Ваши специалисты не справляются, товарищи министры. Приходится привлекать смежников, чтобы спасти процент выхода годных».
Если Савельев сейчас сожрет «Сферу», поглотит ее и закроет внутри своего контура — Сергеев потеряет этот независимый рычаг. «Сфера» станет зеленоградской, и ошибки снова будут прятать под сукно.
Сергеев не мог прямо вмешаться в технический спор. Но его молчаливое присутствие связывало Савельеву
Опираясь на эту негласную, невидимую поддержку, Морозов пошел в контратаку.
— Валерий Константинович, — Алексей чуть наклонился вперед. — Давайте разделим мухи и котлеты. Вы правы в главном: данные секретны. Алгоритмы проверки зазоров для конкретных производственных линий — секретны. Но сама машина — это просто железо.
— Железо, которое… — начал Ахметов, но Морозов не дал ему закончить.
— Железо, которое ничего не знает о кристаллах! — жестко отрезал Алексей. — Базовая «Сфера-82» — это процессор, память и экран. МикроДОС — это просто программа-загрузчик. Она умеет читать файл с дискеты и писать файл на дискету. Ей абсолютно плевать, что внутри этого файла — рецепт борща, расчет школьной задачки по физике или секретная топология новейшего микропроцессора.
Морозов вспомнил свой спор с заводчанами и привел простое сравнение.
— Вы же не присваиваете гриф «Совершенно секретно» каждому кульману в вашем КБ только потому, что на нем чертят оборонные заказы? Вы не секретите карандаши и ватман. Вы секретите сам чертеж. И человека, который имеет к нему допуск.
Кац, слушавший этот монолог, едва заметно кивнул. Как системщик, он прекрасно понимал разницу между аппаратной платформой и прикладным софтом.
— Что вы предлагаете? — голос Савельева стал сухим, как пергамент. Он тоже уловил взгляд Морозова, брошенный в сторону молчаливого куратора.
— Я предлагаю технически грамотное разделение, — Морозов придвинул к себе чистый лист бумаги и взял карандаш. — Ядро системы — то есть аппаратная часть «Сферы-82» и базовая операционная система МикроДОС — остаются открытым универсальным профилем. Они не содержат никакой специфической отраслевой информации. А вот прикладная программа «СЛОЙ-81», ее исходные коды, матрицы допусков, библиотеки пересчета бокового подтравливания и сами рабочие дискеты с топологиями — получают статус «ДСП» и передаются в ваше исключительное ведение. Зеленоград получает настроенный закрытый фильтр в виде отдельного ПО, работающего на стандартном оборудовании.
— Удобно устроились, — процедил Ахметов. — Значит, если алгоритм пропустит дефект, отвечать будет наш Первый отдел, а ваше открытое железо останется ни при чем? Кто подписывать акт годности будет, если система наполовину гражданская?
— Я хочу, чтобы инструмент работал, а не пылился в сейфе, — парировал Морозов. — Если вы закроете базу, вы убьете возможность ее развития. Мы не сможем обновлять системные модули, не сможем улучшать работу с памятью без прохождения многомесячных согласований через ваш Первый отдел. Оставьте ядро открытым. Закрывайте данные.
Савельев молчал, глядя на Морозова долгим, оценивающим взглядом.
Затем он перевел взгляд на Сергеева.
Майор КГБ сидел в той же позе. Он медленно, почти лениво моргнул. Не было ни кивка, ни жеста. Но Савельев понял всё. Куратор не позволит Зеленограду проглотить владимирскую инициативу целиком. Инструмент контроля должен остаться независимым.
Савельев вздохнул. Это был короткий, беззвучный вздох человека, признающего временное тактическое отступление.
Валерий Константинович взял свою тяжелую перьевую ручку. Он пододвинул к себе акт приемки.
— Хорошо, Алексей Николаевич. Ваша логика… имеет право на существование. В конце концов, мы инженеры, а не бюрократы. Нам важен результат.
Он прижал золотое перо к документу и резким, сильным движением перечеркнул весь четвертый абзац. Нажим был такой силы, что острие пера прорвало плотный лист. В тишине переговорной отчетливо раздался короткий бумажный хруст.
— Мы перепишем протокол. Статус «ДСП» и исключительные права Министерства будут распространяться только на прикладной программный пакет «СЛОЙ-81» и форматы хранения топологических данных. Базовая аппаратура и операционная система остаются вне ограничений. Вас устроит такая формулировка?
— Вполне, Валерий Константинович, — Морозов позволил себе легкий кивок. — Это разумный компромисс.
— Тогда на сегодня мы закончили, — Савельев закрыл папку. — Ланская, Руденко — подготовьте списки замечаний по порядку вывода. Кац — согласуйте с товарищем Громовым форматы передачи файлов. Жду исправленный акт мне на стол через час. Свободны.
* * *
В коридоре пахло пылью и свежим линолеумом.
Громов шел рядом, шумно выдыхая воздух. Его пальцы, до побеления вцепившиеся в ручку портфеля, слегка подрагивали — отходил адреналин.
— Леш, — тихо сказал программист, когда они отошли достаточно далеко от массивных дверей переговорной. — Я думал, он нас сейчас сожрет. Когда он эту бумагу достал про закрытый статус… У меня аж в глазах потемнело. Все, думаю. Приехали.
Морозов остановился у широкого окна, выходящего на заснеженный внутренний двор института.
— Он и пытался, Жень. Это была классическая ловушка протокола. Они бьют не словами. Они бьют бумагой.
— Если бы не ты со своим кульманом… — Громов покачал головой. — Как ты вообще догадался разделить базовую часть и прикладную прямо на ходу?
— Я вовремя обратил внимание на нужную строчку, — Морозов понимающе кивнул. — Границы применимости. И еще… нам крупно повезло, что Сергеев сегодня приехал.
Громов нахмурился.
— Он же за весь час и слова не сказал. Сидел, как мебель.
— Вот именно, — Морозов устало потер шею, глядя на серые коробки зеленоградских корпусов. — Савельев не мог давить на нас в открытую при кураторе из комитета. Сергееву нужен независимый инструмент проверки, а не просто еще одна зеленоградская система. На этом и проскочили.
Морозов замолчал, чувствуя, как глубоко внутри поселяется неприятный, холодный комок.
— Они отступили, — Громов поправил куртку, глядя на закрытую дверь переговорной. — Но это временно. Подписанный акт решает только текущий спор.
Морозов кивнул. Он тоже испытывал к Савельеву профессиональное уважение. Этот человек понял свою ошибку и перегруппируется.
— Следующий конфликт придет к стыкам с машиной, — предупредил Алексей. — Зеленоград спросит, как оператор на гражданской машине увидел брак. Они потребуют показать экран, клавиатуру и плату вывода. Попытаются привязать «Сферу» к своим интерфейсам.
Морозов чуть ослабил воротник. Напряжение тяжелого разговора давало о себе знать.
— Значит, покажем им наш базовый порядок работы раньше, чем они навяжут свой, — сказал Алексей, отворачиваясь от окна. — Заберем исправленный акт, Женя, и идем прямо в лабораторное крыло НЦ.
Глава 31
Ядро и обвязка
Двери представительского этажа глухо закрылись за спиной. Морозов переложил портфель в другую руку, сбрасывая напряжение после тяжелого бюрократического торга с Савельевым. Воздух рабочих уровней Научного центра приятно отличался от мертвой тишины верхних коридоров: здесь пружинил потертый линолеум, пахло разогретым текстолитом, озоном и старой бумагой.
Громов шагал следом, хмуро разминая шею. Протокол, сохраняющий за ними права на гражданскую машину, лежал в
Роман Кац толкнул дверь своей рабочей комнаты. Вместо полированного паркета начальственных кабинетов — два кульмана, гул терминалов за стеной и сдвинутые столы, заваленные синьками. Рядом с Гальпериным уже стоял Юрий Беспалов, разглядывая распечатку, с которой владимирцы час назад триумфально выступили на техсовете.
— Ну что, подписали? — спросил Гальперин, отодвигая чашку с недопитым чаем.
— Подписали, — Морозов опустил тяжелый портфель на стул. — Зеленоград получает инструмент, мы сохраняем ядро открытым. По режиму Савельев закрутил гайки: сами производственные топологии за порог НЦ не выходят. Во Владимир мы увозим только свои исходники, форматы координатных пакетов и чистые бланки под таблицы правил.
— Логично. Железо у вас, а режимные данные у нас, — Кац кивнул, приглашая гостей к столу. — А теперь давайте снимем пиджаки и перейдем к технической сути. То, что вы показали наверху — это высший пилотаж. Но мы все здесь инженеры и понимаем: один выверенный фрагмент — это еще не вся матрица. Как именно вы собираетесь прожевать полный слой кристалла на вашем К580?
Беспалов, до этого молча изучавший соседний фрагмент бумажной ленты, подался вперед и оперся ладонями о столешницу. Он перекинул несколько плотных полос бумаги с бледно-фиолетовыми символами кода.
— Тот самый BDS Си, — Беспалов удовлетворенно кивнул, глядя на Морозова и узнав фигурные скобки синтаксиса. — Я же передал вам дискету с компилятором совсем недавно, почти в виде эксперимента. Быстро вы пустили его в дело.
— Хороший инструмент не должен лежать на полке, — отозвался Алексей.
Кац подошел следом и тоже заглянул в код.
— Они очень грамотно разделили уровни, Юра, — пояснил Кац своему сотруднику. — Компилятор дает неизбежные накладные расходы на стеке, но владимирцы это обошли. На восьмиразрядной архитектуре без аппаратного умножения любой лишний вызов подпрограммы — это потерянные микросекунды. А при проверке ста тысяч полигонов эти микросекунды складываются в часы простоя.
Громов одобрительно хмыкнул. Ему понравилось, что местные системщики понимают цену процессорного такта.
Беспалов, до этого молча изучавший соседний фрагмент бумажной ленты, подался вперед и оперся ладонями о столешницу.
— Транслятор не волшебный, — веско добавил Юрий. — Вызов каждой функции на Си, сохранение адресов возврата, выделение памяти под временные переменные — все это нещадно съедает циклы процессора. У малой машины нет независимых каналов обмена памятью, цена каждой команды предельно высока.
Громов кивнул. Как создатель низовых программных процедур, он знал цену каждому байту и отвечал с абсолютной уверенностью:
— Поэтому компилятор туда не спускается. Все критичные участки написаны на чистом ассемблере. Чтение сектора с накопителя, перенос буфера в рабочую область, подсчет контрольных сумм пакета, посимвольный вывод. Эти операции выверены до такта, транслятор в них не вмешивается и ничего от себя не добавляет.
Морозов шагнул ближе и концом карандаша обвел крупный блок на распечатке.
— А здесь вступает Си. Геометрия и изменяемые технологические правила. Эту логику нужно постоянно читать, обсуждать с технологами и переписывать. Если завтра появится новое ограничение для контактных окон или изменится минимальный зазор между проводниками на конкретном слое, перекраивать под него монолитное ассемблерное полотно будет слишком рискованно. Ошибешься в одном переходе — сломаешь чтение с диска.
Он перебросил еще одну страницу бумаги через край стола.
— Нормы меняются, требования растут. Си здесь дает нужную гибкость. Программа просто берет координаты, подготовленные быстрыми процедурами, сверяет геометрию и выдает результат. Если нужно внедрить новое правило, мы правим только логику проверки. Ассемблерное ядро остается целым.
Гальперин перестал чертить на полях формата.
— То есть технологические допуски в код не зашиты?
— Зашивать нормы намертво — значит обречь себя на переделку системы при каждой смене техпроцесса, — подтвердил Морозов.
Он придвинул к себе чистый лист и достал ручку. Быстрыми движениями набросал структуру таблицы.
— Возьмем тот же пример с боковым подтравливанием, который Ланская только что в кабинете считала.
Ручка провела несколько колонок, обозначая поля данных.
— Чтобы каждый раз не переписывать ядро под новые коэффициенты травления, мы вынесли технологический допуск в отдельный файл. У нас есть топология — голые координаты, есть ваши правила проверки, и есть сама программа. Си нам нужен именно для того, чтобы накладывать одно на другое на лету.
Морозов положил ручку на стол.
— Вы здесь, в Зеленограде, набиваете служебную таблицу правил для текущего слоя. Наша машина берет массивы координат, считывает вашу таблицу и выдает отчет по нарушениям. Для такой логики Си гораздо эффективнее ассемблера.
Кац несколько секунд молча смотрел на колонки набросанной таблицы. Затем перевел взгляд на бледно-фиолетовые строки кода, провел ладонью по сгибу бумажной гармошки.
— С логикой понятно, — Кац скрестил руки на груди, чуть откинувшись на спинку стула. — Но слабое место остается не в алгоритме, а в источнике данных. Ваш координатный массив сейчас появляется в самом конце цепи. Тополог неделями сидит над чертежами, режет пленку, выверяет зазоры. А потом оператор переводит эту графику в цифры для фотоповторителя. Возникает риск сторонних ошибок оцифровки. Получается, ваша система пока ловит не столько инженерный недочет разработчика, сколько ошибки конвертации геометрии. Это чисто вторичный контроль.
Морозов не стал спорить. Кац был абсолютно прав. Алексей тщательно подбирал слова: сейчас было легко сорваться в лекцию о будущем САПР и разрушить то рабочее доверие, которое появилось после удачного прогона.
Он щелкнул замком портфеля и достал общую тетрадь за тридцать шесть копеек — ту самую, в которую делал выписки по форматам обмена. Перелистал плотные страницы и пододвинул тетрадь к центру стола.
— Вторичный контроль — это только текущий этап, база, — сказал Морозов. — Смотрите. Вот утвержденная вами выписка по формату, переложенная на язык нашей программы: номер слоя, координата, контур, окно контакта, маркер конца записи. Если мы стандартизируем этот промежуточный слой обмена, мы перестанем зависеть от операторов оцифровки.
Гальперин подался вперед и прищурился на убористый почерк.
— То есть вы клоните к тому, чтобы вводить геометрию прямо с пульта оператора, минуя перфоленты для станка? — догадался он.
— Именно, — ответил Морозов, забирая тетрадь. — Мы не обещаем завтра заменить инженера с резаком. Но если малая ЭВМ уже способна принимать геометрию напрямую, понимать перекрытия окон и выдавать отчет по правилам, это фундамент. Дальше мы просто переносим контроль на более ранние этапы технологического маршрута. Сначала вводить и проверять сложные участки до того, как резать пленку. Потом учиться описывать схему в машинном виде
Кац с сомнением покачал головой, разглядывая набросанную таблицу, оценивая масштаб задачи.
Гальперин отложил карандаш и потер переносицу.
— Звучит стройно, — произнес он. — И в перспективе, возможно, так оно и должно работать. Но вернемся к железу. Меня беспокоит время первого прогона.
Он постучал карандашом по распечатке.
— Двадцать четыре минуты на массив, — напомнил Гальперин. — И львиная доля ушла на чтение. Вы сами говорили, что ввод-вывод — узкое место.
Он шагнул к свободному кульману и быстро набросал на закрепленном листе ватмана три прямоугольника, соединив их четкими стрелками: исходный массив, подготовленная порция, отчет.
Морозов не стал спорить.
— Узкое, потому что мы брали сырые данные. Ваша ЕС ЭВМ все равно читает исходники, чтобы перенести их на магнитную ленту. Предлагаю готовить поток там, ближе к источнику. У вас стоят мощные стойки, у них гигабайты дискового пространства и гигантская вычислительная мощность. Пусть ваша машина возьмет на себя черновую работу.
Алексей поднялся, подошел к чертежу и обвел карандашом средний прямоугольник.
— Не нужно сбрасывать нам сплошную топологию. Пока данные лежат в памяти большой ЭВМ, отсортируйте объекты по слоям и нарежьте на перекрывающиеся координатные окна. Приложите код правил и контрольные суммы, а затем сбросьте готовые пакеты на восьмидюймовые дискеты. Наша «Сфера» получит уже упорядоченный пакет на носителе и не потратит ни такта на предварительную перекладку массивов в памяти.
Громов хмуро посмотрел на схему Гальперина.
— Только не превращайте входной пакет в бухгалтерскую ведомость, — проворчал Евгений. — Номер слоя, координаты, контрольная сумма — и всё. Каждый лишний служебный байт съедает рабочий буфер. Формат нужен короткий, без плавающих полей и вариантов. У нас памяти в обрез.
Кац задумчиво потер подбородок, разглядывая нарисованные квадраты.
— Выглядит уязвимо. — Кац постучал костяшкой пальца по столу. — Дополнительная подготовка массивов на ЕС ЭВМ дает еще одно место для ошибки. Кто проверит, что сформированный пакет верен и не потерял связь с исходной топологией? Программный сбой на большой машине обесценит всю проверку.
Алексей взял карандаш и обвел на ватмане один из нарисованных квадратов, помечая углы.
— Будем сверять по заголовкам. В шапку пакета идут абсолютные координаты, номер слоя, границы окна и контрольная сумма. Машина возвращает отчет ровно с этим же заголовком. Когда вы сводите результаты, все подготовленные порции сверяются заново. Если данные исказились до передачи на малую ЭВМ, сумма участка просто не сойдется.
Беспалов подался вперед, не вставая со стула.
— Допустим, окно вы загрузили, проверили, выгрузили дефекты. Как потом наш тополог состыкует ваш отчет со своим исходным чертежом? Координаты у вас локальные?
— В отчете остаются абсолютные, — мгновенно отозвался Евгений. — Точные привязки к листу, номер слоя, код нарушенного правила и тип ошибки.
Гальперин молча прикинул логику.
— Значит, дубли на границах уйдут при сведении отчета по точным координатам, — проговорил он, возвращаясь к столу и открывая свой блокнот. — Потребуется отдельная программа для нарезки окон и вклейки кодов.
Он сделал в протоколе короткую рабочую запись и подчеркнул ее двойной чертой.
Кац отошел от кульмана и прошелся по комнате.
— Допустим. Окна, перекрытия, предварительная сортировка на большой машине. Но давайте посчитаем календарное время.
Он остановился напротив Морозова.
— Даже если мы нарежем топологию на идеальные порции, полная проверка сложной БИС на одной машине займет сутки, а то и двое, — произнес Кац. — Вы сделаете удобный инструмент, но он намертво свяжет стенд. В реальном производстве ваша красивая схема просто встанет. Никто не остановит процесс на двое суток ради вторичного контроля.
Морозов придвинул к себе четыре чистые картонные перфокарты и выложил их на столе квадратом, имитируя расстановку оборудования на плане цеха.
— А мы не будем считать на одной машине. Когда у нас появится малая серия, поставим три ЭВМ параллельно, и они будут получать разные пакеты. Четвертая ведет контрольный журнал и выдает задания. Первая берет левый край, вторая — центр, третья — правый.
Беспалов нахмурился, разглядывая разложенные картонки.
— Вы хотите гонять массивы координат по линиям связи? — в его голосе прозвучало искреннее сомнение. — Линия мгновенно захлебнется. Даже если гнать на предельной скорости, вы половину машинного времени убьете на пересылку одной только геометрии.
— Нет. Передавать топологию по проводам — значит похоронить затею, — Морозов покачал головой. — Данные загружаются локально. С дискет, которые заранее нарезает и готовит ваша большая машина. По линии связи идут только короткие служебные сообщения диспетчеризации. Обычный коаксиальный кабель, оптронная развязка на концах, чтобы стойки не пожгли друг другу порты. Скорости в пятьдесят шесть килобит для передачи статуса хватит с избытком.
Морозов мысленно усмехнулся: декабрьская идея связать машины в локальную сеть оказалась как нельзя кстати. Саша Птицын во Владимире как раз дописывал для этого кольцевого интерфейса программу надежного обмена.
— Короткие статусы, — пояснил Алексей, указывая карандашом на нижнюю перфокарту. — Взяла сороковой пакет, начала расчет. Пакет готов, найдено две угрозы, жду следующую порцию.
Кац облокотился на стол, нависая над импровизированной схемой.
— Гладко на столе. А как вы отследите отказ? Зависнет процессор, сбои́т память по питанию, и машина замолчит. Вы получите дыру в итоговом отчете и пустите необработанный брак дальше по маршруту.
— Введем тайм-аут, — Морозов сдвинул четвертую перфокарту чуть в сторону, визуально отделяя диспетчера от рабочих машин. — Диспетчер знает, что порция данных должна считаться двадцать минут. Если через двадцать пять ответа нет, статус пакета сбрасывается, и он выдается повторно на резерв. А перед склейкой результата мы сверяем журнал: все ли пакеты, ушедшие из Зеленограда, получили отметку о проверке.
Кац несколько секунд молча разглядывал картонные прямоугольники.
— Схема нахальная, но техническая логика в ней есть. — Он повернулся к Гальперину. — Марк, подготовь для них расширенный учебный массив. И второй набор — что-то близкое к настоящему кристаллу. Нарезать окнами сможешь?
Гальперин кивнул, делая новую пометку.
— Смогу. Мне нужно точное описание формата пакета. Порядок отчета, контрольные суммы, признаки повторного прогона. И структура служебной таблицы правил. — Он посмотрел на Морозова. — Если мы захотим прогнать вашу программу на наших стендах, какие машинно-зависимые обращения придется менять?
— Чтение сектора, вывод на экран, опрос клавиатуры, — сразу ответил Громов. — Эти векторы мы заранее вынесли в отдельные процедуры. Я дам список адресов. Саму логику проверки переписывать
Беспалов достал свой блокнот.
— Я посмотрю ограничения нашего компилятора, чтобы при переносе кода не вылезли чудеса с библиотеками.
Морозов открыл рабочий журнал и в несколько строк набросал распределение задач: Зеленоград готовит данные и помогает с адаптацией процедур ввода-вывода, а Владимир ставит машину.
Кац забрал со стола схему форматов данных и аккуратно сложил ее пополам. Гальперин рядом начал выписывать список процедур чтения и печати, тихо переговариваясь с Беспаловым о системных вызовах.
Громов потер переносицу и чуть наклонился к Морозову.
— Многомашинный участок, значит, — пробормотал он так, чтобы не слышали зеленоградцы. — Одной программы проверки теперь мало. Придется писать обмен, обработку отказов, очередь. Это еще один слой.
— Придется, — так же тихо ответил Морозов. — И серии из пятнадцати машин нам теперь точно мало. Для такого опыта нужна абсолютно одинаковая комплектация, один порядок проверки и запас ЭВМ под столом. Иначе мы будем искать не ошибки в топологии, а отлавливать расхождения из-за разной элементной базы.
За окном лаборатории начинало темнеть. Морозов защелкнул второй замок портфеля и повернулся к столу, где Гальперин уже заканчивал составлять черновик протокола.
Глава 32
Второй режим
Дисплей издавал едва слышный, высокий свист строчной развертки. Звук тонкой иглой сверлил уши, смешиваясь с гудением блока питания «Сферы». На монтажном столе лаборатории лежал распластанный макет видеоплаты. От системной платы к ВКУ тянулся аккуратно связанный жгут проводов; рядом лежали листы с таблицей уровней и пометками Наташи.
Олег Тимофеев чуть отодвинулся от экрана, потирая переносицу. После трех дней возни ВКУ перестало быть главным подозреваемым: дисплей держал синхронизацию, уровни красного, зеленого и синего каналов совпадали с таблицей, белое поле оставалось белым, черное — черным. Снаружи всё выглядело почти прилично. Как раз это Олегу и мешало.
Наташа Рогова стояла сбоку, скрестив руки. Взгляд ее скользил не по картинке, а по зеленым линиям на трубке осциллографа, выведенного на край стола.
— Дисплей живой, — сказала она. — Теперь проверяем саму «Сферу». Саша, запускай второй режим.
— Не сглазь, — сказал Олег. — Эти коробки любят обижаться, когда про них говорят хорошо.
Наташа не улыбнулась, но лист с таблицей уровней прижала к столу спокойнее. За последние дни Олег уже дважды обвинял ВКУ в грехах, которые потом оказывались на совести видеоплаты, и оба раза она терпеливо возвращала его к контрольным точкам.
— Пусть обижается после проверки, — ответила она. — Сегодня я хочу хотя бы один раз исключить исправный прибор и больше к нему не возвращаться.
У клавиатуры «Сферы-82» сидел Птицын. Он заметно старался держаться спокойно, но пальцы уже лежали на клавишах. Маленькую проверочную программу он загрузил с дискеты заранее: несколько коротких ассемблерных подпрограмм помещались в памяти и дальше переключались с клавиатуры.
Предыдущие проверки он уже показывал. Сначала была монохромная сетка для геометрии экрана: рамки, диагонали, контрольные метки по углам. Потом следовал атрибутный режим: монохромное точечное поле и байты цветовых атрибутов поверх него. Сегодняшний тест касался грубой цветной графики с крупным цветовым элементом — варианта для учебных графиков, простых схем и диаграмм.
— Сначала обычное поле, — сказал Птицын, глядя на экран. — Потом цвет поверх. Потом второй режим.
Олег махнул рукой, но без прежнего раздражения.
— Только без защиты диссертации, Саш. Показывай по порядку. Если поедет, остановишься и скажешь, на каком месте.
— У меня метки стоят на каждом переходе, — сказал Птицын. — Если съедет, будет видно не по ощущению, а по строке.
— Вот это уже разговор.
На экране появилась тонкая монохромная сетка. Белые линии стояли ровно, нижняя строка держала место, контрольные точки по углам совпадали с отметками на бумажной рамке, которую Наташа закрепила на кромке экрана.
Птицын нажал следующую клавишу.
Сетка осталась той же, но отдельные поля получили цвет: заголовок стал красным, левая шкала зеленой, несколько прямоугольников подсветились синим. Это был уже знакомый путь. Монохромное точечное поле оставалось основой, а рядом с ним видеоплата брала байты цветовых атрибутов. Программа писала картинку почти так же, как раньше, только добавляла данные для цветного вывода.
— Первый режим держится, — сказала Наташа. — Олег?
Олег склонился к экрану, потом к осциллографу.
— Держится. На краях чуть грязнее, но эта беда переживет до завтра.
Он сказал это с видимым усилием. Еще утром Олег готов был доказывать, что любая грязь на цветной картинке происходит от ВКУ, плохого кабеля, влажности воздуха и того, что кто-то не так посмотрел на кинескоп. Теперь спорить с прибором было бессмысленно: прибор показывал, что цветной выход слушается.
Птицын ждал. Наташа заметила это и кивнула.
— Давай второй.
Птицын набрал короткую команду. Экран погас на долю секунды, будто машина задумалась. Потом вместо сетки появилась мелкая цветная мозаика, выстроенная в подобие диаграммы. Красные, зеленые, желтые и синие клетки были крупнее физических точек экрана, но на расстоянии вытянутой руки уже складывались в плотную сетку: столбцы, лестница, несколько прямоугольных пятен.
Олег выпрямился.
— Вот ради этого и стоило мучить ВКУ.
Птицын улыбнулся, но рано.
Через несколько строк картинка поплыла. Красный столбец сместился вправо относительно контрольной сетки, зеленая полоса разорвалась на середине строки, а в верхней части экрана один ряд цветных клеток повторил предыдущий.
Олег наклонился к макету.
— Стоп. Это внутри машины.
— Я тоже так думаю, — сказала Наташа.
Она подвинула осциллограф ближе и переключила измерительный провод на контрольную точку видеоплаты. На трубке прибора побежали короткие пачки импульсов. Телевизионные уровни держались чисто. Синхронизация стояла на месте. Срыва развертки не было.
— Дисплей принимает то, что мы ему даем, — сказала Наташа. — А даем мы ему сбитый порядок чтения.
Олег уперся ладонями в край стола.
— В атрибутном режиме контроллер молотит строку за строкой, — заговорил он. — Считал байт монохрома, вывел восемь точек, подтянул байт атрибута.
Наташа придвинула к себе чистый лист и быстро начертила крупную сетку.
— Для грубой графики шаг адресного счетчика меняется, — она обвела ручкой одну из клеток. — Здесь используется отдельный цветовой буфер. Каждое значение должно удерживаться на экране квадратом четыре на четыре физические точки.
— Если гнать этот массив на прежней скорости, контроллер просто проскакивает адреса, — кивнул Олег. — Счетчик улетел вперед, телевизионный луч еще дорисовывает старый цветной блок. Вот фаза и ползет в сторону.
Птицын повернулся от клавиатуры.
— Значит, моя программа поймала другую ошибку. Прошлая сетка проверяла
— Да, — сказала Наташа. — Вот это и есть сегодняшний результат, даже если он выглядит уродливо.
Птицын посмотрел на экран уже иначе. Испорченная диаграмма перестала быть провалом и стала пойманной неисправностью.
Олег снова уставился на макет. Ему явно хотелось немедленно что-нибудь перепаять. Это было почти физическое движение: рука сама искала пинцет, кусачки, обрезок МГТФ.
— Для стенда можно сделать просто, — сказал он. — Пусть Саша заранее развернет крупную картинку в памяти: один и тот же цвет повторит четыре раза по строке и еще на четырех строках вниз. Тогда старый счетчик прочитает готовое поле, и на экране всё встанет ровно.
— Встанет, — сказала Наташа. — Только это будет не второй режим, а обман для опыта. Мы сожрем память развернутой картинкой и заставим программу делать работу видеоплаты. Второй режим нужен как раз затем, чтобы хранить маленький буфер, а удержание цвета на четыре точки и четыре строки делало железо.
Олег поморщился.
— Я знаю.
— Тогда не делай вид, что это только твоя плата. Громову всё равно понадобится описание для нижнего слоя МикроДОС: какой порт, какие значения, где лежит буфер, как вернуть обычный экран.
Олег дернул плечом, но промолчал. Имя Громова действовало лучше любого довода: все знали, что тот потом найдет в чужой схеме не только ошибку, но и виноватого.
— Саму МикроДОС мы сегодня не трогаем, — продолжила Наташа уже тише. — Но если ты сейчас заведешь опыт на одном листке, а Саша на другом, через неделю вы оба будете вспоминать адрес по памяти. А Женя будет спрашивать, почему это вообще называется документацией.
— Сначала надо заставить железо считать правильно.
— Да. И сразу записать, что именно мы заставили его делать.
Дверь лаборатории открылась. Вошел Андрей Горелов. В руках у него была тонкая папка с несколькими листами. Он остановился у порога, посмотрел на цветную мозаику на дисплее, потом на осциллограф.
— Я не вовремя?
— Как раз вовремя, — сказала Наташа. — Дисплей уже проверили. Ошибка в видеоплате.
Горелов подошел ближе.
— По экрану видно только, что красное убежало от зеленого.
— Сейчас покажу, куда именно, — сказал Олег.
Он коротко объяснил: первый цветной путь с признаками поверх обычного поля работает, второй режим с крупной точкой сбивается по адресам, ВКУ исправно, проблема в чтении видеопамяти. Горелов слушал молча. Только один раз поднял руку, остановив Олега.
— Как программа включает второй режим? — спросил Горелов.
— Сейчас Птицын пишет прямо в порт, — ответил Олег. — Для стенда это годится.
— А для рабочей машины?
— Для рабочей мы передадим Громову таблицу адресов и значений, — пояснила Наташа. — Громов заведет системный вход в нижнем слое МикроДОС. Прикладная программа будет просить нужный режим через систему.
Горелов одобрительно кивнул, опуская ладонь на картонную папку.
— Для закрытой 82В это принципиальный момент. При смене дешифратора экранные бланки полностью сохранятся. Запрос через систему оставит физические адреса на базовом уровне.
Олег усмехнулся:
— Вот так понятно.
— Привыкаю говорить по-человечески, — ответил Горелов с легкой улыбкой.
В дверях появились Володя Артемьев и Зоя Мельникова. Они пришли из соседней сборочной комнаты. Володя держал рабочий чертеж системной платы. Зоя прижимала к груди планшет с ведомостью комплектовки. Оба замерли на пороге, разглядывая рваные цветные прямоугольники на экране ВКУ.
— Можно? — осторожно спросил Володя.
Ребята пришли с конкретным вопросом сборки. Пустое место под цветовой узел требовало точного списка деталей, любая добавленная микросхема или панелька заставляла Зою оформлять новую заявку на склад.
— Заходите, — сказала Наташа. — Цветовой участок пока в сборку не отдавали.
Володя заметно выдохнул.
— Мы как раз за этим. Базовые платы на столах, по ним вопросов нет. Там всё по утвержденному листу: память, системная шина, питание, разъемы. А около видеовывода оставлено место под будущий цвет. Ребята спрашивают, это место пока обходить или уже ставить хотя бы панельки.
Он говорил спокойно, без попытки давить на Олега. Скорее боялся, что из-за одного неточного слова его отправят обратно с пустыми руками, а на сборочном столе снова начнут гадать.
Зоя разложила рядом ведомость.
— Я детали по цвету пока не брала, — сказала она. — Только отметила, что место есть. Если сейчас скажете ставить разъем или панельки, я выпишу отдельно. Если рано, так и напишу: участок ждать.
Наташа посмотрела сначала на Олега, потом на пустую область на чертеже. Решение было неприятным, но простым: нельзя превращать незавершенную схему в приказ для сборки.
— Панельки под логику пока отложим, — сказала Наташа. — Питание и разъемы согласуем с Любой. Базовые платы паяйте по утвержденному листу. Место под цветовой узел просто обведите карандашом и оставьте до отдельной схемы.
Володя развернул на свободном краю стола рабочий чертеж. Плотная бумага легла рядом с осциллографом. Синие линии показывали системную шину, память, контуры будущего видеоблока и пустую область.
— Значит, я прямо на ватмане помечаю, — Володя достал карандаш. — Чтобы в сборочной комнате не гадали, почему тут пусто. Если спросят — отправляю к вам.
Зоя молча внесла в ведомость только стандартную комплектовку.
Горелов посмотрел на записи Володи, затем перевел взгляд на Птицына.
— А в проверочной программе порт как задан?
Птицын потянулся к своим бумагам.
— В самом листинге есть комментарий. Плюс я составил отдельную табличку: номер порта, значение для обычного точечного поля с байтами атрибутов поверх, значение для грубой графики с крупным цветным элементом.
— Эту табличку держи под рукой, — кивнул Горелов. — Для Громова понадобится точная таблица адресов; по ней закрытая группа потом сверит бланки.
Дверь лаборатории скрипнула. Вошел Иван Михайлович. Он окинул взглядом стол, съехавшие цветные блоки на экране и Олега, сжимающего пинцет так, будто это холодное оружие.
— Ну? — спросил Михалыч. — Цвет горит, счастья нет?
— Горит, — отозвалась Наташа. — Второй режим едет мимо адресов. Обычные восемьдесят вторые можно собирать дальше, цветной кусок пока не трогаем. Как только Олег доведет адресацию до ума, отдадим Громову таблицу портов и областей памяти.
Михалыч посмотрел на чертеж Володи. Для него техническая заминка измерялась людьми, которые сейчас сидят за соседними столами в ожидании работы.
— Сколько плат сейчас в сборочной комнате?
— Пятнадцать заготовок, Иван Михайлович. Две уже начали по базе.
— Что скажешь людям?
Володя посмотрел в свои записи.
Зоя добавила:
— Я детали со склада под цвет пока не выписываю. Подготовлю список, когда Наталья и Люба дадут отмашку.
Михалыч одобрительно хмыкнул.
— Добро. Спорный кусок ждет отдельной схемы. Чтобы не получилось так: утром провод припаяли, вечером забыли откусить.
Он сказал это без злости, но Олег все равно поднял глаза: попало точно по адресу.
Олег кашлянул.
— Это вы на меня смотрите?
— На тебя, — сказал Михалыч. — У тебя руки быстрые. Иногда быстрее головы.
Олег хотел ответить, но передумал. Слишком похоже было на правду.
Следующие несколько часов лаборатория жила трудной, монотонной рутиной. Птицын прогонял тест, записывал адреса сбоев и менял порядок заполнения видеобуфера. Олег с паяльником висел над макетом, перебирая логику дешифрации. Наташа сидела рядом, сразу пресекая любые попытки скрестить два разных механизма вывода.
В обычном режиме видеоконтроллер читал экранную область как непрерывный поток точек, параллельно подхватывая байт из памяти атрибутов. Во втором режиме адресный счетчик шел по отдельному цветовому буферу, где каждый байт формировал крупный цветовой элемент размером четыре точки по горизонтали на четыре строки развертки вниз.
Из-под стола, от пучка питающих шин, поднялась Люба Ветрова. Она стряхнула пыль с рукава халата и положила щуп осциллографа на край столешницы.
— Олег, у тебя логика питание просаживает, — сообщила она. — На ярких цветовых блоках по шине идет звон. Завтра вы начнете искать ошибку адресации, хотя причина в обычном дребезге из-за падения напряжения.
— У нас всегда виновато питание, — отозвался Тимофеев, не отрываясь от схемы.
— Вы вспоминаете о нем в последнюю очередь. Зоя! — Люба повернулась к девушке, перебиравшей ведомости у соседнего стола. — Запиши в комплектовку. Обязательны блокировочные конденсаторы прямо у микросхем дешифрации видеопамяти. И землю видеоплаты тянуть отдельным проводом, без петли через ВКУ.
— Записала, — кивнула Зоя.
— Если Тимофеев попытается сэкономить место и припаять что-нибудь из старых запасов, сразу зови меня.
— Я все слышу, — возмутился Олег.
— Поэтому говорю вслух, — парировала Ветрова.
Птицын хмыкнул, глядя на экран.
К вечеру на макете появилась проверяемая схема. Олег вывел управляющую линию режима на отдельную контрольную точку. Наташа проверила щупом уровни, подтверждая правильную работу адресного счетчика. Затем она придвинула к себе чистый лист и начала выписывать технические параметры для команды программистов.
— Подготовим Громову точные данные, — пояснила она, вычерчивая колонки. — Порт управления, значение режима, базовые адреса экранной области и цветового буфера. Без этой таблицы он начнет угадывать логику по обрезкам проводов.
Птицын запустил первую тестовую программу. На экране развернулась ровная таблица: тонкие линии, подкрашенные поля, служебная строка внизу. Затем он ввел команду смены видеорежима. Таблица исчезла. Возникла крупная сетка цветных квадратов. Красные элементы стояли ровно, зеленая диагональ держала форму, а синий прямоугольник больше не смещался в сторону.
— Еще раз туда и обратно, — сказала Наташа.
Птицын нажал клавишу. Таблица. Цветная сетка. Таблица. Цветная сетка. Нижняя контрольная строка каждый раз возвращалась на место.
Олег выдохнул так, будто все это время держал в груди воздух.
— Жить будет.
Наташа посмотрела на экран дольше обычного. Ей тоже хотелось согласиться сразу, но привычка к повторяемости была сильнее радости.
— На макете, — поправила она.
Олег не стал спорить. Он только кивнул, устало и почти благодарно.
— На макете жить будет. Дальше будем делать по-человечески.
Горелов пододвинул свой журнал.
— Для рабочих бланков 82В пока берем обычное точечное поле с байтами атрибутов, — произнес он, вписывая строку. — Крупная графика остается стендовой проверкой. Ждем системного входа через МикроДОС.
Олег кивнул, принимая условие без спора.
Михалыч удовлетворенно крякнул.
— Вот теперь дело. Наташа, как допишешь параметры — оформляй чистовик схемы. Завтра пустим этот узел в серию.
Олег отложил пинцет. Возле паяльника лежал короткий монтажный провод с зачищенными концами — временная обходная перемычка, которую он оставил без дела. Он подцепил проводок ногтем, повертел в пальцах и сбросил в коробку с отходами.
Птицын замер перед монитором. Цветные элементы держались на своих местах, без сдвигов по сетке. Он торопливо ударил по клавишам, очистил буфер и вывел точечное поле. Дождался заполнения атрибутами. Снова переключил адресацию на грубую графику.
Птицын осторожно провел пальцем по краю клавиатуры и запустил переход еще раз.
Таблица.
Цветное поле.
Таблица.
На третьем переходе Олег не выдержал:
— Саша, хватит гонять. Мы уже поверили.
— Я не для вас, — сказал Птицын, не отрывая глаз от экрана. — Я для себя.
Олег хотел съязвить, но не стал. Наташа молча поставила на листе жирную галочку.
Глава 33
Пять и пятнадцать
Дверь лаборатории КБ-3 поддалась не сразу, скрипнув петлями под нажимом плеча. Иван Михайлович Ильин протиснулся в проём спиной вперёд, тяжело ступая стоптанными ботинками по линолеуму. В руках он держал массивную картонную коробку, перевязанную суровой бечёвкой, с размашистыми фиолетовыми штампами ОТК на боку. Следом, так же придерживая вторую коробку снизу, вошёл Морозов.
Воздух лаборатории смешался с запахом холодного складского помещения, промасленной бумаги и технического вазелина.
— Дорогу, — скомандовал Михалыч, кивком указывая на ближайший свободный стол. — И чашки уберите, пока я эту бандуру прямо на них не поставил.
Саша Птицын торопливо сгреб со столешницы провода и пустые чашки. Михалыч с кряхтением опустил коробку на стол. Висящая над ними лампа дневного света едва заметно мигнула. Морозов поставил ношу рядом, выдохнул, разминая затекшие пальцы, и смахнул с рукава пыль.
За дверью в коридоре стояли еще три такие же коробки.
Олег Тимофеев, до этого прозванивавший переплетение проводов на макетной плате цветового модуля, выпрямился, потирая переносицу. Володя Артемьев и Зоя Мельникова, стоявшие у зоны комплектовки, подошли ближе. Даже из дальнего угла, где обитали аналоговики, высунулись две любопытные головы.
— Вот ваши железные драгоценности, — Михалыч хлопнул ладонью по картону, выбивая облачко серой пыли. — Пять ИЗОТов. Добыты с боем, потом и такой-то матерью через зеленоградский контур и товарища майора.
Володя не отрывал взгляда от коробок. Пять абсолютно новых дисководов были редкостью. Зоя уже прикидывала, в какой журнал вписывать серийные номера.
Евгений Громов отодвинулся от клавиатуры.
— Пять штук, — кивнул Громов. — А партия новых машин у нас сколько? Пятнадцать.
— Пока пятнадцать, — ответил Морозов.
—
— Сергеев обещал выбить еще десять, — сказал Морозов, присаживаясь на край стола. — Но ты сам знаешь, сколько весит обещание без точной даты в накладной. Может, через месяц. Может, к лету. А может, нам пришлют не болгарские ИЗОТы, а что-то другое, что внезапно появится на складе.
Зоя тихонько вздохнула: ровная комплектовка партии не складывалась. Птицын переводил взгляд с Морозова на Громова, пытаясь понять, радоваться дисководам или готовиться к новому авралу.
* * *
Михалыч достал из кармана потертого пиджака перочинный нож, щелкнул лезвием и аккуратно, чтобы не повредить картон, разрезал бечёвку на первой коробке. Поднял створки. Внутри, в ложементе из пенопласта и слоях бумаги, лежал дисковод с широкой щелью для восьмидюймовых дискет и массивным рычагом замка.
Громов подошел ближе, сдвинул пенопласт и заглянул внутрь, выискивая разъем для шлейфа данных.
— Массивненько, — оценил он. — Шаговый двигатель, судя по весу, от трактора.
Птицын протиснулся между Михалычем и Громовым, заглядывая в коробку.
— Алексей Николаевич, а разве нельзя просто написать под этот ИЗОТ жесткие процедуры и забыть? — спросил Саша. — У нас же есть описание интерфейса. Шаг вперед, шаг назад, опустить головку, прочитать дорожку. Если мы знаем, что у нас пока только эти пять штук, почему не сделать систему прямо под них? В прошлых «Сферах» ведь тоже ИЗОТы стоят.
Громов шумно выдохнул.
— Саша, — начал он. — Если я напишу систему прямо под этот болгарский трактор, то завтра, когда Михалыч принесет нам не ИЗОТ, а, скажем, киевский накопитель или вообще ГДР-овский «Роботрон», твоя аккуратная программа пойдет прахом. Станет гвоздем, которым намертво прибили дверь.
Морозов поднял руку.
— Женя абсолютно прав, — Морозов взял со стола чистую перфокарту и повернулся к Птицыну и Володе Артемьеву. — Парни, представьте, что прикладная программа — это пассажир в такси, которому нужно доехать до вокзала. Это и есть команда «прочитай сектор». Ему абсолютно все равно, как водитель выжимает сцепление, какой жиклер стоит в карбюраторе и как именно поворачиваются колеса.
Морозов нарисовал на перфокарте две горизонтальные линии, разделив пространство на три слоя.
— Если мы пришьем логику чтения жестко к ИЗОТу, наш пассажир будет вынужден сам рулить. И когда мы поменяем машину на другую, он не сможет ехать, потому что педали будут в другом месте. Наша МикроДОС должна быть разделена. Верхний слой — программы. Средний слой — логика файлов и распределения дискового пространства. А вот нижний слой, самый зависимый от железа, должен прятать в себе всю механику.
Громов коротко кивнул.
— Программа просит: дай мне логический сектор номер десять, — подхватил Громов. — А нижний слой лезет в таблицу параметров. Смотрит: ага, у нас сейчас подключен ИЗОТ. У него столько-то дорожек, такой-то шаг, задержка после перемещения головки — пятнадцать миллисекунд. И сам крутит этот шаговый двигатель. Все остальное железо нас не волнует.
Володя Артемьев, внимательно слушавший разговор, почесал затылок.
— Подождите, Алексей Николаевич. А как мы тогда партию собирать будем? — спросил он. — У нас пятнадцать плат. Если дисководов всего пять, значит, машины будут физически разными? Одни с контроллерами, другие без?
Зоя тут же открыла толстую прошнурованную тетрадь, готовясь записывать.
— Вот именно, — поддержала она Володю. — Как мне их по ведомости проводить? «Сфера-82 полноценная» и «Сфера-82 обделенная»?
Морозов улыбнулся.
— Нет, Володя. Машины будут абсолютно одинаковыми. Системная плата, память, порты — всё это ставится на все пятнадцать штук. Разъем под контроллер дисковода паяем везде. Машина без установленного ИЗОТа остается стандартной «Сферой-82», которая просто ждет свой привод.
— Запиши нормальными словами для паспорта, — попросил Громов Зою. — «Базовая конфигурация, подготовленная к установке накопителя». И пусть только кто-нибудь попробует припаять провода напрямую к плате вместо того, чтобы поставить нормальный разъем. Я лично этому рационализатору руки оторву.
* * *
Ближе к полудню в кофейной комнате на шатком столике у окна зашумел электрический чайник. Рядом стояли ручная мельница и несколько кружек.
Морозов стоял у окна, глядя на заснеженный внутренний двор института. Громов сидел на подоконнике с кружкой, в которую плеснул сгущенки. Птицын примостился рядом.
— Пять дисководов на пятнадцать машин, — задумчиво произнес Морозов, не оборачиваясь. — Ждать милости от снабжения мы не можем. Зеленограду нужны рабочие стенды. Школе нужны машины. Нам самим нужно на чем-то гонять тесты.
— Кассеты, — мрачно предложил Громов. — Будем грузить МикроДОС с ленты по десять минут, слушая писк. Как в каменном веке.
— Нет. Это убьет саму идею профессионального рабочего места. Человек не должен ждать загрузки операционной системы дольше, чем выкуривается сигарета. — Морозов повернулся к лаборатории. — Жень, что мы можем достать быстрее и в больших объемах, чем точную механику?
Громов прищурился.
— Кремний. ПЗУшки. Микросхемы памяти достать проще, чем прецизионные моторы.
— Именно. Значит, часть стартовой логики должна переехать в ПЗУ.
Громов резко поставил кружку на подоконник, едва не расплескав кофе.
— Алексей, тормози. Только старт. Если ты сейчас предложишь зашить всю операционную систему в постоянную память, я уволюсь. Я потом каждую ошибку в коде буду исправлять паяльником и ультрафиолетовой лампой! Обновляемость системы — это святое.
Морозов рассмеялся, примирительно подняв руки.
— Успокойся. Только старт. В ПЗУ будет лежать минимальный загрузчик. Таблица входов нижнего слоя. Базовый опрос клавиатуры и вывод на экран, чтобы машина могла хотя бы моргать курсором. И самое главное — она должна уметь прочитать первый блок с диска.
— А если диска нет? — тихо спросил Птицын. — Если это одна из тех десяти машин, которым ИЗОТ не достался?
Морозов ободряюще кивнул.
— Хороший вопрос, Саш. Если диска нет, машина должна запросить этот загрузочный блок по кабелю у той, где он установлен.
Мимо кофейного столика как раз проходила Люба Ветрова. Услышав последнюю фразу, остановилась.
— По кабелю? — переспросила Люба. — Через весь стол? Алексей Николаевич, вы помните, что у нас тут не вакуум? Сначала докажите мне, что этот ваш обмен не будет ловить помеху от каждого включенного паяльника в комнате. И от того, что Михалыч в соседнем кабинете настольную лампу включил.
— Докажем, Люба, — кивнул Морозов. —
— Ловлю на слове, — Люба поправила очки и пошла дальше.
Громов проводил ее взглядом, чуть прищурившись, и повернулся к Морозову.
— То есть, ты хочешь сказать, что машина без дисковода будет кричать в линию: «Дайте систему!»? — уточнил Громов.
— Да. По тому самому кольцу, — кивнул Морозов. — Узел с дисководом получает маркер и отправляет загрузочный блок по нужному адресу.
Птицын нахмурился, оценивая алгоритм.
— Запросы физически следуют по очереди с маркером. Если загрузки ждут несколько машин, они начнут просить одни и те же блоки друг за другом. Мы получим многократные последовательные чтения дискеты на каждый ответ.
Громов отрицательно качнул головой.
— Предварительное чтение. Ведущий узел при запуске сетевого загрузчика один раз считывает системную область в выделенный буфер ОЗУ. На время загрузки других машин он занят кольцом. На запрос мастер выдает нумерованный блок из буфера. Ошибка контрольной суммы принятого по линии блока ведет к повторной передаче того же блока из оперативной памяти.
— Для передачи используется чистая системная область с дискеты. Текущее содержимое памяти ведущей машины остается в стороне, — добавил Морозов. — Повторное чтение дискеты нужно только после смены системного носителя, нового запуска сетевого загрузчика или в случае, если контрольная сумма самой системной области в буфере не совпала с эталонной.
Они подошли к закрепленному на стене листу ватмана. Морозов взял карандаш и нарисовал четыре прямоугольника, соединив их линиями. Олег Тимофеев оторвался от осциллографа. Наташа Рогова, заполнявшая таблицу уровней сигналов, подошла ближе.
— Наше кольцо, — Морозов коснулся грифелем верхнего прямоугольника. — Здесь машина с ИЗОТом. Узел номер один, мастер-загрузчик. А внизу, — он обвел три нижних прямоугольника, — стоят три рабочие машины, которым привод сейчас не достался. Узлы два, три и четыре.
Птицын внимательно смотрел на ватман. До этого он возился со статусами передачи, а теперь схема требовала написания полноценного загрузчика.
— Саш, стендовый загрузчик — твой участок, — сказал Морозов. — Маркер ходит по кругу. Пустая машина получает право говорить и просит: «Жду загрузочный блок ноль». Узел один ловит запрос, берет данные из буфера, дожидается маркера и выдает блок в линию.
— Я же только базовый обмен с буфером наладил, — произнес Птицын, с тревогой глядя на схему. — Одно дело просто пакеты туда-сюда гонять и ошибки сумм ловить, а тут надо систему в пустую память укладывать и управление ей передавать.
Громов усмехнулся, опираясь плечом о край доски.
— Вот именно. Транспортный уровень ты поднял, молодец. Теперь поверх этих пакетов тебе надо написать строгий автомат, о котором мы только что говорили. Цикл приема блока, склейка в памяти, подтверждение или повтор. И так по кругу, без самодеятельности, пока весь стартовый код не окажется в оперативной памяти.
— А сколько байтов в блоке? — спросил Птицын.
— Не больше ста двадцати восьми, — не задумываясь, ответил Громов, — Небольшой кусок. Чтобы не съедать рабочую область буферами, и чтобы, если помеха его побьет, можно было быстро запросить его заново.
Олег Тимофеев шагнул вперед, глядя на схему.
— Кольцо на доске и кольцо на монтажном столе — это разные физические миры, Алексей Николаевич, — заметил он, крутя в пальцах обрезок провода. — Нам нужны аккуратные коаксиальные кабели. Нормальные байонетные разъемы на задней стенке. И понятное поведение линии, если кто-то пнет кабель ногой или выдернет его на ходу. Кольцо не должно обрываться целиком из-за одного дурака.
— И делать это все будем последовательно, — сказала Наташа, — Сначала стабильное кольцо на двух узлах. Снимаем уровни, пишем в протокол. Если чисто — цепляем третью машину. И только потом, Саша, пускаем твой реальный загрузочный блок, а не всё сразу.
Морозов кивнул, соглашаясь со всеми условиями. Схема на доске постепенно обрастала реальными номиналами и допусками.
— Принято, — кивнул Морозов. — Саш, слышал Наташу? Сначала стабильная физика на двух узлах, потом транзит, потом обрыв.
Птицын глубоко вздохнул, пряча исписанный блокнот в карман.
* * *
Пять коробок с дисководами стояли у стены. Володя Артемьев раскладывал на столе системные платы, сверяя их с чертежами. Зоя сидела за столом над ведомостью.
Михалыч стоял рядом.
— Значит так, молодежь, — гудел Михалыч. — Железо само себя не учтет. У меня на балансе пятнадцать комплектов деталей для плат и пять приводов. Дефицит не должен расползтись по ящикам. Каждая пайка — строго по схеме.
Володя поднял голову от платы.
— Иван Михайлович, Алексей Николаевич, — позвал он, заметив проходящего мимо Морозова. — Я хочу уточнить. Если мы собираем одинаковые машины под кольцо, значит, на каждой из пятнадцати плат я должен впаять разъем для сетевого кабеля? И микросхемы приемопередатчиков?
— Верно, Володя, — подтвердил Морозов, останавливаясь. — Схема сопряжения для кольца становится базовой комплектацией «Сферы-82».
— А ПЗУ с загрузчиком? — не унимался Володя. — Его тоже на все пятнадцать?
— На все. Даже та машина, у которой будет свой ИЗОТ, должна иметь возможность загрузиться по сети, если ее собственный привод выйдет из строя.
Зоя пощелкала костяшками счетов.
— Алексей Николаевич, тогда как мне маркировать готовые изделия? — спросила она. — Они же вроде одинаковые, но на деле — разные.
Морозов придвинул стул и сел рядом со сборщиками.
— Зоя, давай добавим в паспорт раздел для отметок контроля. База у всех одинаковая. Пиши: «дисковый тракт проверен с эталоном», «сетевой обмен проверен» и подписи. А в самом конце просто указывай комплектацию: либо номер локального ИЗОТа, либо «режим ожидания накопителя».
Михалыч кивнул.
— Вот это дело. Без бумажки мы букашки, а с бумажкой — вычислительный центр. Пять ИЗОТов прямо сейчас получат инвентарные номера краской на задней стенке. Я вам не дам их путать.
Громов крикнул из-за соседнего стола:
— И подпишите на каждом приводе, по какой таблице параметров его отстроили! А то вы их потом перепутаете, и мы будем полдня искать, почему одна машина читает нормально, а другая хрустит головками, как трактор на щебёнке!
Михалыч погрозил Громову сухим, узловатым пальцем, но спорить не стал. Он и сам понимал, что программист прав.
* * *
Вечером Морозов подошел к столу видеогруппы. Олег и Наташа сидели перед раскрытым телевизором. На экране светилась стабильная, хотя и грубоватая цветная мозаика — результат работы второго, графического режима видеоплаты «Сферы-82».
Морозов долго смотрел на экран. Цвета были чистыми, границы прямоугольников
— Работает, — негромко сказал Морозов. — Выжали из кинескопа максимум.
— Работает, — эхом отозвалась Наташа, не отрывая взгляда от осциллографа. — Прогрев держит. Питание Люба вылизала, наводок по земле почти нет.
— Хорошо, — сказал Морозов. — С новой машиной понятно. А схему приставки для старой «Сферы-80» пора готовить к публикации.
Олег отложил отвертку:
— Я тут прикидывал. Журнальную доработку надо описать максимально просто. Радиолюбитель или кружок спаяет её на коленке из доступных деталей.
Громов подошел к их столу.
— Главное, чтобы старая машина оставалась черно-белой по умолчанию, — напомнил он. — Основной видеовывод не трогаем.
— Не трогаем, — кивнул Олег. — Плата расширения просто слушает определенный порт. Программа пишет текст, как обычно, а потом кидает координаты и код цвета. Приставка подмешивает цвет поверх монохрома. Никакой графики, только раскраска букв и фона. Схемотехнически это не так сложно: регистр-защелка, немного логики, простой ЦАП на резисторах.
— И программное управление простейшее, — добавил Громов. — Вызов порта командой OUT в Бейсике. Пока никаких переделок ПЗУ.
Пусть сначала побалуются раскраской из-под Бейсика или через маленькую кассетную библиотеку. Если приживется — тогда будем думать о новой версии системы для восьмидесятых. Главное — чтобы старая программа даже не догадывалась, что она работает в цвете, пока сама его не попросит.
Птицын, пришедший забрать осциллограф, с интересом спросил:
— А мои цветовые тесты, которые я для 82-й машины написал, придется сильно переделывать под эту приставку?
Громов усмехнулся.
— Придется, Саша. Адресация портов другая. И мы это обязательно перепишем. Но только после того, как ты покажешь мне, как твой сетевой загрузчик без ошибок загружает систему в пустую память по кольцу десять раз подряд.
* * *
На центральном столе стоял один из распакованных дисководов ИЗОТ. Толстый плоский шлейф тянулся от него к плате опытной «Сферы-82». Володя Артемьев наклеивал на заднюю панель привода бирку с инвентарным номером.
Зоя Мельникова сидела за столом, перенося карандашные отметки в чистовик ведомости. В графе «Комплектация» напротив первых пяти номеров появились галочки, а напротив остальных десяти — четкая надпись: «Резерв под локальный накопитель».
Громов выписывал на листке системные входы для нового нижнего слоя МикроДОС.
Морозов стоял у стены. На столе между двумя платами «Сфер» лежал первый спаянный коаксиальный кабель с массивными разъемами.
Птицын сидел перед экраном второй, «бездисковой» машины. Он запустил простейшую проверочную программу — пока еще не полноценную загрузку по линии связи, а только тест физического уровня поверх программы опроса кольца.
На экране моргнул курсор. Затем появилась строчка:
УЗЕЛ 2: ЗАПРОС МАРКЕРА…
Спустя долю секунды, когда первая машина обработала сигнал и перевела линию в нужное состояние, на экране Птицына высветилось:
МАРКЕР ПРИНЯТ. ПЕРЕДАЧА ТЕСТОВОГО БАЙТА… ОК.
Морозов смотрел на светящиеся буквы. Коробки с дисководами так и стояли у стены — пять штук на пятнадцать машин. Он подошел к столу Птицына, проверил подключение сетевого кабеля к разъему системной платы и кивнул.
Глава 34
Клетчатая рубашка
Шум в заводской столовой стоял сплошной, густой, замешанный на звоне алюминиевых вилок, грохоте жестяных подносов по трубчатым направляющим раздачи и запахе пережаренного лука. Воздух казался влажным и тяжелым от пара, поднимавшегося над огромными алюминиевыми кастрюлями с супом. Свободных мест не было. Люди ели быстро, сосредоточенно, изредка перекидываясь короткими фразами.
Морозов сидел за угловым столиком у окна, методично разрезая ребром вилки плотную, щедро обвалянную в сухарях столовскую котлету. Напротив него Евгений Громов совершал сложные акробатические маневры: левой рукой он удерживал на весу тетрадный листок в клеточку, защищая его от брызг подливки, а правой пытался зацепить скользкое картофельное пюре.
Между тарелками, прямо на влажной клеенке, лежала причина их спора.
— Относись к этому как к схеме, Женя, — Морозов указал вилкой на листок.
На бумаге убористым почерком Морозова была выведена всего одна длинная строка кода на языке Си. Короткая функция, вычисляющая день недели по заданной дате. Никаких громоздких условных переходов, никаких многоэтажных проверок. Только базовая арифметика, пара побитовых сдвигов вправо, заменявших деление на степени двойки, и в конце — тернарный оператор, изящно сводящий финальный выбор между двумя значениями в конструкцию с вопросительным знаком и двоеточием.
int get_day(int d, int m, int y) { return ((y -= (14 — m) / 12) || 1)? (d = (d + y + (y 2) — y / 100 + (y / 100 2) + 31 * (m + 12 * ((14 — m) / 12) — 2) / 12) % 7)? d: 7: 0; }
Громов наконец сдался, отложил вилку и пододвинул листок ближе, брезгливо огибая мокрый след от чьего-то чужого стакана.
— Это прекрасно и ужасно, — проворчал программист, всматриваясь в плотную вязь латинских символов. Он поднял взгляд на коллегу. — Нет, Алексей Николаевич, ты послушай. Это абсолютно прекрасно. Но это совершенно ужасно.
Он постучал тупым концом карандаша по сдвоенным угловым скобкам побитового сдвига.
— Да, компактно. Да, ты упаковал три экрана на ассемблере в одну строчку. Машинное время экономится, транслятор проглотит это вмиг. Но это же шифровка! За такое в приличном проекте по рукам бьют.
Морозов отпил компот из граненого стакана. Компот отдавал сухофруктами и хлоркой.
— Это выразительность, — возразил он, чувствуя давно забытый азарт чистого программистского спора, далекого от режимов, планов и нормоконтроля. — Язык позволяет тебе сжать мысль до формулы. Я ведь даже оператор «запятая» использовать не стал, чтобы не плодить банальные последовательные команды. Видишь эти две вертикальные черты? Чистая магия короткого замыкания через логическое «ИЛИ». Мощнейший трюк: этот костыль с единицей заставляет компилятор жестко споткнуться, зафиксировать точку останова и гарантированно обновить год прямо в полете, до начала основного расчета. Никакого неопределенного поведения, всё строго по стандарту! Ты просто говоришь машине: пересчитай год, проваливайся по условию в формулу, сдвинь биты в регистре, а в конце проверь — если истина, бери левое, если ложь — правое. Всё.
— Отлично, — Громов саркастично усмехнулся, прищурив уставшие глаза. — А теперь представь, что этот код через год откроет какой-нибудь вчерашний выпускник. И у него на входе окажется кривая дата. Например, тридцать второе мартобря. Знаешь, что сделает твоя гениальная формула с двойным «ИЛИ»? Она радостно зафиксирует твою точку останова, сдвинет биты, проглотит мусор, выплюнет тебе какой-нибудь «минус третий день недели» и
Морозов кивнул, соглашаясь. Плотность кода радовала автора, но убивала того, кто приходил следом.
— Для производственного кода, — примирительно сказал Морозов, — один такой фокус хуже десяти скучных, но понятных процедур с комментариями. Согласен. Но я показываю тебе принцип. Если мы тащим Си на «Сферу», мы должны понимать, какую гибкость он дает…
— Вы не возражаете?
Голос прозвучал сверху, сухо и уверенно.
Морозов поднял голову. Рядом со столиком стоял человек лет тридцати. Худощавый, в очках с массивной роговой оправой и потертой фланелевой рубашке в крупную сине-белую клетку. В руках он держал стандартный жестяной поднос, на котором сиротливо жались тарелка с такой же котлетой, два куска серого хлеба и стакан чая.
Морозов оглядел столовую. Действительно, ни одного свободного стула. Он молча кивнул и сдвинул свою тарелку, освобождая край стола.
Незнакомец сел, аккуратно сгрузил посуду с подноса, сам поднос прислонил к ножке стола. Взял вилку и начал есть. Ел он быстро, механически, глядя прямо перед собой.
Громов, недовольный тем, что их прервали, снова пододвинул к себе листок.
— Гибкость он дает, — продолжил программист вполголоса, игнорируя соседа. — Только эта гибкость нам боком выйдет. Мы еще МикроДОС до конца не вычистили от мусора, а ты уже предлагаешь людям писать иероглифами.
Незнакомец в клетчатой рубашке замер с занесенной над тарелкой вилкой. Он медленно перевел взгляд на листок. Несколько секунд он просто разглядывал строчку вверх ногами, слегка наклонив голову — словно мысленно накладывал только что услышанные из их спора термины на чужие закорючки. Наконец, его взгляд зацепился за самый конец выражения.
— Я в этом языке не силен, — спокойно произнес он, не отрывая глаз от бумаги. — Но календарный остаток по модулю семь узнаю в любом гриме, даже перевернутым. Дело здесь не в иероглифах.
Громов медленно повернул голову. Во взгляде программиста читалось откровенное возмущение: мало того, что подсел, так еще и лезет в чужой код.
— Простите? — язвительно уточнил Громов.
Незнакомец отложил вилку на край тарелки и поправил очки на переносице.
— Вы сейчас полминуты спорили о том, как компактнее упаковать вычисление, и упадет ли компилятор на вашем «коротком замыкании». Но вы смотрите не туда.
Незнакомец ответил не сразу. Он методично доел картофельное пюре, собрал остатки подливки мякишем серого хлеба и отправил в рот. Затем не спеша вытер пальцы тонкой бумажной салфеткой.
Громов уже открыл рот для отповеди, когда сосед придвинул к себе чистую салфетку из пластикового стаканчика на столе.
— Запись изящная, спору нет, — спокойно произнес он. Из нагрудного кармана клетчатой рубашки появился цанговый карандаш. Тонкий грифель легко коснулся рыхлой бумаги, набросав три небольших блока. — Ожидание, прием, расчет. В лабораторных условиях сработает отлично.
Он провел дугообразную отводную стрелку вниз от среднего квадрата.
— На практике данные приходят грязными. Напряжение в кабеле просело, прошла наводка от цехового оборудования, пропал бит в кадре. Ваша короткая формула попытается честно прожевать этот мусор. В промышленной системе всегда закладывают запасной маршрут. Устройство должно четко понимать, куда уходить при получении битого формата, как очищать буфер и каким путем возвращаться к исходному ожиданию. Без страховки алгоритм просто зависнет до аппаратного сброса.
Громов нахмурился, разглядывая нарисованную схему. Откровенное раздражение сменилось профессиональной настороженностью. Морозов молчал. Ему определенно нравилась эта сухая логика практика, привыкшего не доверять физической среде.
— Вы из заводской АСУ? — спросил Морозов, внимательно разглядывая собеседника.
— Из нее, — незнакомец спрятал карандаш обратно в карман рубашки и снова взялся за вилку. — Точнее, был там до вчерашнего дня. Занимался сопряжением. Станки с ЧПУ, длинные линии, телетайпы. Там, знаете ли, линия может молчать секунду, может прислать половину кадра, а может повторить вчерашний ответ, потому что реле залипло. Если вы заранее не нарисуете, как машина выходит из ступора, потом весь цех будет бегать и искать крайнего.
Он отрезал кусок котлеты, отправил в рот. Прожевал.
— Меня, собственно, вчера перевели в ваш институт, в КБ. Сказали, собирают локальную сеть, а обмена толком нет, одни провода. Я после обеда собирался искать Алексея Николаевича Морозова. Говорят, он у вас там за главного.
Громов поперхнулся компотом. Закашлялся, прикрывая рот рукой, и сквозь кашель выдавил короткий смешок.
Морозов аккуратно промокнул губы салфеткой, не той, на которой были нарисованы состояния, а чистой. Отодвинул пустую тарелку.
— Нашли, — спокойно сказал он.
Незнакомец перестал жевать. Он перевел взгляд с откровенно ухмылявшегося Громова на Морозова, проглотил еду, взял стакан и кивнул.
— Вадим Сергеевич Кравец, — представился он. И добавил, указывая подбородком на тетрадный листок: — Я спорил не с должностью. Я спорил с кодом.
— И поспорили по делу, — ответил Морозов, не скрывая удовлетворения. Именно такой человек ему сейчас был нужен. — Допивайте чай, Вадим Сергеевич. Сказок не обещаю, но автомат состояний вам рисовать придется много.
* * *
Они вышли из столовой в гулкий, выкрашенный до половины зеленой масляной краской коридор первого этажа. Кравец нес свой пустой поднос к окну приема грязной посуды, машинально выверяя шаг, чтобы не столкнуться со встречными инженерами.
— Значит, так, Вадим Сергеевич, — Морозов шел рядом, заложив руки в карманы брюк. — В декабре мы собрали на столе сеть-кольцо. Три машины. Одна передает маркер, вторая принимает, третья слушает. Написали простенькую программу на ассемблере, пакеты пошли. Для лабораторного отчета этого хватило.
Кравец сгрузил поднос в окно, где грузная женщина в белом фартуке с грохотом сортировала тарелки. Вытирая руки о штанины, он повернулся к Морозову.
— На столе всё всегда работает, — сухо заметил он. — Какая длина кабеля была?
— Три метра, — подал голос Громов, шагавший с другой стороны. — Идеальные условия.
— Понятно, — Кравец чуть скривил губы. — А теперь вы хотите вытянуть это в реальный цех или соседнее здание. И вдруг выяснится, что провод ловит наводки от сварочного аппарата, земля у машин разная, а половина данных бьется в пути.
— Именно, — кивнул Морозов. — У нас физику линии тянет опытный аналоговик старой школы, а пакеты перебрасывает молодой программист. И между ними зияет дыра. Железо отдельно, код отдельно, а как машина реагирует на сбой связи — толком не описано, а у нас на всё рук не хватает.
Они подошли к широкой
— Нам нужен нормальный профиль сопряжения, — сформулировал Морозов, поднимаясь по ступеням. — Чтобы при потере пакета ЭВМ не висла, а писала ошибку, ждала и запрашивала повтор. Буфер, кадр, контрольная сумма. Проект СФ-ЛИНК-81. Возьметесь?
Кравец не задавал лишних вопросов о зарплате или рабочем месте. Его мозг уже переключился в режим проектирования.
— Что считается потерей сообщения? — спросил он на ходу, глядя на ступени под ногами. — Отсутствие несущей или несовпадение контрольной суммы?
— И то, и другое, — ответил Громов.
— Кто имеет право держать маркер при старте системы? Как разрешаются коллизии, если две машины одновременно решат, что сеть пуста?
— Вот об этом вы и будете спорить с Птицыным и Петром Ивановичем, — Морозов остановился на площадке третьего этажа.
Коридор здесь выглядел иначе. Зеленую краску сменили светлые панели, на полу лежал свежий линолеум, но главное — путь преграждала массивная деревянная стойка с прозрачным стеклом наверху. Внутренний пост ВОХР. Физическая граница режима.
За новым столом сидел дежурный. Тот самый молодой, скуластый парень в безупречно застегнутой форме, который охранял этот периметр с января. Перед ним лежала пухлая, прошитая суровой ниткой амбарная книга. Обычный НИИ остался позади. Здесь начиналась рабочая зона КБ «Сфера».
Морозов достал из кармана пропуск — красную книжечку со спецотметкой. Громов молча положил свою рядом.
— Добрый день, — Морозов кивнул охраннику. — К нам пополнение. Направление из отдела кадров должно быть у вас в списках. Кравец Вадим Сергеевич.
Дежурный бросил сухой, цепкий взгляд на подошедшего и начал водить пальцем по списку, пришпиленному к деревянной столешнице.
— Есть такой. Предписание номер сорок два, — коротко отчеканил он. — Ваш паспорт.
Кравец достал из заднего кармана брюк документ. Охранник въедливо сверил фотографию с оригиналом, затем аккуратно переписал данные в журнал.
— Распишитесь, — дежурный развернул книгу к Кравцу. — И напоминаю: вынос любых бумаг, носителей, чертежей или радиодеталей за периметр — строго по сопроводительной ведомости.
— Понял, — Кравец быстро поставил размашистую подпись.
Металлический язычок турникета с лязгом освободил проход, впуская их внутрь.
В лаборатории КБ-3 стоял привычный рабочий гул. На центральных столах громоздились осциллографы, мотки проводов и серые корпуса будущих серийных машин.
Саша Птицын сидел у окна, сгорбившись над разобранным блоком питания. Он аккуратно выпаивал подозрительный конденсатор, но, заметив Морозова, отложил паяльник и вытер лоб тыльной стороной ладони.
— Алексей Николаевич, я тут по питанию посмотрел… — начал он.
— Питание потом вместе с Любой проверите, — спокойно ответил Морозов. — Подойди сюда, Саш. У нас к тебе сетевой вопрос.
Птицын вытер руки куском ветоши и подошел.
— Знакомься. Это Вадим Сергеевич Кравец, — Морозов указал на нового инженера. — Он из заводской АСУ. Поможет довести наш кольцевой обмен до нормального рабочего вида.
Кравец окинул Птицына оценивающим, чуть скептическим взглядом. Молодой парень, очки набекрень, пальцы в следах от канифоли. Классический паяльщик-энтузиаст.
— Это вы написали тестовую программу для декабрьского прогона? — спросил Кравец без предисловий.
— Нет, основу писал Евгений Александрович, а я сейчас перевожу её на прерывания и кольцевой буфер, — Птицын слегка выпрямился, почувствовав вызов.
— Как программа обрабатывает ситуацию, когда пакет ушел, а подтверждение о приеме не вернулось?
Вопрос прозвучал сухо. Это была классическая проверка на «синдром кустарной самоделки», когда машина намертво зависает, ожидая потерянный байт. Птицын даже не моргнул.
— Аппаратный таймер отсчитывает сто миллисекунд, — спокойно ответил Саша. — Если к этому моменту подтверждения нет, программа сама сбрасывает регистр приемника, пишет код ошибки в кольцевую таблицу состояний и инициирует повторный запрос. Никаких глухих зависаний.
Кравец чуть приподнял брови, обдумывая ответ. Он явно ожидал услышать про ручной сброс и перезагрузку.
— Аппаратный таймер и сброс регистра? — Кравец посмотрел на Птицына с появившимся уважением. — Для лабораторного стенда весьма недурно. Кто подсказал?
Громов, стоявший чуть позади, довольно усмехнулся.
— Старшие товарищи подсказали, — честно признался Птицын. — Заставили развязать логику и посадить обрыв на таймер. Но код я сам переписал.
— Значит, мы сработаемся, Александр, — кивнул Кравец, окончательно сменив тон. — Раз вы понимаете, что такое время ожидания линии, мне не придется объяснять вам азы. Осталось только привести ваш журнал к нормальному промышленному виду.
Птицын серьезно кивнул.
— Если скажете, как правильно формировать этот журнал для цеха — сделаю. Мне главное, чтобы железо из-за помех не простаивало.
Морозов удовлетворенно наблюдал. Кравец не стал давить авторитетом, а Птицын — защищать недоработку.
— Обустраивайтесь, Вадим, — Морозов указал на свободный стол у стены. — Птицын выдаст вам распечатки кода и введёт в курс дела по «Сфере» и каталогу рабочих дискет. И Петра Ивановича отыщите, он где-то в соседней комнате макет собирает. А у нас с Женей еще одно дело.
* * *
Коридор заканчивался массивной деревянной дверью. У маленького столика дежурный подвинул Морозову прошнурованный журнал с красной диагональной полосой. Алексей Николаевич вписал время, расписался и передал ручку Громову. Замок сухо щелкнул.
За порогом пахло мастикой, старой бумагой и металлом. Воздух казался пересушенным. Под потолком ровно гудели люминесцентные лампы. Центр комнаты занимали четыре массивных стола, сдвинутые в прямоугольник и застеленные зеленым сукном. У стены темнел серый сейф, перетянутый шпагатом с пухлой пластилиновой печатью, рядом на тумбочке стоял аппарат прямой связи. Вычислительную машину для группы обещали выделить из новой малой партии после сборки в лаборатории. Сейчас на сукне лежали папки, мотки многожильных кабелей, разъемы и стопки номерных бланков.
Горелов поднялся навстречу, кивком указывая на свободные стулья.
— Проходите. Павел Андреевич вас уже заждался.
Ширяев стоял у окна, держа двумя руками плотный запечатанный пакет. Тамара Николаевна Егорова у стола аккуратно перекладывала листы через синюю копирку.
— Осторожнее с бланками, — тихо попросила она, сдвигая стопку на край. — Свежая копирка, легко смазать.
Ширяев подошел к столу, удерживая пакет на весу.
— Уральский промышленный узел, Алексей Николаевич, — тихо произнес он. — Транспортная задача. Маршрутизация грузов, комплектование партий, тоннаж, устранение встречных порожних пробегов. Ваши ребята после Олимпиады придумали отличные эвристики для отсечения тупиковых вариантов расчёта. Для учебных задач алгоритмы работают блестяще. Здесь же цена ошибки измеряется реальными вагонами, забитыми путями и сорванными сроками.
Морозов отодвинул стул и сел.
— Алексей Николаевич, на крупном узле картина меняется постоянно, — Ширяев положил запечатанный пакет на край стола. — Заявки, свободные вагоны, подача платформ, путевые ограничения сыплются
— Зависит от архитектуры, — ответил Морозов. — Диспетчерская система реального времени работает по своим законам. Проверяемый расчетный цикл требует иного подхода.
— Мне нужен плановый расчет и возможность пересчитать маршруты при сбое, — Ширяев говорил как прагматик, привыкший к работе на земле. — Диспетчер обязан видеть свежую сводку. При этом ему предстоит подписывать конкретный результат на конкретный час.
Морозов обдумал сказанное, выстраивая архитектуру будущего рабочего места.
— Значит, создание живой информационной системы оставим на следующие этапы. Иначе зароемся. Первую версию научим считать утвержденные срезы данных циклами: утренний план, внеплановый пересчет, вечерняя сверка. Обязательно заложим механизм для спорного прогона.
— Тогда какие параметры пойдут в ведомость учета? — спросила Егорова, выравнивая край стопки бланков с синей копиркой. — Допустим, мы берем утренний срез данных и получаем ответ. Чтобы при спорном прогоне выйти на те же цифры, нам нужно зафиксировать точное состояние машины на момент старта.
— Загрузку с гибких дискет оставим для лабораторной подготовки, — отозвался Громов. — Штатный запуск пойдет из аппаратного блока ПЗУ-82В. Внутри поместим урезанную МикроДОС и сам расчетный модуль. При включении питания машина проводит самотест оборудования, проверяет контрольную сумму зашитой программы на целостность и автоматически запускает приложение. Потребуется обновить математику — физически меняем ПЗУ, ставим свежую пломбу и вписываем номер версии в режимный журнал.
Ширяев посмотрел на ровную стопку бланков перед Егоровой.
— Алексей Николаевич, крупный транспортный узел содержит сотни станций, перегонов, ограничений по тоннажу. Заставлять оператора вбивать такие объемы с нуля ради каждого расчета гибельно. Смена закончится раньше первого ответа.
Морозов коротко обрисовал схему разделения данных:
— Сформируем базовый справочник узла: станции, типы платформ, постоянные лимиты. Его готовят заранее, утверждают, снабжают версией и контрольным числом. Этот блок загружают один раз. В каждом цикле человек вводит исключительно оперативный срез: свежие заявки, свободные вагоны, временные запреты на участках.
Громов потер подбородок.
— Питание можно держать включенным всю смену. При этом любой прогон программа оформляет как самостоятельный пакет. Высчитывает контрольную сумму введенного оперативного среза, прикрепляет к ней текущую версию базового справочника и номер зашитого модуля.
Горелов придвинул чистый лист, быстро делая пометки.
— Запишем этот порядок в основу технического задания. Оператор набивает срез. Контролер сверяет ввод по номерным листам. Диспетчер получает отпечатанный бумажный бланк как готовую команду.
Ширяев сделал согласный жест.
— Приемлемо. Раздельный учет справочника и среза дает воспроизводимость: тот же справочник, тот же срез и тот же модуль дают тот же ответ. Полноценную систему с диспетчерской сводкой на экране пока отодвигаем в перспективу.
Шрамов постучал карандашом по сукну.
— Штатная проверка ОЗУ остается первым шагом. После нее для 82В нужен расширенный пусковой контроль. Проверка самого блока ПЗУ-82В, подсчет контрольной суммы расчетного модуля, опрос узлов ввода-вывода и подтверждение готовности АЦПУ. При любом аппаратном отказе блокируем старт вычислений и выдаем код неисправного узла, чтобы техник сразу видел, где искать.
— Встроим эти процедуры в стартовый блок, — кивнул Громов. — Выполним их сразу после проверки памяти, до передачи управления расчетному модулю.
Сбоку раздался металлический стук. Чернов бросил на стол тяжелый многоконтактный штекер.
— Машину будут перевозить. Обычные разъемы потеряют контакт после третьего переподключения, а платы пострадают от дорожной тряски. Закладывайте штекеры с винтовой фиксацией.
— Учтем в требованиях, — ответил Морозов и обратился к координатору, — Андрей Витальевич, запишите это в ТЗ отдельными пунктами. Разведите первый этап и перспективу. По срокам предлагаю двигаться так. К концу недели собираем бумажную схему рабочего места и формы бланков. Через две недели демонстрируем макет ввода и печати на общей «Сфере», когда ее освободят от дневных задач. К моменту получения первой машины из опытной партии у нас должен лежать черновой блок ПЗУ-82В с расширенным пусковым контролем, проверкой сумм и автоматическим запуском модуля.
Ширяев опустил тяжелый палец на правый нижний угол будущего документа, который Горелов начал расчерчивать.
— Вот здесь оставьте место. Дата расчета, контрольная сумма среза. И пустая строка — «Ответственный исполнитель». Диспетчер принимает лист как финальную команду к действию, цифры внутри машины аппаратно блокируются от оперативных корректировок.
Горелов молча приложил деревянную линейку, отчеркнул внизу широкую полосу и пододвинул штемпельную подушку поближе к пакету с уральскими маршрутами.
Глава 35
Машина для проверки
Горелов расписался в журнале доступа, снял пластилиновую печать и распахнул дверь кабинета 82В. В коридоре скрипнули резиновые колеса — Иван Михайлович докатил складскую тележку до порога и тяжело выдохнул.
— Принимайте технику, — мастер вытер лоб тыльной стороной ладони и положил на край поддона пухлую папку. — Зоя каждую микросхему по ведомости сверила, Володька разъемы протер. Довели машину по общей схеме. Дальше сами тащите, у меня люди простаивают.
Горелов забрал накладные.
— Иван Михайлович, спасибо. И ребятам, Володе с Зоей, передай отдельную благодарность. Здорово выручили.
Михалыч коротко кивнул и покатил пустую тележку обратно к сборочной лаборатории. Чернов со Шрамовым сразу подхватили тяжелый моноблок. Горелов взялся за цветной ВКУ, а Морозов с Громовым занесли коробки с дискетами и техническими описаниями. Аппаратуру аккуратно опустили на широкий стол в центре комнаты.
Чернов не спешил тянуться к тумблеру питания. Он достал шлицевую отвертку, скрутил крышку корпуса и проверил плотность посадки текстолитовых плат в разъемах. Затем методично осмотрел сетевой шнур, проверил предохранитель на задней панели и ткнул индикаторной отверткой в розетку — внутри прозрачной ручки тускло засветился неон.
— Так, давайте распределяться, — произнес Горелов, похлопав по серому металлу кожуха. — Юра, бери на себя операторскую программу, рабочее название — «МАРШРУТ-82В». На тебе экранные формы и логика ввода. Борис, с тебя конструктив пульта. Прикинь, как вывести наружу кабели под АЦПУ и какие разъемы врезать в корпус, чтобы их не вырвали на смене. Я займусь порядком испытаний.
Убедившись, что после переноски ничего не перекосило, Чернов вернул крышку на место и дал отмашку. Шрамов тут же состыковал колодки кабелей, затянул фиксирующие винты и щелкнул тумблером.
Внутри машины басовито загудел силовой трансформатор. На передней панели загорелся красный светодиод. Спустя пару секунд кинескоп ВКУ ожил, коротко треснув статикой, и в левом верхнем углу появилось системное приглашение с мигающим курсором.
Морозов отодвинул стул и сел за стол. Громов выровнял стопку дискет на краю столешницы.
Шрамов кивнул на дисплей и нетерпеливо придвинул к себе массивный моноблок.
— Ну, с чего стартуем? — спросил Шрамов. — Мне
— Начинайте с дисплейного ввода, — ответил Алексей. — Архитектуру мы уже утвердили: ваша прикладная программа работает поверх МикроДОС.
Громов, понимая мысль Алексея с полуслова, шагнул к столу и постучал костяшками пальцев по серому пластику дисковода.
— Базовая система остается за нами, — сказал он. — Вся работа с памятью, печатью и дисководом. Вы пишете прикладную программу строго через системные вызовы. Напрямую в аппаратуру не лезете.
Шрамов нахмурился, чувствуя, как его оттесняют от самого интересного — от машинных кодов и контроля над железом.
— А математика? — спросил он. — Олимпиадные алгоритмы?
— Математику возьму на себя, — спокойно ответил Громов. — Я уже возился с олимпиадным алгоритмом, когда проверял прежние наработки. У меня остались черновые куски, мне банально быстрее подогнать эту логику под наши ограничения. Я вычищу все расчеты и выдам вам согласованный вызов подпрограммы. Отправите в нее свои таблицы, а обратно прилетит просчитанный путь или сигнал сбоя.
Шрамов отступил на полшага, недовольно поджав губы.
— Стоп. Если вы держите систему, и вы же пишете расчет… А мне что остается? Знакоместа по экрану гонять да поля ввода размечать?
Морозов подался вперед, опираясь локтями о колени.
— Ваш участок — пульт, Юрий Павлович, — сказал Морозов. — Женя отдаст вам готовый расчетный модуль, а ваша задача — сделать так, чтобы уставший диспетчер не повесил машину случайной опечаткой.
Шрамов недоверчиво прищурился.
— Значит, если алгоритм насчитал чушь, вопросы к Громову, — хмыкнул он. — А если диспетчер промахнулся мимо клавиши и машина встала — вопросы ко мне. Справедливо.
Горелов, до этого молча слушавший перепалку, одобрительно кивнул.
— Грамотно, — произнес Горелов. — Разделение ответственности. Но Ширяев на приемке спросит строго. Как мы докажем заказчику, что пульт обращается именно к утвержденной подпрограмме Громова, и что оператор не влезет в алгоритм напрямую?
— Через контрольные суммы и строгий регламент вызовов, — ответил Громов, доставая из коробки дискету. — Подпрограмма расчета маршрутов будет лежать в выделенном блоке памяти. Прикладная программа сможет обратиться к ней только по одному конкретному адресу, передав массив исходных данных. Никакой самодеятельности.
Шрамов медленно выдохнул. Комплекс «МАРШРУТ-82В» — это то, с чем каждый день предстоит работать живому человеку за пультом.
— Принято, — кивнул он. — Тогда давайте к практике. Показывайте системный диск. На чем операторскую часть писать будем и как готовить образ для ПЗУ?
Щелкнул замок дисковода. Громов опустил флажок, фиксируя дискету, и нажал аппаратный сброс. Шаговый двигатель затрещал, выставляя магнитную головку на нулевую дорожку. Экран мигнул, очистился, и кинескоп высветил строчки приветствия «МикроДОС».
Евгений набрал команду чтения каталога. По экрану побежал ровный столбец имен файлов: текстовый редактор, макроассемблер, символьный отладчик, несколько служебных программ для работы с блоками памяти. Рабочая полка системщика.
— Спартанский набор, — хмыкнул Шрамов, вглядываясь в светящиеся буквы. — Всю прикладную программу на ассемблере писать будем? Код, конечно, выйдет компактным, но листинг разрастется так, что сопровождать замучаемся. Захочет заказчик втиснуть новую строку или сдвинуть позицию ввода — мы с ума сойдем координаты знакомест пересчитывать и ветвления править.
Громов усмехнулся.
— Не обязательно. Алексей Николаевич привез из Зеленограда компилятор языка Си. Работает прямо под МикроДОС. Он отлично справляется со структурами данных и указателями. Логику экранов и бланков на нем писать в разы быстрее, мы уже обкатали это на топологиях.
Шрамов недоверчиво прищурился.
— Си? Что за экзотика? Я его не знаю, Заказчик тем более. Если мы завяжем оборонный контур на язык, который в стране понимают полтора человека, нас первый же нормоконтроль на куски порвет. Где ГОСТы? Где методички?
— Согласен со Шрамовым, — кивнул Горелов. — Мне нужна проверяемость при сдаче. Код должен быть читаемым для комиссии.
— Нормоконтролю нужен структурный исходный текст, — возразил Морозов. — Ассемблерные простыни комиссия всё равно не поймет, а Си выглядит как нормальная понятная математика. Для логики диспетчера — самое то.
Шрамов скептически хмыкнул, взвешивая варианты.
— Ладно, посмотрю ваш Си на досуге. Но скелет начну на ассемблере, чтобы время не терять. Громов, у тебя распечатка вызовов «МикроДОС» под рукой?
Громов молча вытащил из стопки бумаг скрепленную скрепкой методичку и пододвинул по столешнице.
— Держи. Системные вызовы консоли — с первого по одиннадцатый. Базовый BIOS уже прошит, напрямую с железом возиться не придется. Опрос клавиатуры, позиционирование каретки, печать строки — все там.
— Отлично, — Шрамов бегло пролистал страницы. — Оберну эти вызовы в макросы и начну собирать экраны ввода. Сначала голый скелет, потом прикрутим расчеты.
Дверь открылась, пропустив Егорову с тяжелой картонной папкой под мышкой. Следом шагнул Ширяев, держа в руке перетянутую резинкой пачку желтых телеграмм.
Егорова подошла к столу, аккуратно сдвинула методичку и опустила ношу прямо перед клавиатурой.
— Я подготовила реальные рабочие срезы предприятия за прошлую неделю, — произнесла она. — Товарные накладные, диспетчерские журналы, сводки. Почти везде есть неполные коды, исправления карандашом поверх чернил и путаница в единицах измерения.
Она прижала ладонь к плотной обложке.
— Выходит, операторской части придется фильтровать этот поток до того, как данные уйдут в подпрограмму расчета, — произнес Шрамов. — Без строгого контроля ввода машина просто умножит ошибки.
Ширяев забрал папку, чтобы не загромождать пространство вокруг клавиатуры и рабочих дискет, и шагнул к свободному приставному столику. Развязав тесемки, он принялся методично доставать бумаги.
На гладкую столешницу легли широкие бланки с выцветшими синими графами и стопки плотных картонных карточек с пробитыми отверстиями по краям. Следом Ширяев выложил помятые желтые бланки телеграмм и несколько склеенных внахлест длинных бумажных полос, обозначавших узловые станции. Уральский промышленный узел предстал перед инженерами в реальном, бумажном виде.
Ширяев оперся обеими руками о край стола, нависая над бумажным хаосом. Его тяжелый взгляд скользнул по лицам присутствующих.
— Вот ваши рабочие данные. — Ширяев ткнул пальцем в плотную стопку карточек. — Справочник узла. Перегоны, длина путей, наличие тяжелых кранов. Это постоянная база, которая пойдет в ПЗУ.
Он придвинул к себе стопку желтых телеграмм.
— А это оперативная обстановка, — Ширяев прихлопнул листки ладонью. — То, что диспетчер вводит на смене. Навалочная станция забита углем, пустых вагонов нет. Соседний перегон закрыт путейцами. С завода идет литерный состав. Программа «МАРШРУТ-82В» должна переварить эти вводные.
Егорова вытянула из пачки несколько бланков. Быстро просмотрев заполненные от руки строки, она разложила листы на потертой столешнице перед Шрамовым.
Она постучала обратной стороной карандаша по плотной бумаге.
— Код станции, шифр груза, номер поезда — это константы, их переведем в числа. Но взгляните, как заполняют остальное, — карандаш Егоровой сдвинулся к затертому полю. — Цифра зачеркнута, исправлено поверх. В графе веса вместо тонн указаны штуки. А в особых отметках идет чистый текст: «Сломалась стрелка» или «Ждем до утра». Ваша программа должна блокировать явный мусор при вводе, но оставлять диспетчеру возможность сохранить такие пометки и не завесить систему.
Шрамов склонился над бланками. Произвольный текст — полбеды, под него можно зарезервировать отдельную строку дисплея.
— В каком виде эти данные приходят на узел? — спросил он, потирая подбородок. — И в каком виде должны уходить?
— Исходные сводки приходят телеграммами, либо помощник пишет их на бумаге со слов дежурного по станции, — ответил Ширяев. — Ваш оператор будет переносить цифры в машину. А итоговый маршрут должен ложиться на стол начальнику смены в виде твердой копии.
— Вывод пойдет на АЦПУ или телетайп, — вмешался Морозов. — Юрий Павлович, забирайте формирование бланка на себя. Громов отдаст массив результата и номер расчета, а дальше вы сами собираете символы в строчки.
— Выдавать прямо в порт вывода? — деловито уточнил Шрамов.
— Ни в коем случае, — отрезал Морозов. — Никакой самодеятельности с железом. Используй пятый системный вызов из методички. Система сама опросит готовность и вытолкнет символ. Иначе повесите шину из-за разницы в задержках у АЦПУ и телетайпа.
Шрамов быстро сделал пометку в блокноте. Жесткие рамки профиля не оставляли места для низкоуровневых фокусов, но гарантировали предсказуемость.
— С печатью ясно. Вывод отвязан от железа, — кивнул Шрамов.
Он тяжело вздохнул, оценивая общий объем проверок и блокировок, которые ему предстояло написать для интерфейса программы «МАРШРУТ-82В». Математика не должна защищаться от опечаток оператора — это была исключительно его работа. Громов же, наоборот, выглядел заинтригованным алгоритмической сутью задачи. Он смотрел на разложенные по столу карточки, словно видел не бумагу, а взвешенные графы и матрицы смежности.
— Павел Андреевич, — обратился Громов. — А критерий оптимальности у нас какой? Что мы минимизируем? Время доставки? Стоимость? Пустой пробег вагонов?
Ширяев мрачно усмехнулся:
— Всё сразу, Евгений Александрович. И чтобы к утру.
— Так не бывает, — покачал головой Громов. — Если мы минимизируем время, придется гонять пустые локомотивы ради одного срочного вагона. Если минимизируем пустые перегоны — сорвем сроки поставки. Математика чудес не делает. На Олимпиаде мы искали кратчайший путь, но здесь это не сработает.
Морозов мысленно согласился. Полный перебор вариантов на «Сфере» займет недели, а ответ нужен диспетчеру к утру.
— Найти абсолютно идеальный план за приемлемое время машина не сможет, просто захлебнется, — сказал Алексей. — Поэтому берем олимпиадный алгоритм за базу, но строим сначала грубый маршрут, который просто не нарушает запретов. Проталкиваем грузы по кратчайшим путям.
Громов нахмурился, обдумывая идею, и быстро кивнул.
— А потом перекидываем составы на соседние ветки, — подхватил он. — Если общая сумма штрафов за маршрут уменьшилась — сохраняем. Если увеличилась — откатываем назад. И так до упора.
— Штраф? — переспросил Ширяев. — Какой еще штраф?
— Математический, — пояснил Громов. — Мы не зашиваем критерии жестко в код. Мы делаем таблицу весов. Опоздание на час — штраф сто очков. Пустой пробег километра — десять очков. Задержка литерного груза — миллион очков. Алгоритм просто ищет вариант с наименьшей суммой штрафов.
— Вот! — Морозов указал на Громова. — И мы можем менять поведение системы, просто исправляя цифры в этой таблице. Не переписывая саму расчетную подпрограмму.
Егорова оторвалась от своих карточек и посмотрела на программистов поверх очков.
— Звучит красиво, — сказала она. — Но я вам не верю.
Громов поперхнулся. Морозов удивленно поднял брови.
— Вы сделаете алгоритм, он выдаст какой-то ответ, и вы скажете, что он оптимальный, — пояснила Егорова. — А как мы это проверим? Вы сами сказали, что идеального ответа нет.
Она вытащила из папки чистый лист и положила перед Громовым.
— Евгений Александрович, вы напишете не один алгоритм. Вы напишете три. Быстрый грубый подбор. Вариант с гигантским штрафом за пустой пробег. И вариант с абсолютным приоритетом сроков. А я подготовлю вам такие контрольные срезы данных, где эти три варианта гарантированно должны дать разные маршруты. Если ваша программа на разных настройках погонит поезда по одному и тому же пути — значит, ваша математика не работает, и вы просто подгоняете результат.
Громов посмотрел на женщину с нескрываемым уважением. Она не просто проверяла бумаги, а переводила бюрократическую рутину в строгие условия машинного теста.
— Договорились, Тамара Николаевна, — Громов забрал чистый лист. — Три варианта. И таблица штрафов вынесена в отдельный блок памяти. Юрий Павлович, — он повернулся к Шрамову. — Я дам тебе фиксированный адрес в памяти, по которому будет лежать структура с результатами. Код ошибки, номер маршрута, расчетное время. Как ты это будешь рисовать на экране — твоя забота.
* * *
Чернов, который всё это время молча стоял у окна и слушал монотонное гудение силового трансформатора в моноблоке, наконец подал голос.
— Вы тут всё память делите, адреса раздаете, — пробасил он. — Но ПЗУ-82В, как мы договаривались, жестко зашито. А операторская часть и справочники будут требовать обновлений.
Горелов предупреждающе поднял руку:
— Сразу говорю: никаких дискет в рабочей зоне диспетчера. Дискета — это грязь, пыль, магнитные поля и человеческий фактор. На узле будет работать только аппаратный блок.
— Поэтому в ПЗУ пойдет только окончательная версия, — подтвердил Морозов. — Аппаратно зашьем весь комплекс: операторскую часть, расчетную подпрограмму и базовые справочники станций.
Шрамов постучал костяшками по глухому кожуху машины.
— Прикладная программа будет меняться каждый день. А на предприятии? Контролер попросит сдвинуть колонку в печатном бланке — мне прикажете микросхему перепаивать?
— Оставим возможность загрузки с дискеты для отладочного режима, — пояснил Морозов. — На этапе доводки и во время выезда на предприятие программа крутится с дисковода. Нашли нестыковку — быстро поправили код на месте. Когда логика стабилизируется, готовим мастер-ПЗУ и ставим в штатную машину.
Чернов шагнул к столу и очертил пальцем воображаемый квадрат на задней стенке моноблока.
— Для замены ПЗУ паяльник вообще не понадобится. Сделаем аккуратный лючок. Микросхемы посадим в цанговые панельки, ключи
— Нам понадобится инструмент для подготовки этих микросхем, — вернул разговор в рабочее русло Морозов. — Потребуется свой программатор.
— У нас же в лаборатории макет на столе валяется, мы на нем стартовый монитор прошивали, — напомнил Громов.
— Для закрытого контура самоделка на соплях не пойдет, — отрезал Горелов. — Нам нужно устройство, которое не просто прожигает биты, а гарантирует идентичность.
Морозов придвинул к себе блокнот и начал набрасывать схему.
— Нужен нормальный аппаратный программатор. Подключение через порт расширения «Сферы». И обязательный контроль напряжения прожига, чтобы биты потом не «поплыли».
Чернов заглянул через плечо Морозова и одобрительно хмыкнул.
— И контрольное побайтовое чтение после записи добавьте, — сказал он. — Плюс панельку с зажимом. Иначе через десять циклов перепрошивки мы микросхеме все ножки обломаем.
— А в конце программатор выдает на телетайп строку протокола: версия, дата, сумма, — завершил мысль Горелов. — Отрезаем, вклеиваем в журнал. А на саму микросхему — бумажную бирку с номером под лак. Без совпадения номера с журналом ПЗУ недействительно. Вот вам и аппаратный контроль.
Шрамов потер переносицу. Программы пока не было — ни единой строчки. Но она уже обрастала колодками, пломбами, контрольными суммами и бирками под слоем лака. Гибкий код превращался в жесткую физическую деталь.
Громов перехватил его взгляд и понимающе усмехнулся.
* * *
Низкий гул силового трансформатора «Сферы» сливался с тихим звоном люминесцентных ламп на потолке. Разговор стих.
Шрамов не стал тянуться к клавиатуре. Вместо этого он взял со стола лист миллиметровки, подвинул к себе карандаш и начал чертить.
На бумаге вырисовывалась геометрия будущего экрана.
— Так, — бормотал он себе под нос, проводя жирную линию сверху. — Здесь у нас будет статусная строка. Время, текущая дата, номер смены. Ниже — блок постоянных данных.
Он нарисовал несколько прямоугольников.
— Станция отправления. Станция назначения. Код груза. Тоннаж.
Егорова, стоявшая напротив, внимательно следила за движением его карандаша. Она не стала ждать, пока он дорисует идеальную картину. Вытащив из стопки одну из карточек, она положила ее прямо поверх чертежа Шрамова.
— Вводите, Юрий Павлович, — тихо сказала она.
Шрамов сдвинул брови, разбирая торопливые каракули. В графе станции назначения значилось: «7А-бис».
— Тамара Николаевна, у нас по справочнику числовые индексы. Откуда буква? И что за «бис»?
— Диспетчер на сортировке так привык, — спокойно отозвалась Егорова. — Это реальная карточка за прошлый четверг. Запасной путь седьмой шахты. В вашем массиве такого кода нет. Что делает программа?
Шрамов быстро прикинул по клеткам миллиметровки знакоместа. Карандаш уверенно обвел прямоугольник ввода, отрезая ему путь дальше.
— Блокирую курсор, — ответил он. — В двадцать четвертой строке вывожу текст: «Код не найден. Повторите ввод».
— Текст в запарке никто не читает, — покачал головой Ширяев. — У вас ночная смена. Оператор будет смотреть на бумажную накладную, а не на экран. Набьет цифры вслепую и нажмет ввод. Нужно, чтобы при сбое был резкий сигнал.
— Ошибка должна бить по всем каналам, — Горелов постучал пальцем по корпусу дисплея. — Врубайте красный бордюр экрана. А по звуку — Чернов, заноси в Журнал отклонений малогабаритный звуковой излучатель. Повесим на свободный порт. Любая аппаратная врезка в базовую «Сферу» идет как архитектурное отклонение, с обоснованием.
Громов со своего места добавил:
— А пока математика считает — желтый бордюр. Чтобы диспетчер не дергался.
— Синяя — при выдаче на АЦПУ или телетайп, — подхватил логику Шрамов. Он уже делал быстрые пометки на полях бумажного макета. — Штатный режим ожидания ввода — черная. Обычная, не отвлекает.
— Вот так операторскую часть и собирайте, — кивнул Горелов. — И испытания начинаем с плохих данных. Тамара Николаевна, подготовьте контрольный набор с ошибочными кодами, пусть начинают проверку прямо с этого. Евгений Александрович, — он повернулся к Громову, — запуск расчетной подпрограммы пока отложим. Сначала отстраиваем строгий контроль ввода.
Громов примирительно поднял ладони.
— Договорились. Я пока пойду алгоритмы гонять. Мне еще таблицу штрафов балансировать.
Глава 36
До корпуса
Морозов сидел за столом, разминая затекшую шею. Под локтем лежала раскрытая папка с рабочими материалами по проекту «СЛОЙ-81»: черновые распечатки, исчерканные мягким карандашом, бесконечные таблицы контрольных сумм, списки координат топологических окон. В соседней комнате стихли голоса Олега и Наташи — они закончили работу с цветным макетом, долго спорили о просадках питания по земляной шине, а потом ушли, оставив ворох развернутых схем и чашки с остывшим чаем.
Весь день ушел на увязку трех совершенно разных направлений, которые упорно не желали стыковаться. Закрытый модуль Горелова тянул архитектуру в сторону жестких ограничений, пока цветной видеовывод Олега отбирал такты у процессора и требовал аппаратной свободы. А посередине лежал зеленоградский пилот. «СЛОЙ-81» уже начал обретать форму, превращаясь из концепции в набор конкретных перфолент, тестовых векторов и журналов.
Дребезжащий звонок телефона заставил стекла в окне чуть слышно звякнуть.
Морозов вздрогнул. Бросил взгляд на светящийся зеленым циферблат часов «Электроника» на краю стола. В такое время по внутренней линии не звонят, а внешняя коммутируется только через дежурного на вахте.
Он потянулся через заваленный чертежами стол и снял тяжелую трубку.
— Слушаю. Морозов.
— Вечер добрый, Алексей Николаевич, — голос Сергеева звучал глухо, без характерных металлических щелчков межгорода, словно он звонил из соседнего кабинета. — Еще не ушли? Отлично. Завтра утром жду вас в Зеленограде.
Морозов с раздражением прикрыл глаза. Свободной рукой он машинально пододвинул чистый лист бумаги и взял карандаш.
— Валерий Викторович, при всем уважении, у меня завтра с утра согласование макета для закрытой ветки. Потом Горелов придет с журналом отклонений, мы там за каждую аппаратную врезку бьемся. Зеленоградские файлы Громов уже упаковал, мы планировали передать пакет во вторник…
— Пакет подождет вторника, — спокойно перебил Сергеев. — Завтра в десять утра собирается техсовет. Закрытый контур. Вы там нужны не с машиной и не с форматами. Вы там нужны как человек, который имел неосторожность прочитать очень яркий доклад.
Морозов остановил руку. Грифель карандаша завис над бумагой.
Прошлогодний доклад. Тот самый момент, когда он попытался показать перспективу и вывалил на стол зеленоградских зубров концепцию встроенного самотестирования. Рассказал про проверяемость кристаллов прямо на кремнии, про тестовые векторы, про то, что архитектуру надо строить с учетом будущего неизбежного
— Помнят, значит, — медленно произнес Алексей, глядя в темное окно.
— Такое не забывают, — в голосе Сергеева скользнула короткая, сухая усмешка. — Только тогда у вас не было практического фундамента. Красивая теория. А завтра выступает Георгий Матвеевич Лазарев. Доктор наук, лаборатория производственного контроля НИИМЭ. У него фундамента хоть отбавляй. Он выкатывает на техсовет внешний производственный стенд. Зондовая проверка кристаллов памяти прямо на пластине. До корпусировки.
Морозов сразу понял расклад. Внешний стенд прогоняет тесты, и битые кристаллы бракуются сразу, не доходя до самого дорогого этапа корпусировки. Чистая производственная экономика, понятная любому директору завода.
— И зачем там я? — спросил Морозов, проводя карандашом короткую линию. — У Лазарева реальное железо, работающее на маршрут «Микрона». Моя епархия — рабочее место инженера и ранняя подготовка данных. Я не полезу учить специалистов НИИМЭ зондировать пластины. Меня там сожрут, и будут правы.
— А вас и не просят никого учить, — тон Сергеева неуловимо изменился, ведомственный металл проступил сквозь обманчивую мягкость. — Нам нужен толковый оппонент. Лазарев силен. Он может утащить за собой весь зал, потому что предлагает немедленную экономию. Мне нужно понимать, где его система действительно решает проблему, а где — просто красиво считает убытки. Если Лазарев прав — скажете, где прав. Если он пропустил начало цепочки, о котором вы распинались год назад — скажете, где пропустил. Допуск у вас открыт по линии «СЛОЯ». Пропуск закажут на проходной.
В трубке коротко щелкнуло, и пошли гудки.
Морозов аккуратно положил трубку на рычаги. Некоторое время он смотрел на исчерканные листы перед собой. Заводской стенд. Электрический контроль. Зеленоградцы подошли к той же самой проблеме, но с другой, абсолютно прагматичной стороны — со стороны готового, живого кремния, а не со стороны чертежа.
Он снова взял карандаш. В центре чистого листа, не ставя даты и официального заголовка, Алексей вывел три короткие строчки. Три якоря для завтрашнего спора, который должен был связать его настольную машину с тяжелой промышленностью.
До маски.
До корпуса.
После отказа.
Он обвел слова жирной прямоугольной рамкой, захлопнул папку и щелкнул выключателем настольной лампы.
* * *
Внутри административного корпуса было тепло, пахло мастикой для паркета, дорогим трубочным табаком и мокрой шерстью сданных в гардероб пальто.
Коридоры здесь отличались от владимирских — они были шире, светлее, а звуки шагов вязли в толстых ковровых дорожках. Люди шли целеустремленно, неся под мышками пухлые кожаные папки, тихо переговариваясь на ходу. Здесь решалась судьба планов, исчисляемых миллионами рублей и тысячами кремниевых пластин.
До начала техсовета оставалось минут пятнадцать. Морозов стоял у широкого окна в просторном холле перед залом заседаний, задумчиво просматривая свои вчерашние записи.
— Не советую с ним воевать в лоб, Алексей Николаевич, — раздался сбоку сухой, спокойный голос.
Морозов обернулся. Кац выглядел так же безупречно, как и всегда, но в его голосе больше не чувствовалось прежнего колючего холодка. Совместная работа сделала свое дело — Кац больше не смотрел на него свысока. Теперь это было признание равного. Опасного, неудобного, но равного.
— Добрый день, Роман Борисович. Не собирался. Я вообще узнал о своем участии вчера вечером.
Кац усмехнулся одними уголками губ, поправляя манжету рубашки.
— Майор Сергеев умеет организовывать внезапности. Вы Лазарева раньше слышали?
— Нет. Только читал смежные отчеты по производственному контролю.
— Георгий Матвеевич за пять минут заставит вас поверить, что вся микроэлектроника начинается и заканчивается хорошей зондовой головкой, — Кац кивнул в сторону приоткрытых массивных дверей зала. — И самое страшное в том, что он будет абсолютно прав. Он чистый производственник. У него в голове не абстрактные алгоритмы, а статистика выхода годных. Процент брака. Нормо-часы.
Морозов закрыл блокнот и спрятал его во внутренний карман пиджака.
— Если стенд работает и спасает план, зачем меня вытащили из Владимира? Мои люди сейчас макеты под напряжением держат, пытаясь цветную картинку стабилизировать, а я должен оценивать чужую измерительную аппаратуру, в которой смыслю меньше, чем любой здешний лаборант.
— Вопрос не в аппаратуре, — Кац сделал полшага ближе, понизив голос. — Никто не сомневается, что его стенд поймает битый кристалл. Проблема Лазарева в том, что он мыслит концом конвейера. Нашел брак, забраковал, записал в журнал. А то, что в этот журнал потом никто из разработчиков не заглянет, его не волнует. Если вы сегодня начнете учить его проверять топологию или встраивать тесты в кристалл, он вас просто уничтожит цифрами текущего плана.
Морозов чуть прищурился. Кац предельно точно очертил уязвимость производственного подхода. Лазарев получает чистый электрический факт, но этот факт так и останется лежать в архиве ОТК, не добравшись до инженера-тополога. Значит, спорить нужно не о физике контакта иглы с площадкой, а о потоках данных.
— Я предпочитаю спорить с людьми, у которых есть настоящая работающая машина, а не бумажный план на пятилетку, — ответил Алексей.
— Вот и отлично, — Кац поправил галстук. — Потому что у Лазарева машина настоящая. Пойдемте, занимают места.
Они вошли в зал. Там уже рассаживались люди. Морозов сразу узнал Савельева — тот методично раскладывал перед собой чистые листы бумаги, его лицо сохраняло чуть усталое, спокойное выражение. Справа от него тихо переговаривались Ахметов и Руденко. Ланская, подперев щеку рукой, смотрела в окно на серые тучи.
А у доски, спиной к залу, стоял человек и быстрыми, размашистыми движениями рисовал мелом схему кремниевой пластины. Он что-то доказывал подошедшему инженеру в белом халате, используя дужку очков как указку. Движения были рублеными, полными нетерпеливой, хищной энергии.
* * *
Доклад начался без олгих бюрократических расшаркиваний. Лазарев не стал читать по бумажке, монотонно бубня цифры в микрофон. Он положил руки на спинку свободного стула и обвел зал цепким, горящим взглядом.
— Товарищи, давайте сразу к делу, — голос у него оказался неожиданно глубоким, с легкой, приятной хрипотцой. — Мы все знаем наши цифры по выходу годных. И мы знаем цену этого выхода. Плохой кристалл дешев, пока он голый. Пока он просто квадратик кремния на общей пластине. Дорогим его делаем мы сами.
Он развернулся к доске и стукнул костяшкой пальца по нарисованной схеме.
— Когда мы режем пластину, берем этот дефектный кусок кремния, сажаем в дорогую керамику, развариваем золотые выводы, герметизируем, а потом тащим на финальный испытательный
В зале слышалось только монотонное гудение люминесцентных ламп. Лазарев говорил на языке, который понимал каждый присутствующий, указывая на главную проблему завода.
— Наша лаборатория предлагает разорвать этот порочный круг, — Лазарев подошел к столу и небрежно бросил на зеленое сукно стопку черно-белых фотографий. — Внешний производственный стенд. Зондовая проверка до корпусировки. Мы позиционируем головку прямо на неразрезанной пластине. Иглы касаются контактных площадок. Стенд подает тестовые последовательности. Мы проверяем ячейки памяти, дешифраторы, цепи записи и чтения в динамике.
Он взял мел и начал быстро, со стуком, писать колонки цифр рядом со схемой пластины.
— Если кристалл не проходит тест — он помечается. Краской, автоматическим маркером, неважно. На выходе мы имеем карту пластины. В сборку и корпусировку идут только те изделия, которые подтвердили свою работоспособность на электрическом уровне. Экономия корпусов — колоссальная. Сокращение нагрузки на финальный контроль — в разы. Мы перестаем греть воздух и упаковывать мусор.
Морозов слушал, чуть откинувшись на спинку стула. Лазарев был великолепен. Его логика была железобетонной, привязанной к земле, к плану, к реальности. Прямое, немедленное спасение государственных фондов — в котором, однако, зияла серьезная прореха.
Ахметов поднял руку, не дожидаясь, пока председательствующий объявит время для вопросов.
— Георгий Матвеевич. Зонд — штука капризная. Механика есть механика. Пылинка попала, окисел на площадке чуть толще нормы, вибрация станины. Стенд покажет обрыв линии. Вы забракуете абсолютно годный кристалл из-за плохого контакта иглы. Как вы отличаете битую ячейку от неверного касания?
Лазарев мгновенно развернулся к Ахметову, ничуть не смутившись ударом.
— Отличный вопрос, Тимур Рашидович. Мы не бьем тестом вслепую. Сначала идет короткая, предварительная проверка цепей питания и базового сопротивления. Если контакта нет — стенд повторяет касание, смещая зонд на микроны. Алгоритм не пишет «брак» при первой неудаче. Только после подтверждения электрической целостности цепи запускается основной, тяжелый набор тестовых векторов.
Вступила Ланская. Она сидела очень прямо, сложив руки перед собой, ее голос звучал холодно и профессионально.
— Допустим, стенд нашел дефект. И не один. На всей пластине, скажем, в левом верхнем углу каждого десятого кристалла вылетает один и тот же блок памяти. Электрический отказ. Что ваш стенд с этим делает, кроме того, что ставит крестик?
Лазарев снял очки и потер переносицу, чуть сбавив напор.
— Стенд фиксирует факт, Ирина Павловна. Он показывает повторяемость дефекта. Он выдает карту, на которой это пятно будет видно невооруженным глазом. А дальше — это уже работа технологов и ваша, топологов. Искать причину. Мы ловим отказ. Мы не можем залезть внутрь кремния и сказать, что у вас там зазор на маске поплыл или фоторезист недоэкспонирован.
* * *
Савельев методично выровнял стопку бумаг перед собой, сложил руки домиком и посмотрел на Морозова долгим, тяжелым взглядом.
— Алексей Николаевич. Вас пригласили как человека, который в прошлом году поднимал смежные вопросы контроля на уровне проектирования. Ваше мнение о представленной системе?
Зал слегка подобрался. Повисла выжидательная тишина.
Морозов медленно поднялся. Он не стал выходить к доске, оставшись стоять у своего места, опершись костяшками пальцев о зеленое сукно.
— Мое мнение — систему нужно внедрять на «Микроне» вчера, — ровно произнес Алексей.
По залу пронесся тихий, недоуменный гул. Лазарев, приготовившийся к глухой, злой обороне, нахмурился, подозрительно глядя на оппонента.
— Плохой кристалл нужно ловить на пластине, — продолжил Морозов, обводя взглядом лица инженеров. — Георгий Матвеевич абсолютно прав. Любая копейка, вложенная в корпусировку мертвого кремния — это преступление против экономики завода. Логика внешнего контроля до сборки безупречна.
Лазарев прищурился, крутя в сильных пальцах дужку очков.
— Тогда где ваше возражение, Морозов? У хорошего оппонента оно должно быть. Иначе зачем вы приехали из Владимира?
— Возражения нет. Есть вопрос о границе метода, — Морозов выдержал тяжелый взгляд Лазарева. — Ваш стенд, Георгий Матвеевич, дает проверяемый факт. Но он дает его после того, как пластина прошла весь технологический цикл. Вы отлично сортируете готовое. Отделяете брак от годного, и это необходимо. Но если у нас систематически плывет зазор на маске, никакая сортировка в конце конвейера эту ошибку не исправит.
Морозов шагнул чуть в сторону от стола, освобождая пространство.
— Ирина Павловна задала правильный вопрос. У вас повторяющийся дефект. Стенд выдал карту. Производство получило наглядную картину брака. Но причина этого брака родилась три месяца назад — в допуске, в геометрии проводника, в правиле перекрытия слоев на рубилите. Как факт с вашей карты попадет на стол к топологу?
Лазарев пожал плечами, его голос прозвучал резче:
— Как обычно. Через отдел анализа отказов. Технологи возьмут микроскоп, возьмут кальки, посмотрят журналы…
— Именно. Возьмут кальки, — перебил Морозов, не повышая голоса, но добавляя в него стальной плотности. — У испытателя в руках — рулон бумажной распечатки со стенда. У технолога — технологическая карта. У тополога — листы рубилита и координатная сетка. Это три разных языка. Три разных документа, лежащих в разных зданиях. И между ними — недели потерянного времени.
Вмешался Кац. Он говорил, не поднимая глаз от своих записей, словно размышляя вслух, но его голос четко разносился по залу.
— Даже если они решат связать эти массивы, на БЭСМ-6 машинное время расписано на месяцы вперед. Никто не даст топологам гонять тяжелую вычислительную машину ради сверки каждой партии со стенда. Система просто захлебнется в очередях на обработку.
Морозов кивнул Кацу, подтверждая мысль.
— Поэтому стенд — это только половина решения. Стенд ловит следствие. Нам нужно замкнуть петлю. Если тополог на этапе проверки чертежа видит сомнительное сужение проводника, а стенд потом на этом же месте фиксирует обрыв — мы получаем не просто отбраковку. Мы получаем проверяемую связь между проектным правилом и живым кристаллом.
— И вы предлагаете посадить вашу «Сферу» переводить эти координаты? — хмыкнул Руденко, скрестив руки на груди.
— Я предлагаю договориться о языке, Павел Николаевич, — ответил Морозов, повернувшись к технологу. — Сначала — просто договориться. Как мы называем номер кристалла, как кодируем тип отказа и как привязываем это к координатам фотошаблона. Без общего стандарта никакая автоматизация не сработает. Но если мы заложим формат сейчас, завтра инженер загрузит карту с вашего стенда в малую ЭВМ, наложит на цифровую топологию и сразу увидит, где проектная норма бьет по выходу годных.
Лазарев
— Хорошо, — Ахметов подался вперед, положив тяжелые ладони на стол. — С обратной связью понятно. Но плотность интеграции растет. Завтра вы принесете нам память следующего поколения, и у нее просто выводов не хватит, чтобы Георгий Матвеевич мог прощупать каждый внутренний блок снаружи. Зонд упрется в физический предел. И как мы тогда будем искать этот ваш проектный дефект? Опять вслепую?
Испытатель, опираясь на свой ежедневный опыт, сам подошел к физической границе, за которой внешний контроль становился бессилен.
— А вслепую мы ничего не найдем, Тимур Рашидович, — твердо ответил Алексей. — Помните, мы обсуждали возможность спасать частично годные кристаллы, отсекая битые секции? Вы абсолютно правы: чтобы стенд смог найти этот локальный дефект на новых БИС, внешних выводов просто не хватит. Значит, часть работы стенда придется переносить внутрь кремния. Встраивать тестовую логику прямо в кристалл.
Морозов подошел к доске. Лазарев молча отступил на шаг в сторону, уступая место. Алексей взял кусок мела и быстро, уверенно набросал прямоугольник кристалла, а по его периметру и между блоками — цепочку мелких квадратов.
— Встроенное самотестирование. Концепция сканирующих цепочек, или LSSD. Мы закладываем в архитектуру специальный сдвиговый регистр, который объединяет внутренние контрольные точки в одну длинную цепь. У нее всего два-три внешних вывода — вход, выход и управление.
Мел стучал по доске, оставляя четкие, жирные белые линии, перекрывающие прежние записи.
— Ваш зонд, Георгий Матвеевич, больше не пытается дотянуться до каждого внутреннего узла. Стенд подает тестовую последовательность на один вход, проталкивает её через всю логику и снимает результат с выхода. Аппаратно сворачивает эту длинную реакцию в короткую сигнатуру. Совпало с эталоном — кристалл жив. Не совпало — сигнатура точно указывает, в каком именно блоке произошел сбой.
Лазарев оживился. Он шагнул обратно к доске, вглядываясь в схему. Абстракция на глазах превращалась в чистую диагностику.
— Встроенные тестовые регистры, — медленно протянул он, взвешивая слова. — Идея витает в воздухе, в переводных статьях про это пишут. Но чтобы это работало, разработчики должны заранее закладывать эту цепь в схему, отдавая под нее полезную площадь кристалла.
— Именно! — Морозов развернулся к залу. — Архитектуру надо проектировать под контроль. Стенд не сможет вытянуть из кристалла то, что в него не заложил разработчик. Встроенные цепочки увеличат площадь, да. Но возможность диагностировать сверхплотную БИС через пару контактов и спасти процент выхода годных, отсекая битые зоны, окупит эти микроны с лихвой.
Спор вспыхнул мгновенно. Доклад быстро перерос в живую, плотную инженерную драку, где каждый защищал свой участок производственного фронта.
Лазарев требовал конкретики по тестовым последовательностям, а Ахметов спорил о том, как отличить локальный дефект секции от просадки общей шины питания. Кац, не обращая внимания на шум, чертил в блокноте структуру пакета данных, который мог бы передать эту информацию от испытателя к топологу без потери смысла.
Морозов и Лазарев перебивали друг друга, менялись местами у доски, стирали чужие схемы рукавами пиджаков и рисовали свои. Лазарев давил производственным опытом, Морозов уводил логику в системную архитектуру. Никто не ссылался на инструкции. В этой комнате, пропахшей меловой пылью и табаком, рождалось решение.
* * *
Спустя сорок минут Савельев, до этого молча и внимательно слушавший перепалку, дважды негромко стукнул костяшками пальцев по зеленому сукну.
Спор стих не сразу. Лазарев еще что-то ожесточенно дописывал на краю доски, тяжело дыша, а Морозов вытирал испачканные белым мелом руки носовым платком, сдувая тонкую пыль с манжет.
— Полагаю, мы нащупали контур, — голос Савельева, как всегда, был лишен эмоций, но в нем слышалось глубокое, профессиональное удовлетворение. — Георгий Матвеевич, мы даем добро на опытную эксплуатацию вашего стенда. Логика отбраковки до корпуса сомнений не вызывает.
Лазарев коротко, удовлетворенно кивнул, поправляя сбившийся галстук.
— Замыкание маршрута, о котором говорил Алексей Николаевич, необходимо формализовать, — Савельев перевел тяжелый взгляд на Морозова, затем на Каца. — Стенд не должен работать в вакууме. Нам нужен единый формат передачи данных об отказах от испытателей к топологам.
Савельев взял перьевую ручку, готовясь писать резолюцию.
— Формируем совместную записку, — произнес он, не поднимая глаз от бумаги. — Георгий Матвеевич, с вас описание стенда и методики отбраковки. Роман Борисович, Алексей Николаевич — на вас формат передачи данных от испытателей к топологам. И отдельным пунктом, Алексей Николаевич, подготовьте тезисы по встроенному самотестированию. Текущий план «Микрона» мы не трогаем, но в НИОКР следующего года этот принцип заложим.
Лазарев оперся обеими руками о стол и посмотрел на Морозова. В его взгляде не было враждебности.
— Знаете, Алексей Николаевич. Вашу раннюю проверку и ваши хитрые цифровые форматы я в свой стенд сейчас не засуну. Железо уже работает и ждет плана. Но если ваша бумажная логика завтра покажет моим испытателям, в какое конкретно место пластины смотреть внимательнее… Я первый приду к вам за этой распечаткой.
— Ловлю на слове, Георгий Матвеевич, — абсолютно серьезно ответил Морозов.
Савельев аккуратно закрыл картонную папку.
— Решение принято. Протокол будет готов к вечеру. Всем спасибо за работу.
Морозов бросил взгляд на исчерченную мелом доску, аккуратно закрыл свой блокнот и поднялся из-за стола.
* * *
Коридор постепенно пустел. Инженеры расходились по лабораториям, тихо переговариваясь. Из приоткрытой в конце коридора форточки тянуло сырым сквозняком.
— Умный ход, — раздался рядом негромкий голос Каца. Программист подошел неслышно, держа в руках аккуратно застегнутый кожаный портфель. — Вы не стали спорить с очевидным. Если бы попытались доказать, что цифровой макет важнее физического контроля, Лазарев бы просто похоронил вас под отчетами о браке. А так мы получили свой кусок маршрута.
— Стенд у него слишком хороший, чтобы с ним воевать, Роман Борисович, — Морозов устало улыбнулся. — Воевать надо с поздним пониманием брака. А не с инструментами, которые этот брак исправно находят.
Сзади гулко хлопнула тяжелая дверь зала заседаний. К ним быстрым, пружинистым шагом подошел Лазарев, на ходу расстегивая верхнюю пуговицу рубашки.
— Позднее понимание брака, — Лазарев усмехнулся, услышав конец фразы. — Это, Морозов, когда начальство в министерстве уже радостно утвердило план по валу, а инженер в подвале только-только нашел причину, почему эти приборы физически не работают.
Он остановился рядом с ними, достал из кармана пиджака мятую пачку сигарет, но прикуривать
— Давайте без лирики, — Лазарев перешел сразу к делу, глядя поочередно на Морозова и Каца. — Мне не нужны обещания про ваши новые машины и красивые сети. Мне нужен порядок. Что конкретно мой испытатель должен отметить на карте пластины, чтобы ваша программа потом это прожевала? Какой код отказа пойдет в ведомость?
Морозов повернулся к нему, мгновенно включаясь в работу.
— Координаты кристалла, номер вашего теста и базовый тип отказа, — ответил Алексей. — Обрыв, замыкание или плавающий потенциал. И всё. Никаких сочинений на полях. Если лаборант будет вбивать это в жесткий формат, мы потом сможем наложить эти данные на чертеж. А если оставите свободный текст — стенд так и останется вещью в себе.
Лазарев прищурился, обдумывая ответ. Ему явно нравилась эта прямота — никаких лозунгов, только сухие данные.
— Добро, — резко кивнул производственник. — Роман Борисович, с вас формат передачи. Без высшей математики, чтобы лаборант понял. Морозов, с вас — тезисы по тестовым цепочкам. Как только я смогу на своем стенде просветить кристалл насквозь через пару контактов и локализовать битую зону, я вам лично магарыч выставлю.
— Тезисы будут на следующей неделе, — твердо пообещал Алексей.
Лазарев махнул рукой на прощание и быстро зашагал по длинному коридору, на ходу пытаясь прикурить от массивной бензиновой зажигалки.
Глава 37
Тень атрибутов
В коридоре КБ «Сфера» надрывался дисковый телефон. По истёртому линолеуму торопливо шагали техники. На соседних столах сухо щелкали тумблеры измерительных приборов, из-за фанерной перегородки аналогового сектора доносились басовитые голоса. Во второй половине дня все эти звуки сливались в плотный рабочий фон, прошитый низким, монотонным зудением силового трансформатора на испытательном стенде.
После тяжелых зеленоградских баталий по отраслевым стандартам и вязких дискуссий эта задача казалась инженерам настоящим отдыхом. Маленькая, полностью понятная машина. Стол, плотно заваленный рабочими бумагами. Место строгих кураторов в штатском и столичных академиков заняли свои же коллеги по отделу.
Морозов сидел на стуле, скрестив руки на груди, а перед ним лежала бесконечная бумажная гармошка — распечатка содержимого ПЗУ «Сферы-80М». Четыре килобайта шестнадцатеричного кода, превращённые широким АЦПУ в плотные сплошные колонки.
Слева от распечатки слабо мерцал экран. Справа лежала стопка исчерканных листов с картой экранной памяти и черновиками адресов портов.
Громов нависал над столом, опираясь локтями о столешницу, и крутил в пальцах мягкий карандаш со сточенным грифелем. Программист просматривал колонки кода, периодически ставя на широких полях крошечные крестики. Каждый крестик означал пустой байт — место, где код можно уплотнить, выкинуть лишний такт, переписать ветвление.
Таких крестиков на трёх метрах распечатки набралось от силы штук двадцать.
Саша Птицын стоял чуть позади. Он старался не загораживать свет от настольной лампы, но его тень всё равно падала на край стола, ломаясь на сгибах распечатки. Он уже несколько дней гонял на макете тест «ЦВЕТ-80» и теперь принёс результаты, которые упёрлись в аппаратные ограничения.
— Двадцать четыре байта, — Громов отбросил карандаш. Тот со стуком покатился по столу. — Если я вырежу кусок из подпрограммы магнитофона и объединю вывод сообщения об ошибке синтаксиса с ошибкой переполнения, сэкономлю двадцать четыре байта. Лёша, это всё. ПЗУ забито под завязку. Сюда даже приличное матерное слово не помещается, не то что диспетчер цвета.
Морозов устало потёр переносицу, разминая затёкшую шею.
— Ругаться мы можем и устно, в обход прошивки. Женя, покажи ещё раз узкие места. Только не весь интерпретатор, а именно процедуры работы с экраном.
Громов сдвинул гармошку бумаги, вытаскивая нужный лист из середины стопки, и ткнул пальцем с въевшимися чернилами в блок шестнадцатеричных кодов.
— Вот таблица лексем, вот анализатор строки, а вот процедура вывода символа на экран. Она вылизана так, что там лишнего такта нет. И вот здесь, — он передвинул палец ниже, — обработка конца экрана. Сдвиг. Когда курсор упирается в нижнюю правую позицию, ЦУБ берёт весь массив экранной памяти, кроме верхней строки, и тупо переносит на строку выше. Потом зачищает нижнюю строчку пробелами. Всё. Компактно.
Морозов кивнул. Он ожидал этой проблемы.
— На какой операции текст и цвет расходятся?
— На сдвиге экрана, — ответил Птицын. — Запись в порты проходит нормально, обычная печать работает. Сбой виден именно при сдвиге: символы уходят вверх, а атрибуты остаются на старых знакоместах.
Громов пожал плечами.
— Естественно. Символ переехал, а краска осталась на стене. Потому что Бейсик ничего не знает про твою цветную приставку. Он читает байт символа из старой экранной памяти и пишет его выше. А параллельная память атрибутов, которая сидит на плате у Олега, в этот момент просто простаивает. Никто не даёт команду перенести цвет.
— Получается трафарет, — кивнул Морозов. — Слово уехало вверх, а на его старом месте светится пустота. Или кусок нового текста, который туда случайно попал.
— Именно, — Птицын вздохнул. — Поэтому я и пришёл. Алексей Николаевич, может, всё-таки можно добавить одну команду? Не нужны все эти сложные операторы цвета, как на больших машинах. Просто одну маленькую функцию в ПЗУ. Чтобы перед сдвигом экрана она читала атрибут и переносила его.
— Саня. Одно слово в Бейсике — это не просто шесть букв в таблице, — голос программиста стал сухим. — Это запись в таблице лексем и ветвление в анализаторе синтаксиса. Плюс проверка параметров — ты же не просто слово напишешь, тебе надо передать номер цвета. Значит, надо вызвать анализатор чисел, проверить, не вылезло ли оно за пределы допустимого, перейти на процедуру и вернуть управление. Это байт пятьдесят-семьдесят минимум. А у нас, — он постучал ногтем по двум десяткам карандашных крестиков, — их нет. И даже если мы их выгрызем с кровью, Бейсик станет тормозить при каждом сдвиге экрана. Он и так не чемпион по скорости.
Морозов молча смотрел на распечатку. Задача создания цветной машины усложнялась тем, что если они расширят память, добавив ещё одну микросхему — это будет уже другая аппаратная база. Потеряется главное: возможность модернизации «Сферы-80» простым добавлением цветной видеоплаты.
— Значит, принимаем текущий код ПЗУ как финальный, — спокойно произнёс Морозов. — Сохраняем штатный вывод текста и прямую запись атрибутов в порты. Сопровождение строк при сдвиге реализуем силами видеоплаты.
— И пока закономерно получаем ползущие буквы на залипшем фоне, — хмыкнул Громов.
Морозов придвинул к себе чистый лист.
— Давай разложим физический цикл
Громов вытащил из пальцев Морозова карандаш и набросал вытянутый прямоугольник.
— Циклом. Автомат ЦУБа берет начальный адрес второй строки. Выполняет такт чтения, забирает байт символа в рабочий регистр. Следом идет такт записи уже по адресу первой строки. Базовая машина гоняет эту петлю, наращивая адреса на магистрали, пока не перетащит весь текст.
Птицын задумчиво потер подбородок, глядя на схему.
— Интересно получается, — Птицын перевел взгляд с бумаги на коллег. — ЦУБ таскает байты туда-сюда, а цветная плата в этот момент висит на тех же проводах адресной шины. Она прекрасно видит все адреса и сигналы.
Морозов утвердительно качнул головой.
— Видит. И тут важно вспомнить физику вывода. Атрибуты задают только цвета. Форму символа обеспечивает штатный монохромный видеосигнал старой машины.
Громов отодвинул распечатку ПЗУ.
— Цветная приставка встает между старым видеовыходом и цветным ВКУ. Она вытаскивает из черно-белого сигнала синхронизацию и маску знака и фона.
— Затем считает телевизионные строки и знакоместа, — подхватил Морозов. — Читает собственную память атрибутов и формирует цветной выход. Если пустить сигнал в обход приставки, старый черно-белый выход остается полностью рабочим. Базовая архитектура сохраняется.
Карандаш в руке архитектора начертил на пустом месте листа длинную горизонтальную полосу.
— Вот основная экранная область, — Морозов разбил полосу на ячейки. Под ней сразу появилась вторая, точно такая же. — А это параллельная память атрибутов на цветной плате. Она подключена к тем же младшим адресным линиям.
Он провел между двумя линиями короткую вертикальную стрелку.
— Когда идет обычная печать символа, машина делает цикл записи. Плата ловит этот сигнал, берет текущий цвет из своего внутреннего регистра и кладет его в память атрибутов. А вот при сдвиге текста ЦУБ сначала выполняет чтение.
Громов нахмурился, оценивая логику.
— Заодно прячет текущий атрибут во временный регистр. Взводит флаг. А на следующем такте, когда ЦУБ пишет символ выше…
— Плата замечает запись, проверяет флаг и выгружает цвет по новому адресу, — подтвердил Морозов. — Заодно сама сбрасывает флаг.
Птицын подался вперёд, изучая рисунок.
— Всё работает аппаратно. Само.
— Аппаратура всегда требует защиты, — осадил его Громов. Программист мысленно раскладывал идею на логические вентили и машинные циклы. — Лёша, идея выглядит красиво на бумаге. В железе мы получим нюансы.
Громов постучал пальцем по распечатке прошивки.
— ЦУБ обращается к памяти прямолинейно. Моя процедура вывода то и дело читает экран ради служебных проверок. Тот же курсор стереть. Плата примет такое чтение за начало сдвига и запихнёт случайный атрибут во временный регистр. А следующая запись швырнёт этот цветовой мусор на экран. Поползут пятна.
— Потребуется защита от ложных срабатываний, — согласился Морозов. Он ожидал этого возражения. В реальном железе всегда проскакивают паразитные обращения. — Флаг переноса обязан сбрасываться после записи или при обращении к любой другой памяти. Сдвиг идёт плотно: чтение-запись, чтение-запись. ЦУБ прочитал экран, а затем полез в ПЗУ за следующей командой Бейсика — значит, это был другой процесс, и логика сама сбросит флаг.
Громов пожевал губу, прикидывая объём монтажа.
— Олегу придётся городить на плате целый автомат состояний на мелкой логике. Дешифратор адреса, распознавание сигналов, триггеры флагов. Это лишние корпуса и занятое место на текстолите.
— Такова цена совместимости, — ответил Морозов. — Базовую прошивку мы сохраняем в первозданном виде, поэтому придётся усложнять видеоплату. Олег справится. Там хватит трёх-четырёх корпусов К155ЛА3 и пары триггеров. Место найдём.
Он перевёл взгляд на Птицына. Младший инженер всё ещё изучал схему, задумчиво шевеля губами.
— Ты вовремя задал вопрос про шину, Саня, — произнёс Морозов. — Теперь этот узел сопровождения сдвига предстоит проверить в железе.
Птицын выпрямился.
— Мне паять макет?
— Плату доработают Олег и Наташа, — спокойно разделил задачи Морозов. — Добавят логические корпуса, кинут перемычки, выведут проверочные точки. А ты дорабатываешь «ЦВЕТ-80». Напиши короткий испытательный цикл: залей экран цветом и заставь ПЗУ безостановочно сдвигать строки.
— Вывод контрольной строки сделай в самом низу, — добавил Громов. — И предусмотри смену текущего атрибута посреди цикла. Под осциллографом нам предстоит увидеть реальные циклы чтения и записи экранной области. Когда Олег соберёт новую схему, запустим твою программу на макете. Ровное движение цвета вверх вместе с текстом подтвердит архитектуру. Полезут пятна — будем подбирать задержки.
— Понял, — Птицын торопливо вытащил из кармана халата блокнот и огрызок карандаша. — А рамку? Тоже отслеживать?
— Рамка управляется отдельным портом, — отмахнулся Громов. — Завтра озадачь Олега фильтрацией обращений к памяти от портов ввода-вывода. Иначе плата начнёт хватать атрибуты при каждом чтении регистра клавиатуры.
Птицын быстро строчил в блокноте, вдавливая грифель в бумагу.
Морозов смотрел на экран телевизора. На тёмном фоне одиноко мигал квадратный курсор.
— Сможешь завтра с утра набросать проверочный цикл? — спросил Морозов, собирая исчерканные листы со стола. — А я пойду обрадую Олега, что его макет потяжелеет на несколько микросхем.
— Он будет абсолютно счастлив, — язвительно заметил Громов, аккуратно складывая гармошку распечатки. — Особенно Наташа. Она только-только спаяла чистую плату. Теперь придется резать дорожки и добавлять корпуса.
— Переживут, — Морозов стянул бумагу в ровную стопку. — Лучше кромсать текстолит на лабораторном столе, чем потом объяснять школьникам, почему у них буквы уехали вверх, а краска осталась висеть в воздухе.
* * *
Следующий рабочий день начался с тяжелого вздоха Олега.
Он стоял над своим аккуратным макетом, который еще вчера считал почти завершенным, и недоверчиво смотрел на лист с наброском Морозова.
— Автомат состояний, — медленно произнес Олег, словно пробуя слова на вкус. — На шине старой восьмидесятки. Вы хотите, чтобы я воткнул сюда триггеры, которые будут следить за каждым чихом ЦУБа, ловить циклы чтения-записи и подменять адреса на лету?
— И сбрасывать флаг при обращении к ПЗУ, — добавил Громов, не отрываясь от своей чашки чая. — Не забудь про сброс. Иначе мы получим светомузыку вместо таблиц.
Наташа придвинула к себе схему. Она уже переводила идею в конкретные логические вентили, быстро рисуя квадратики прямо поверх старых карандашных линий.
— Дешифратор адреса у нас стоит, он видит экранный диапазон, — она постучала колпачком ручки по бумаге. — Берём сигнал чтения. Заводим на запоминающий триггер. По спаду импульса фиксируем текущий цвет во временный регистр.
— А если ЦУБ полезет читать экран вне цикла прокрутки? — нахмурился Олег. — Ложное срабатывание, и
— Значит, следующий такт шины уйдёт в ПЗУ за кодом команды, — ответила Наташа. — Ставим логику на ЛА3. Если адрес не совпадает с экранным, подаём сигнал на асинхронный сброс триггера. Всё лишнее отсекается.
Олег почесал затылок, прикидывая габариты.
— Три дополнительных корпуса. И паутина проводов. Текстолит уже трещит от плотности монтажа.
— Разместишь, — Люба заглянула через его плечо. — Я тебе вчера отдельную шину питания вывела. Только блокировочные конденсаторы повесить не забудь, а то твои регистры от наводок сойдут с ума.
Морозов присел на край стола.
— Саш, пока Олег воюет с паяльником, набросаешь проверочный код? Только для макета. Сначала задай атрибут в порт и раскидай буквы по разным знакоместам, а потом залей экран цветными строками и вызови сдвиг. Посмотрим, поедет ли цвет.
Птицын пододвинул тетрадь. Разговор сменился сухими щелчками бокорезов и густым запахом нагретой канифоли. Саша переводил мнемоники в шестнадцатеричные коды, собирая стендовый тест. Готовый массив он сбросил на ленту магнитофона, чтобы не набивать данные вручную после каждого аппаратного сбоя. Никаких удобств для будущего пользователя — сугубо лабораторный инструмент проверки железа.
К трём часам дня Олег со стуком опустил паяльник на подставку и вытер лоб тыльной стороной ладони.
— Готово. Забирайте своего Франкенштейна.
Плата, обросшая новыми микросхемами-«этажерками», выглядела неряшливо, но прозвонка подтвердила отсутствие коротких замыканий. Колодки аккуратно состыковали с системной магистралью старой «Сферы». Люба щёлкнула тумблером блока питания. Экран ВКУ засветился ровным серым фоном. Дым не пошёл.
Морозов подошёл ближе, Громов отложил распечатки.
— Прогоняй, — кивнул Морозов.
Птицын нажал кнопку воспроизведения. Динамик «Весны» выдал режущий писк. Саша вгружал голый тестовый код прямо в рабочую область памяти. Спустя пару минут лента остановилась.
— Поехали, — Саша вбил стартовый адрес и нажал ввод.
На экране мгновенно отрисовались яркие блоки. Красные буквы на синем фоне выстроились в надпись «ТЕСТ СДВИГА». Ниже легла зелёная строка, за ней — жёлтая. Экран заполнился до самого низа. Цвета стояли идеально ровно, без грязи на границах. Но статику они уже проверяли.
— А теперь вниз, — негромко сказал Громов.
Птицын ударил по пробелу.
ЦУБ принял код возврата каретки. Место в нижней строке закончилось, и базовая прошивка запустила подпрограмму сдвига — обычный цикл побайтового копирования текста.
Как только ЦУБ читал очередной символ из экранной области, временный регистр цветной платы подхватывал атрибут по тому же адресу. Стоило базовой машине выдать символ на строку выше и выставить сигнал записи, как триггер макета немедленно переносил сохраненный цвет в новую ячейку памяти атрибутов. Аппаратный цикл повторялся для каждого знакоместа, плотно сопровождая старый текстовый перенос.
На дисплее всё произошло за долю секунды. Текст дернулся вверх.
И цвета сдвинулись вместе с ним.
Красная надпись «ТЕСТ СДВИГА» поднялась на строку выше. Красный шрифт и синий фон перешли в новые знакоместа строго поверх нужных символов. Освободившаяся нижняя строка очистилась полностью — старая прошивка стерла текст, а цветная плата обнулила соответствующие байты атрибутов.
— Работает, — выдохнул Птицын.
Он принялся раз за разом бить по пробелу. Экран дернулся раз, другой, третий. Цветные прямоугольники поднимались вверх синхронно со словами. Привязка цвета к символам сохранялась на каждом шаге прокрутки, пока контрольная надпись не ушла за верхнюю кромку кинескопа.
Олег уперся руками в край стола и счастливо рассмеялся.
— Схема сама тащит цвет за символами! Базовая плата прокручивает текст, а наша обвязка шагает следом и перекладывает атрибуты. Мы полностью сохранили старую прошивку.
Наташа отложила щуп осциллографа и сделала пометку в раскрытой тетради, пряча довольную улыбку.
— Импульс чтения из экранной области проходит чётко, — произнесла она. — Следом идёт сигнал записи, логика переносит атрибут и сразу сбрасывает флаг. При обращениях ЦУБа к ПЗУ или системному ОЗУ ложных срабатываний нет. Сигналы стабильные.
Морозов смотрел на мерцающие строки. Макет впервые выводил цветной текст, а старое ПЗУ оставалось нетронутым.
Громов хлопнул Олега по плечу.
— Беру свои слова обратно, Тимофеев. Эта этажерка из микросхем стоила того. Мой интерпретатор цел.
Наташа потерла переносицу, размазав серый след от карандашного грифеля.
— Собрать макет в лаборатории с нормальным осциллографом легко, — произнесла она. — Радиолюбителю повторить схему будет сложнее. Выдадим голый чертеж с обратными связями — энтузиасты спалят базовые платы. У школьника в райцентре есть только дедовский тестер и самодельный логический пробник.
Люба поправила очки, собирая со стола кусачки и пинцеты.
— Обязательно укажите сечение проводов питания и длину шлейфов. Пять сантиметров до шины, максимум. Сделают длиннее — нахватают наводок. Схема начнет срабатывать от включения холодильника за стеной, вылезет случайная цветомузыка.
Громов присел на край стола.
— Программное пояснение беру на себя. Сделаю таблицу портов и пример для статьи. Пользователь задает текущий атрибут через OUT, затем печатает стандартным PRINT. Текст выводится штатно, железо параллельно подтягивает цвет.
— Завтра отдаем черновики Липатову, — сказал Морозов. — Пусть готовит документацию. С него чистовая принципиальная схема, перечень элементов и методика сборки с наладкой. Материал для статьи тоже сведет он. А Саша…
Алексей посмотрел на Птицына. Тот завороженно бил по пробелу, гоняя цветные строчки вверх по стеклу кинескопа.
— А Саша напишет первый цветной пример. График функции или простую игру. Вещь, ради которой человек пойдет греть паяльник.
Птицын просиял.
— Сделаю, Алексей Николаевич!
Глава 38
Цвет для тех, кто будет паять сам
Олег бережно опустил на середину свободного стола плату.
Собранный макет выглядел откровенно страшно. Поверх ровных заводских дорожек макетной платы приставки громоздились «этажерки» из дополнительных логических микросхем. От их выгнутых ножек тянулась густая паутина МГТФ. Жёлто-розовые жилы переплетались, ныряли под корпуса, пересекали друг друга под немыслимыми углами и крепились к случайным контактным площадкам жирными каплями припоя.
Морозов молча рассматривал этот инженерный кошмар, засунув руки в карманы. Конструкция работала. Вчерашние стендовые испытания подтвердили, что новая логическая обвязка справляется со своей задачей без сбоев.
— Вот она, — Олег упер руки в бока, покачиваясь на пятках. — На выставку с таким монтажом не поедем, зато на экране чистота. При прокрутке атрибуты переносятся стабильно.
Наташа осторожно склонилась над платой. Она придирчиво изучала сложный навесной монтаж, выискивая слабые места.
— Это на нашем лабораторном столе она хорошо себя ведёт, — произнесла она и указала на пучок проводов, идущий к дешифратору адреса. — У нас здесь эталонное питание. И осциллограф, которым мы ловили фронты сигналов. А на
Птицын переступил с ноги на ногу.
— Но если дать им точную принципиальную схему… — начал он. — Прямо в журнале напечатать. С номиналами.
Олег покачал головой.
— Схема точная. Руки разные, — он указал на плотные ряды контактов. — У одного паяльник тонкий, с правильной заточкой. У другого жало грубое, перегретое на газовой плите. Он таким жалом перегреет микросхему или посадит каплю припоя между выводами.
Громов, сидевший верхом на стуле у соседнего стола, задумчиво покрутил пустую кружку с надписью «Кисловодск».
— А виноват всё равно окажется код, — меланхолично вставил он. — Человек закоротит шину данных, машина зависнет, и в журнал полетит жалоба. Напишут, что мы дали кривую тестовую программу или перепутали адреса портов. Программист всегда крайний.
Люба подошла к столу, поправила очки и осмотрела цепи питания макета.
— И блок питания у третьего собран из того, что лежало в тумбочке у отца, — добавила она. — Трансформатор от старой радиолы, диодный мост на соплях и высохший электролит. Мы тут навесили три дополнительных корпуса серии К155. Они жрут ток. Если питание просядет хотя бы на полвольта, вся ваша цветная красота начнёт моргать при каждом нажатии клавиши.
Морозов вытащил руки из карманов и оперся о край стола.
— Значит, пишем методичку не для нашего осциллографа, а для стрелочного тестера, — подытожил он. — Человек должен на пальцах понимать физику: куда уходит старый видеосигнал и как выловить ошибку монтажа, если картинка рассыпалась.
Олег поморщился, глядя на макет.
— То есть мы теперь ещё и учителя труда? — проворчал он, забирая плату со стола.
— Хуже, — Громов откинулся на спинку стула. — Учителя труда с прямым доступом к системной шине и ПЗУ. Иди, Тимофеев, готовь черновики схем для Липатова. А я посмотрю, как ты объяснишь школьнику работу триггера-защёлки без матерных слов.
* * *
Липатов сидел за идеально чистым столом. Перед ним лежала стопка писчей бумаги, набор остро заточенных карандашей и черновик статьи, густо исчёрканный правками Громова. Он протирал стекла очков клетчатым платком, щурясь на подошедших.
Морозов придвинул стул, а Громов привалился плечом к фанерной перегородке.
— Я прочитал введение, — Липатов надел очки. — Тут у тебя написано: «плата аппаратно сопровождает атрибуты при циклическом сдвиге адресного пространства». Звучит солидно. Для защиты диссертации.
— Это технически точное описание процесса, — возразил Громов.
— Безусловно, — Липатов аккуратно выровнял черновик по краю стола. — А теперь скажи, что увидит десятиклассник, который впервые снял крышку со своей самодельной «Сферы» и пытается понять твой текст?
— Клубок проводов. Потом испугается, закроет крышку и пойдет играть в футбол.
— Женя, — Морозов покачал головой. — Оставь снобизм. Сергей дело говорит.
Громов отлепился от перегородки, вытянул из подставки карандаш и придвинул чистый лист.
— Ладно. Переводим с инженерного на человеческий.
Грифель быстро заскользил по бумаге, вырисовывая прямоугольник телевизионного экрана. Внутри Громов набросал контур буквы «А».
— Пиши про трафарет и краску, — скомандовал Громов. — Черно-белая машина дает контур знака, а приставка его закрашивает.
Он обвёл контур буквы жирнее.
— Вот так и объясним: младшие биты атрибута задают цвет самого знака, старшие — фон. Пользователь должен понять базовый принцип, а не тонуть в машинных циклах.
Липатов методично записал слова Громова в блокнот.
— Значит, пишем в статье так, — Липатов поднял взгляд на Громова. — Трафарет. Атрибут. Цветной выход. Читателю нужно разделить в голове три сущности: откуда берётся форма буквы, где хранится её цвет, и как они сливаются вместе на экране.
Громов крутанул карандаш между пальцами и бросил его обратно на стол.
— Ты сейчас безжалостно вырезал моё любимое предложение. Я его полчаса формулировал.
— Я спасаю твоё любимое предложение от школьников с паяльниками, — невозмутимо ответил Липатов, подчеркивая слово «трафарет» двойной чертой. — Если они не поймут разницы между памятью машины и памятью атрибутов, они потом вообще начнут подключать видеовыход в розетку. Дальше. Что у нас со схемой?
Громов кивнул в угол лаборатории. Там, у закрепленного на кульмане ватмана, уже минут двадцать шел спор. Олег, Наташа и Люба сгрудились вокруг листа, вооружившись ластиками и толстыми карандашами. Морозов стоял чуть позади, наблюдая за процессом превращения хаотичного макета в строгий чертеж.
Олег упрямо ткнул пальцем в нарисованный блок.
— Этот узел я упрощать не хочу, — сказал он. — На прогоне прокрутка прошла чисто, без цветовых следов. Уберем сейчас один-два корпуса — придется заново подбирать временные соотношения и всё перепроверять.
Наташа стёрла ластиком кусок линии, сдула серые катышки с ватмана и посмотрела на своего напарника.
— Узел справлялся со сдвигом, потому что мы видели его работу на хорошем осциллографе, Олег. Мы подобрали ёмкости. А в статье нам надо дать контрольные точки для тех, кто будет собирать приставку без приборов. Если триггер не сбросится вовремя, цвет поползёт.
Люба провела ногтем по нижней линии чертежа — шине заземления.
— По питанию, как мы уже обсуждали, будет проблема, — тихо сказала она. — Если они повесят эту сто пятьдесят пятую логику на длинных соплях к штатному блоку, машина начнёт сбоить от импульсных помех. Надо менять хотя бы часть корпусов на К555. Она экономичнее.
Олег схватился за голову.
— Люба, пятьсот пятьдесят пятую серию радиолюбитель в глаза не видел! Она дефицитная. Её только на заводах достать можно, или у несунов купить втридорога. Мы делаем массовую доработку или штучный прибор для избранных?
— Мы делаем надёжный прибор, — отрезала Наташа. — Пишем в перечень элементов сто пятьдесят пятую, но жирным шрифтом добавляем требование: блокировочный конденсатор по питанию на каждый второй корпус. Без исключений.
Олег тяжело вздохнул и обвел тупым концом карандаша габариты будущей платы на ватмане.
— А теперь главное, — произнес он, глядя на хитросплетение нарисованных линий. — Для завода мы бы развели двухстороннюю плату с металлизацией переходных отверстий. Но для журнала это не пойдёт. Школьник на кухне металлизацию не сделает. Значит, всю приставку нужно уложить в один слой фольги.
Наташа поморщилась. Односторонняя разводка цифровой логики на пятнадцать корпусов — это персональный ад для трассировщика.
— Они в один слой не лягут, Олег. Шина данных, шина адреса, перекрестные связи. Без перемычек не обойтись.
— Значит, будут перемычки,
— Миллиметр для микросхем? — Люба поправила очки, вглядываясь в чертеж. — У тебя между ножками корпусов дорожки не пройдут.
— Обойдем корпуса вокруг, разнесем элементы шире. Приставка станет больше по площади, но это необходимо. Пойми, Люба, они будут травить текстолит не в заводской кислотной ванне с жестким температурным контролем. Они кинут плату в тазик с медным купоросом и солью, поставят на батарею и уйдут делать уроки. Или разведут старое хлорное железо. Тонкую дорожку там просто сожрет боковым подтравливанием, останутся одни обрывы.
Олег нарисовал на полях ватмана микросхему и заштриховал вокруг вывода огромный круг.
— А контактные площадки под выводы надо делать огромными, как блины. Заводская нормальная площадка не выживет. Паять они будут не паяльными станциями, а бытовыми «топорами» на сорок ватт, разогретыми докрасна. Чуть передержал жало — и маленькая площадка моментально отслоится от дешевого гетинакса, повиснет в воздухе.
Наташа, мысленно перестраивая всю топологию платы под эти варварские, но единственно верные для домашних условий требования, медленно кивнула.
— Поняла. Увеличиваем шаг. Утолщаем трассы. Перемычки выносим на сторону компонентов и маркируем на чертеже толстым пунктиром.
Морозов шагнул ближе к кульману, с уважением оценив, как быстро они переключились с промышленной инженерии на партизанскую.
— Согласен. Физика сборки в домашних диктует свои правила, — сказал он. — А что с контрольными точками?
— Поставим три крупные контактные площадки на плате и подпишем прямо на фольге, — сдался Олег. — Питание, земля, выход цвета.
— Пять, — Наташа взяла карандаш и нарисовала на ватмане пять жирных кружков в разных частях схемы. — Вход старого видеосигнала. Синхроимпульс после амплитудного селектора. Выход компаратора. Сигнал записи в память атрибутов. И итоговый цветной выход. Если хоть один сигнал пропадёт, человек должен знать, где именно произошел обрыв, а не перепаивать всю плату наугад.
— Пять точек, — согласился Морозов. — И ещё одно требование, Олег. Добавь перемычку или тумблер для аппаратного обхода.
Олег прищурился, прикидывая компоновку на текстолите.
— Хочешь пускать штатный видеосигнал в обход цветной памяти?
— Да, — кивнул Морозов. — Если цветная плата зависла, сгорела или просто не нужна для текущей задачи, пользователь должен вернуть старый чёрно-белый режим одним переключением. Базовая машина обязана оставаться рабочей.
Олег посмотрел на чертёж, прикидывая, как втиснуть дополнительную коммутацию на ограниченную площадь текстолита.
— Тогда статья в журнале будет толще, чем сама печатная плата, — пробормотал он.
Люба мягко улыбнулась, поправляя очки.
— Зато пачка обгоревших писем в редакцию будет гораздо тоньше.
Спустя час лабораторный стол преобразился. Привычный двухлучевой осциллограф отодвинули на край соседнего стола, уступив место инструментарию школьного радиокружка. Инженеры выложили черную «цешку» и самодельный логический пробник из прозрачной авторучки с торчащей иглой и двумя светодиодами внутри.
На расчищенном пространстве остался только макет приставки. Рядом тихо гудел цветной телевизор. От выхода платы к нему тянулся аккуратный экранированный кабель: через нормальный разъём и клемму земли.
Птицын сосредоточенно вбивал код на клавиатуре «Сферы». Клавиши на герконах мягко клацали. Липатов стоял рядом с открытым блокнотом, а Громов наблюдал за экраном из-за плеча Наташи.
— Готово, — Птицын нажал ввод. — Первый тест. Самый простой.
На экране телевизора появились привычные белые буквы на черном фоне.
— Обход включен, — Птицын убрал руки с клавиатуры. — Видеосигнал идет насквозь, без цвета.
Наташа кивнула, глядя на экран.
— Идеально. Картинка стабильная. Значит, штатный видеотракт не поврежден при монтаже. Пиши, Сергей: «Симптом: нет изображения в режиме обхода. Причина: обрыв входного видеосигнала или земли».
Липатов аккуратно зафиксировал фразу.
Птицын перекинул перемычку на макете. Экран моргнул.
— Второй тест. Обращение к порту атрибутов.
На экране вспыхнула красная строка на ровном синем фоне. Границы букв были четкими, цвета не наползали друг на друга.
— Отлично, — Громов указал пальцем на экран. — Стандартный PRINT отработал чисто. Базовая прошивка даже не догадывается, что мы вывели цвет.
— А если цвета нет? — спросил Липатов, не отрываясь от блокнота. — Или он не тот?
Наташа взяла логический пробник и коснулась вывода одной из микросхем макета. Красный светодиод в авторучке тускло загорелся.
— Если буква ровная, читаемая, но фон чужого цвета или в полоску — проверяем саму память атрибутов и адресацию к ней. Значит, трафарет доходит нормально, а краска путается. — Она посмотрела на Липатова. — Если сама буква расползлась, дрожит или рвется — это проблема старого видеосигнала или срыв синхронизации. Приставка не может поймать начало кадра.
Птицын оживился, его пальцы снова забегали по клавишам.
— А теперь самое главное. Запускаем наш вчерашний циклический тест сдвига строк.
— Запускай, — скомандовал Громов. — Только задержку поставь побольше. Человек должен успеть увидеть, где именно возникает ошибка, а не гадать по мельтешению строк.
Птицын ударил по пробелу.
Красная строка на синем фоне дернулась и перескочила на знакоместо выше. Цвета остались строго привязаны к тексту. Сдвиг отработал чисто.
Затем Наташа взяла пинцет и аккуратно замкнула на «землю» контрольную точку, притягивая вход триггера к нулю.
— Имитируем отказ автомата сброса флага.
Птицын снова нажал пробел.
Текст уехал вверх. Уехавшие буквы потеряли цвет и стали белыми на черном, а на прежнем месте строки остались висеть пустые синие прямоугольники.
— Поползло, — констатировал Громов. — Краска отклеилась от обоев.
Липатов быстро строчил в блокноте.
— Записываю: «После каждого тестового сдвига проверить визуальное совпадение цвета и символов. В случае отслоения атрибутов — проверять узел аппаратного сопровождения на микросхемах DD14-DD16».
Громов покосился на Липатова.
— Слово «совпадение» оставь. Оно человеческое. А вот «отслоение атрибутов» звучит как медицинский диагноз.
— Зато точно описывает физику процесса, — парировала Наташа, убирая пинцет. Экран снова пришел в норму при следующем сдвиге. — Мы даем им не просто схему, а матрицу отказов. Симптом — причина — метод проверки тестером. Без осциллографа.
Морозов удовлетворенно хмыкнул.
* * *
К вечеру они перебрались в кофейную. На столике у окна дымились разномастные кружки, пахло свежемолотым кофе, а старую ручную мельницу кто-то сдвинул на самый край столешницы. Место в центре освободили для главного — там лежал чистовой черновик статьи.
Липатов поправил очки, подвинул к себе лист и прочитал заголовок вслух:
— «ЦВЕТ-80: цветная графическая приставка к учебной микроЭВМ».
Он обвел взглядом
— Не слишком тоскливо звучит? Для школьников и радиолюбителей пишем, а название как у ГОСТа.
Громов отхлебнул остывший чай.
— Нормально звучит. Меньше лирики — целее телевизоры.
Люба согрела ладони о бока толстой керамической кружки и покачала головой:
— Телевизоры все равно пострадают. Если мы просто дадим схему приставки, ребята из кружков полезут в домашние цветные телевизоры искать блок цветности. Нужно с первых строк писать: универсального шнура не бывает.
Наташа потерла переносицу.
— Вот именно. Они спаяют плату, а потом начнут гадать, куда ее подключать. Без готовых схем сопряжения это тупик.
Олег придвинул к себе сахарницу.
— Тупик с высоким напряжением. Ткнется человек щупом наугад в видеоусилитель и либо словит разряд с кинескопа, либо выжжет нашу плату. Нам нужны три-четыре типовые врезки для самых массовых телевизионных трактов и ВКУ.
— И точки ввода видеосигнала, — добавил Громов, вытаскивая ложечку из чашки. — Вывод синхронизации, нормальная земля. Плюс методика, как проверить уровни обычным бытовым тестером. Иначе вместо цветной графики получат дергающееся пятно.
Морозов, сидевший на подоконнике, спрыгнул на линолеум.
— Техника безопасности нужна, но с нее нельзя начинать. Мы на нашей с Анной книжке про компьютеры уже поняли: начнешь с одних предупреждений — человек закроет страницу. Он должен сначала понять, ради чего рискует дефицитными микросхемами. Сперва показываем результат. Красная строка ошибки, зеленая строка готовности, желтая подсказка для следующего шага. Учебная программа, где видно, что машина отвечает не серой простыней, а понятной картинкой.
Липатов покрутил в пальцах карандаш.
— То есть сначала дразним, а потом пугаем высоковольтным трактом?
— Сначала объясняем зачем, — поправила Люба. — Если школьник поймет, как заработает его программа, он и плату спаяет чисто, и землю правильную найдет, а не прикрутит провод к батарее.
— Вот так и выстроим текст, — кивнул Морозов. — Открываем пользой. Следом карандашная схема приставки, как мы её сегодня раскидали. Потом порядок врезки: куда тянуть провода, где измерять напряжение, что проверять до первого включения.
Липатов перевернул лист, быстро размечая структуру прямо на обороте.
— Дальше таблица портов и Сашина программа. А в финале дадим таблицу неисправностей и возврат в монохромный режим. Работы на неделю. Схемы перечертить, текст причесать, таблицу расширить.
— Стоп, — вмешался Громов. — Сашину тестовую программу в виде чистого ассемблерного листинга мы в журнал не дадим.
Птицын, сидевший рядом, недоуменно моргнул.
— Почему? Она же короткая. Цикл вывода, установка цвета, плотный сдвиг экрана.
— Потому что у пользователя базовой «Сферы-80М» нет на кассете макроассемблера, — пояснил Громов. — А обычный Бейсик для проверки железа не годится — он слишком медленный. Нам нужно прогнать самодельную плату на предельной скорости, чтобы вылезли все помехи по питанию и рассинхроны триггеров. Но транслировать твой ассемблер школьнику нечем.
Морозов кивнул, понимая проблему.
— Предлагаешь дать голые шестнадцатеричные коды?
— Именно, — Громов взял карандаш и набросал на свободной салфетке ровную сетку. — Печатаем таблицу. Слева адрес в ОЗУ. Потом восемь байт машинного кода. А в конце каждой строки — контрольная сумма.
Громов обвел последнюю колонку жирной рамкой.
— Радиолюбитель включает машину, выходит в системный монитор и руками, байт за байтом, вбивает эти цифры. Если он ошибся хоть в одном символе — контрольная сумма строки не сойдется. Он сразу увидит опечатку и исправит ее, не запуская испорченный код. Если всё сошлось — он сохраняет этот диагностический блок на кассету.
— Изолированный тест, — оценил Липатов, делая пометку в своем плане статьи. — Прагматично. А как потом из Бейсика заставить этот код работать?
— Командой `USR` по стартовому адресу, — Громов усмехнулся. — Для пацана за клавиатурой это будет выглядеть как настоящая магия. Спаял плату, вбил непонятную таблицу цифр, набрал `X=USR(адрес)` — и машина на бешеных скоростях выплевывает цветную тестовую таблицу, прогоняет сдвиг и проверяет аппаратную защелку. Если картинка ровная и не дергается — значит, схема собрана верно. А дальше можно спокойно писать игры на Бейсике через обычный `OUT` в порт цвета, железо всё сдвинет само.
Птицын просиял. Идея превратить его код в компактный диагностический инструмент с контрольными суммами звучала невероятно профессионально.
— Я подготовлю код, Евгений Александрович. Считаю суммы по каждой строке, — пообещал он.
* * *
На столе Липатова громоздился целый ворох бумаг. Поверх изрисованных черновиков легла грубая схема на миллиметровке, исписанный мелким почерком листок со списком контрольных точек, таблица с машинными кодами теста и список симптомов, который Наташа с Олегом набрасывали до ухода в кофейную.
Птицын потянул из стопки верхний лист, вглядываясь в кривоватые прямоугольники микросхем.
— Вчера это была просто плата с висящими проводами, — задумчиво произнес он. — Кусок текстолита. А сегодня…
Олег хмыкнул, сматывая толстый шнур паяльника.
— Сегодня это стопка макулатуры, Саня. Изделием оно станет, когда какой-нибудь восьмиклассник в Свердловске соберет схему по этим картинкам, включит питание и у него не пойдет дым. А на экране появится стабильный цвет.
Наташа аккуратно укладывала щупы осциллографа в дерматиновый чехол. Застегнула тугую кнопку.
— Дым пойдет всё равно, — философски заметила она. — Мы не можем проконтролировать каждую пайку и каждый высохший конденсатор в чужом телевизоре. Вопрос в том, насколько быстро человек сообразит, где именно накосячил.
Липатов забрал у Птицына лист и подровнял края стопки. Сверху лег тот самый черновик с порядком проверки.
— Блуждать станут меньше, — уверенно сказал он. — У них перед глазами четкая последовательность. От первой детали к работающему цвету. Шаг вправо, шаг влево — человек смотрит в таблицу и видит, где отвалился контакт.
Морозов размял затекшую шею. Отражение в темном оконном стекле показало сутулые плечи и усталые лица коллег.
— У нас на столе всё держится на привычке и приборах, — произнес он, поворачиваясь к лаборатории. — В журнал привычку не вложишь. Значит, даём контрольные точки, порядок сборки и честно пишем большими буквами: базовое ПЗУ не перешивать, приставку сначала проверять отдельно, возврат в монохром — тумблером.
Громов, уже надевший пальто и зажавший пухлый портфель под мышкой, остановился в дверях. Он поправил колючий шарф.
— Оптимисты. Инструкцию они прочитают только после того, как сожгут первую плату. Но вот это предупреждение про ПЗУ вынесите в самое начало. И жирным шрифтом.
Морозов усмехнулся:
— Свой интерпретатор бережёшь?
— Чужое время берегу, — ответил Громов. — Для смены цвета вполне хватает штатной команды OUT с нужным значением. ПЗУ
Глава 39
Пять новых машин
Сдвинутые вместе столы образовали длинный остров, разделивший помещение надвое.
На этом острове ровным строем стояли пять свежесобранных корпусов из новой опытной партии на пятнадцать машин. Три корпуса уже получили дисководы. Две машины намеренно оставили без локальных накопителей, готовя к чистой проверке загрузки по сети.
Морозов стоял у окна, скрестив руки на груди, и молча смотрел на эту шеренгу. Три самых первых рабочих стенда, собранных еще зимой, так и остались лабораторными образцами, вечно обрастающими новыми проводами. Теперь перед ним выстроился первый одинаково учтенный ряд. Малая серия, доведенная до паспортного состояния.
Михалыч прошел вдоль столов, тяжело ступая по истертому линолеуму. Остановился у крайнего левого корпуса и хлопнул ладонью по матовой крышке.
— Вот эта — первая, — голос Михалыча легко перекрывал гул приборов за стеной. — Первая по ведомости.
Володя, стоявший по ту сторону стола, подался вперед и потянулся к кромке открытого шасси.
— Иван Михайлович, я сначала плату посмотрю. Там она до конца на стойки не села, кажется…
— Сначала бирка, потом плата, — отрезал Михалыч, — Машина без бирки через неделю станет сиротой. Открутишь плату, отвлечешься, положишь рядом с другой, и ищи потом, где чей дефект. За ними еще десять комплектов пойдут, запутаемся в два счета.
Зоя сидела на высоком табурете у торца стола. Перед ней стопкой лежали чистые бланки паспортов, отпечатанные на желтоватой бумаге, и картонные бирки с суровыми нитками. Она сняла колпачок с шариковой ручки и аккуратно, чертежным шрифтом, вывела первую цифру. Стержень чуть слышно скрипнул по картону.
— Первые пять машин из пятнадцати, — не поднимая головы, произнесла она. Паста ложилась ровно, въедаясь в рыхлый картон. — Пять базовых комплектов.
Морозов отлепился от подоконника и шагнул к столам.
— База у всех одинаковая, — подтвердил он, глядя, как Зоя привязывает бирку к прорези охлаждения на задней стенке первой машины. — Разница только в периферии.
Михалыч удовлетворенно кивнул, достал из кармана пиджака огрызок карандаша и сделал пометку в блокноте.
— Хватит лирики. Люба, бери Володю, идите проверять платы. Зоя, пиши паспорта на оставшиеся четыре.
* * *
Ряды черных микросхем оперативной памяти на плате тускло поблескивали золотистыми ножками под лампами дневного света. Володя осторожно, двумя пальцами, приподнял край текстолита.
— Красиво смотрится, когда все места заняты, — негромко произнес он и провел пальцем над черными корпусами. — Шестьдесят четыре килобайта. Влезет и система, и еще место останется.
Люба подошла к столу. Положила тяжелый стрелочный тестер и поправила очки на переносице.
— Красиво будет после прогона, Володя, — сказала она, — Опускай на место. Будем прозванивать цепи перед подачей питания.
Володя послушно опустил плату на крепежные стойки. Раздался легкий стук текстолита о шасси.
Зоя, не слезая с табурета, придвинулась с планшетом ближе и водила колпачком ручки по рядам микросхем, сверяя маркировку с накладной. Нахмурилась, остановила руку и наклонилась еще ниже к плате, щурясь.
— Иван Михайлович, тут две микросхемы по маркировке отличаются, — неуверенно произнесла Зоя, указывая колпачком. — У них месяц выпуска другой, и шрифт немного мельче.
Михалыч, проходивший мимо с коробкой крепежа, остановился. Он подошел к столу, навис над платой и долго рассматривал крошечные цифры.
— В паспорт, — скомандовал он. — И карандашом на бирку. Прямо на картонке пиши: память — смешанная партия.
Володя удивленно посмотрел на начальника, не отрывая рук от шасси.
— Иван Михайлович, это же одна серия. Если тест пройдет, разницы ведь нет? Электрически они идентичны.
Люба вздохнула. Переключила тестер в режим омметра, прижала минусовой щуп к шине заземления, а плюсовым коснулась линии питания на плате. Стрелка тестера отклонилась, показывая сопротивление — короткого замыкания нет.
— Сейчас, на прозвонке, чисто, — Люба посмотрела на Володю поверх очков. — А когда закроем крышку и плата прогреется, начнется дрейф. У микросхем из разных партий разные температурные допуски. Эти чужие корпуса при нагреве «поплывут» первыми и начнут сыпать мусором на шину.
Зоя аккуратно вывела примечание в паспорте третьей машины.
— Значит, первую мы пока считаем эталоном, а за третьей придется следить? — осторожно уточнила она, сдувая пылинку с бумаги.
Михалыч довольно крякнул. Он похлопал Зою по плечу так, что табурет под ней скрипнул.
— Вот. Начинаешь понимать производство. Брака еще нет, а слабое место мы уже задокументировали. Закончили с маркировкой — подавайте питание на плату.
На участке Олега и Наташи на массивном столе стоял телевизор. Кинескоп тускло светился серым растром. Внутренности телевизора, ощетинившиеся платами и высоковольтными проводами, нависали над плоским шасси «Сферы-82».
Олег взял толстый кабель с металлическим разъемом на конце и вставил в гнездо на задней панели машины.
— Давай картинку, — бросил он через плечо.
Птицын, сидевший за клавиатурой «Сферы», нажал клавишу сброса. Экран телевизора дернулся, по нему пробежала широкая черная полоса, и серый фон сменился четкими рядами символов.
— Края букв не плывут? — Олег прищурился, указывая концом диэлектрической отвертки на экран. — Если пойдет бахрома, сразу шевели кабель. Разъем мы тут временно припаяли, может не контачить.
Птицын присмотрелся. Буквы стояли ровно, но сам текстовый блок медленно, едва заметно пульсировал.
— Есть легкая пульсация, — заметил он, убирая руки с клавиатуры.
Наташа стояла сбоку, уткнувшись взглядом в зеленый экран осциллографа. По сетке прибора бежала характерная гребенка кадровых синхроимпульсов.
— Синхроимпульс немного плавает, — не отрываясь от прибора, ответила она, чуть повернув ручку развертки. — Сначала проверим контрольную точку на выходе машины. Если наш импульс чистый, с ровными фронтами — значит, проблема в телевизоре. Если завален — значит, мы сами гоним брак.
Зоя подошла к ним, держа наготове планшет с паспортом четвертой машины.
— В паспорте писать «дрожит»? — спросила она, занеся ручку над графой «Отметка о приемке видеовыхода».
Олег повернулся к ней и прокрутил отвертку в пальцах.
— Писать надо так, чтобы завтра понять, что именно мы видели. «Вертикальная синхронизация уходит после прогрева» — это диагноз. Его можно проверить. А «дрожит» — это лирика.
Наташа согласно кивнула, фиксируя показания на осциллографе.
— И время прогрева указывай обязательно. Пять минут, десять, двадцать. Напиши: «Растр стабилен, дрожание в пределах нормы, синхроимпульс 4.8 вольта».
Зоя быстро застрочила
* * *
Громов подошел к сборочному столу, на ходу закатывая рукава рубашки. На куске поролона, проложенном для защиты от вибраций, лежали четыре угловатых блока дисководов ИЗОТ. Тусклый штампованный металл корпусов холодил пальцы, когда Женя опустил ладонь на верхний привод и с сухим, резким щелчком проверил пластиковый замок дверцы. Механика отозвалась приятной тяжестью.
Зоя склонилась над краем столешницы. Она аккуратно разглаживала бумажную бирку с инвентарным номером на ребристом кожухе первого дисковода, следя, чтобы края не задирались.
— Четыре свободных, — констатировал Громов, оглядывая стопку. — Из пяти один уже крутится на восемьдесят второй «В». Оставили под их внутреннюю разработку.
— Учет строгий, — отозвался из-за соседнего стеллажа Михалыч, тщательно вытирая руки промасленной ветошью. — Эти четыре полностью в нашем распоряжении. Никуда не распределены, на балансе числятся за опытным участком. Куда ставим?
Громов перевел взгляд на выстроившиеся в ровный ряд пять новых серых корпусов опытной партии. Верхние крышки были сняты, открывая плотно забитые платами внутренности, сплетения шлейфов и массивные радиаторы блоков питания.
— Мне нужны три локальных дисковых стенда, — сказал Женя, ритмично постукивая пальцами по поролону. — Первая машина пойдет чисто под разработку ядра МикроДОС. Вторую отдаем под «СЛОЙ». У них там топологические пакеты, тяжелые файлы, системе нужно постоянно тянуть данные с магнитного носителя, иначе мы утонем в ожидании. Третья нужна как эталон. Когда сложная программа падает, мне нужно гонять ее параллельно на эталонной сборке, шаг за шагом, чтобы ловить расхождение тактов.
Морозов остановился рядом. Главный конструктор внимательно изучал разводку питания в крайнем корпусе, проверяя качество пайки на разъемах.
— Добро. Первые три собираем с локальными приводами, — согласился он, не отрывая взгляда от жгута проводов. — А четвертая и пятая остаются пустыми.
Громов упрямо скрестил руки на груди. Он кивнул на оставшийся лежать на столе четвертый ИЗОТ.
— Привод лежит прямо здесь. Почему не поставить его в четвертую машину? Сетевой загрузчик сейчас еле дышит. Если линия начнет срываться от каждого шороха, мы утонем в случайных отказах. Давайте дадим им временные диски. Хотя бы на пару недель, пока сеть не перестанет сбоить.
— Никаких временных дисководов, Женя, — ответил Морозов. — Если я разрешу локальную загрузку, ты моментально срежешь углы. Сетевой обмен останется красивой идеей на ватмане, а программисты будут грузиться с дискет по привычке. Мне нужны именно две бездисковые машины. На одной нормальную сетевую загрузку не проверить. Нам нужно сравнить два принимающих узла, проверить разные длины линии, посмотреть, как два клиента делят один канал. Нужно поймать, где именно возникает ошибка — в программе передачи, в самом кабеле или в логике железа. Четвертая и пятая обязаны тянуть систему по проводу с твоей первой.
Михалыч сунул ветошь в глубокий карман рабочего халата и достал огрызок химического карандаша.
— Зоя, пиши в паспорт, — скомандовал мастер. — Если машина уйдет на прогон с пустой нишей под привод, в бухгалтерии решат, что мы деталь пустили налево. Фиксируем как сетевую комплектацию.
Зоя макнула перо в тушь, приготовившись заполнять графы официального документа.
— А как точно сформулировать? И что делать с четвертым дисководом? Он ведь остается на столе.
— Пиши дословно: «Машины номер четыре и пять — локальные приводы не предусмотрены, сетевая сборка. На лицевые панели установлены глухие заглушки», — продиктовал Михалыч, глядя, как ровные буквы ложатся на бумагу. — А свободный ИЗОТ оформляй отдельной строкой в ведомости. Резерв для следующего дискового комплекта или пополнение подменного фонда. Это осознанный инженерный запас, а не потерянная железка.
В дальнем конце лаборатории Птицын почти целиком склонился над открытым брюхом четвертой машины. Основная плата уже стояла на месте, тяжелый трансформатор блока питания издавал низкий гул, но пространство за лицевой панелью зияло темной пустотой. Саша держал длинный медицинский пинцет, пытаясь направить пучок розоватых проводов МГТФ к крошечным контактным площадкам системной шины, зажатым между рядами микросхем.
Кравец сидел на высоком табурете напротив, методично постукивая тупым концом карандаша по поцарапанной столешнице.
— Я временно кидаю эти линии, только чтобы поймать маркер в кольце, — оправдывался Птицын, щурясь на тонкие медные жилки в свете настольной лампы. — Программа начальной сетевой загрузки сейчас совсем крошечная. Ведущая машина с диском отдает в линию стартовый блок. Четвертая и пятая слушают порт. Обе ловят кадр, считают контрольную сумму. Если сходится — глотают в память и ждут следующий кусок. Не сходится — отправляют запрос на повтор. А если ведущая машина молчит дольше заданного ожидания, они останавливаются и выдают на экран код ошибки. Имея две слушающие машины в одном сегменте, я смогу сравнить их ответы и увидеть настоящие сбои обмена.
Кравец прекратил стучать карандашом. Он наклонился вперед, разглядывая временный монтаж.
— Эти висящие паутины из МГТФ испортят нам форму сигнала, Саша. Ты строишь паразитную антенну, а не линию связи. Емкость длинных проводов завалит фронты импульсов. Начнутся отражения, и твой приемник будет бесконечно просить повтор кадра просто потому, что физический сигнал сжевало по дороге. Нам нужен нормальный, прочный сменный сетевой узел. Вынул плату, поставил запасную, и сразу понял — программа ошиблась или железо подвело.
Володя, перебиравший крепеж в картонной коробке по соседству, негромко кашлянул. В левой руке он держал небольшую макетную плату из желтого стеклотекстолита, усеянную рядами металлизированных отверстий.
— Вадим Сергеевич, а что если закрепить ее вертикально? — Володя шагнул ближе и приложил плату к краю системной шины, прицеливаясь к свободному месту. — Прямо на короткие выводы, как съемную платку развязки. Верхний край оставим свободным под проволочные перемычки, а наружу, к боковой стенке, выведем ряд толстых штырьков для щупов осциллографа.
Птицын опустил пинцет на стол и вздохнул, потирая переносицу.
— Вертикально? Рычаг получается слишком длинный. Хрупкая пайка на разъеме треснет под собственным весом от малейшей вибрации. Кто-нибудь в коридоре хлопнет дверью, стол дрогнет, и связь отвалится в самый неподходящий момент передачи.
Володя покачал головой. Он вытащил из картонной коробки две длинные шестигранные латунные стойки и узкую металлическую монтажную планку с готовой резьбой.
— Мы не оставим ее висеть в воздухе на одних контактах. Рядом с разъемом на основании корпуса ставим монтажную планку, к ней прикручиваем две латунные стойки, а верхний край текстолитовой платы плотно притягиваем винтом. Получится цельный механический блок. Плата надежно держится на металлических стойках, сам электрический разъем не работает подпоркой и не несет нагрузки. И прямой доступ к контрольным
Кравец перевел внимательный взгляд с желтого текстолита на крепежные детали. Он взял одну латунную стойку с ладони Володи, покатал холодный граненый металл между пальцами, проверяя резьбу, и удовлетворенно кивнул.
— Годится. Сменный узел на монтажной планке и стойках полностью снимает проблему с механической надежностью. Я смогу написать нормальную методику проверки для сборщиков. Если сеть падает во время прогона, человек не лезет с горячим паяльником в пучок проводов, а просто меняет плату целиком и продолжает тест.
Птицын, следивший за техническим разговором, пододвинул поближе общую тетрадь с надписью «Журнал испытаний СФ-ЛИНК».
— Значит, физику мы закрепили, — сказал Саша, глядя прямо на Кравца. — А как мне правильно описывать саму процедуру проверки в журнале, чтобы через неделю другой человек понял, куда смотреть и что искать?
Кравец указал заточенным грифелем карандаша на макетную плату в руках Володи.
— Пиши так: «Форма сигнала на контрольной точке — фронты чистые, без завалов, амплитуда не ниже четырех вольт. Маркерный сигнал в кольце читается стабильно». Мы не пишем в документах эмоциональное «оно работает», Саша. Мы пишем только то, что физически видит измерительный прибор. А уже поверх этого ты будешь фиксировать свои программные тайм-ауты и сбои контрольных сумм.
Морозов, закончив осмотр у первой машины, неспешно подошел к сетевому участку. Он окинул оценивающим взглядом латунные стойки, желтый текстолит в руках молодого сборщика и включенные серые блоки.
— Собирай модуль, Володя. Линия еще попьет нашей крови. Порядок начальной загрузки совершенно сырой, а как только мы пустим по кабелю реальную передачу данных, задержки неизбежно поплывут от нагрузки. Нам нужна надежная физическая основа, прежде чем мы начнем искать неуловимые ошибки в программе.
К обеду столы усыпали обрезки изоляции, капли припоя и мелкая стружка. Доводка опытной партии подходила к концу. Пять машин выстроились в ряд. Под светлыми лицевыми панелями угадывался серый металл корпусов. На трех темнели щели болгарских дисководов, на двух других белели глухие пластиковые заглушки — за ними скрывались сменные модули сетевого обмена.
Весь отдел постепенно стянулся к центральным столам. Зоя стояла с ручкой наготове, Наташа не отходила от осциллографа, а Люба просто скрестила руки на груди, не сводя глаз с измерительных приборов.
— Поехали, — скомандовал Михалыч. — По порядку. Первая. Память.
Володя щелкнул тумблером. Люба сверилась с дернувшейся стрелкой вольтметра и коротко кивнула — просадки нет. На экране подключенного ВКУ вспыхнула тестовая строка.
— Прошла, — констатировала Зоя и сделала первую отметку в бланке.
— Клавиатура.
Володя быстро пробежался пальцами по рядам клавиш. Символы послушно отпечатались на экране. Ни дребезга, ни залипаний.
— Есть.
Олег подал голос с другого конца стола:
— ВКУ держит.
Наташа кивнула Зое:
— Так и пиши. После пяти минут прогрева стабильно.
Громов отлепился от стеллажа и подошел вплотную к первой машине. Вставил дискету, с легким щелчком опустил флажок замка.
— Дисководы? — он посмотрел на Михалыча.
Двигатель загудел, набирая обороты, головка с характерным треском переместилась по направляющим. На экране появилось приглашение МикроДОС.
Зоя снова коснулась ручкой бумаги. Следующие несколько минут ушли на проверку остальных приводов: на второй машине головка с лязгом ударилась об ограничитель, требуя тонкой регулировки нулевой дорожки, зато третья уверенно прочитала диск.
Морозов кивнул на аппараты без дисководов.
— Четвертая и пятая сетевые. Одна собрана по короткому варианту линии, вторая — по длинному. Нам нужно сравнить, одинаково ли они запрашивают начальный блок.
Громов потер руки.
— Значит, первая сегодня моя. Ядро не ждет.
— Сегодня она общая, — отрезал Михалыч. — Завтра посмотрим, кто заслужил. Мы еще канал сопряжения не проверили.
Птицын склонился над четвертой машиной, щупом осциллографа касаясь контрольной точки на плате опторазвязки.
— На четвертой маркерный сигнал виден! — Птицын выпрямился. На экране прибора действительно бежала последовательность прямоугольных импульсов.
Кравец заглянул через плечо Птицына.
— Радоваться рано, — сухо поправил Вадим. — Железо импульс видит, а программный буфер пустой. Пока мы аппаратно кадр не соберем и контрольную сумму не сверим, это просто шум в линии. Саша, помечай в лабораторный журнал: физический уровень есть, приема кадра пока нет. Зоя, в паспорт машины это не пиши, это отладка.
Морозов стоял чуть в стороне, засунув руки в карманы халата, и смотрел на пять выстроенных в ряд корпусов.
— Вот теперь это партия, — негромко сказал Морозов.
Михалыч свернул паспорта в аккуратную трубку и постучал ими по столу.
— Партия будет, Морозов, когда я все эти паспорта закрою печатью ОТК, — проворчал он. — А пока это просто собранное железо. Выключайте питание. Завтра начнем гонять их под нагрузкой.
Глава 40
Маршрут, который выглядит правильным
В кабинете 82В рабочее место уже обросло бумагами. На сдвинутых столах лежали методичка по системным вызовам, несколько чистых бланков для будущей ведомости и закрытая серая папка.
Переданная группе машина стояла у края стола: широкий серый моноблок «Сферы-82» с массивным дисководом ИЗОТ, занявшим добрую треть свободного пространства. Рядом громоздился дисплей. На его темном экране мигало светлым курсором системное приглашение МикроДОС.
Шрамов сидел у клавиатуры, чуть подавшись вперед. Рядом лежал открытый блокнот с набросками строк ввода и пометками для печати.
— Машина свободна, — сказал он, придвигая к себе старую декабрьскую распечатку форматов, испещренную карандашными правками. — Давайте новую версию расчетного модуля, Евгений Александрович. Порядок входной строки поменялся? Моя программа чтения не споткнется?
Громов щелкнул замком портфеля. Достал несколько свежих листов, положил их на стол, а поверх аккуратно опустил дискету.
— Основные поля остались на прежних местах, — ответил Громов. — Код станции, тоннаж, тип вагона читаются как раньше. Но сама строка стала длиннее. После обычных данных я добавил позиции под занятые ресурсы и выделил байты для кодов причин — почему маршрут забракован или получил штраф.
Шрамов пробежал глазами по верхнему листу.
— Адреса сдвинулись на двенадцать байт, — констатировал он, прикидывая разметку. — Незанятые позиции забиты пробелами или нулями?
— Пробелами, по формату, — ответил Громов. — Расчетный модуль отдает только короткие числовые коды причин и штрафов. Превращать их в понятные строки для ведомости предстоит вам.
Шрамов кивнул, делая пометку на полях своей распечатки.
— Справочник причин я в структуру заложил, — произнес Шрамов. — Расчетный кусок остается изолированным, печать на мне. Порядок контрольных прогонов не меняем?
— Идем по нашему
Шрамов взял у Громова дискету с модулем и вставил ее в щель накопителя ИЗОТ, опустив пластиковый рычаг. Механизм коротко загудел, раскручивая шпиндель. Шрамов запустил чтение в оперативную память, дождался остановки дисковода, вынул чужую дискету и вставил свою рабочую, чтобы сбросить порцию данных из буфера на магнитную дорожку.
Громов наблюдал за этой поочередной сменой с легким раздражением.
— С одним накопителем работать — сплошная морока, — проворчал он. — Нам нужна хотя бы одна машина с двумя дисководами. Элементарно чтобы программы копировать.
— Наладим сеть, — спокойно отозвался Морозов, — сможем перекидывать такие модули по кабелю между машинами. А пока придется потерпеть.
Завершив перенос, Шрамов вызвал на экран обновленную структуру программы.
— Откровенную бессмыслицу вроде несуществующих станций или отрицательного тоннажа я уже отсекаю, — сказал он, проверяя адреса. — Человек промахнулся мимо клавиши — ЭВМ вернула карточку на исправление. Нам сейчас важнее проверить те случаи, когда формально код правильный, математика сходится, а маршрут в итоге вредит предприятию.
Горелов согласно кивнул и достал карандаш.
— Точная граница, — сказал он. — Ошибка ввода — это вина оператора. А вот если расчет пройден, но состав запер маневровую бригаду — это дефицит правил. Техника отработала честно, подвела бедность модели. Эти ситуации должны оформляться совершенно разными сообщениями.
Ширяев придвинулся ближе и развязал тесемки серой картонной папки. Выложил на стол стопку карточек.
Громов взял карандаш Горелова и набросал на верхнем листе несколько кружков.
— Юрий Павлович, логика простая. Станция — это вершина. Перегон — ребро. Каждый переход получает цену. Гоним пустой состав — копим штраф за лишний километраж. Платформа не подходит под груз — оценка ухудшается. В память весь квадрат переходов мы не грузим, ОЗУ не вытянет.
Шрамов с сомнением посмотрел на схему.
— Как тогда модуль ищет маршрут?
— Входной массив формируется только из оперативной сводки: станция отправления, назначение, тип вагона, вес и срок. Код накладывает эти переменные на постоянную таблицу перегонов. Если накопленный штраф на текущей ветви превысил лучший найденный итог, ветвь отсекается сразу.
Ширяев отделил от пачки небольшую стопку и придвинул Шрамову.
— Проверим теорию на земле. Чистый набор. Пять станций, обычный уголь, стандартные платформы. Ремонт на одном перегоне учтен в правилах.
Шрамов быстро набрал цифровые индексы станций и параметры груза. Нажал клавишу ввода. Дисковод зашуршал, обращаясь к модулю Громова, и через секунду экран выдал плотную алфавитно-цифровую строку.
Громов пробежал глазами по символам.
— Ремонтный участок обошли, пробег минимальный. Расчет сошелся.
Ширяев выждал, пока строка на экране застынет, и достал из папки карточку с красной диагональной полосой.
— На гладком наборе и математика работает гладко, — сказал он. — А теперь добавим хозяйство. Введите вот это.
Шрамов взял картонку.
— Трансформатор тяжелый, прибытие через сорок минут на Б-12. Требует кран большой грузоподъемности.
Он набил новые параметры груза. Дисковод коротко щелкнул, подтягивая модуль Громова. Экран мигнул, выдавая обновленный расчет.
Ширяев подвел острие карандаша к мерцающим символам «КРАН_Б12_УГОЛЬ».
— Математически ваш маршрут безупречен, — констатировал он. — Вы экономите пробег. Но расчет только что отдал единственный тяжелый подъемный механизм под обычный уголь. А трансформатор оставил ждать. Обычный кран мы заменим. Этот — нет. Плюс резервный путь вы заняли под ожидание, а следом по графику идет литерный состав. На земле за такое снимают с дежурства.
Громов перестал улыбаться. Быстро прикинул в уме таблицу штрафов.
— Цена перегона была минимальной. Граф взвешен, программа честно отсекла длинные ветви.
Горелов сделал пометку в журнале.
— Это не отказ техники. Программа отработала заданные правила. У вас просто все механизмы равноценны.
— Баланс перекошен, — Громов с силой потер переносицу. — Ладно. Зададим тяжелому крану и запасному пути весовой коэффициент в сто раз выше обычного.
— Одними весами не отделаетесь, — возразил Морозов. — Однажды математическая выгода от короткого маршрута перекроет любой штраф. Машина выставит уголь перед литерным составом, просто потому что так сойдутся цифры.
Горелов поддержал:
— Занять кран — это хозяйственный спор. А чужой состав перед литерным — аварийная ситуация.
— Разделяем логику, — решил Морозов. — Для редких механизмов держим высокие штрафы. Для литерных вводим абсолютный запрет. Таблица переходов вообще не должна давать такой ход. Отсекаем ветвь до расчета, бережем такты процессора.
Шрамов постучал пальцем по пластиковому корпусу клавиатуры.
— Выходной массив Громова я заберу в свою программу, — деловито сообщил он. — Разобью табуляцией, выстрою колонки и подставлю маску путевого бланка. Но мне нужны понятные коды причин. Диспетчеру требуется печатный документ.
— Забирайте, Юрий Павлович, — спокойно согласился Громов. — Моя часть — выдать верные значения. Оформление за вами. А теперь прогоним для Тамары Николаевны три контрольных расчета на одних данных. Первый способ — кратчайший путь.
Он шагнул ближе и набрал директиву запуска.
Строка обновилась. Шрамов пробежал глазами по индексам.
— Пробег минимальный.
Ширяев наклонился к экрану.
— Идеальный. Только без учета ремонтов этот расчет гонит состав прямиком на снятые рельсы.
Пальцы Шрамова снова легли на клавиши.
— Второй способ. Берем первый подходящий путь.
Символы на дисплее дернулись и сменились новым набором. Ширяев покачал головой.
— Сначала выглядит здраво. А на третьем шаге забивает резервную ветку, и весь узел встает.
— Теперь динамический расчет с отсечением плохих ветвей, — скомандовал Громов.
Очередной прогон вывел на экран третий вариант маршрута.
— Этот тупики обходит, — произнес Ширяев. — Но, как мы уже видели, забирает тяжелый кран под уголь. Хозяйственная бессмыслица.
Громов крепко сжал подбородок.
— Значит, я могу поднять штраф на тяжелый механизм, но тогда расчет потащит уголь в обход всего узла.
Ширяев выложил поверх распечаток еще три картонные карточки и карандашную схему.
— Веса вас не спасут. Смотрите на живую работу. Введите вот этот короткий и экономный обход.
Шрамов молча набил шифры станций. Машина выдала время прибытия.
— Половина восьмого утра, — прочитал Громов. — Перегон свободен.
— Он свободный для ночного транзита, — парировал Ширяев. — А в половине восьмого там пересменка и массовая подача вагонов в цеха. Горловина забита намертво. Ваш экономный состав встанет поперек путей и сломает сменный ритм.
Он придвинул следующую карточку.
Шрамов запустил расчет серии. Программа выдала аккуратный столбец одинаковых маршрутов.
— Ветка же пустая, — сверил данные Громов.
— На ней всего два приемо-отправочных пути, — сухо ответил Ширяев. — Машина берет задачи поштучно. Первый состав встал под разгрузку, второй ждет, третий застревает на стрелке, четвертый блокирует выход с соседней станции. Программа не видит накопления вагонов за смену.
Он нарисовал на полях схемы длинный зигзаг.
— И третья ситуация. Обход закрытого на ремонт участка. Запускайте.
Результат на экране показал сложную цепочку станций.
— Формально допустимо, — сказал Ширяев, разглядывая вывод. — Но чтобы состав так прошел, маневровой бригаде придется четыре раза отцеплять вагоны, перетягивать их вытяжным локомотивом и менять направление. Люди физически не сделают столько перестановок за смену. Выдохнутся на втором маневре.
Горелов аккуратно прочертил в своем блокноте новую колонку.
— Вот это уже можно разложить по полочкам. Аппаратура исправна. Ввод верный. А маршрут ведет к затору. Модель неполна.
Морозов оперся руками о край столешницы.
— Придется вводить искусственные узлы графа для режимов работы. Временные окна для горловин. Горизонт смены. И штраф за излишнюю дробность — ограничение числа маневров.
Громов покачал головой.
Полный квадрат станций с учетом времени мгновенно убьет память, Алексей Николаевич. Процессор-то восьмиразрядный. Значительную долю ОЗУ уже держит МикроДОС, буферы дисковода, программа ввода и проверка кодов. Загрузите туда матрицу с временными окнами, где половина перегонов не существует в природе — не останется места для расчетов. И никакой дробной арифметики. Только целые числа.
— Храним сеть не квадратом, а плоским списком реальных перегонов, — напомнил Морозов. — Не раздувай граф. Добавь отдельную таблицу строгих запретов. Наступило утро — перегон закрыт запретом, а не весовым коэффициентом.
Шрамов подался вперед.
— Если маршрут строится, но требует невыполнимых маневров или лезет в пересменку, я не выведу оператору голый шифр. Мне нужны текстовые пояснения. Превышение маневров, конфликт расписания, очередь на второстепенной ветке.
— Именно так, — согласился Горелов. — Программа печатает предупреждение, а окончательное решение принимает человек.
Шрамов проверил отступы в своей части кода, убедился, что текстовые колонки встанут ровно, и отправил сформированную ведомость на АЦПУ. Устройство с громким треском выбило итоговые строки на широкой бумаге.
Громов оторвал перфорированный лист и провел ногтем по напечатанным столбцам.
— Тамаре Николаевне отнесем именно это. Три способа рядом, и сразу видно, где каждый ломается. Кратчайший путь устроил аварию и влез в утреннюю пересменку, первый подходящий заблокировал перегон и собрал очередь, а расчет с отсечением забрал нужный механизм и потребовал невыполнимых маневров. Это уже не разговор на словах, а проверочный пример: один набор данных, три ответа и причины отказа на бумаге.
Ширяев положил рядом с клавиатурой плотную стопку перевязанных суровой ниткой карточек.
— А теперь сменный объем, — сказал он. — Здесь полсотни маршрутов. Ночная смена, половина третьего. Диспетчер набивает данные не по одной штуке, а сплошным потоком.
Он вытянул из середины карточку с потекшими от влаги синими чернилами и положил поверх стопки.
— Уголь ждут на разгрузку на Б-12. Но человек устал, освещение тусклое. Он читает эту кляксу и вбивает В-12.
Шрамов внимательно посмотрел на расплывшиеся буквы.
— Если кода нет в справочнике узла, программа забракует ввод и вернет строку на исправление. Несуществующие шифры я отлавливаю сразу.
— Станция В-12 существует, — уточнил Ширяев. — Небольшая сортировочная горловина севернее кольца. Шифр рабочий. Программа его пропустит.
Горелов перестал крутить в руках карандаш и постучал тупым концом по столешнице.
— Получается скверная картина. Вычислительный блок получает формально допустимые координаты. Расчетный модуль строит математически идеальный маршрут для ошибочного пункта назначения.
Шрамов перевел взгляд со стопки картона на мерцающий экран. Построчный контроль здесь не спасал. Если отдавать массив в расчет сразу после ввода, искаженная координата уйдет в работу.
— Значит, рвем прямую передачу массива, — Шрамов придвинул к себе чистый лист и быстро набросал сетку колонок. — Делаем накопительную таблицу. Диспетчер набивает шифр, а программа вытаскивает из словаря полное русское название и ставит рядом.
Он вписал несколько слов в нарисованные ячейки.
— Человек ввел В-12 — на экране загорелось «Воронцово». Ввел Б-12 — появилось «Быково». Строки собираются в общий список.
Морозов посмотрел на карандашную схему.
— Визуальная сверка всего пакета перед расчетом.
— Да, — подтвердил Шрамов. — В модуль Евгения Александровича данные уходят только после явного подтверждения. Оператор просматривает колонку с русскими названиями, сверяет со своими бумагами и нажимает клавишу подтверждения. До этого момента математика ждет.
Горелов забрал у Шрамова лист и провел жирную вертикальную черту, отделяя набросок от свободного пространства.
— Раз мы заговорили об ответственности, давайте разделим виды производственного брака, — сказал Горелов и поставил на бумаге единицу. — Первое — отказ аппаратуры. Сбой памяти, остановка дисковода, скачок напряжения. Тут картина простая: техника встала, процесс прерван. Второе — человеческая ошибка. Оператор вбил несуществующий код или промахнулся по клавишам. Программа на это должна отвечать понятной строкой на экране. Никаких служебных кодов и адресов памяти, в которых разбираются только программисты. Просто и по-русски: «Проверь станцию назначения».
Шрамов сделал пометку на полях своей схемы.
— Текстовые подсказки съедят некоторое место на дискете, но оперативную память мы не перегрузим. Будем подгружать их с диска только в момент ошибки.
— И третье, — Горелов аккуратно подчеркнул последнее словосочетание. — Опасная неполнота правил. Расчет выполнен, маршрут найден, но он цепляет границу дозволенного. Занят тяжелый механизм, перекрыт резервный путь перед прохождением особого состава. Здесь программа выводит предупреждение, и человек решает — пускать эшелон или искать обходной вариант.
Громов подался вперед, опираясь локтями о стол.
— Чтобы человек взял на себя такую ответственность, ему нужно видеть цену обходного варианта, — произнес Громов.
— Значит, выводим на бумагу, — подытожил Шрамов. — Прогоняем одну пачку карточек тремя способами. Сначала смотрим на экран, убеждаемся, что сообщения читаются нормально, а потом бьем ведомость на АЦПУ. Нам все равно нужен контрольный пример для сравнения.
Они потратили около часа на подготовку сводного прогона. Малая машина мерно гудела, перебирая переходы для пяти тестовых станций. Шрамов сидел у клавиатуры, старательно высчитывая отступы, чтобы длинные названия перегонов ложились в ровную колонку.
— Строки не плывут, все уместилось, — доложил он, отрываясь от экрана. — Пускаю на печать.
Широкая каретка АЦПУ ожила с тяжелым металлическим лязгом. Молоточки ударили по красящей ленте,
Громов оторвал бумажную ведомость по линии перфорации, стряхнул пыль и расстелил лист поверх карандашных схем.
— Смотрите, — он провел ногтем по правой колонке. — Расчет математически безупречен, но рядом вывелась текстовая приписка: «Тяжелый подъемный механизм занят».
Ширяев склонился над соседними столбцами.
— А простой путь вообще загнал вагоны прямо в зону ремонта. Зато доложил, что вышло очень быстро.
Громов хмыкнул, рассматривая ровные ряды символов.
— Забавно. В декабре эта сложная математика вытащила нас на комиссии. А сегодня красивый алгоритм споткнулся о подъемник на скромной станции Б-12.
— Дело совершенно не в подъемнике, Евгений Александрович, — Ширяев аккуратно собрал картонные карточки и стянул их бечевкой. — Вы вплотную столкнулись с реальностью живого предприятия.
В дальнем углу кабинета скрипнул стул. Тамара Николаевна, до этого молча работавшая с документами, поднялась и подошла к рабочему столу. Здесь, в режимном помещении, она находилась на своей территории, где инженеры-разработчики были лишь гостями с допуском. Ее взгляд, привыкший мгновенно выхватывать производственную суть из любых бумаг, сразу остановился на свежей распечатке.
Егорова уверенно протянула руку и взяла край перфорированного листа.
— Это мне?
Громов неуловимо подобрался, спина стала заметно прямее.
— Черновик, — ответил он, убирая руку от края широкой ведомости. — Три способа расчета на одном наборе данных. Завтра подготовлю чистовой вариант со своими пояснениями по каждой спорной позиции.
Егорова пробежала глазами выровненные колонки. Она читала распечатку молча, быстро пробираясь сквозь сплетение цифр и сокращений. На секунду ее взгляд задержался на строке с кодировкой занятого механизма.
— Отдельные пояснения к делу не подошьешь, Евгений Александрович, — произнесла она без малейшего нажима, но с абсолютной профессиональной непреклонностью. — В таком виде я документ не пропущу. Причина каждого отказа или предупреждения должна быть напечатана прямо здесь, русскими буквами. И эта строка обязана дословно совпадать с тем, что оператор видел на экране перед запуском эшелона. Никаких устных оправданий постфактум. Если маршрут отвергнут, проверяемое основание остается в распечатке навсегда, чтобы любой контролер мог поднять бумагу из архива через год.
Громов выдержал этот спокойный, внимательный взгляд.
— Понял. Значит, текстовая причина станет обязательной частью ведомости.
Егорова коротко кивнула, забрала черновик и вернулась к своему столу.
В комнате 82В повисла короткая тишина, нарушаемая только тихим шелестом бумаги на столе.
Шрамов откинулся на спинку стула и криво усмехнулся.
— Все-таки робеешь перед ней?
Громов взял оставленный лист, тщательно выровнял его по краю столешницы, собирая бумаги в аккуратную стопку.
— Учусь выживать в естественной производственной среде, Юрий Павлович, — отозвался он, не поднимая глаз от текста. — Она просматривает бумагу внимательнее, чем самый строгий транслятор ищет синтаксис в коде. С ней нельзя договориться обаянием или ссылками на передовой алгоритм.
Морозов перевел взгляд с вороха бумаг на представителя заказчика.
— Павел Андреевич, нам потребуются еще реальные карточки. Желательно парочку типовых сменных раскладов. И обязательно один узел с острым дефицитом путей.
Ширяев сунул свою потертую картонную папку глубоко под мышку.
— Сделаем. Я подготовлю вам такую задачу, где программе придется предложить обход в три раза длиннее, чтобы намертво не заблокировать узловую горловину маневровым составом. Путь выйдет долгим, но хозяйственно самым верным.
Громов тихо фыркнул, пододвигая к себе исписанный лист со сложными формулами.
— Длиннее, но вернее. Звучит как прямое издевательство над математикой. Придется заново переписывать все весовые коэффициенты.
Глава 41
Длиннее, но вернее
Дисковод щелкнул шаговым двигателем, протяжно загудел, считывая дорожку, и затих. На темном экране появилось приглашение программы.
Шрамов подвинул к себе растрепанную общую тетрадь. На разворотах синели густые столбцы рукописного кода — его часть работы: ввод с клавиатуры, справочник причин задержек, проверка ошибок и вывод на печать. На дисплее ровно горело: «МАРШРУТ-82В. ОЖИДАНИЕ ВВОДА».
— Значит, твой расчётный блок я прицепил, — пробормотал Шрамов, водя колпачком ручки по строкам. — Сошлось без ошибок. Теперь давай еще раз по формату твоих данных. А то я в них завязну, пока ты с цветом, локальной сетью и системными задачами возишься.
Громов подошел ближе, положил рядом с дисплеем распечатку и развернул склейку листов с густой паутиной кружков и линий.
— Я буду рядом, пока ты об эту структуру спотыкаться не перестанешь, — пообещал он. — Смотри. Мы храним только реальные пути. Забивать память отсутствующими перегонами бессмысленно. Выходит около двухсот сорока пунктов и порядка восьмисот перегонов.
Шрамов прищурился на чертеж, быстро прикидывая:
— Двести сорок узлов… Если отдашь под номер восьмибитную ячейку, запаса не останется. Построят новый цех, кинут пару тупиков, и адресация рухнет.
— Поэтому на внутренний номер пункта закладываем два байта, — Громов чиркнул карандашом по полям распечатки, вырисовывая цепочку блоков. — Чуть тяжелее, зато места хватит на любые временные площадки и пути отстоя. Для каждой станции держим список только прямых соседей. Описание одной связи — это двухбайтный код смежного пункта, базовое время хода и номер группы для динамических ограничений.
Липатов, разбиравший в углу кипу документации, поднял голову от бланков.
— В память-то влезет вся эта география?
— Килобайт на десять потянет, — отозвался Громов. — Плюс таблицы текущих запретов на проезд. На шестидесяти четырех килобайтах ОЗУ места хватит и для программы, и для расчетов.
Шрамов кивнул и начал переносить набросок Громова в свою рабочую тетрадь. Структура получалась логичной и ложилась в его код как влитая.
— Ладно, теоретики, — позвал от двери Морозов. Он вошел в комнату, придерживая тяжелую створку и пропуская Ширяева.
Ширяев подошел к столу и опустил рядом с клавиатурой пухлую картонную папку.
— Принимайте смену, — сказал он, развязывая тесемки. — Расклад месячной давности, но самый что ни на есть боевой. Я эти выписки из журналов и ведомости механизмов еще перед командировкой собрал. Как чуял, что пригодятся. Специально взял день, от которого у наших диспетчеров обычно изжога начинается. Ничего не выдумывал, чистая историческая правда.
Он раскрыл обложку и вытряхнул на столешницу стопку карточек. Настоящие рабочие наряды на перемещение — с замятыми углами, размашистыми карандашными пометками и мазутными пятнами.
— Так, — Ширяев начал раскладывать карточки, как пасьянс. — Дано. Три партии проката со склада нужно перетащить в механосборочный цех. Груз тяжелый,
— Заложили стотонный кран в таблицу ресурсов, — отозвался Громов, сверяясь с листами. — Узел семнадцать.
— Дальше слушайте, — Ширяев поднял палец. — На перегоне между седьмым и восьмым цехом — плановая замена шпал. Путь закрыт наглухо с двух часов дня до восьми вечера. А в шестнадцать ноль-ноль через главную горловину Северной станции проходит литерный состав. Секретный груз, без остановок, зеленая улица. За час до его прохода и час после — Северная станция закрыта для любых маневров. Никого не впускать, никого не выпускать.
Морозов подошел к столу, скрестив руки на груди:
— Классический конфликт ресурсов. И как ваши диспетчеры выкручиваются, Павел Андреевич?
— Как-как, — хмыкнул Ширяев. — Матерятся и решают. Обычно диспетчер видит короткий путь: через Северную, прямо к стотонному крану. Он прямой, на схеме красиво смотрится, и диспетчер сразу загоняет туда прокат. А потом выясняется, что кран занят разгрузкой станков, а тут литерный на подходе. Прокат остается в тупике, горловина забита, режимники орут, завод стоит.
— Главное, не подсказывайте машине ответ, — предупредил Морозов. — Юрий Павлович, вводите исходные данные. Посмотрим, как наша топология справится с литерным составом.
Шрамов придвинулся к клавиатуре и быстро вбил первую команду. На экране высветились короткие строки:
ГРУЗ: ПРОКАТ_НЕГАБАР
МАССА: 80
ОТПРАВЛЕНИЕ: СКЛАД_4
НАЗНАЧЕНИЕ: МЕХСБОРКА_1
— Это только наша болванка, — проговорил Шрамов. — Если нажать пуск сейчас, программа проложит путь по пустому заводу. Давайте вашу обстановку, Павел Андреевич. Что еще катается по узлу?
Ширяев пододвинул стопку нарядов.
— Пишем. Перегон цехов семь-восемь — закрыт. Литерное окно на Северной — с пятнадцати до семнадцати ноль-ноль. По ведомости механизмов… так, стотонный кран занят с шестнадцати до девятнадцати.
Шрамов методично заносил информацию в машину. Ниже параметров груза выстраивался плотный столбец сменного расклада: с десяток транзитных сцепок, подача мазута на котельную, маневры у пакгаузов.
— Вы ей сейчас прямо отсекаете короткую дорогу, — с сомнением произнес Морозов, глядя на растущий список занятых путей.
— Я ей даю реальный завод, Алексей Николаевич, — парировал Ширяев. — Это не подсказка. У меня кран занят по графику, горловина заперта режимом. Без этих вводных машина решит игрушечную задачку, а не сменный наряд.
— Стой, — вмешался Горелов. Он поднялся из-за соседнего стола, где до этого молча слушал их спор, и шагнул к дисплею. — Время начала маневра сейчас вводить будешь? Маску зашили? Вы мне обещали железобетонную защиту от усталого оператора в ночную смену.
Шрамов отнял руки от клавиатуры и чуть отодвинулся, уступая место.
— А вы сами попробуйте, Андрей Витальевич. Прямо сейчас. Вбейте в графу часов цифру «25».
Горелов недоверчиво хмыкнул, склонился над клавиатурой и уверенно нажал двойку, а затем пятерку.
Из зуммера за передней панелью опытной машины раздался резкий писк. Желтый бордюр экрана мгновенно залило красным. Символ «5» так и не появился — курсор застыл на месте, а в нижней строке ярко высветилось: «ОШИБКА ВВОДА: ЧАСЫ (00–23)».
Ширяев вздрогнул от неожиданного звука и довольно крякнул.
— Вот это дело! — оживился он. — Такой сигнал и спящего диспетчера разбудит. Вслепую ошибку не пропустишь.
— Стоит намертво, — с гордостью подтвердил Шрамов. — Часы только до двадцати трех, минуты до пятидесяти девяти. Наберешь чушь — программа выдает ошибку, меняет цвет бордюра и блокирует ввод до нажатия забоя. В расчетный модуль мусор теперь не проскочит.
Горелов нажал клавишу возврата. Красный бордюр послушно сменился привычным черным.
— А текстовое сообщение по несуществующим станциям? То, что с Егоровой обсуждали?
— Зашито, — Шрамов снова придвинул к себе клавиатуру и быстро вбил правильное время. — Чужой шифр не пройдет, программа сразу выдаст предупреждение.
— Отлично, — Липатов чиркнул ручкой в блокноте, отмечая пункт о контроле ввода. — Требование выполнено.
— Так, данные в маске, — подытожил Шрамов, заполняя последнее поле. — Готовы? Запускаю расчет.
Он нажал клавишу ввода. Дисплей на мгновение мигнул, строки данных исчезли, уступив место мигающей надписи: РАСЧЕТ МАРШРУТА. ПОДОЖДИТЕ.
Дисковод снова ожил, зашуршал, подгружая в память расчетные подпрограммы Громова. Процессор начал обсчитывать граф.
Секунда. Вторая. Пятая.
— Что-то долго, — заметил Ширяев, глядя на экран.
— Нормально. — Громов не отрывал взгляда от мигающей надписи. — Это вам не два числа сложить. Алгоритм перебирает сотни ветвей. Натыкается на наши заградительные штрафы, откатывается назад, ищет обход, проверяет динамические ограничения по времени на каждом перегоне…
— Окно литерного — с пятнадцати до семнадцати, — вслух прикинул Ширяев. — А груз готов в четырнадцать тридцать. По идее, главную горловину должен успеть проскочить.
На десятой секунде дисковод замолк. Экран очистился, и на нем загорелось: РАСЧЕТ ЗАВЕРШЕН. ВЫВОД ГОТОВ.
Шрамов нажал клавишу, разворачивая результат на экране. Под мерцающим курсором появились строки ответа. Программист вчитался в текст, недоверчиво покачал головой и нажал комбинацию клавиш для вывода на печать.
Алфавитно-цифровое печатающее устройство, занимавшее отдельную усиленную тумбу в углу комнаты, ожило. Массивный вал с шипением провернулся, затягивая широкую перфорированную бумагу. Стальная печатная цепь завертелась на шкивах, и десятки электромагнитных молоточков с пулеметным лязгом ударили по широкой красящей ленте, впечатывая символы в бумагу. Запахло свежей мастикой, машинным маслом и разогретым металлом электромагнитов.
Через пять секунд лязг оборвался. Шрамов привычным жестом оторвал лист по линии перфорации, положил его на зеленое сукно стола и разгладил ладонью.
Все склонились над распечаткой.
Фиолетовые буквы дублировали ответ с дисплея:
МАРШРУТ-82В. СМЕННОЕ ЗАДАНИЕ 14.
ГРУЗ: ПРОКАТ_НЕГАБАР. МАССА: 80.
ПУТЬ СЛЕДОВАНИЯ:
СКЛАД_4 — ВЕТКА_12 — ЮЖНЫЙ_ОБХОД — ТУПИК_3 — ПАКГАУЗ_2 — ОЖИДАНИЕ (45 МИН) — МЕХСБОРКА_1.
РЕСУРС: КРАН_50Т (СПАРЕННЫЙ РЕЖИМ).
РАСЧЕТНОЕ ВРЕМЯ В ПУТИ: 185 МИНУТ.
Шрамов провел пальцем по напечатанной строке и поднял глаза на Громова.
— Евгений Александрович, — тихо сказал Шрамов. — Ваша математика рехнулась.
Ширяев оперся кулаками о край стола и хохотнул.
— Сто восемьдесят пять минут? Три часа на доставку? Да вы смеетесь. От четвертого склада до мехсборки через Северную горловину ехать двадцать минут! Сорок, если маневровый ползет еле-еле. Какой Южный обход? Какой третий тупик? Это же крюк в пятнадцать километров вокруг всего завода!
— И посмотрите на ресурс, — добавил Липатов, указывая колпачком ручки на строчку. — У вас в задании требовался стотонный кран. А машина предлагает спаренный режим для двух пятидесятитонных. Зачем городить огород с синхронным подъемом, если есть нормальный тяжелый кран?
Громов подхватил распечатку со стола, быстро просмотрел строки и потянулся к листам
— Ошибка в таблице перегонов? — пробормотал он, водя пальцем по кружкам на бумаге. — Нет, Южный обход соединен с третьим тупиком, тут все верно. Но откуда такой вес? Сто восемьдесят пять минут… Это огромная стоимость маршрута. Он должен был найти вариант подешевле.
— Может, вы знак перепутали при начислении штрафа? — предположил Горелов.
— Ничего я не перепутал! — огрызнулся Громов. — Математика не ошибается, алгоритм ищет минимум функции. Если он выдал сто восемьдесят пять, значит, все остальные варианты стоили еще дороже!
Морозов, до этого молча слушавший перепалку, подался вперед.
— Павел Андреевич, — обратился он к Ширяеву. — Отложите распечатку. Возьмите ваши карточки. Разложите их на столе так, как будто это заводская территория.
Ширяев хмыкнул, но спорить не стал. Он отодвинул в сторону тетрадь и листы с графами, пододвинул к себе кипу карточек и начал выкладывать их на свободном пространстве стола.
— Вот здесь у нас Склад номер четыре, — он положил карточку с жирной цифрой 4. — Вот здесь Мехсборка, — вторая карточка легла в полуметре правее. — Вот прямой путь. Ветка номер шесть, потом Северная станция, горловина, и мы на месте. Тут же, у мехсборки, стоит стотонный кран. Вот его карточка.
— Идеально, — согласился Морозов. — А теперь давайте пройдем этот идеальный путь по минутам, учитывая ваши же ограничения. Груз готов в четырнадцать тридцать. Поехали.
Ширяев поставил палец на карточку Склада.
— Погрузка негабарита займет минут сорок. То есть выедем мы в пятнадцать десять.
— Стоп, — Громов вскинул голову от расчетов. — Пятнадцать десять? Выезд?
— Ну да, — Ширяев пожал плечами. — Ехать до Северной станции пятнадцать минут. В пятнадцать двадцать пять будем на узле.
— А окно литерного состава? — тихо спросил Шрамов.
Ширяев осекся, его палец замер на карточке Северной станции.
— Окно литерного с пятнадцати до семнадцати, — медленно проговорил он. — За час до прохода горловина закрывается, так что в пятнадцать ноль-ноль Северная уже не принимает.
— Именно! — Громов хлопнул ладонью по столу. — Машина это посчитала! Если вы выезжаете в пятнадцать десять, то к моменту прибытия на Северную она уже закрыта наглухо. Что произойдет в реальности?
Ширяев задумчиво потер подбородок.
— В реальности диспетчер отправит состав, не подумав про литерный. Состав упрется в закрытый семафор перед Северной и встанет на шестой ветке.
— И будет стоять там до семнадцати часов, пока литерный не проскочит, — закончил Морозов. — То есть почти два часа.
— Допустим, — неохотно согласился Ширяев. — Но в семнадцать ноль-ноль горловина откроется, состав проедет, и к половине шестого будет под стотонным краном. Это все равно быстрее, чем предложенные машиной три часа по буеракам!
— Вы уверены? — Морозов указал на карточку стотонного крана. — Вы принесли сменный журнал. Что делал стотонный кран в семнадцать тридцать той смены?
Ширяев полез в картонную папку, достал ведомость работы механизмов и быстро просмотрел колонки цифр.
— Разгрузка статоров для турбинного цеха, — неохотно прочитал он. — С шестнадцати до девятнадцати ноль-ноль.
— Вот вам и ответ, — Громов скрестил руки на груди. — Узел «Северная станция» имеет абсолютный запрет в окне 15:00–17:00. Узел «Стотонный кран» получает штраф занятости с 16:00 до 19:00. Если отправить прокат коротким путем, состав простоит два часа перед литерным, а потом еще полтора будет ждать кран. Двести пятьдесят минут против ста восьмидесяти пяти.
Шрамов присвистнул, заново перечитывая распечатанные строки.
— То есть Южный обход…
— Южный обход длиннее по километрам, — подтвердил Громов, показывая расчеты. — Машина пускает состав в объезд всего завода. Да, это долго, скорость там низкая. Состав плетется по третьему тупику, приезжает к пакгаузу и ждет там сорок пять минут в отстойнике, чтобы не забивать главный ход. А потом заходит к Мехсборке с другой стороны!
— И поскольку стотонный кран занят статорами, — подхватил Липатов, глядя в распечатку, — машина находит свободные ресурсы. Два старых пятидесятитонных крана — они медленные, требуют спаренного режима, но зато свободны именно в это время!
Ширяев долго молчал. Затем он взял карандаш и провел линию в воздухе, повторяя маршрут, предложенный «Сферой». Длинная, изломанная кривая огибала все узкие места.
— Знаете, что самое страшное? — наконец сказал Ширяев. — Диспетчер в ту смену сделал именно так, как я говорил. Отправил прямым путем, и состав застрял перед Северной. Когда литерный прошел, прокат потащили дальше, но уперлись в занятый кран и бросили платформы на путях. Из-за них турбинный цех не смог вывезти стружку, и к восьми вечера вся горловина встала намертво. Я полночи с начальником смены этот затор разгребал.
Ширяев со стуком бросил карандаш поверх разложенных карточек.
— Длиннее, но вернее, — резюмировал Морозов и похлопал ладонью по папке Ширяева. — Машина не просто считает километры. Она бережет ваши редкие ресурсы и не забивает узкие места.
— Подождите радоваться, — Липатов постучал ручкой по столу. — Мы все равно сначала решили, что машина выдала бред. Хотя Женя сам эту математику писал, а Павел Андреевич смену наизусть помнит.
Липатов поднял распечатку.
— А теперь представьте диспетчера Петю. Три часа ночи. Запах мазута. Петя вводит данные, и машина выплевывает ему вот этот лист. Ехать в обход, стоять сорок пять минут, брать спаренные краны вместо одного мощного. Что сделает Петя? Он порвет эту распечатку, назовет инженеров КБ «Сфера» идиотами и отправит состав прямым путем.
— Вот для этого Егорова вчера и требовала текстовых обоснований, — поддержал Горелов. — Если маршрут неоптимален по расстоянию, машина обязана доложить понятным человеческим языком, почему она так решила.
— Код причины обхода из расчетного модуля Евгения Александровича я получаю, — отозвался Шрамов. — Он у меня в буфере лежит как «штраф типа три на узле Северная». Но в моем справочнике к этому привязана общая фраза «Узел занят». Я ее пока в печать не вывел, потому что диспетчеру она ничего не объяснит.
— Значит, дорабатываем справочник под живое предприятие, — потребовал Липатов, открывая блокнот. — Женя выдает код, а мы переводим его на заводской язык. Если расчетное расстояние превышает кратчайшее больше чем на двадцать процентов, программа обязана напечатать блок «ОБОСНОВАНИЕ». Давайте формулировать. Что мы напишем про Северную станцию вместо «Узел занят»?
— Пишите: «Узел закрыт по временному окну», — предложил Ширяев.
— Слишком размыто, —
— Понятно, — согласился Ширяев.
— А по крану? «Ресурс стотонный кран имеет высокий весовой коэффициент занятости»? — Липатов оторвал взгляд от блокнота и посмотрел на Громова. — За такую формулировку на заводе тебя не поймут. Пишем протокольно и четко: «ЗАМЕНА РЕСУРСА: КРАН 100Т ЗАНЯТ (16:00–19:00)».
Шрамов делал пометки в общей тетради, затем замер и постучал колпачком ручки по столешнице.
— Подождите. Фразы отличные, но куда мы их денем? ОЗУ не резиновое. Если я сейчас забью в оперативную память сотню таких развернутых строк под каждый перегон и каждый кран, память кончится раньше, чем Евгений Александрович запустит расчет.
Громов переглянулся с Морозовым. Алексей едва заметно кивнул.
— В оперативку мы их грузить не будем, — произнес Громов. — Зашьем весь словарь причин прямо в ПЗУ.
— Массив текстовых констант? — Шрамов подался вперед, уловив идею.
— Именно. Алгоритм выдает вам, например, код 1А. Вы берете этот номер, вычисляете смещение в ПЗУ и читаете готовый текст напрямую из микросхемы, байт за байтом. Сначала выводите на экран вместе с результатом. А когда диспетчеру понадобится документ — эта же готовая строка уходит на АЦПУ. Никаких гигантских текстовых буферов. Надежно, и не съест ни байта свободной памяти.
— Идеально, — Шрамов просиял. — Привяжу конкретные фразы к кодам. На экране выделю причину цветом, чтобы привлекала внимание, а на распечатке пущу отдельным блоком перед итоговым временем.
— А давайте проверим, не перестраховывается ли она вообще всегда, — предложил Ширяев, протягивая руку к клавиатуре. — Юрий Павлович, пустите-ка.
Ширяев оттеснил Шрамова от клавиатуры.
— Что вы делаете? — удивился Морозов.
— Меняю оперативную обстановку, — ответил Ширяев, нажимая клавишу «СБРОС ФОРМЫ». — Юрий Павлович мне вчера показывал, как работает второй режим. Экран диспетчерских ограничений.
На дисплее привычная маска маршрута сменилась таблицей активных запретов. Ширяев, щурясь на экран, тяжело застучал по клавишам, подводя курсор к строке «УЗЕЛ 17 (КРАН 100Т)».
— Допустим, стотонный кран в ту смену не разгружал статоры. Допустим, он сломался, и мужики из рембригады починили его досрочно, к четырем часам. Значит, с шестнадцати часов для нас он абсолютно свободен.
Ширяев нажал клавишу забоя, стирая временной интервал штрафа, и подтвердил ввод. Динамическая таблица весов в оперативной памяти мгновенно обновилась.
Затем он нажал клавишу возврата в главное меню и изменил время готовности груза на складе с 14:30 на 15:50.
— Смотрите. Прокат готов без десяти четыре. Запрет на движение из-за литерного состава снимают в семнадцать ноль-ноль. Пока мы сорок минут грузимся на платформу и пятнадцать минут едем до узла, на часах будет шестнадцать сорок пять. Окно запрета как раз заканчивается. И тяжелый кран уже свободен. Ну, умная машина? Считай!
Он с силой ударил по клавише ввода.
Снова замигала надпись ожидания, сухо щелкнул дисковод. На этот раз расчет занял меньше пяти секунд, и строки на экране дрогнули, сменившись новым результатом.
Ширяев приблизился к самому стеклу дисплея, вчитываясь в светящиеся символы.
— Склад номер четыре, шестая ветка, Северная станция… ожидание пятнадцать минут. И Мехсборка-1, — прочитал он вслух. — Ресурс — стотонный кран. Расчетное время в пути — семьдесят пять минут.
Он выпрямился.
— Вот это дело. Увидела, что литерный ушел, подождала четверть часа на ветке, пока семафор откроют, и рванула по прямой к мощному крану. Время сократилось в два с лишним раза. Юрий Павлович, дайте-ка мне бумажную копию.
Шрамов набрал команду печати. АЦПУ в углу комнаты загрохотало, выбивая строки на свежей бумаге.
Громов потер руки.
— Я же говорил! Функция ищет оптимум. Изменились условия, пересчитались веса графа — изменился и маршрут.
Морозов потянулся и взял со стола первую распечатку — длинную, с обходом.
— Работает, — негромко констатировал он. — На чистой математике мы бы заперли всю горловину, а с учетом ограничений выкрутились.
Он повернулся к Ширяеву:
— Павел Андреевич, копию длинного маршрута забирайте себе. Пусть ваше руководство посмотрит, как можно было избежать затора.
Ширяев бережно сложил распечатку и убрал ее в картонную папку к карточкам.
— Покажу. Обязательно покажу. Если ваша «Сфера» будет такие подсказки давать диспетчеру, мы план по внутризаводским перевозкам на двадцать процентов поднимем.
— Это пока не готовая машина, — осадил его Морозов. — У нас на руках только алгоритм на дискете. Юрий Павлович, — он посмотрел на Шрамова, — сможете встроить буфер причин в программу в ближайшие дни?
Шрамов молча записал задачу в тетрадь.
— Андрей Витальевич, — Морозов повернулся к Горелову. — Математика сошлась, можно фиксировать ядро. Готовьте ТЗ под ПЗУ-82В.
— Давно пора, — отозвался Горелов, уже прикидывая в уме объем необходимой памяти. — Вы мне тогда актуальную карту адресов напишите. Загрузчик, математика Громова, интерфейс Шрамова и этот ваш словарь причин. Если Громов свой модуль уплотнил до семи килобайт, мы гарантированно влезем в стандартный блок микросхем К573РФ2.
Морозов подошел к окну. Черное стекло отражало комнату 82В и мерцающий экран «Сферы».
— Юрий Павлович, — Морозов посмотрел на Шрамова через плечо. — Алгоритм работает. Теперь вам предстоит самая нудная часть. Завтра напишите, пожалуйста, все возможные варианты заводских отказов. Станция закрыта, кран занят, пути разобраны, состав не сформирован. Формулируете их коротким, сухим текстом. Чтобы к моменту сборки мастер-ПЗУ у нас лежал готовый словарь.
Шрамов придвинулся ближе к моноблоку и вывел на экран редактор кода.
Глава 42
Пакеты по проводу
— Запускай, — кивнул Кравец, открывая лабораторный журнал.
Липатов придвинул табурет ближе и развернул чистый лист, чтобы сразу переводить результаты опытов в пункты будущей инструкции. В лаборатории стало тесно, но расходиться никто не планировал.
На столе, расчищенном от паяльных станций и коробок с радиодеталями, выстроились три машины опытной партии. Посередине тяжело гудел дисковод ИЗОТ ведущей «Сферы-82». Слева и справа от нее стояли две бездисковые сестры со снятыми верхними крышками корпусов. Внутри, жестко закрепленные на латунных стойках и монтажных планках, вертикально возвышались макетные платы сетевых узлов. Их связывала гирлянда тонкого розового МГТФ, небрежно перекинутая через столешницу.
Птицын сидел перед центральной машиной. Пальцы замерли над клавишей ввода. На темном экране мерцало системное приглашение и набранная строка запуска тестовой программы.
— Ну, с Богом, поехали, — негромко сказал он.
Кравец, стоявший по ту сторону стола, поморщился и постучал костяшками
— Теологию оставим гуманитариям, Птицын. Запускай. И давай сразу договоримся: слово «сеть» мы пока вслух не произносим. От него у начальства начинаются галлюцинации про автоматизацию целых заводов. У нас сейчас настольная проверка — короткое кольцо на три машины, физический стык.
Липатов, устроившийся на краю соседнего стола, аккуратно провел линию по линейке в общей тетради.
— Вадим Сергеевич, давайте для протокола определим терминологию, — он стряхнул с бумаги грифельную пыль. — Я не могу написать в инструкции «физический стык». Мне нужно существительное, которое поймет условный техник в Челябинске. Что именно мы сейчас отправляем? Массив? Файл?
Кравец отвлекся от проводов и посмотрел на Липатова.
— Блок, Сергей Дмитриевич. Или пакет, если вам так больше нравится. Мы берем сто двадцать восемь байт из оперативной памяти ведущей машины, лепим к ним заголовок, адрес получателя и пинком отправляем в кабель.
— Пакет, — Липатов сделал аккуратную запись. — Принято. Номер передачи фиксируется?
— В первом байте. Иначе принимающая сторона не поймет, это новый пакет пришел, или мы старый повторяем из-за сбоя. Давай, Саша. Жми.
Птицын ударил по клавише.
ИЗОТ утробно хрюкнул шаговым двигателем, считывая программу в память. На долю секунды светодиоды на вертикальных макетных платах вспыхнули красным.
На экранах обеих бездисковых машин почти синхронно отпечаталась строка: «ПРИЕМ ОК. БЛОК 01. СУММА СОВПАЛА».
Саша шумно выдохнул и откинулся на спинку стула, победно глядя на Кравца.
— Прошло. Идеально прошло. А вы говорили — временные провода, наводки… Код всё вытягивает.
Кравец даже не улыбнулся. Он обошел стол, наклонился над правой машиной и потрогал пальцем розовый пучок МГТФ.
— Один удачный блок, Птицын, доказывает только то, что у нас есть контакт, — сухо произнес он. — Заряди цикл на тысячу пакетов. Подряд. Без пауз. И вот этот провод… — он подцепил ногтем петлю кабеля, — сдвинь ближе к блоку питания.
— Зачем искусственно ухудшать условия? — возмутился Саша, но руки уже потянулись к клавиатуре.
— Потому что идеальных условий не бывает. Там рядом с твоим кабелем пустят силовую шину или включат сварочный аппарат. Поехали.
Липатов тем временем расчертил страницу на ровные колонки.
— Вадим Сергеевич, я готовлю лист испытаний. Диктуйте графы.
— Номер попытки, длина линии, тип кабеля, результат, код ошибки. И оставьте широкое поле для примечаний. Нам туда писать придется больше, чем в основные графы.
Птицын запустил циклический тест. На центральном экране замелькали цифры отправленных пакетов: десять, двадцать, пятьдесят. Бездисковые машины ритмично выплевывали строки подтверждения. Светодиоды на платах слились в непрерывное красное свечение.
Двести. Триста.
На отметке триста сорок семь правая машина внезапно запнулась. Бег строк на ее экране замер. Затем дисплей моргнул и выдал: «ОШИБКА ПРИЕМА. КОД 04. СУММА НЕ СОВПАЛА». Левая машина продолжала исправно глотать пакеты, уйдя за четырехсотый номер.
Саша нахмурился, быстро прервал цикл комбинацией клавиш и придвинул к себе распечатку листинга.
— Код ноль четыре… Это потеря байта в теле пакета. Наверное, я неправильно инициализировал счетчик цикла приема. Регистр переполняется, и мы теряем байт. Сейчас поправлю, тут делов на две минуты.
Он потянулся к клавиатуре, чтобы внести правки, но Кравец мягко и непреклонно перехватил запястье Саши.
— Руки от клавиатуры.
— Я знаю, где ошибка! — горячо возразил Птицын. — Это мой код.
— Код тут ни при чем, Саша. Это физика.
Кравец повернул голову в сторону дальнего угла лаборатории, где за стеллажами с массивными приборами обитали аналоговики из бывшего КБ-2.
— Петр Иванович! — позвал он. — Будьте добры, принесите вашего зеленого друга. У нас тут цифровая гордость ушиблась о реальный мир.
Из-за стеллажей показался Петр Иванович. Он толкал перед собой приборную тележку, на которой громоздился массивный двухлучевой С1–64. Аппарат монотонно гудел, а по прямоугольному экрану с вытравленной координатной сеткой скользила тонкая зеленая линия развертки.
— Опять ваши нолики с единичками поссорились? — пробасил Петр Иванович. Он подкатил тележку вплотную к столу, вытянул из гнезда толстый коаксиальный щуп и привычным жестом прицепил земляной «крокодил» к латунной стойке правой машины.
— Саша винит программу, — хмыкнул Кравец.
Петр Иванович ничего не ответил. Он аккуратно коснулся щупом входного контакта на сетевой плате. На зеленом экране заметалась светящаяся линия. Ветеран покрутил ручки синхронизации и развертки. Линия стабилизировалась, превратившись в последовательность прямоугольных импульсов.
— Ну, смотри, программист, — Петр Иванович ткнул толстым, мозолистым пальцем в стекло осциллографа. — Видишь свой сигнал?
Птицын прищурился. Прямоугольники на экране выглядели странно. Их передние фронты завалились, превратившись в пологие скаты. А на верхней полке каждого импульса плясала мелкая, противная бахрома.
— Что это за мусор? — спросил Саша, забыв про код.
— Это, юноша, емкость кабеля, — наставительно произнес Петр Иванович. Он переложил щуп на левую машину, которая работала без сбоев. Импульсы там оказались чуть ровнее, а бахрома — меньше. — МГТФ — прекрасный провод. Для внутриблочного монтажа. А когда вы кидаете его соплей на три метра в неэкранированном виде, он работает как антенна. Плюс, вы положили петлю рядом с блоком питания. Трансформатор фонит. Наводка бьет по фронту сигнала, триггер на входе вашей платы не понимает, это единица или ноль, и перекидывается ложно. Вот тебе и потерянный байт.
Кравец коротко кивнул, ожидая именно такого вывода.
— Понимаешь, Саша? — он оперся руками о стол. — Ты сейчас полезешь в код, начнешь крутить задержки, добавишь лишние паузы, чтобы обойти программно то, что сломалось аппаратно. Код станет кривым, зависимым от тактовой частоты, а проблема никуда не денется. Завтра уборщица сдвинет кабель на десять сантиметров, и твоя программа снова даст сбой.
Липатов поднял голову от тетради.
— Отличный пример для инструкции, — отметил он, поправляя очки. — Симптом: несовпадение контрольной суммы. Действие техника?
— Проверить разъем и заменить линию связи, — отозвался Кравец. — В программу лезть в последнюю очередь.
Саша хмуро разглядывал экран осциллографа. Зеленый луч вычерчивал смазанный, дрожащий фронт.
Кравец вытащил из нагрудного кармана карандаш и покрутил его в пальцах.
— На станкостроительном в семьдесят восьмом случай был, — заговорил он. — Линия ЧПУ. От шкафа управления до станка метров пять кабеля. Ночная смена, станок ни с того ни с сего встает: ошибка концевика. Программисты там трое суток вокруг стойки плясали. Переписали алгоритм опроса, программные фильтры накрутили, задержки в циклы добавили. Запускают — час режет металл и снова сброс. Знаешь, что в итоге оказалось?
Птицын покачал головой.
Петр Иванович одобрительно крякнул.
— Физику не обманешь, Вадим. Против лома нет приема. Если земля гуляет, никакая контрольная сумма не спасет.
— Контрольная сумма спасет от записи мусора на диск, — парировал Кравец. — Она скажет: пакет битый, бросай его. Но она не доставит данные. Поэтому, Петр Иванович, давайте менять физику. МГТФ в мусорку. Что у нас есть нормального?
Аналоговик неторопливо вытер руки ветошью.
— Есть витая пара. Сами скрутим из того же монтажного. Есть коаксиал, РК-75. И есть экранированная двужилка от старых микрофонов.
— Тащите двужилку, — решил Кравец. — Липатов, пишите: Опыт номер два. Тот же код. Тот же блок питания. Кабель — экранированный, экран заземлен на корпус ведущей машины.
Пока Петр Иванович ходил в свои владения за проводом, Птицын задумчиво листал распечатку.
— Вадим Сергеевич, — позвал он, не поднимая глаз. — Если мы признаем, что кабель может ловить помехи, значит, ошибка «04» будет всегда. Рано или поздно. Каким бы толстым ни был экран.
— Обязательно будет, — согласился Кравец.
— Тогда моя обработка битой суммы никуда не годится. По таймеру у нас повторы работают, а при неверной контрольной сумме программа останавливается при первой же ошибке, хотя связь обрываться не должна.
Кравец перестал крутить карандаш. Он внимательно посмотрел на младшего инженера.
— Дошло наконец. Вот теперь ты переходишь к настоящему промышленному обмену. Что предлагаешь?
Птицын придвинул к себе чистый лист бумаги и начал быстро рисовать блок-схему, комментируя на ходу:
— Мы не останавливаемся. Но у нас кольцо, мы не можем просто крикнуть в обратную сторону. Если сумма не совпала, машина-приемник не пишет ошибку на экран. Она выставляет в хвост проходящего пакета служебный бит ошибки. Пакет летит дальше по кольцу.
— И когда маркер с пакетом возвращается к мастеру… — кивнул Кравец, предлагая Саше закончить мысль.
— Мастер видит этот бит. Понимает, что пакет доехал битым. Он сохраняет маркер у себя, ждет пару миллисекунд, чтобы помеха в кабеле успокоилась, и кидает пакет в кольцо заново.
— Сколько раз кидаем? Бесконечно? — прищурился Липатов. — У нас машина зависнет в бесконечном цикле, если провод топором перерубят.
— Три попытки, как и по таймеру, — Саша зачеркнул стрелку на схеме и нарисовал ромб условия. — Если три раза подряд пакет бьется, значит, линия оборвалась окончательно. Тогда выдаем критическую ошибку оператору. А если со второго раза прошло — работаем дальше. Оператор даже не заметит сбоя.
— А вот это уже ошибка, — Кравец наклонился над столом, упираясь ладонями в край. — Для оператора сбой пройдет незаметно. А техник обязан его увидеть. Иначе у тебя линия будет работать на соплях неделями, перекидывая каждый пакет по три раза, скорость упадет втрое, а никто и не почешется, пока всё не сгорит. Нам нужен счетчик в журнале.
Липатов моментально включился:
— Аппаратный счетчик?
— Программный, — Кравец постучал пальцем по схеме Птицына. — Саша, ты выделяешь в памяти два байта. Счетчик повторов. Каждый раз, когда ведущая машина вынуждена переотправить пакет, она увеличивает этот счетчик на единицу. В конце передачи оператор видит надпись: «ПЕРЕДАЧА ЗАВЕРШЕНА». А техник нажимает комбинацию клавиш и видит в журнале: «ПОВТОРОВ: 12». Если повторов ноль — всё идеально. Если два-три на тысячу пакетов — норма. Если сотня — берем паяльник и идем проверять контакты, пока линия жива.
Липатов аккуратно обвел записи.
— Это рабочий алгоритм. Фиксирую его как базовый профиль обмена, — произнес он. — Назовем его…
— «СФ-ЛИНК-81», черновик, — подсказал Кравец. — Базовый рабочий минимум.
Вернулся Петр Иванович, волоча за собой бухту тяжелого серого кабеля. Под толстой внешней оболочкой угадывалась медная экранирующая сетка. От провода пахло слежавшимся полихлорвинилом и подвальной сыростью — моток явно долго ждал своего часа на складе.
— Откусывай, — скомандовал аналоговик, протягивая Саше массивные бокорезы.
Следующие двадцать минут в комнате слышались только щелчки инструмента и тихое шипение канифоли. Птицын разделывал концы экранированной двужилки. Он аккуратно надрезал изоляцию, расплел медную сетку, скрутил в отдельную косичку, стараясь не повредить внутренние сигнальные провода, и залудил.
Кравец внимательно следил за руками Саши.
— Экран паяй только со стороны ведущей машины, — предупредил он. — На приемниках просто откуси и заизолируй.
— Почему не с обеих сторон? — удивился Птицын. Он обтер жало паяльника о кусок влажной ветоши, сбивая лишний припой. — Надежнее же масса будет.
Вместо Кравца ответил Петр Иванович.
— Вот потому вы, цифровики, и горите синим пламенем, — вздохнул ветеран. — У тебя три машины. Они питаются от разных розеток. Между нулями этих розеток может быть разность потенциалов. Вольта три, а то и пять. Если ты соединишь корпуса машин экраном кабеля, по этому экрану потечет уравнивающий ток. Получишь петлю. Вся твоя защита превратится в генератор помех прямо внутри провода. Экран должен служить клеткой Фарадея, сливать статику на землю в одной точке, а не работать силовым проводом.
Саша молча кивнул и послушно откусил расплетенную медь на концах, идущих к бездисковым «Сферам».
Пока Птицын возился с железом, Кравец присел на стул и прикрыл глаза, мысленно прокручивая алгоритм.
— Липатов, — не открывая глаз, сказал он. — В инструкцию. Раздел «Возможные неисправности». Что мы пишем, если машина-приемник вообще не отвечает? Даже ошибку не выдает. Просто молчит.
Сергей Дмитриевич перелистнул страницу.
— «Проверить подключение разъема. Заменить плату сетевого узла».
— А как программа ведущей машины поймет, что приемник отключен? — открыл глаза Кравец. — Она кинула пакет и ждет ответа. Приемник выключен, ответа нет.
Птицын, закручивая винты, спокойно отозвался:
— У меня стоит таймер на сто миллисекунд. Если тишина — порт сбросится и пойдет повтор.
— Верно, — кивнул Кравец. — Ограничение времени ожидания есть. Только теперь сброс по таймеру заводи в счетчик повторов. Обрыв и битый пакет обрабатываются одинаково.
К вечеру новую линию собрали. Серый экранированный кабель, жесткий и неподатливый, змеился по столу, соединяя три машины. Птицын потратил еще полчаса, переписывая код программы: добавил счетчик повторов, обработку NAK и привязал к ним уже существующий сброс по таймеру. Он вбивал шестнадцатеричные коды прямо
— Готово, — наконец выдохнул он. — Запускаю?
— Давай, — Кравец встал за спиной Саши.
Петр Иванович снова пододвинул осциллограф.
Саша нажал клавишу ввода.
На экранах бездисковых машин побежали стройные столбцы подтверждений.
— Петр Иванович, глушите их, — скомандовал Кравец.
Аналоговик взял с соседнего стола мощное электромагнитное реле на двадцать четыре вольта, чьи провода тянулись к лабораторному блоку питания. Он поднес реле вплотную к серому кабелю и начал быстро замыкать и размыкать контакты. Раздался громкий, трескучий звук, и в воздух полетели синие искры.
На осциллографе зеленая линия дернулась, покрылась частоколом выбросов.
Экран правой «Сферы» моргнул. Строка подтверждения замерла.
Птицын подался ближе к дисплею. Кравец смотрел только на экран ведущей машины.
Прошла доля секунды.
На ведущей машине мелькнула надпись: «ПОВТОР 1».
Реле продолжало трещать, но пакет успел проскочить в миллисекундную паузу между замыканиями контактов.
На бездисковой машине вдруг появилась новая строка: «БЛОК 412 СУММА СОВПАЛА», и столбец побежал дальше. Алгоритм отработал лимит, не получив подтверждения, и пропихнул данные со второй попытки.
Саша облегченно выдохнул.
— Работает.
— Еще не всё, — Кравец дотянулся до клеммника правой машины, крутнул винт отверткой и выдернул провод данных.
Правый экран тут же замер. Следом остановилось обновление строк и на левой машине — физическое кольцо разомкнулось, полностью прервав обмен.
Программа на ведущей «Сфере» запнулась на треть секунды, исчерпывая лимит повторов и раз за разом дожидаясь подтверждения. Затем на экране высветилось: «ОТКАЗ ПЕРЕДАЧИ. ОБРЫВ КОНТУРА». Птицын потер шею, глядя на сообщение.
Кравец увесисто хлопнул Птицына по плечу, на секунду крепко сжав пальцы. Саша чуть подался вперед от толчка и довольно хмыкнул.
— Вот теперь — работает.
Петр Иванович выключил блок питания, бросил реле на стол и удовлетворенно потер руки.
— Выдержал экран. И защита ваша программная сработала. Неплохо, молодежь. Но на заводской длине в сто метров этот фокус с прямым подключением не пройдет. Сигнал затухнет.
— На сто метров мы мощную токовую петлю поставим, — пожал плечами Кравец. — Сегодня мы проверяли логику отказов.
Липатов вырвал исписанную страницу и закрыл обложку тетради. На бумаге осталась стройная, понятная таблица.
— Значит, в журнал стендовых испытаний вносим следующее, — Липатов выровнял лист поверх закрытой обложки. — Физическая линия — четыре метра, экранированный провод. Код ошибки ноль-четыре закреплен за несовпадением контрольной суммы. Лимит — три повтора передаваемого блока, затем останов с выдачей адреса узла. Завтра отдам этот черновик в машбюро. Сделаем первую рабочую памятку для участка сборки: как соединить машины, запустить тестовый обмен и в каком порядке проверять железо при отказах.
Птицын, сохраняя обновленный код на дискету, задумчиво посмотрел на кабель.
— Знаете, Вадим Сергеевич, — тихо сказал он. — А ведь это страшнее, чем операционную систему писать. В ОС всё внутри машины, всё логично. А тут ты выпустил пакет за пределы порта — и он улетел в темный лес. Где искрят реле, где земля плохая, где уборщица со шваброй.
Кравец усмехнулся, пряча карандаш обратно в карман.
— Тепличных условий за порогом лаборатории не выдают, Саш, — отозвался Кравец. — В цехах станки гудят, сварочные аппараты искрят, кран-балки по рельсам лязгают. Так что привыкай.
За окнами окончательно стемнело. На столе, среди обрезков синей изоляции, крошек канифоли и исчерканных листов Липатова, тихо работали три «Сферы». Серый экранированный кабель неровными петлями соединял их сетевые платы.
Глава 43
Цвет по умолчанию
Олег довернул шлиц подстроечного резистора диэлектрической отвёрткой, и на правом дисплее синий цвет командной строки перестал размываться. Левый, обычный монохромный ВКУ, на эту настройку не отреагировал — символы на нём остались мутновато-белыми.
Оба аппарата стояли на сборочном столе вплотную друг к другу, соединённые со «Сферой-82» видеокабелями. Цветной видеоконтрольный блок едва слышно свистел строчником.
Олег отложил отвёртку.
— Синхронизация стабильная, фронты чистые, — сказал он. — На цветном всё понятно. Вопрос в том, что увидит человек, которому вместо этой красоты достанется обычный чёрно-белый гроб.
Наташа наклонилась над экранами — на её лице смешивались белый и синий отблески. Она прищурилась, изучая края символов.
— Если твой красный и твой синий на чёрно-белой трубке сойдутся в одинаковую серую кашу, считай, мы сами подложили себе свинью, — серьёзно сказала она. — Уровень яркостного сигнала должен быть разным. Иначе оператор не отличит ошибку от подтверждения.
Громов слушал, сидя на хромом табурете чуть поодаль.
— То есть цвет для моей программы есть, а для старого экрана будто нет, — усмехнулся он. — Прелесть. Программистам опять придётся писать не как красиво, а как не испортить старое.
Липатов методично расчерчивал страницу в общей тетради.
— Для документа это не старый экран, Женя, — он сдул графитовую крошку с листа. — Это совместимый вывод. Иначе потом каждый проверяющий будет объяснять ситуацию по-своему, а нам нужна формулировка, не допускающая двоякого чтения на приёмке.
Морозов перевёл взгляд с цветного дисплея на монохромный ВКУ с белым люминофором.
— Сергей дело говорит, — негромко сказал Морозов. — В этом и смысл совместимости: текст обязан оставаться читаемым на обычном телевизоре. Если цвет ломает старую базовую картинку, значит, мы гоним брак.
— Тогда запускай тест, — Наташа кивнула Громову. — Давай посмотрим, как это выглядит в динамике.
Громов придвинулся к клавиатуре и привычно набрал команду запуска. Встроенный дисковод ИЗОТ натужно зажужжал, считывая загрузочную дорожку.
На обоих экранах одновременно появилась таблица.
На цветном кинескопе картинка получилась контрастной: основной текст выводился белым по синему фону внутри цветной рамки, а заголовки столбцов горели жёлтым. В правом нижнем углу пульсировал красный квадрат — имитация системной ошибки.
На соседнем чёрно-белом экране та же самая программа выглядела сухо и строго. Синий фон исчез, оставив привычную темноту кинескопа, а белый и жёлтый цвета слились в один светящийся тон, сохранив чёткость шрифта. Красный квадрат в углу превратился в серый блок, монотонно менявший яркость от тёмного к светлому.
Морозов шагнул ближе. Текст читался идеально на обоих ВКУ, схема арбитража шины отрабатывала без сбоев — на экране не было ни снега, ни мусора от коллизий.
Люба подошла к столу сбоку, держа щупы мультиметра. Провода тянулись к блоку питания.
— Женя, если ты красным отметишь сбой, на монохромном человек увидит просто мигающий знак, — произнёс Олег, вглядываясь в серый квадрат. — Он не поймёт, что это тревога.
— Значит, рядом пишем слово «Ошибка»
— И миганием тоже не увлекайтесь, — Люба коснулась щупами контрольных точек на плате — цифры на табло прибора дёрнулись. — У нас не новогодняя ёлка. Чем больше вы дёргаете яркость целыми блоками, тем больше просадка по питанию. Я сейчас вижу выбросы на шине в моменты перерисовки красного квадрата. Держите себя в руках, программисты.
— Цвет — это только подсказка, — кивнула Наташа. — Подсветить строку ввода, отбить края таблицы. Если убрать цветовую составляющую, оператор за обычным дисплеем не должен теряться в сплошном тексте.
— Фиксируем как аппаратное ограничение, — Липатов провёл черту в тетради. — Цвет только дублирует информацию. Если текст не читается на монохроме — испытание не пройдено.
— И это правило для всех системных программ, — добавил Морозов. — Код не переписываем. Одна программа на оба экрана.
Громов ударил по пробелу: таблица исчезла, уступив место координатной сетке. Машина переключилась во второй режим — крупная цветная точка.
На цветном дисплее выстроилась грубая, но понятная диаграмма: зелёные столбцы, перечёркнутые ломаной красной линией. Знакоместа превратились в квадратные блоки. Разрешение снизилось, буквы стали угловатыми, зато появилась возможность строить сплошные фигуры и графики, не привязываясь к стандартным символам.
На монохромном дисплее диаграмма превратилась в набор серых прямоугольников. Ломаная линия почти слилась с фоном.
— Графика страдает сильнее, — констатировал Олег. — Красный на зелёном фоне здесь выглядит как дыра в изображении.
— Вот здесь мы и ставим границу, — Липатов поднял голову. — В паспорте прямо указываем: в режиме цветной графики читаемость на монохроме не гарантируется. Пусть пользователь знает, что это не сбой, а задокументированное ограничение.
— Снимает вопросы, но может добавить путаницы при производстве, — отозвался Морозов. Он взял со стола толстый фломастер и подошёл к приколотому на стену листу ватмана. — Нам надо сразу разделить эти линии, иначе снабженцы и завод всё перепутают.
Он прочертил жирную вертикальную линию, деля бумагу пополам.
— Слева — «Сфера-80Ц», — он быстро набросал название над левой колонкой. — Фабричное развитие старой базы. Цвет пойдёт не приставкой, а интегрированным узлом на плате. Плюс новая прошивка ПЗУ с прямыми командами цвета. А самодельные приставки для школьных «восьмидесяток» остаются отдельной журнальной историей.
Затем он перенёс фломастер вправо и написал: «Сфера-82».
— А здесь видеовыход и арбитраж на микропроцессоре разведены изначально. Описываем как штатный узел, без навесных доработок.
Громов почесал переносицу, глядя на ватман.
— Значит, таблицу режимов придётся вшивать прямо в ядро МикроДОС, а не лепить сбоку, — произнёс он. — Очистку экрана и смену цвета спрячу в системные вызовы ПЗУ. И чтобы я больше не видел, как кто-то лезет напрямую в видеопорты в обход системы.
— Главное — нормально разжевать эту разницу монтажникам, — Олег обошёл стол и потрогал радиатор на блоке питания — металл ощутимо нагрелся. — Одно дело воткнуть кабель в готовый пятиштырьковый разъём, а другое — шлейф к ножкам процессора паять. Перепутают — сожгут плату к чертям.
— Я разнесу их по разным техническим условиям, — отозвался Липатов. — Это два разных физических изделия. Нельзя допустить, чтобы в школах решили, будто алгоритм проверки старшей машины подходит к старой плате без изменений.
* * *
Спустя час тестовая программа Громова продолжала крутиться в бесконечном цикле, гоняя массивы данных в видеопамять. Экраны ритмично вспыхивали и гасли, заливаясь то сплошными цветами, то шахматной клеткой.
Люба закончила измерять просадки напряжения на шине и теперь сидела у окна, аккуратно сматывая провода мультиметра. Наташа перебирала осциллограммы, сверяя длительность синхроимпульсов с ГОСТом.
Олег налил остывшего чая из стеклянной банки на подоконнике.
— Слушайте, — он облокотился на стену, глядя на два синхронно работающих дисплея. — А ведь мы сейчас смотрим на готовую двухмониторную конфигурацию. Машина тянет оба ВКУ одновременно с одного видеовыхода.
Морозов, просматривавший распечатки кода вместе с Громовым, поднял голову.
— Два экрана на одном рабочем месте?
— Ну да, — Олег отхлебнул чай. — Сигнал-то один, просто разветвлен кабелем. Но если пойти дальше? Поставить в «Сферу-82» две независимые видеоплаты. Одну монохромную, чисто под текст и системные сообщения, а вторую — цветную, под вывод тяжелой графики или топологии.
Наташа отложила осциллограммы и посмотрела на Олега.
— И получить конфликт адресов на системной шине, — коротко отозвалась она. — Две видеопамяти будут драться за одни и те же порты.
— Разнесем адреса, — не сдавался Олег. — Сделаем переключатель дешифратора. Шрамов спасибо скажет: на одном экране у него диспетчерские бланки, на втором — цветная карта путей. Никакого перекрытия окон.
— И блок питания скажет нам до свидания, — негромко добавила Люба. — Вторая видеоплата — это еще полтора ампера тока. Плюс два ВКУ на столе оператора будут греть воздух как хорошая батарея. Эргономика рабочего места полетит в мусор.
— Не говоря уже о цене, — хмыкнул Громов. — Заказчик удавится покупать два монитора на один пульт. Но для программистов это была бы мечта. На одном экране гонишь код в отладчике, на втором смотришь, как отрисовывается результат.
— То есть красиво, технически возможно, но абсолютно непроходное по смете решение, — подытожил Липатов, даже не открывая тетрадь. — Я не буду вписывать двухмониторную сборку в ТУ. Заводские экономисты этот пункт зарубят на первом же чтении.
— Оставим как лабораторный стенд для Жени, — улыбнулся Морозов. — Прямой видеовыход позволяет цеплять контрольный монохром параллельно цвету, для отладки нам этого хватит. А вторую плату вывода в этот этап не берем.
* * *
Громов потянулся, разминая затёкшую спину.
— Раз уж мы заговорили о планах на перспективу, — программист посмотрел на Морозова. — У меня есть встречное предложение. Если мы сейчас так чётко разделили цвет и монохром, давайте пойдём дальше.
Он подошёл к приколотому ватману и нарисовал пустой прямоугольник.
— Для графиков цвет нужен далеко не всегда. Иногда научнику, который считает профиль крыла или температуру в печи, важнее тонкая линия, чем красная. Сейчас у нас в графическом режиме восемьдесят второй разрешение ничтожное — крупные цветные квадраты. А что если отключить выборку атрибутов цвета вообще?
— Всю память отдать под яркость? — нахмурилась Наташа, мысленно прорисовывая схему видеоконтроллера.
— Именно. Использовать те же килобайты видеопамяти, но не тратить биты на атрибуты: пусть каждый бит отвечает за
— Логично, — присвистнул Олег. — Железо то же самое, просто логика выборки из памяти другая.
Наташа шагнула к ватману, забрала у Громова фломастер и быстро набросала схему сдвигового регистра.
— Железо не то же самое, Женя. Тонкая линия съест частоту — тебе придётся выталкивать точки из регистра сдвига в два раза быстрее. Полоса пропускания видеоусилителя обычного телевизора это не вытянет, и линии сольются в серую муть.
Люба подошла ближе, разглядывая схему.
— Плюс время доступа к памяти — процессору придётся ждать дольше, и твоя хвалёная схема арбитража шины начнёт тормозить выполнение основного кода.
Морозов проследил, как Наташа дважды обвела фломастером выход регистра.
— Мысль правильная, Жень, — произнёс он. — Отказ от цвета ради разрешения — классический компромисс, но сейчас мы его не потянем.
— Почему? — Громов упёрся ладонями в край стола. — Написать процедуры вывода — дело пары дней.
— Потому что старый знакогенератор в этом режиме работать не будет, — отозвалась Наташа. — Тебе придётся переписывать с нуля все системные шрифты.
— А мне — бороться с высокочастотными наводками от твоего разогнанного регистра, — добавила Люба.
— И я не пропущу это в текущий цикл испытаний, — Липатов выразительно постучал карандашом по столу. — Новый режим сломает уже утверждённые допуски по питанию и помехам. Рядом со штатным цветом это потребует совершенно новой методики проверки.
Морозов согласно кивнул.
— Вот тебе и ответ, Жень: не плодим варианты, фиксируем цветовой режим. А монохромную графику кладём в ту же тетрадь будущих работ, рядом с антенной приставкой Олега.
— Ладно, тонкие линии откладываются, — Громов коротко вздохнул, но спорить не стал. — Работаем с тем, что есть.
* * *
За окнами лаборатории сгустились мартовские сумерки, превратив стекла в черные зеркала. Отражения желтоватых люминесцентных ламп легли на лицевые панели приборов и два работающих экрана. Громов придвинул к себе чистый лист миллиметровки, покрутил в пальцах цанговый карандаш и с нажимом провел первую вертикальную черту.
— Подводим итог под фантазиями, — пробормотал он, размечая колонки. — Пишу: режим первый, основной. Текст и цветные атрибуты.
— Зачеркни «основной», — тут же отозвался Липатов. Он стоял рядом, опершись костяшками пальцев о край стола. — Пиши «Штатный цветной вывод». Для документации нужны однозначные термины. Если назовешь основным, у пользователя возникнет вопрос, где запасной.
Громов вздохнул, но послушно стер написанное и вписал новый вариант. Грифель тихо зашуршал по плотной бумаге.
— Режим второй, — продолжил Евгений. — Графика на основе цветной мозаики.
— Крупная цветная графика, — поправил Морозов, не отрывая взгляда от дисплеев. — Обязательно укажи ограничения по разрешению. Иначе от нас начнут требовать отрисовки гладких диагоналей, а квадраты размером со спичечную головку для этого не годятся.
Липатов удовлетворенно кивнул и постучал ногтем по следующей пустой ячейке:
— А теперь главное. Как мы назовем то, что сейчас происходит на левом ВКУ?
На монохромном экране светились те же самые строки текста, что и на правом, цветном. Буквы оставались четкими, столбцы ровными, но вся информация о цвете ожидаемо исчезла, оставив лишь градации яркости и спокойное, ровное свечение люминофора.
— Совместимый монохромный вывод, — не задумываясь ответил Громов. — И для МикроДОС это означает полнейшую перестройку идеологии.
Он отложил карандаш и повернулся к Морозову.
— Если мы фиксируем эту таблицу как стандарт «Сферы-82», я закрываю прикладным программам прямой доступ к видеопортам. Никакой отсебятины. Хочешь вывести цветное предупреждение — используй системный вызов операционной системы. МикроДОС сама проверит, может ли машина показать цвет, и сама раскидает биты по нужным адресам. Иначе первый же умник, который напишет код с прямой адресацией к железу, повесит систему на старой монохромной машине.
— Согласен, — Морозов скрестил руки на груди. — Прямая работа с памятью экрана остается только для системных утилит. Прикладники общаются с машиной через вызовы.
— Тогда добавь в свою таблицу еще одну колонку, Жень, — Люба подошла к столу, держа в руке щуп мультиметра. На ее пальцах блестела въевшаяся медная пыль. — Допуски по току.
Она указала концом щупа на цветной дисплей, где в тестовом цикле переливалась яркая рамка.
— Атрибутный режим позволяет заставить мигать любой символ. Если какой-нибудь талантливый школьник напишет программу, где весь экран непрерывно обновляется, у нас резко скакнет потребление. Я закладываю запас прочности в блок питания, но он не резиновый. Мне нужны четкие пределы: сколько миллиампер имеет право забирать видеоконтроллер при интенсивном обмене с памятью. Иначе из-за одной кривой игрушки по питанию пойдет просадка, и процессор сбросится в исходное состояние.
— Записал, — Громов убористым почерком внес пометку на поля миллиметровки. — Максимальное потребление при пиковой нагрузке. Согласуем с тобой завтра.
Наташа устало потерла виски, отодвигаясь от осциллографа.
— И давайте отделим мух от котлет, — сказала она, указывая колпачком ручки на экраны. — В паспорте машины должны быть описаны параметры нашего выходного сигнала. Размах, уровни синхроимпульсов, частота строк и кадров. То, что монохромный дисплей игнорирует цветовые составляющие сигнала и показывает серую картинку — это физика кинескопа, а не свойство нашей платы. Машина честно выдает полный телевизионный сигнал.
— Верно, — поддержал Липатов. — В разделе неисправностей так и запишем: «отсутствие цвета при подключении к монохромному видеоконтрольному устройству не является неисправностью». Вы улыбаетесь, а мне потом на рекламации отвечать. В школы пойдут самые дешевые ВКУ, и половина учителей решит, что им прислали бракованный компьютер.
Олег, до этого молча возившийся с проводами за стойкой, выпрямился и вытер руки ветошью.
— Раз пошла такая пьянка, мне нужны контрольные точки на серийной плате, — сказал он густым, севшим за день голосом. — Вот мы сейчас собрали макет. Я осциллографом лезу прямо на ножки микросхем. А на конвейере монтажница куда будет тыкать? Ей нужен удобный контакт рядом с разъемом. И сам выход мы фиксируем как стандартный пятиштырьковый. Никаких висящих проводов.
— А твой гениальный антенный ВЧ-модулятор для подключения к домашнему телевизору? — с легкой иронией напомнил Громов, зарисовывая кружок гнезда в таблицу. — Будем вписывать в паспорт, как обещал?
— Забудьте про модулятор, — отрезал Морозов, ставя в этом споре окончательную точку. — Наташа была абсолютно права. СЕКАМ, наводки на блок питания и помехи соседям нам не нужны. Только чистый низкочастотный видеовыход. Если у пользователя нет нормального монитора — пусть
Громов хмыкнул, перечеркнул набросок антенного штекера на полях и провел последнюю горизонтальную линию, отчеркивая итог. Лист миллиметровки покрылся плотной сеткой слов, цифр и сокращений. Это больше не было набором смелых идей или случайных удач. Это был архитектурный фундамент.
Липатов аккуратно взял лист за края, пробежал глазами по колонкам и вложил его в свою серую пластиковую папку. Замок сухо щелкнул.
— Из этого уже можно собрать технические условия, — резюмировал он без всякого пафоса, просто как человек, получивший наконец подходящий материал для работы. — Штатный цвет, совместимый вывод, системные вызовы, ограничения по току. Завтра перепечатаю набело.
Морозов посмотрел на стенд. Два дисплея продолжали гнать тестовые строки. Цветной радовал глаз контрастными перепадами красного, зеленого и синего. Монохромный спокойно выдавал тот же самый массив данных в ровном свечении. Никаких искажений, никакой каши из знаков. Логика машины работала независимо от того, через какое стекло на нее смотрел человек.
— Нормальное рабочее решение, — негромко сказал Морозов.
Олег дотянулся до тумблера на блоке питания и обесточил стенд. Высокочастотный писк строчной развертки мгновенно оборвался. Экраны моргнули, стянув изображение в яркие точки по центру, и медленно угасли, оставляя после себя лишь запах нагретого текстолита и легкий аромат канифоли. Лаборатория погрузилась в тишину окончания смены. Морозов молча собирал со стола карандаши, складывая их в стаканчик, пока остальные стягивали рабочие халаты, мысленно уже распределяя задачи на завтрашнее утро.
Глава 44
Как это рассказать
В бывшей инвентарной кладовой, зажатой между вентиляционной шахтой и сплошной стеной коридора, густо пахло свежемолотым зерном.
Анна Смирнова переступила порог, плотно прикрыв за собой скрипучую дверь, и шумно выдохнула. С улицы она принесла запах мартовского ветра и сырости. Стянув кожаные перчатки, бросила их на подоконник, а поверх положила толстый редакционный блокнот.
Люба сидела возле стола. Зажав между коленями массивную ручную мельницу, она методично крутила ручку. Зёрна с сухим хрустом перемалывались внутри механизма.
Наташа стояла у окна, прислонившись плечом к холодному стеклу, и смотрела на банку с побелевшим от накипи кипятильником.
— Привет! Я сегодня утром прямо с поезда, — сказала Анна, расстёгивая воротник пальто. — Зашла в редакцию, думала, дадут хотя бы кофе выпить за возвращение. Дали ровно десять минут на рассказы о командировке. На одиннадцатой минуте положили передо мной пустую папку и сказали: раз уж ты знаешь этих людей в институте, иди и выясни, правда ли у них теперь машина стала цветной.
Люба перестала крутить ручку мельницы. Хруст оборвался.
— Правда, — ответила она, сдувая кофейную пыль с пальцев. — Только если в твоей статье появится слово «чудо», я лично пролью тебе кипяток на чистовую рукопись.
— Не появится, — Анна мягко улыбнулась, присаживаясь на край столешницы. — Чудо — это когда никто не понимает, почему оно работает. У вас обычно наоборот: все понимают слишком много, а потом не могут объяснить нормальными человеческими словами.
Наташа щёлкнула тумблером на стене и включила кипятильник. Вода в банке почти сразу начала тихо шипеть, покрываясь мелкими пузырьками.
— Тогда начинай с главного, Аня, — произнесла Наташа, глядя на закипающую воду. — Цвет у нас сделан не ради красоты. Это не открытка.
Анна потянулась за блокнотом и достала карандаш.
— Вот это уже очень плохое начало. Если первая фраза звучит как техническое оправдание, читатель сразу решит, что вы сами стесняетесь этого цвета. Будто вас поймали за раскрашиванием обоев в рабочее время.
Люба выдвинула деревянный ящичек из мельницы, до краёв наполненный тёмным порошком, и принялась аккуратно пересыпать его в два гранёных стакана и одну фаянсовую кружку.
— А ты как напишешь? — спросила она.
— Пока не знаю. Поэтому и пришла к вам до разговора с начальством. Мне нужен не отчёт о проделанной работе, а живой смысл. Что человек сможет сделать такого, чего не мог раньше?
Вода в банке забурлила, выплёвывая крупные капли на стол. Наташа выдернула вилку из розетки, обхватила горячее стекло сложенной газетой и начала разливать кипяток по стаканам. Густая кофейная шапка мгновенно поднялась до самых краёв.
Дверь кладовой приоткрылась. На пороге появился Липатов с серой папкой под мышкой. Он не стал протискиваться внутрь, остановившись на границе коридора.
— Если ищешь, что человек сможет сделать, начни с писем, — сказал он. — После публикаций в журнале «Радио» нам писали не с просьбой объяснить, что такое электронно-вычислительная машина. Нам писали: «почему у меня на таком-то адресе памяти выходит не тот знак». Это совершенно другой читатель.
Анна быстро подняла глаза, не переставая крутить карандаш в пальцах.
— Вот. Это уже хорошая мысль. Люди начали разбираться в логике ЭВМ на её же уровне.
Наташа покачала головой, аккуратно помешивая кофе в стакане длинной ложечкой.
— Только не пиши слишком красиво. Половина этих писем заканчивалась тем, что кто-то на кухне перепутал провод, адрес порта или полярность питания.
— Тем лучше, — возразила Анна, делая короткую пометку на полях блокнота. — Значит, читатель настоящий. Он собирает вашу схему дома на столе и чертыхается, когда она не запускается.
Люба пододвинула Анне кружку с оседающей кофейной гущей.
— И пишет нам письма с такими претензиями, будто мы стояли рядом и лично водили его за руку.
Липатов усмехнулся, поправляя папку.
— А мы потом сидим и пытаемся написать инструкцию так, чтобы в следующий раз водить за руку не пришлось. Потому что непонятная формулировка в руководстве — это такой же инженерный отказ, как сгоревшая микросхема.
Анна обхватила горячую кружку ладонями, согревая руки после мартовской сырости.
— Книга, которую мы писали с Алексеем, была как раз про то, как человек перестаёт бояться клавиатуры. Пробный тираж маленький, большой ещё только выбивают по инстанциям, но по письмам уже видно: когда с человеком говорят нормально, без канцелярщины, он начинает задавать конкретные вопросы.
В коридоре послышались шаги. Липатов сделал шаг в сторону, освобождая проход.
Морозов появился на пороге, хмуро поглядывая на часы. Увидев Анну, он чуть заметно расслабил плечи.
— Аня.
— Алексей Николаевич, — торжественно ответила она и тут же сделала большой глоток кофе. — Мне поручили выяснить, правда ли вы за время моей командировки научили машину краснеть.
— Краснеть её учил не я, — ответил Морозов, прислоняясь к косяку. —
— Вот поэтому статью буду писать я, а не ты, — парировала Анна. — Ты бы начал с таблицы портов и адресации видеопамяти.
Липатов осторожно кашлянул.
— Таблица портов нам тоже понадобится. Для закрепления стандарта.
— В техническом приложении, — отрезала Анна. — А в начале статьи нужен человек.
Морозов протиснулся в кладовую и сел на освобождённый Наташей край подоконника.
— Человек будет. Но давай сразу договоримся, о чём писать пока не стоит. Никакой закрытой модификации машины. Никаких маршрутных данных, уральских заводов и зеленоградских историй. Я покажу тебе только открытую часть.
Анна кивнула без паузы, даже не оторвав карандаш от бумаги.
— Мне и не нужны секреты, Лёша. Секреты ужасно пишутся. Они делают текст надутым снаружи и совершенно пустым внутри, потому что нельзя назвать ни одной конкретной детали. Мне нужно то, что можно объяснить школьнику на пальцах и не соврать инженеру.
Наташа, перестав мешать кофе, тихо произнесла:
— Хорошая формула.
Морозов внимательно посмотрел на Анну.
— Тогда допивай и пойдём смотреть. Только предупреждаю: если Женя начнёт объяснять тебе выборку атрибутов цвета из сдвигового регистра, останавливай его на втором предложении.
— На первом, — поправила Анна, закрывая блокнот.
* * *
В лаборатории привычно пахло нагретым текстолитом. Несколько рабочих столов сдвинули вместе, образуя длинный остров. На нём, среди мотков провода, коробок с деталями и осциллографов, стояли машины.
Вместо разрозненных плат, которые Анна видела во времена первых прототипов, перед ней стояла «Сфера-82» в аккуратном корпусе. Никаких лишних проводов и внешних блоков, кроме толстых кабелей, уходящих к телевизорам.
На столе рядом с ЭВМ стояли два дисплея. Один — привычный чёрно-белый. Второй — цветной.
Громов сидел за клавиатурой, положив руки на клавиши.
— Готова? — спросил он, не поворачивая головы.
— Показывай, — Анна встала так, чтобы видеть оба экрана одновременно.
Громов набрал команду. Встроенный дисковод зажужжал. Через несколько секунд на обоих экранах появилась одинаковая таблица с числами, а справа от неё — ступенчатый график.
На чёрно-белом экране всё выглядело строго и привычно. Белые буквы и цифры на тёмном фоне, ровные рамки, чёткий рисунок графика.
На цветном дисплее та же самая картинка выглядела иначе. Привычная таблица обзавелась жёлтыми заголовками, а строка, где цифры явно выбивались из общего ряда, выделялась ярко-красным. График справа делился на зелёную зону нормальных значений и красную, уходящую за пределы нормы.
— Вот, — сказал Громов, убирая руки с клавиатуры. — Одна программа. Один код. На простом дисплее читается. На цветном — показывает больше.
Анна не стала ничего записывать. Она переводила взгляд с монохромного экрана на цветной и обратно.
— «Больше» — это плохое слово, Женя, — наконец сказала она. — Больше чего?
Громов нахмурился:
— Информации.
— Нет, — Анна покачала головой. — Информация абсолютно та же самая. Цифры те же. Буквы те же. Линия графика изгибается в том же самом месте. Человек просто быстрее видит, куда ему нужно смотреть.
Морозов, стоявший позади неё, улыбнулся уголками губ.
— Вот за это я тебя и боялся приводить в лабораторию.
— Правильно боялся, — Анна ткнула тупым концом карандаша в сторону цветного экрана. — Я вам сейчас испорчу половину красивых технических отчётов. Цвет просто экономит внимание человека.
Наташа коротко кивнула.
— Это гораздо точнее. Если красным выделена ошибка ввода или критическое значение, оператор не ищет её глазами, вчитываясь в каждую строку на экране. Если область графика ушла за допустимый предел, это видно боковым зрением.
Люба шагнула ближе к столу, указывая на чёрно-белый дисплей.
— А если у пользователя обычный телевизор, текст всё равно остаётся читаемым. Железо-то одно, — добавила Люба, подтверждая слова программиста.
Анна наконец открыла блокнот и быстро записала несколько слов.
— «Цвет экономит внимание». Это почти заголовок для статьи.
Громов глухо буркнул:
— Заголовок должен быть про достижения вычислительной техники, а не про человеческое внимание.
— Нет, Женя, — Анна посмотрела на программиста поверх блокнота. — Машина сама себя не читает. И статьи про себя не читает тоже.
Она снова перевела взгляд на цветной график. Зелёная линия ползла вверх, упиралась в невидимую границу и становилась красной.
— Помнишь свою игру? «Председатель»? — спросила она, обращаясь к Громову.
Тот сразу насторожился, скрестив руки на груди.
— Если ты сейчас при всех предложишь мне писать её продолжение, я уйду обратно в кофейную. У меня дел по горло.
— Поздно, кофе мы уже выпили. Я не про продолжение. Я про суть. Тогда, в старой версии, человек видел последствия своего решения в виде сухих чисел и текстовых сообщений. А теперь можно показать состояние системы сразу, целиком: где есть запас ресурсов, где провал, где опасный участок. Цветом, Женя. Безо всяких длинных лекций на экране.
Громов неожиданно перестал ворчать и оживился.
— Для любой учебной задачи по физике это тоже отлично годится. Траектория полёта нормальная — рисуем зелёным. Столкновение или выход за пределы экрана — красный участок. И не надо выводить внизу громоздкое «ОШИБКА В РАСЧЁТЕ НА ШАГЕ ТРИДЦАТЬ ДВА».
Наташа строго посмотрела на программиста.
— Писать всё равно надо. Цвет только привлекает внимание, а текст объясняет причину. Одно красное пятно без подписи ничего не даст.
— Именно! — Анна энергично чиркнула карандашом по бумаге. — Вот это идеальная человеческая формула. Цвет зовёт посмотреть, текст объясняет суть, машина не бросает человека одного перед непонятным красным пятном на экране.
Морозов посмотрел на светящийся график.
— В школе это должно сработать сильнее, чем в заводском цеху, — произнёс он. — Ученику важно не только получить конечный ответ задачи, но и увидеть сам ход процесса. Понять, в какой момент всё пошло не так.
— И в лаборатории, — добавила Анна, подчёркивая последнее слово двумя линиями. — Не забывай про лаборатории. Молодой инженер или аспирант тоже хочет видеть динамику своего опыта, а не только итоговую цифру на бумажной ленте.
* * *
— А теперь переходим ко второму номеру нашей программы, — Громов встал из-за стола, уступая место. — Саша, твой выход.
Птицын, всё это время стоявший у осциллографа, подошёл к соседнему столу. Там стояла ещё одна «Сфера-82». От её задней панели тянулся толстый серый кабель, уходивший куда-то в коридор. Птицын с довольной улыбкой уселся за машину.
— Только давай без торжественных речей, Саш, — предупредил Громов, прислоняясь к стеллажу. — Отправь строку
— Я и не собирался, — слегка обиделся Птицын, проверяя разъём. — Торжественные речи у нас обычно по ведомству Алексея Николаевича.
Морозов примирительно поднял обе руки.
— Я сегодня молчу. Почти.
Анна подошла ближе. На чёрно-белом экране машины Птицына в самой верхней строке одиноко горела надпись: «МАШИНА 1».
— Смотрите на экран, — сказал Птицын.
Он набрал несколько слов. Клавиши нажимались мягко, почти без звука. Нажав ввод, он убрал руки.
Анна перевела взгляд на первый стол, где стояла цветная «Сфера». Там, в верхней части экрана, светилась надпись «МАШИНА 3». Через долю секунды под ней появилась новая строка, переданная Птицыным:
«МАШИНА 1: АННА, ПРИВЕТ ИЗ СОСЕДНЕЙ МАШИНЫ»
Анна засмеялась, но её взгляд профессионально зацепился за детали. Она ткнула карандашом в заголовок цветного экрана.
— Подождите. Вот тут у вас первая. Там — третья. А где вторая?
Громов коротко фыркнул.
— Вторая сейчас через три кабинета отсюда, с ней Вадим возится, подключает.
Птицын повернулся к Анне уже совершенно серьёзно.
— Это Пётр Иванович с Кравцом настояли. Нам нужно было проверить не только красивый обмен на коротком шнурке, когда машины стоят рядом. Через три рабочих кабинета длинная линия ведёт себя совершенно иначе. Они так и сказали: если сигнал пройдёт там, в грязи и с помехами, то и здесь не потеряется.
— Вот теперь это похоже на настоящую жизнь, — сказала Анна, делая пометку. — Значит, третья стоит прямо здесь, вторая вдалеке, а первая с ней сейчас разговаривает?
— Не разговаривает, — педантично поправил Громов. — Она передаёт блоки данных.
— Женя, — Анна строго посмотрела на него. — Для моей статьи она именно разговаривает. Для тебя — передаёт блоки. Давай договоримся так: в тексте газеты будет написано «обменивается строками», а в скобках ты мысленно будешь читать свои «блоки данных».
Птицын указал на цветную «Сферу» по ту сторону стола.
— Ответьте ей.
— Ей? — Анна удивлённо подняла бровь.
— Машине. С третьей на первую.
Анна положила блокнот на стол, обошла столешницу и встала перед цветным дисплеем. Привычно занесла руки над клавиатурой и начала печатать, по-машинописному с силой ударяя по клавишам:
«ПРИВЕТ. Я ВАС ВИЖУ.»
Она нажала клавишу ввода. Сетевая программа мгновенно подхватила текст, добавила системный заголовок, и на чёрно-белом экране Птицына прямо под его приветствием появилась новая строчка:
«МАШИНА 3: ПРИВЕТ. Я ВАС ВИЖУ.»
Анна внимательно смотрела на две одинаковые строки текста на разных экранах, доказывающие, что связь двусторонняя.
— Вот это и надо показывать людям, — тихо сказала она. — Сам момент, когда человек осознаёт: ЭВМ на его столе больше не обязана быть одинокой.
Громов не удержался от уточнения:
— Только напиши, что это передача с проверкой. Программа не примет испорченную строку за верную и сама заставит узел повторить пакет.
Липатов, стоявший с раскрытой папкой у плеча Морозова, согласно кивнул.
— Для руководства пользователя это важное правило: задержка или повтор передачи — не каприз техники, а встроенная защита от ошибки.
Громов указал на уходящий в коридор кабель.
— В статье только не обещай читателям сеть на весь мир. Пока у нас стабильно работают всего три машины в пределах одного этажа. Это наш базовый рабочий минимум. Всё. Никаких чудес.
Анна снова взялась за карандаш, строча в блокноте.
— А мне и не нужен весь завод, Женя. Мне нужна первая, самая сильная сцена. Одна машина пишет другой. Человек отвечает. А где-то через три кабинета тянется провод, который доказывает, что это не дешёвый фокус на коротком шнуре.
Морозов, наблюдавший за ней всё это время, негромко произнёс:
— Вот это уже очень опасная фраза, Аня.
Анна перестала писать и подняла на него глаза.
— Почему?
— Потому что она абсолютно правильная.
* * *
Оставив Птицына дежурить у сетевого стенда, они вернулись в кофейную. Лабораторный шум остался за закрытой дверью. Здесь по-прежнему пахло кофе, хотя вода уже давно остыла.
Анна разложила перед собой блокнот на изрезанной столешнице, словно схему сложной печатной платы. На полях уже пестрели обведённые кружками слова и стрелки: «цвет», «внимание», «игра», «учитель», «две машины», «не примет испорченную строку».
Липатов, Морозов, Громов, Наташа и Люба разместились вокруг, кто на табурете, кто просто прислонившись к стене.
— Начинать с цвета нельзя, — решительно произнесла Анна, перечёркивая одно из слов на странице.
Громов удивлённо вскинул брови.
— Нормально. Полчаса смотрела на цветной экран, восхищалась графиком, а теперь нельзя?
— Нельзя начинать со слова, которое все поймут слишком быстро и неправильно, — объяснила она. — Цвет — это цветной телевизор в гостиной. Это праздничная открытка, новое платье, флажки на Первое мая. А у вас цвет — это рабочий инструмент. Способ не потерять смысл расчёта.
Наташа поставила пустой стакан на полку.
— Тогда начинай с ошибки. Напиши: «Ошибка стала видимой».
Люба покачала головой, поправляя выбившуюся из пучка прядь волос.
— Слишком мрачно. Получится так, будто мы годами делали машину исключительно для поиска аварий и катастроф.
Липатов предложил свой вариант, опираясь на опыт написания ТУ:
— Начни с понятности. Машина стала понятнее пользователю.
Анна поморщилась.
— Ужасно. Слишком гладко и правильно. Так обычно пишут на картонных стендах в Доме техники, мимо которых все проходят не читая.
Морозов молчал дольше остальных. Он смотрел в окно, на голые ветви деревьев во внутреннем дворе института, а потом повернулся к столу.
— Начни с человека, который впервые не боится нажать на клавишу.
Анна замерла с карандашом в руке. Медленно подняла голову.
— Вот. Это почти оно.
— Почему только почти? — спросил Громов.
— Потому что он не просто не боится, — Анна начала говорить быстрее, формулируя мысль на ходу. — Он ждёт осмысленного ответа. Раньше ЭВМ — это что-то далёкое, за стеклом гудящего машинного зала, куда пускают только в белых халатах по пропускам. А теперь она стоит на обычном столе. Пишет по-русски, показывает цветом, куда смотреть, передаёт сообщения соседу. Из прибора для избранных она превратилась в понятный инструмент, с которым можно вести диалог.
Громов хмыкнул, скрестив руки на груди.
— Собеседник у нас пока довольно капризный. Иногда, при плохом контакте, сыплет откровенным мусором в буфер.
— Тем лучше, — безапелляционно заявила Анна. — Живой
Люба тихо рассмеялась.
— Аня, только умоляю, не называй Женю в статье «живым героем с недостатками». Он потом неделю будет совершенно невыносим.
* * *
Липатов шагнул к столу и аккуратно перелистнул страницу в блокноте Анны, остановив палец на слове «лаборатория».
— Вот это обязательно оставь, — серьёзно сказал он. — В технических условиях мы закрепляем «учебный профиль». Но если и в статье машина будет выглядеть только как забава для школьников, заказчики на заводах так и будут относиться к ней как к несерьёзной игрушке. А нам потом перед ними акты производственного внедрения защищать.
Громов возразил:
— А если написать статью только про серьёзных инженеров и расчёты, школьники решат, что им опять нельзя это трогать руками.
Анна поставила между двумя словами в блокноте длинную, жирную черту.
— Значит, так и надо строить текст. От школьного кружка до научно-исследовательской лаборатории. Одна и та же машина на столе, но совершенно разные задачи. У школьника — график функции и обучающая игра. У инженера на заводе — расчёт деталей и обмен данными с соседним отделом. У молодого учёного — подключённый прибор, показания которого больше не нужно тащить в виде колоды перфокарт через весь институт в машинный зал.
Морозов посмотрел на неё очень внимательно. В его взгляде не было ни иронии, ни усталости.
— Ты понимаешь, что вот эта твоя последняя фраза про учёных может привести к нам людей с настоящими задачами?
— Я на это очень надеюсь, Лёша, — ответила Анна, собирая записи. — А то вы тут в своём КБ совсем привыкли, что к вам приходят либо проверять документы, либо забирать детали.
Громов тихо засмеялся.
— Вот это в статью точно не пойдёт. Главред вычеркнет.
— Конечно, не пойдёт, — Анна сунула карандаш в карман пальто. — Это я оставлю исключительно для себя. В статью пойдёт другое: маленькая ЭВМ становится полноценным рабочим инструментом именно там, где раньше для простейших вычислений требовался целый поход на другой этаж.
Морозов не ответил сразу. Где-то за стеной, в коридоре, коротко щёлкнуло пусковое реле, а из соседней лаборатории кто-то громко позвал Наташу. Остывающий в банке кипятильник тихо звякнул о стекло.
— Пиши, Аня, — сказал Морозов, отходя от окна. — Только напиши так, чтобы им захотелось сесть за клавиатуру.
Глава 45
Машина для лаборатории
Липатов выложил на стол чистый лист и педантично выровнял авторучку по краю. Иван Михайлович еще с утра предупредил об открытом визите по академической линии — в лаборатории ждали коллег-ученых.
На столе стояла базовая «Сфера-82» из первой малой партии. Светло-серый корпус, дисплей в текстовом режиме, дисковод с откинутым флажком, а на отдельной тумбе — массивное АЦПУ с заправленным рулоном широкой бумаги.
С проходной позвонили пять минут назад: делегация получила разовые пропуска и поднялась на этаж. Дверь приоткрылась, впуская троих гостей и запах мартовского мороза.
Впереди шагал мужчина с кожаным портфелем под мышкой. Из-за его плеча выглянула девушка с картонным тубусом, вытянув шею и рассматривая светящийся экран. Замыкал троицу парень в распахнутой штормовке, на ходу растирающий красные от холода руки.
— Доброе утро! — Мужчина торопливо стянул колючий шарф. — Институт электрохимии, лаборатория кинетики. Я Дмитрий Ковалёв, старший научный сотрудник. Это Ирина, аспирантка, и Роман, инженер-экспериментатор. Иван Михайлович много рассказывал о вашем проекте, да и академическое сарафанное радио не молчит. Нам интересно посмотреть на ЭВМ как на рабочий инструмент для лаборатории.
Михалыч поднялся и приветственно развел руками.
— Вешалки справа, — Морозов указал на деревянную панель у двери. — Алексей Морозов, ведущий инженер.
— Читали вашу со Смирновой книгу, Алексей! — Ковалёв пристроил пальто на крючок и в два шага оказался у стола. Он внимательно окинул взглядом дисковод и мерцающий экран. — В академической среде новости разлетаются быстрее ведомственных отчетов. Мы приехали с конкретным интересом: ищем небольшую рабочую ЭВМ для лаборатории, чтобы обсчитывать ряды измерений прямо на месте, и хотим понять, потянет ли она наши задачи.
Громов, привычно полулежавший на стуле с вытянутыми ногами, даже не пошевелился. Только скептически прищурился.
— Смотря чего вы от нее ждете, — проворчал он. — Если хотите посчитать орбиту Юпитера с учетом гравитационных возмущений от всех астероидов, то мы забьем массивами все шестьдесят четыре килобайта, а машинного времени не хватит до конца века. А если что-то земное, то вполне.
Ирина положила тубус на край стола и достала из кармана сложенный вчетверо лист миллиметровки.
— Нам не нужен Юпитер, — она развернула бумагу со стертыми на сгибах краями. — И заменять большую ЭВМ мы не хотим. Сложные теоретические расчеты нас не интересуют. У нас другая беда.
Она расправила лист рядом с клавиатурой. Поле пересекала кривая — ломаная линия, выстроенная по карандашным точкам. Внизу шла шкала напряжения, сбоку — тока. Местами график срывался в резкие пики, затем спадал. Бумага посерела от частых стираний ластиком.
— Вольтамперометрия, — пояснил Роман, подходя ближе. — Рутинный процесс. Меняем напряжение на электроде по заданному закону, фиксируем ток. По форме этой кривой можно судить, что происходит в растворе. Какие примеси, какова скорость реакции, не начал ли разрушаться сам электрод.
Дмитрий провел пальцем по самому высокому зубцу на графике.
— Опыт длится полчаса. А дальше начинается самое муторное: мы получаем ленту самописца или столбцы цифр с цифрового вольтметра, если повезет. Чтобы понять результат, нужно вычесть фоновый ток электролита, затем сгладить шумы — видите, как кривую дергает? Следом найти точное значение максимума и вычислить площадь под пиком. Это заряд.
Морозов рассматривал чертеж. Первичная обработка измерений — то, для чего малые машины и предназначались.
— И сейчас вы обсчитываете это вручную? — спросил Алексей.
— Вручную, — кивнула Ирина. — С карандашом, логарифмической линейкой и арифмометром. Если измерений много, набиваем колоду перфокарт и несем в институтский вычислительный центр. Там очередь, машинное время БЭСМ расписано, теоретики забирают львиную долю. В лучшем случае распечатку отдают через три дня.
— А раствор не живет три дня, — Дмитрий оперся ладонями о край стола. — Температура меняется, реактивы стареют. Если через трое суток после обсчета выяснится, что у нас медленно поплыл базовый фон, отравился электрод или пик сместился из-за микроскопической примеси, всю серию придется выкинуть. ЭВМ нужна нам для понимания результатов опыта в тот же день, до того, как я
Липатов, до этого молча слушавший, придвинул к себе чистый лист.
— Подождите, — он примирительно поднял авторучку. — Вылитый в раковину раствор мы потом переведем на язык, понятный высокому начальству. А сейчас давайте разложим вашу химию на три простых этапа: входные данные, алгоритм обработки и вывод результата. Что конкретно у вас на входе? Как выглядит один ряд измерений?
— Пары чисел, — быстро ответила Ирина. — Мы меняем напряжение с заданным шагом и фиксируем ток.
— Токи мизерные, — добавил Роман. — Сплошные доли микроампера, кривая часто уходит в минус. Нам критически важен третий-четвертый знак после запятой. Машина с такими мелкими дробями справится? Как у нее с точностью и скоростью расчета?
Громов перестал раскачиваться на стуле и подался к столу.
— В интерпретатор вшита программная работа с плавающей запятой, — ответил он. — Шести знаков мантиссы вам хватит с запасом. Считать будет не так мгновенно, как целые числа, но справится. Какой объем одного опыта? Сколько точек?
— Триста, — Роман пожал плечами. — Максимум пятьсот. Длинные опыты мы просто бьем на несколько серий.
Евгений почесал подбородок, прикидывая раскладку в памяти.
— Пятьсот пар чисел, — резюмировал Громов. — Это копейки, пара килобайт. Влезет куда угодно, еще и место под интерпретатор и переменные останется. Но для спокойной лабораторной работы лучше сразу ставить память на шестьдесят четыре килобайта, чтобы потом с буферами вывода не жаться, когда аппетиты вырастут. А дисковод пойдет исключительно под архив. Во время счета дергать дискету не придется, всё ляжет в оперативку.
— Отлично, — Липатов вывел на бумаге первую строку. — Исходные данные: одномерные массивы до тысячи элементов. Обработка: вычитание константы, скользящее среднее. Что на выходе? Что машина должна выдать, чтобы вы считали результат полученным?
Ирина посмотрела на громоздкий корпус АЦПУ.
— Распечатку. Очищенную от фона таблицу значений, которую можно вклеить в лабораторный журнал. И расчет пары-тройки контрольных цифр: площадь пика, наклон кривой на начальном участке. Если она еще и покажет график на экране, чтобы мы глазом ловили аномалии — будет совсем замечательно. Но без бумаги результата нет.
Морозов слушал Ирину. В голове выстраивалась привычная технологическая цепочка из его времени. Там массивы измерений уходили бы с прибора прямо в компьютер, мгновенно обрастая графиками, цифровыми фильтрами и готовыми отчетами. В восемьдесят первом этот конвейер предстояло собирать вручную, увязывая вместе малую ЭВМ, ручной ввод чисел, дисплей и бумажную печать, чтобы позже дойти до прямого съема данных через платы преобразователей.
— Женя, — Морозов повернулся к программисту. — Набросаешь для наглядности? Загнать в цикл десяток значений, вычесть фон и кинуть на печать.
Громов придвинул к себе ЭВМ. Корпус коротко стукнул по столешнице.
— Сразу предупреждаю, — сказал он, опуская пальцы на клавиши. — Готового научного пакета у меня в кармане нет. Покажу только принцип: вашим массивам хватает памяти, процессор тянет цикл сглаживания, а на выходе печатается осмысленный результат.
Он загрузил МикроБейсик. На экране замигал квадратный курсор, и Громов начал вбивать короткие строки: DIM U(500), INPUT F.
— МикроБейсик, — коротко пояснил он гостям. — Тот же самый, что работает на наших прошлых машинах, чтобы не плодить зоопарк языков. Для вычислений с плавающей запятой его за глаза хватит.
— Вычитаем постоянную величину? — спросила Ирина, наклоняясь ближе к дисплею. — У нас фон иногда меняется вместе с напряжением, идет почти как наклонная прямая. Одной константы тут мало. Сможете задать зависимость от напряжения?
— Легко, если дадите формулу, — отозвался Громов. Клавиши сухо и ритмично щелкали под его пальцами. — Но для быстрой демонстрации вычтем константу. Диктуйте с миллиметровки первый десяток значений. Я вобью их прямо в код через DATA. Отдельный файл заводить не будем.
Роман усмехнулся, глядя на бегущие светлые символы.
— Наш лабораторный самописец такую таблицу не выдаст. Он просто рисует кривую на ленте, а мы потом ползаем по ней с линейкой.
— А площадь пика эта штука посчитает? — спросил Дмитрий. — Интегрирование потянет?
— Интегрирование — слишком гордое слово для восьмиразрядного процессора, — хмыкнул Громов. — За высокой математикой — это к БЭСМ-6. У нас тут обычная арифметика. Напишу вам сумму трапеций, для оценки хватит.
Стук клавиш ускорился. Громов печатал сериями: быстрая очередь ударов, короткая пауза на обдумывание цикла, снова очередь. Через три минуты он откинулся на спинку стула.
— Поехали. — Евгений нажал клавишу запуска.
Текст на экране сдвинулся вверх, оставив короткий запрос: ВВОД ФОНА.
Громов заглянул в измятую миллиметровку Ирины и набрал число. По темному полю дисплея тут же побежали ровные столбцы цифр: исходное напряжение, измеренный ток, очищенные значения, сглаженный ряд. В самом низу замерла итоговая сумма — та самая примитивная площадь.
Дмитрий подался вперед, вглядываясь в экран. Ирина тихо хмыкнула, узнав в верхних строках свои контрольные расчеты.
— Порядок, — сказал Громов. — Теперь делаем копию для лабораторного журнала.
Он вбил короткую команду. Механизм АЦПУ включился с резким металлическим лязгом. Внутри загудел электромотор, разгоняя литерную цепь, и блок стальных молоточков с оглушительным треском ударил по красящей ленте. Пахнуло нагретой бумажной пылью и машинным маслом. Широкий рулон дергался, построчно перенося экранные данные на бумагу.
Дождавшись тишины, Громов нажал кнопку прогона, оторвал лист о зубчатый край и протянул гостю.
— Скучная вещь, — констатировал программист. — Никакой магии: программа взяла числа, вычла и распечатала.
Дмитрий принял бумагу. Он переводил взгляд со светящегося экрана на густые чернильные колонки.
— Скучная вещь нам и нужна, — кивнул Дмитрий, передавая бумагу Ирине. — Нам не надо обгонять вычислительный центр по скорости. Дело в другом.
— В задержке, — подсказал Липатов. Он сидел с краю и быстро записывал тезисы.
— Да, — согласился Дмитрий. — В сокращении времени между выключением установки и результатом. Если аспирант не бежит через полгорода с бланком и не ждет очереди до завтра, мы успеваем сделать три серии замеров за смену. И можем сразу вылить испорченный раствор, если расчет пошел не туда.
Иван Михайлович сделал шаг вперед и вклинился в полукруг химиков, обступивших стол с машиной.
— Выходит, — пробасил начальник КБ, — мы говорим о нормальной лабораторной комплектации. Полноценное рабочее место вплотную к экспериментальной установке. Питание, дисплей, дисковод под архив замеров, устройство печати. И чтобы технику можно было безопасно держать на одном столе с вашими реактивами.
— Именно так, — ответила Ирина, сворачивая
Липатов провел под записями черту.
— «Сокращение задержки между опытом и решением о повторе», — проговорил он, вписывая фразу в нижнюю треть листа. — Если ваш институт изложит это в официальном письме, приложив типовые задачи и примеры вычислений, мы получим веский довод для министерства.
Морозов слушал и понимал, что запрос от реальной лаборатории сработает надежнее любых внутренних планов КБ. Проекту требовались люди, которым машина нужна для ежедневной рутины.
Алексей оперся о край стола.
— Если рабочее место со «Сферой» действительно будет стоять рядом с экспериментальной установкой, — негромко начал он, — то следующим шагом станет отказ от ручного ввода. Зачем переписывать цифры с вольтметра на бумагу, а потом с бумаги вбивать в память?
Роман настороженно прищурился.
— А как?
— Забирать сигнал прямо с установки. Через плату аналого-цифрового преобразователя. С проводов.
Громов с хрустом потянулся на стуле.
— И вот там начнется настоящая веселуха.
Химики перевели взгляд на программиста.
— Преобразователь — железка бесхитростная, — с явным удовольствием пояснил Громов. — Плата переведёт в двоичный код любое напряжение на входе: вашу полезную кривую, дрейф нуля, наводку от соседнего термостата и искру в коридорном выключателе. А когда в распечатке вместо долей микроампера вылезут случайные скачки до тысяч единиц, мы будем часами искать крайнего. Гадать, где ошибка: в математике программы, в плохом экранировании провода или в том, что у вас электрод растворился.
Романа перспектива не испугала. Наоборот, он заметно оживился.
— Мы с этим нулем и так каждый день воюем. Зато если получится — мы перестанем работать писарями!
— Точно, — подхватила Ирина. — Если выкинуть из цепочки уставшего лаборанта с шариковой ручкой, мы избавимся от половины ошибок переписывания еще до начала расчетов.
Липатов дважды стукнул авторучкой по столешнице.
— Стоп. Фиксирую это исключительно как туманную перспективу. — Он решительно обвел пару строк на своем листе. — Иначе завтра вы потребуете стыковку с каким-нибудь хроматографом. Для начала — только ручной перенос. Прямой съем данных пойдет как тема для отдельной разработки.
— Справедливо, — кивнул Дмитрий. Он щелкнул замком портфеля. — Нам пока и ручного ввода за глаза хватит. Главное — машина рядом с вытяжным шкафом. Что от нас нужно, чтобы всё это не осталось просто разговором? Мы ведь сами заинтересованы.
Иван Михайлович шагнул ближе.
— Официальное письмо от вашего института, — произнес он. — Максимально предметное. Какие именно расчеты вы проводите, сколько опытов ставите за неделю, какая реальная задержка набегает из-за очередей к большой ЭВМ. Прямо к заявке приложите типовые ряды измерений и рабочие формулы.
Он помолчал и добавил:
— Напишите так, чтобы было ясно, сколько дней теряет лаборатория в ожидании машинного времени. Чтобы я мог положить это на стол и сказать: вот здесь расчеты стоят неделю, а с нашей техникой результат будет готов к вечеру. Сделаете?
— Сделаем, — кивнул Дмитрий. — Завтра набросаем обоснование, а к концу недели добьемся подписи зама по науке. Нам эта машина действительно нужна.
Гости попрощались и ушли, на ходу обсуждая, какие именно массивы стоит приложить к заявке. Шаги на лестнице быстро стихли.
Липатов взял свежий лист, снял колпачок с авторучки и вывел в самом верху крупными печатными буквами: «Открытое применение. Научная лаборатория. Табличная обработка измерений».
Громов качнулся на стуле и со стуком опустил передние ножки на линолеум.
— Для заявки формулируй как можно уже, Серёжа. Машина у нас универсальная, спору нет, но чиновникам лозунги не нужны. Напишешь в обосновании про решение любых научных задач — утонем в согласованиях. Нужны конкретные цифры.
Липатов аккуратно подчеркнул заголовок двойной линией.
— Пишу строго по делу. Область применения: локальные опыты, ряды измерений, печать результатов. Без замаха на всесоюзный масштаб.
Иван Михайлович склонился над столом, пробегая глазами ровные чернильные строки.
— Вот с таким документом, Лёша, — он обернулся к Морозову, — уже можно пробивать открытую серию. Здесь понятный пользователь и живая, измеримая задача. Сокращение расчетов с недели до одного вечера — лучший аргумент для производства.
Морозов смотрел на стоявшую на столе «Сферу-82» и белеющую над валиком печатающего устройства бумагу с колонками цифр. Лабораторный вариант нельзя было ограничивать одной платой аналого-цифрового преобразователя. Химикам понадобится снимать показания с одних установок, физикам — с других.
— Нам не хватит одного измерительного блока, — произнес Морозов. — Для разных институтов потребуются разные приборы и своя периферия. Значит, нужен отдельный лабораторный вариант машины. С выведенными наружу разъемами и защищенными портами ввода-вывода.
Громов смахнул с металлической гребенки обрезки бумажной ленты.
— Главное — не выводить системную шину наружу напрямую, — сказал он. — Дело не в людях, а в чужих приборах и разных электрических режимах. На лабораторных установках могут быть наводки, гуляющий общий провод. Без буферов на вход легко придет помеха или аварийное напряжение, и процессор вылетит. Придется ставить буферные микросхемы, делать гальваническую развязку и надежную защиту входов. И писать понятное описание для каждого контакта.
Липатов добавил новую строчку в нижнюю часть своего листа.
— Фиксирую для заявки: лабораторный вариант «Сферы-82» с защищенными цифровыми линиями для внешних устройств. Сфера-82Л.
Глава 46
Обратная связь
В углу лаборатории на столе стояла ведущая «Сфера-82». От её разъёма по линолеуму тянулся толстый серый кабель. Двадцать восемь метров экранированной пары уходили в коридор, ложились вдоль плинтусов и скрывались в третьем по счёту кабинете, где стояла приёмная машина.
Длительный прогон подходил к концу. Саша Птицын отодвинул клавиатуру и молча следил за бегущими строками дисплея. Рядом ждал Вадим Кравец. Пётр Иванович устроился у осциллографа. Люба Ветрова разворачивала на свободном краю стола листы миллиметровки с эскизами новой платы связи. Евгений Громов с сухим шелестом перелистывал программную распечатку, а Сергей Липатов делал карандашные пометки в таблице испытаний. Морозов сидел сбоку от стола и смотрел на меняющиеся цифры, ожидая ответа на последний блок.
На экране мигнула и застыла последняя строка. Птицын расслабленно откинулся на спинку стула и кивнул на светящиеся цифры.
— Дошло. Контрольная сумма сошлась. На коротком отрезке и шестьдесят две с половиной прошли. Зачем тогда рабочей скоростью девятнадцать ставить?
Пётр Иванович чуть повернул ручку развёртки, внимательно глядя на экран осциллографа.
— Потому что твой короткий отрезок заканчивается у соседнего стола. Через три кабинета
— На тридцати восьми файл тоже дошёл, — возразил Птицын.
— Дошёл после повторов, — отозвался Кравец, делая пометку в тетради. — Приёмник двадцать один раз запросил тот же блок. Программа-то передачу вытянула и файл собрала, а вот в физической линии двадцать один раз был сбой.
Громов хмыкнул, переворачивая лист программной распечатки.
— Вот за это я и люблю счётчики. Без них Саня сейчас торжественно объявил бы победу.
Птицын ничуть не обиделся. Он придвинулся к клавиатуре, вывел на дисплей нужную колонку и постучал по корпусу.
— Смотрите сами. Блоки по сто двадцать восемь байт. Из тысячи отправленных на скорости тридцать восемь пришлось повторить всего двадцать один. Это же капля в море.
Люба Ветрова прижала край миллиметровки линейкой.
— Саш, а на второй плате этот результат повторится?
— Вот это и проверим, — Кравец оторвался от записей. — Запас по времени считывания минимальный. Чуть изменится температура в коридоре, возьмём кабель с другой ёмкостью, и момент выборки съедет на пологий край. Счётчик повторов сразу пойдёт вверх. У нас предельное время ожидания сто миллисекунд, три запроса без ответа — и программа рубит обмен.
Пётр Иванович погасил луч и отвернулся от прибора.
— Вадим прав. На двадцати восьми метрах микросхема уверенно защёлкивает сигнал в середине такта только на девятнадцати двести.
Морозов, всё это время молча слушавший спор, подался вперёд.
— Оставляем все три строки. Рабочей называем ту, которую сможем выдержать всю смену и повторить на плате Любы.
Липатов пододвинул к Птицыну бланк испытаний.
— И рядом отмечаем условия. Двадцать восемь метров, экранированная пара, размер блока, число повторов. Тогда другой инженер соберёт схему по описанию и получит точно такие же цифры.
Птицын помедлил, затем сам вписал значение «19,2 Кбод» в графу рабочего режима. Скорости тридцать восемь и шестьдесят две с половиной он перенёс в колонку опытных данных.
— С физикой провода понятно, — Громов отложил распечатку. — Передай теперь обычный файл.
Птицын прервал циклический прогон линии, вывел на дисплей каталог дискеты и занёс руки над клавиатурой.
— Исходный текст системного макроассемблера. Около двадцати четырёх килобайт, — пояснил он.
— Передаю?
— Кому? — Громов остановил его прежде, чем Птицын коснулся клавиш. — На том конце надо программу приёма запустить, забыл?
Липатов встал, взял чистую дискету и исписанный от руки листок.
— Давайте я. Заодно посмотрю, насколько ваша памятка понятна человеку со стороны.
Птицын попытался сходу объяснить сразу три команды запуска, но Липатов попросил оставить одну рабочую последовательность и ушёл по коридору к дальней машине.
Спустя пару минут нижнее поле экрана очистилось. Появился короткий текст:
«МАШИНА 2. ПРИЁМ ГОТОВ. ПЕРЕДАВАЙТЕ.»
— Вот теперь передаю, — Птицын набрал команду и нажал ввод.
В корпусе сухо щёлкнул шаговый двигатель дисковода ИЗОТ, загорелся красный индикатор. На дисплее начали обновляться номера уходящих блоков по сто двадцать восемь байт. При скорости около девятнадцати килобит в секунду счётчик быстро мотал значения в нижнем углу экрана.
Примерно на восемнадцатой секунде светодиод погас. Аппаратное подтверждение появилось сразу, однако инженеры продолжали смотреть на дисплей.
«ФАЙЛ ПРИНЯТ. 24576 БАЙТ. СУММА СОВПАЛА.»
— Уже лучше, — кивнул Громов. — Машина подтверждает, что блоки дошли и сумма сошлась. Посмотрим, что скажет Липатов, когда вернётся.
Кравец сделал пометку в таблице состояний:
— Эти два ответа в описании надо чётко различить. Иначе однажды примем подтверждение линии за успешную работу всей программы.
Липатов вернулся в лабораторию и положил листок на край стола.
— На второй команде пришлось задуматься. Пока вы тут неделю сидели, выучили всё наизусть, а свежему человеку догадаться трудно, как этот приём запускать.
Птицын попробовал оправдать синтаксис, но под спокойным взглядом Липатова сдался, вздохнул и исправил памятку карандашом.
Птицын убрал с экрана сводку обмена. На столе рядом с клавиатурой лежала стопка распечаток исходного текста.
— Свои подпрограммы я помню, — Громов придержал листы рукой. — Покажи мне, где ты поставил подтверждение и где повторяешь блок.
Птицын вытянул два листа с собственными дополнениями.
— Вот здесь контрольная сумма. Дальше: при ошибке — просим повторить блок. Совпала — шлём подтверждение. А передатчик при молчании приёмника просто ждёт истечения времени и кидает блок заново.
Кравец оперся ладонями о край стола.
— Допустим, приёмник записал блок на диск. Подтверждение отправить не успел. В этот момент произошёл аппаратный сброс. Что увидит отправитель?
— Время ожидания выйдет, и он повторит передачу, — уверенно ответил Птицын.
— А приёмник после перезапуска?
— Примет… — Птицын нахмурился, переводя взгляд на ассемблерные строки.
— Примет тот же самый блок, — закончил Громов. — И запишет его второй раз, ведь память о первой записи стёрлась.
Птицын упрямо мотнул головой:
— Но для обычного обрыва это работает!
— Работает, — признал Кравец. — Только обычная помеха не возвращает программу приёмника в начальное состояние.
Он вынул ручку из кармана и нарисовал на полях распечатки цепочку состояний: ожидание блока, проверка, запись, подтверждение, восстановление.
Морозов следил за наброском.
— Какое минимальное состояние мы можем сохранить? И как отличить повтор от следующего блока?
— Значит, проблема уже не в проводе, — Громов откинулся на спинку стула. — Проблема в том, что две машины должны одинаково понимать, на чём остановились.
— Вот это и запишем в таблице документации, — Кравец обвёл квадрат восстановления. — До реализации алгоритма восстановления передачу после перезапуска придётся начинать заново.
Птицын отложил ручку и придвинул к себе распечатку, выискивая место для правки.
— Номер блока, — произнёс он наконец. — Передаём номер и проверяем его до повторной записи на диск.
Громов вытянул из стопки бумаг несколько отпечатанных листов.
— Кстати, позавчера с зеленоградской почтой пришла бумажка про CP/NET — это их сетевые дела под CP/M. Они прислали только общее описание архитектуры без готового кода, но подход здравый. Программа просто делает стандартный системный вызов, а МикроДОС сама разбирается, где искать файл — на местном дисководе или у соседа по кабелю.
— Давайте прямо сейчас встроим процедуры пересылки в систему, — оживился Птицын.
— Лучше решать вопросы по порядку. Сперва нужно закрыть вопрос со сбросом, — напомнил Кравец. — При обычной помехе повтор восстанавливает передачу. Но стоит перезагрузить принимающую машину, и она теряет номер последнего записанного блока. Зашьём такую ошибку в базовые вызовы — потом замучаемся искать источник сбоя.
— Пока идёт отладка, держите
Кравец быстро набросал в тетради три прямоугольника и соединил их линиями.
— Передавать каждый раз полные справочники слишком тяжело.
— Пойдут только короткие сообщения, — подтвердил Морозов. — Номер цеха, время, суммы и признак проверки. Легко уложимся в один стодвадцативосьмибайтовый блок.
— А для зеленоградского «СЛОЯ-81»? — спросил Птицын. — Можно же раскидать расчёты. Одна машина опрашивает соседей, и кто свободен, тому и кидает следующий кусок слоя на проверку.
— Саш, ты мыслишь верно, но для первого раза массивы данных мы заранее разложим по местным дискам, — ответил Морозов. — По проводам пустим лишь состояния: номер рассчитанного фрагмента, затраченное время и готовый результат. Иначе скорости обмена просто не хватит.
Громов аккуратно сдвинул зеленоградские листы на край стола.
— Зато Седых-то всё радуется! Повесил в кабинете грамоту от областного совета НТО и теперь ходит везде хвастается нашей работой с зеленоградцами.
Морозов придвинул к себе чистый оборот старого чертежа. Набросал два прямоугольника, соединил их коротким штрихом.
— Кстати, подумайте вот о чем. Девятнадцати килобит в секунду для сводок через коридор хватит. Но передача массивов координат займёт слишком много времени. А если машины стоят вплотную, зачем гнать по одному биту? Восемь линий данных. Сигнал готовности, сигнал подтверждения. Выдаём в канал сразу байт. Кабель короткий, метр или два. Если освоим прямой обмен с памятью, вытянем сотню килобайт за секунду.
Люба всмотрелась в набросок, мысленно раскладывая штрих на контактные площадки.
— Восемь жил на данные, две управляющие. Общий провод. Выйдет толстый жгут. И все восемь разрядов обязаны приходить на приёмник строго синхронно. Чуть перекосит — защёлкнем случайный мусор.
Пётр Иванович оценил названное расстояние и нахмурился.
— В пределах двух метров я такую одновременность вытяну. Дальше пойдут перекосы фронтов и уравнительные токи по этому самому общему проводу. А полная оптронная развязка на всю параллельную шину займёт половину площади платы. Такой кабель свяжет только соседние столы. В коридоре останется последовательная линия с токовой петлей.
— А как будем подтверждать приём? — спросил Кравец, прикидывая варианты сбоев. — Отвечать на каждый байт или собирать передачу в блок? Если соседний процессор остановится, мы рискуем бесконечно ждать флага. Тогда снова придётся задать предельное время ожидания и новый круг состояний.
— Прикладная программа этих деталей не заметит, — отозвался Громов. — Она сохранит единый вызов МикроДОС. Какую плату задействовать для пересылки — выберут системные процедуры.
Птицын пододвинул к себе блокнот.
— Я на днях посчитаю такты. Выдача байта, проверка флага, чтение…
— Посчитай, — согласился Морозов и отложил карандаш. — Но не спеши. К железу вернёмся не прямо завтра. Сейчас доводим длинную линию и проверяем вторую плату.
Тем временем Кравец забрал лист с памяткой и вышел из лаборатории. Ему предстояло запустить на дальней машине программу приёма и текстовый редактор. Липатов подошёл ближе, наблюдая за последовательностью действий.
Птицын набрал команду и выбрал файл с исходным текстом своих сетевых подпрограмм.
— Отправляю.
Спустя минуту внизу экрана появилась строка входящего короткого сообщения. Заголовок «МАШИНА 2» предварял текст:
«ИСХОДНИК ПОЛУЧИЛ. У ВАС ПОСЛЕ СБРОСА ПРОПАЛ НОМЕР ПОСЛЕДНЕГО БЛОКА. ДОБАВЛЯЮ ПРОВЕРКУ ПОВТОРА.»
Громов упёрся руками в край стола.
— Погоди. Он уже правит файл?
— Мы же для этого его и послали, — напомнил Птицын.
— Послали проверить передачу. В моих текстах сначала спрашивают, потом переставляют переходы.
— Давайте дождёмся файла и сравним версии, — предложил Морозов.
Птицын кивнул и перевёл машину в режим приёма. Вскоре дисковод заработал снова. Принятый блок, подтверждение, следующий блок. Пересылка заняла восемнадцать секунд. Птицын открыл полученный файл в редакторе, пролистал до нужной подпрограммы и вчитался в изменённые строки.
— Женя, он прав. Вот здесь, — Птицын ткнул пальцем в светящиеся символы, — после сброса мы принимали повтор как следующий блок. Теперь он вставил команду: сначала сравниваем номер.
Громов встал и долго всматривался в дисплей, сверяя новый код со своей бумажной распечаткой.
— Решение годится, — наконец произнёс он. — Только исходник сохраняем отдельно и каждую такую правку подписываем. Иначе через неделю никто не вспомнит, откуда вырос переход.
На экране появилось новое сообщение.
«ИСХОДНЫЙ СОХРАНЁН. НОВЫЙ — ВАРИАНТ 2. ПОПРАВКА КРАВЕЦ, 16:24.»
Громов хмыкнул, достал карандаш и сделал пометку на своей распечатке.
— Ещё и время поставил. Набери ему ответ: тогда возвращайся, Вадим, будем спорить уже в одной комнате.
Птицын быстро отстучал символы по клавишам. Ответ пришёл почти сразу:
«СНАЧАЛА ПРОГОНЮ СБРОС ЗДЕСЬ. ИНАЧЕ В ОДНОЙ КОМНАТЕ ВЫ МЕНЯ УБЕДИТЕ РАНЬШЕ ПРОГОНА.»
Громов коротко рассмеялся, Птицын покачал головой.
Кравец вернулся через десять минут. Люба аккуратно перетянула резинкой тугой рулон миллиметровки со схемой второй платы. Пётр Иванович отсоединил щупы осциллографа и начал сматывать провода. Липатов дописывал в тетрадь испытаний последние условия опыта.
Громов перевёл взгляд на вошедшего Кравца.
— До чего дошли. Вадим уже правит мои таблицы, даже дверь не открывая.
— Зато ты успеваешь возмутиться до моего возвращения, — отозвался Кравец, стягивая со стола свою папку.
— Ещё немного, и мы сможем спорить, не выходя из своих кабинетов, — сказал Морозов.
— Тогда в программу сообщений надо добавить длинные строки, — подхватил Птицын. — Евгений Александрович в короткую не уложится.
— Я уложусь в одно слово, Саня, — добродушно пообещал Громов. — И оно тебе очень не понравится. В понедельник будешь писать обработку этого слова.
Морозов слушал их спор, глядя на исправленный файл. В две тысячи двадцать шестом году он привык к общему документу. Там можно было наблюдать, как по экрану скользит чужой курсор, как коллега в другом городе меняет линию на чертеже, а прямо возле нужного места возникает текстовое замечание. Там линии связи, серверы и локальные копии прятались глубоко внутри системы — перед глазами лежал просто общий рабочий лист.
Здесь, в восемьдесят первом, Кравец ради одной поправки прошёл три кабинета, вручную запустил приёмник, открыл редактор, сохранил исходник, исправил строку и восемнадцать секунд возвращал файл. Птицын сверял экранный текст с бумажной распечаткой. Громов принимал поправку вслух. Пётр Иванович весь день следил за формой сигнала, а Люба готовила чертёж второй платы.
Липатов молча пододвинул Морозову тетрадь с таблицей испытаний. В
На экране машины был открыт файл, вернувшийся из другой комнаты уже исправленным.
Nota bene
Книга предоставлена Цокольным этажом, где можно скачать и другие книги.
Сайт заблокирован в России, поэтому доступ к сайту, например, через Amnezia VPN: -15% на Premium, но также есть Free.
Еще у нас есть:
1. Почта[email protected]— получите зеркало или отправьте в теме письма название книги, автора, серию или ссылку, чтобы найти ее.
2. Telegram-бот, для которого нужно: 1) создать группу, 2) добавить в нее бота по ссылке и 3) сделать его админом с правом на«Анонимность».
* * *
Если вам понравилась книга, наградите автора лайком и донатом:
Проект «Сфера-82»: Цвет и слой
Спасибо за чтение
Вернуться к книге
