Свист гетеродина резал слух. Олег Тимофеев чуть довернул ручку настройки самодельного трансивера, и тонкий визг сполз ниже, захлебнулся в шипении помех и распался на пульсирующие куски морзянки.
Восемьдесят метров. Любительский диапазон.
Олег сидел в углу квартиры, превращенном в радиорубку. Январский вечер дышал в приоткрытую форточку морозным сквозняком. На столе, заваленном обрезками монтажного провода и пустыми спичечными коробками, тускло светилась шкала настройки. Индикаторная лампа подмигивала в такт помехам. Пахло нагретой пылью и лаком.
Тимофеев нажал ножную педаль передачи, оставляя руки свободными для записей. Щелкнуло мощное реле перехода с приема на передачу.
— Ульяна-Анна-Три-Анна-Харитон. Всем на восьмидесятке. Кто в канале, ответьте Владимиру.
Он отпустил педаль. В динамике остались несущие глушилок, обрывки чужих разговоров и сухой треск помех.
Олега не интересовали карточки-квитанции для спортивного зачета. Ему требовалось железо.
Официальный маршрут уже взял на себя Николай Петрович, и Тимофеев прекрасно помнил его последнее предупреждение: без самодеятельности, всё строго по описи. Но ждать до среды, не понимая реального масштаба проблемы, он не умел. Эфир служил грубой разведкой местности: важно было проверить, прав ли старый хозяйственник насчёт ремонтных фондов и однотипных трупов УПИМЦТ.
Гаражная привычка добывать дефицит через эфир въелась в подкорку. Советская система снабжения работала по жестким, неповоротливым планам, а рядом с ней существовала живая сеть радиолюбителей. Они паяли, чинили, обменивали и доставали то, чего официально не существовало в природе. Если где-то на складе списывали партию осциллографов, эфир узнавал об этом раньше ведомственной переписки.
Эта сеть говорила на своем языке кодов и сокращений. Здесь многое решали позывной, репутация и мощность передатчика. В углах комнаты, заставленных стеллажами, тускло поблескивали алюминиевые шасси списанных радиостанций. Олег знал: если на Дальнем Востоке военная часть списывает партию измерительных приборов, через несколько дней схема переделки этих приборов под любительские нужды уже будет гулять по коротким волнам.
Трансивер Олега, собранный вручную долгими вечерами, отдавал ровное тепло. Внутри металлического кожуха светились нити накала мощных радиоламп ГУ-50. Воздух вокруг них пах прогретой технической пылью и горячим лаком.
За окном завывал ледяной январский ветер, швыряя снежную крупу в стекло, но в радиорубке было тепло. Олег, ссутулившись в старом свитере, не сводил глаз с индикатора, вслушиваясь в эфирный шум — он искал не романтику дальних связей, а следы чужих мастерских, складов и списаний.
Сквозь треск пробился голос. Хриплый, искаженный замираниями сигнала, но разборчивый.
— … Владимир, здесь Саныч, третий район… принимаю на пять-семь… Олег, ты?
Тимофеев пододвинул к себе общую тетрадь в клеточку. Карандаш уже был зажат между пальцами.
— Я, Саныч. Привет Рязани. Слушай, у меня интерес специфический. Нужна цветная база. Блоки цветности, развертки. Что у вас в городе по мастерским оседает?
Динамик выплюнул порцию белого шума. Сигнал поплыл. Олег напрягся, вслушиваясь в искаженную однополосную речь.
— … цветное? Ты рехнулся, Олег?…это же дефицит дикий. У нас в четвертом ателье очередь на замену кинескопов на полгода расписана. Но погоди… Жора с радиозавода говорил, у них в подсобке валяется…
Карандаш чиркнул по бумаге.
Олег писал быстро, сокращая слова. Ему не нужны были байки. Ему нужны были модели и симптомы.
На листе появилась первая строчка. «Рубин-714». Большой, тяжёлый аппарат, который в одиночку лучше не переносить. Рязанский корреспондент вещал про мужика, у которого этот «Рубин» свалился с тумбочки. Кинескоп вдребезги, корпус в щепки, но шасси якобы уцелело. Мужик готов был отдать его за два блока питания от старых ламповых радиол.
Олег не написал слово «берем». Он поставил тире и вывел вопрос: «годен?». Выжили ли тиристоры после удара? Не треснула ли плата по текстолиту?
Эфир кашлянул и сменил корреспондента. Теперь вещал Суздаль. Голос звучал чище, без федингов.
— … Славутич-714 есть. Сосед на дачу свез. Говорит, умножитель шьет так, что коты слепнут. Выбросить жалко, чинить дорого. Забирай самовывозом.
Карандаш Олега вывел: «Славутич-714». И рядом новые вопросы: «есть схема?», «кто ремонтировал?». Советские телевизоры часто собирались по обходным технологиям. Если на заводе не было нужного транзистора, ставили аналог. Схема в паспорте переставала совпадать с реальностью. А если туда уже лазил подвыпивший деревенский мастер с паяльником на сто ватт — плата превращалась в минное поле из отслоившихся дорожек и соплей припоя.
Час за часом. Модель за моделью.
Тетрадь покрывалась записями. «Березка-715» из Коврова — выгорел блок питания. УПИМЦТ-61-II — голая рама без модулей, зато с целым кинескопом. Кто-то предлагал разобранный «Электрон», кто-то хвастался доступом к некондиционным платам декодеров прямо с конвейера.
Азарт охотника горячил кровь, но список быстро перестал быть списком добычи. Цвет лежал по гаражам, пылился в подсобках и ждал, когда его заберут, только каждая запись тянула за собой новые вопросы: паспорт, схема, состояние кинескопа, кто уже лазил в плату и чем заменял штатные детали.
Он выключил трансивер далеко за полночь: щелкнул тумблер анодного напряжения, и погасла зеленая лампа индикатора. Гудение трансформатора медленно сошло на нет. В квартире стало слышно, как за окном скрежещет о стекло обледеневшая ветка тополя.
Олег сидел в полутьме, подсвечиваемый только уличным фонарем через окно. Он смотрел на исписанный лист. Десяток моделей. Десяток возможных основ для ВКУ. Руки чесались начать пайку, скрестить процессор К580 с аналоговым железом. Но записи в тетради говорили о другом: нужного оборудования в свободном доступе не было.
Птицын сидел над раскрытой тетрадью Громова, чувствуя себя человеком, которому дали карту без масштаба. Задача казалась простой: написать служебную программу «LSTAT.ASM» для отображения состояния сетевого обмена. Главное условие — не трогать рабочий код «LAN.ASM», маркер и прерывания.
Проблема заключалась в почерке ведущего программиста. И в его лаконичности.
Птицын вгляделся в убористые строки: «соб. — кольц. табл. — печ. после», «журн. не из цикла», «экран не дергать на маркере».
Он потер переносицу. Поймать событие обмена, сохранить его и напечатать на экране. Три действия сливались в один запутанный ком. Если печатать сразу — рушился ритм обмена. Если не печатать — как понять, что произошло?
— Люба, — Птицын повернулся к соседнему столу. — Посмотри, пожалуйста. Я половину букв не разбираю.
Люба аккуратно отложила карандаш и подвинула к себе тетрадь. Склонившись над записями, она без запинки прочла:
— «Событие — в кольцевую таблицу. Печать — после. Писать на экран вне обработчика прерывания. И сам маркер на экран не выводить».
— Спасибо, — выдохнул Птицын. — А программный смысл?
Люба виновато улыбнулась.
— Женя всегда переходит на шифровки, когда мысль бежит слишком быстро, — она легонько провела пальцем по угловатым строчкам, словно защищая этот неразборчивый почерк. — Слова здесь русские. Но как именно это должно лечь в программу, я тебе не объясню. Извини.
Еще днем Птицын пытался сунуться с этим вопросом к Олегу и Наташе. Железячники честно попытались помочь. Они засыпали его номерами портов, битовыми масками, адресами контрольных точек и распиновкой разъемов. Это был другой уровень задачи. Они мыслили сигналами, а Птицыну нужна была структура программы.
От безысходности он собрал листинги и пошел в вычислительный центр.
Вычислительный центр жил своим вечерним ритмом: гудели стойки ЕС-1035, щелкали перфораторы, в воздухе смешивались запах бумаги, машинного масла и табачного дыма. В машинном зале царили операторы, тасующие колоды перфокарт и бобины с магнитными лентами. ЕС-1035 имела мало общего со «Сферой-82» на микропроцессоре К580: другие команды, другая память, другие задачи. Птицын понимал это, но надеялся на общий инженерный принцип.
Он толкнул дверь в комнату подготовки программ. Здесь, в сизом дыму «Примы», у приоткрытой форточки сидели уставшие после смены программисты. На столе высилась стопка широких распечаток с АЦПУ, рядом шуршала сматываемая перфолента.
— О, смена растет! Ну привет, Птицын, — хмыкнул бородатый системщик в вытянутом свитере, заметив тетрадь Громова. — Никак, Евгений оставил мальцу «маленькую задачку»? Размером с полмашинного зала?
В голосе не было злобы. Громова здесь уважали безоговорочно.
Птицын развернул тетрадь.
— Я застрял на логике вывода. Сеть быстрая, а экран медленный.
Бородатый затушил сигарету в жестяной банке из-под леденцов, придвинул к себе чистую оборотную сторону распечатки АЦПУ и достал ручку.
— Код я тебе, сам понимаешь, не дам, ассемблеры у нас слишком разные, — он нарисовал на чистом листе крупный круг. — Но алгоритм везде один. Смотри. Событие обмена нельзя печатать на экран сразу. Ты затормозишь шину и сорвешь сеть. Поэтому ты делаешь короткую запись в кольцевую таблицу. Это твой буфер.
Ручка быстро набросала структуру байтов.
— Запись фиксированного формата. Номер узла, номер блока, код состояния, признак ошибки или контрольная сумма. И метка времени или порядковый номер.
К столу подошел еще один программист, с кружкой остывшего чая.
— Коды состояния держи отдельной таблицей, — посоветовал он. — Чтобы потом, если что, поменять текст вывода на экране, не переписывая твою логику. И не лезь в маркер и рабочие прерывания. Твоя служебная программа должна только читать буфер в свободное время.
— Понял. А если мне потом само железо тестировать? — спросил Птицын, торопливо записывая. — Громов еще велел набросать тесты для нового цветного видеоблока. Там тоже буфер городить?
— Смотря что отлаживаешь, — ответил второй. — Если просто проверяешь порты и адреса — буфер не нужен. Но базовый принцип тот же: программа задает железу простой вопрос и ждет однозначный ответ. Никаких красивых картинок, пока не отладите логику на уровне битов.
Птицын возвращался в лабораторию КБ «Сфера» с таким чувством, будто нес в руках не исписанную оборотную сторону распечатки, а хрупкий стеклянный шар.
В комнате было зябко. Олег возился с толстыми жгутами макетных проводов, Наташа вычерчивала графики на миллиметровке, а Люба тихо щелкала костяшками конторских счет — ей так было привычнее и быстрее сводить предварительные балансы по токам.
Саша сел за клавиатуру «Сферы-82», отодвинул в сторону старые ведомости и положил перед собой чистый лист. Он нарисовал круг. Поставил две точки: «запись» и «чтение». Логика, которая полчаса назад казалась непроходимым лесом, вдруг выстроилась в ясную шеренгу команд. Если аппаратное прерывание от сети дергает процессор, нельзя тратить драгоценные миллисекунды на медленный вывод символа на экран. Нужно просто бросить полученный байт в следующую свободную ячейку по кругу, сдвинуть указатель и мгновенно вернуть процессор к прослушиванию линии. А уже потом, в свободное время, основная программа не спеша прочитает этот байт по второму указателю и нарисует его на мониторе.
— Развязал, — вдруг сказал он вслух, отрываясь от экрана.
Щелканье счет прекратилось. Олег поднял голову от проводов.
— Что развязал, Саш?
— Обмен и печать, — Птицын обернулся к ним, глаза его горели. — Я всё пытался впихнуть в одно действие. А сеть быстрая, экран медленный. Они друг друга тормозили. Надо было просто поставить между ними кольцевой буфер. Прерывание только кидает цифру в память и убегает обратно. А на экран она ползет отдельной очередью, когда процессор свободен.
Олег медленно опустил кусачки на стол и переглянулся с Наташей. Та чуть заметно улыбнулась, отложив карандаш.
— Помнишь, как ты пытался выводить загрузку с кассеты прямо на экран бегущей строкой? — негромко спросила она Олега.
— Помню, — хмыкнул Тимофеев. — У меня тогда лента постоянно теряла синхронизацию, потому что процессор отвлекался на рисование букв. Я тогда чуть магнитофон об стену не разбил, пока мы с Женей буфер не сделали.
Он посмотрел на Птицына уже не как на толкового монтажника, а как на инженера.
— Добро пожаловать в реальное время, Саша. Поздравляю.
— Коды ошибок в отдельную таблицу вынес? — строго, но с явной теплотой в голосе поинтересовалась Люба. — Чтобы Женя потом не ругался, выковыривая твои буквы из рабочего кода?
— Вынес, — с гордостью кивнул Птицын. — Всё по полочкам.
Олег удовлетворенно кивнул и вернулся к своим жгутам, а Саша снова повернулся к мерцающему экрану макета, методично вбивая команды ассемблера.
Позже, когда Птицын в пустом институтском буфете дожевывал холодный пирожок с повидлом, за соседний столик опустились двое из курилки вычислительного центра.
— Ну что, студент? — спросил бородатый системщик, размешивая сахар в граненом стакане. — Победил буфер?
Птицын вытер пальцы жесткой бумажной салфеткой.
— Первая таблица уже не путает обмен и печать, — спокойно ответил он, без лишней гордости, но с твердой уверенностью человека, чей код только что заработал. — Логику развязал. Но надо еще проверять на живом стенде с реальными прерываниями.
Бородатый одобрительно кивнул.
В лаборатории КБ «Сфера» батареи едва справлялись с январскими морозами, и воздух отдавал металлической стылостью.
Олег Тимофеев положил на стол общую тетрадь. Пружинки переплета сухо звякнули о стекло.
— Вариантов в эфире хватает, — бодро сообщил он, усаживаясь и потирая покрасневшие от бессонницы глаза. — Я посидел ночь на восьмидесятке, поспрашивал народ. Если кинуть клич по личным контактам, уже к выходным у нас тут будет три-четыре цветных шасси. В Рязани мужики отдают битый «Рубин» с живым блоком цветности. В Суздале на даче стоит «Славутич» с пробитым умножителем. Можно не ждать, а собирать макет прямо сейчас!
Андрей Горелов сидел ровно, не касаясь спинки стула. Перед ним лежала папка с черновиками спецификаций закрытой «Сферы-82В». Он перевел взгляд с бумаг на исписанный лист.
— Россыпь разных аппаратов, — спокойно констатировал Горелов.
— Разнобой, — отмахнулся Олег. — Но электрически сигналы можно выровнять на любом железе. Картинку я стабилизирую, зато мы не теряем целую неделю на согласование актов.
Горелов задумчиво коснулся края папки. Он говорил не как проверяющий, а как инженер, привыкший закладывать эксплуатационную надежность с первого дня.
— Вы можете заставить работать любую плату на лабораторном столе, — негромко произнес он. — Но случайная смесь разных аппаратов нам не подойдет. Даже для опытного образца. Как мы и договаривались, за закрытой машиной будет сидеть оператор, а за его спиной — дежурный техник. Если сегодня в нашей опытной партии стоит блок от «Рубина», а завтра — от «Славутича», у нас поедут параметры.
Олег подался вперед, опираясь локтями о стол, готовясь защищать свою идею, но Горелов не дал ему перехватить инициативу.
— У них разное время прогрева кинескопа, дрейф напряжений, свои помехи по питанию, — продолжил Андрей Витальевич, сохраняя ровный тон. — На одном экране аварийный режим получится резким и контрастным, на другом — смазанным. Признак отказа должен быть одинаковым. Порядок ремонта — единым. Если ваш уникальный макет сгорит на объекте, где техник возьмет к нему запасной модуль без разгадывания чужих схем? К радиолюбителю в Рязань поедет?
Тимофеев взглянул на свой список позывных и моделей. Спор приобретал правильные, сухие инженерные очертания. Крыть логику эксплуатации было нечем.
Наташа Рогова подошла к столу бесшумно. На ней был толстый шерстяной свитер грубой вязки, поверх которого небрежно накинут синий рабочий халат. В руках она держала вчерашний бланк дефектовочной ведомости.
Она выслушала концовку спора, подошла вплотную к Олегу, легонько пихнула его бедром, заставляя чуть подвинуться, и положила свою ведомость прямо поверх его исписанной ночной тетради.
— Твой энтузиазм заразителен, Олег, — с мягкой иронией сказала Наташа. — Но мы вчера всё решили. Музей телевизионного зодчества СССР мы не строим. Если договорились искать УПИМЦТ — значит, тащим в КБ только УПИМЦТ. Строго одной модификации.
Олег тяжело выдохнул. Хотелось собрать макет уже сегодня, из того, что удалось найти в эфире. Но он посмотрел на жесткую структуру дефектовки: проверка блока питания, прогрев, снятие напряжений, гальваническая развязка. Без этой строгости первый же опыт превратился бы в угадывание: где виновата «Сфера», где телевизор, а где их собственная спешка.
Он пододвинул к себе общую тетрадь, взял графитовый карандаш и начал решительно вычёркивать неподходящие варианты. У рязанского «Рубина» и суздальского «Славутича» он сразу поставил жирные кресты.
— Сдаюсь. Ищем строго однотипную базу, — неохотно согласился Олег. — Собирать по частникам — дохлый номер.
Он вывел осторожную галочку рядом с аббревиатурой УПИМЦТ и похлопал ладонью по исписанному листу.
— Но ночь у рации я просидел не зря. Мужики в эфире матом кроют городские телемастерские. Говорят, ателье просто задыхаются от сгоревших цветных аппаратов, на которые не завозят дефицитные запчасти. Умножителей нет, блоков развертки нет. Телевизоры мертвым грузом висят на балансе, списывать их сложно, мастера воют. Если это так, то гарантийный возврат — это наша золотая жила. Нам не нужно собирать доноров по одному из сараев. В одной хорошей мастерской этих УПИМЦТ могут стоять штабеля.
Горелов чуть заметно кивнул.
Олег сунул тетрадь с ночными записями в карман халата. Сон как рукой сняло.
— Наташ, готовь измерительный стенд и собирай схему гальванической развязки, — сказал он, быстро поднимаясь. — Адрес ателье на Горького у нас уже есть. Николай Петрович только к среде получит добро на обмен по актам, но ждать я не могу. Попробую дозвониться до их старшего мастера прямо сейчас или добегу до конца смены. Бумаги бумагами, а посмотреть на эти залежи глазами и договориться по-человечески лучше заранее.
Наташа кивнула, поправляя воротник свитера.
— Только без самодеятельности. И если потом впишешь в официальный акт хлам с выдранными дорожками — я заставлю тебя тащить его обратно на собственном горбу, — строго предупредила она, но в глазах мелькнула теплая улыбка. — И раз уж побежишь на Горького, зайди на обратном пути в овощной. Купи свёклы и хлеба, а то я с этой гальванической развязкой до ночи просижу.
Олег усмехнулся и вытащил из ящика стола чистую общую тетрадь. Графитовым карандашом он вывел на картонной обложке то, с чего теперь начиналась настоящая работа: «УПИМЦТ. Журнал дефектов».