(Начало - здесь.)

3.

Кофе оказался растворимым. Кружка — ещё мокрая, с лёгким сколом на ручке. Он этого почти не заметил.

Нора поправила шнурок за ухом и развернула второй красный узел.

Он был хуже входного. Кто-то увлёкся красотой кода на стенде и забыл, что памяти после импульса нужно время, чтобы прийти в себя. Два участка, которые на бумаге казались независимыми, в железе дрались за один проход.

— Здесь мы были в среду утром, — сказала Нора. — Пробовали развести по времени. Получили четыре такта и сломали выходной буфер.

Она вывела на экран закомментированный блок. Его глаза зацепились за структуру — знакомую и неправильную одновременно. Они разводили по времени. Он бы развёл по месту.

— Покажи карту памяти, — сказал он.

Нора переключила экран. Карта выглядела как перенаселённая коммуналка — всё сидело друг у друга на голове.

— Вот эти два, — он ткнул пальцем. — Они не зависят по данным. Они зависят по адресу. Разнеси их в разные банки.

— Банков не хватит, — сказал Мел из-за соседнего стола. — Третий банк занят под буферизацию выхода.

— Освободи его. Выход буферизуй через локальную память седьмого.

Мел замолчал. Потом кивнул.

— Через локальную. Да. Это пройдёт.

Нора уже перекидывала адреса. Цифры на боковом экране менялись — она к клавиатуре не прикасалась. Он смотрел на это две секунды дольше, чем нужно, потом отвёл глаза и полез в код.

Они работали вместе. Он правил логику, Нора считала стоимость, Мел знал, какие куски железа ещё дышат.

В какой-то момент Нора остановила его.

— Не трогай загрузку. Я уже переложила её на седьмое ядро.

Он посмотрел. Она была права — но сделала это в лоб, через два лишних обращения к шине.

— Так дороже на три такта.

— Зато не ломает выходной буфер, — сказала Нора. — Мы это проходили в среду.

Мел поднял голову от кабелей.

— Среда была до его правки. Буфер теперь свободен.

Нора помолчала. Проверила. Убрала свои два обращения.

— Да, — сказала она. — Чисто.

Минус три такта.

Когда он в следующий раз поднял голову, верхний свет уже убрали. Кто-то успел погасить панели, и пространство сузилось до экранов, столов и лиц, выхваченных из темноты голубым. Часы на запястье не горели. Он не помнил, когда они погасли.

Он покосился. Человек в куртке жевал beef jerky, отрывая полоски зубами. Нора не комментировала.

Мел сидел у стойки, привалившись спиной к кабелям, с закрытыми глазами. Не спал — пальцы изредка шевелились, будто перебирали строки в голове.

Нора работала рядом. В синем свете экрана шнурок за её ухом светился тонкой молочной линией.

Он вернулся в код. Вынес проверку туда, где она выглядела нелепо ранней. Убрал чей-то красивый комментарий — leave state clean for reuse — и превратил аккуратный handshake в слепой захват без обратной связи. Код стал грубее. Суше. Правильнее.

Последний узел оказался проще. Или он уже перестал замечать сопротивление. Пальцы пошли сами, и в какой-то момент он поймал себя на том, что больше не читает строки — слышит их. Ритм кода стал частотой, давлением, чем-то, что шло не через глаза. Он не остановился. Не испугался. Просто продолжил работать.

Нора рядом работала молча. Её пальцы иногда замирали, а экран продолжал двигаться. Он больше не пытался это объяснить.

Рядом с клавиатурой появилась вторая кружка. Он не видел, кто её поставил.

Мел открыл глаза.

— Запускай полную цепь, — сказала Нора.

На большом экране выстроилось всё: импульс, окно, три исправленных узла, выход. Он впервые видел картинку целиком и чистой. Зелёная линия прошла ровно. Без провалов, без дрожи, без сюрпризов. Идеально гладкая лабораторная кривая.

Мел выдохнул сквозь зубы и потянулся к стенду — отщёлкивать фиксаторы на тестовой плате.

Что-то было не так.

Не в цифрах — в ощущении. За эти часы тело привыкло к тому, как это железо дышит: рвано, грязно, с люфтами и перекосами. А линия на экране шла так, будто железа нет.

Нора тоже не двигалась. Она смотрела на линию.

Его ладонь легла на текстолит.

Плата была холодной.

— Модель, — сказал он.
— Модель, — сказала Нора одновременно.

Мел медленно убрал руку от фиксаторов.

— Ровный температурный дрейф. Аккуратная просадка, — сказал он. — Это не то, что будет после импульса. Там будет рваная грязь. Шум на шине, просадка по питанию, и окно начнёт плавать.

Человек у стены на секунду перестал жевать.

— Грязный профиль берегли, — сказала Нора. — Шесть прогонов, может семь. Дальше начнём терять плату.

Она посмотрела на человека у стены. Тот коротко кивнул.

Нора перенастроила среду. Тронула клавишу.

Под столом взвыл нестройный хор — и вразнобой полез вверх. Между контактами затрещали искры. Нора вжала голову в плечи.

Резко ударило — смачно, басовито, с хлёстким верхом, от которого заныли зубы. Все трое у стола дернулись.

Человек у стены оценивающе приподнял брови, продолжая жевать.

На экране первый участок — жёлтый. Второй — красный. На третьем система захлебнулась. График рухнул.

Мел медленно отступил от стола.

— Окно плавает, — сказал он. — Автоматика не попадает в такт.

Тишина. Вентиляторы. Собственное дыхание, слишком громкое.

4.

Он обогнул стол.

Нора сидела неподвижно. Она смотрела на мёртвый график так, как смотрят на знакомого, который только что сказал что-то непоправимое.

Мел стоял у стойки, упершись ладонями в край.

— Сколько прогонов осталось? — спросил он.
— Пять, — сказала Нора. — Может, шесть. Дальше рискуем платой.

Рядом, на соседнем экране, всё ещё висела цепочка — та самая, которую Нора показала ему днём. Импульс, окно, узлы, выход. Красивая, прямая, мёртвая. Она была рассчитана на мир, где железо ведёт себя по спекам.

— Эта схема не взлетит, — сказал он.

Мел посмотрел на него.

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

— И что, — сказал Мел.

— Код тут ни при чём. Плавает окно. После импульса всё дрейфует — питание, температура, шина. Окно уезжает в любую сторону.

— Автоматика не успевает, — сказал Мел. — Потому что к тому моменту, когда софт вычисляет поправку, окно уже уехало.

— Надо не ловить окно. Надо его создать.

Нора повернулась. Он продолжил.

— Седьмое ядро. Прерывания привязаны к шине — они не случайные, они отражают реальный дрейф. Перезапустить его после первого блока. Пусть его прерывания будут пульсом. PLL на выходе подхватит.

Нора уже считала. На её экране побежали цифры — быстро, быстрее, чем он мог отследить.

— Шум на шине меняет фактуру под нагрузкой, — сказала она. — Не частоту — форму огибающей. Если брать захват по огибающей и дотягивать фазу PLL, окно будет дышать вместе с платой. Не фиксированное. Живое.

— Какой ширины? — спросил Мел.

Нора считала. Цифры менялись. Она к клавиатуре не прикасалась.

— Зависит от того, насколько точно попасть в момент перезапуска. В идеале — от десяти до двенадцати наносекунд. На старой схеме потолок был девять. Здесь — больше, потому что PLL сидит на реальном ритме, а не на идеальном такте.

Мел тихо присвистнул.

— Когда перезапустить, — сказала Нора. И остановилась. — Если слишком рано — ядро не увидит реальную нагрузку. Если слишком поздно — окно уже уехало. Зазор — может быть, сотня миллисекунд. Может, полторы. Шина за это время уедет не раз. А софт не успеет даже начать считать.

— Не софтом, — сказал он.

Они оба посмотрели на него.

— Руками.

Нора не сразу ответила.

— Двести миллисекунд, — сказала она. Время реакции человека.

— Сто пятьдесят, если знаешь, чего ждёшь, — сказал он. Медленно, потому что ему самому нужно было это услышать. — Мне не надо вычислять. Мне надо услышать, когда плата задышала. Грубый фронт. PLL подтянет.

— Ты хочешь перезапускать ядро вручную. На слух.

— Да.

— На стенде.

— И в поле.

Тишина.

— Нормальную петлю уже не успеем, — сказал Мел. Потёр лицо. — Тебе не надо попасть в наносекунды. Тебе надо попасть в сотню миллисекунд. А PLL доведёт.

— Да. Выведи огибающую шины на динамик, — сказал он. — Без сглаживания. Готовность матрицы — на сервисный диод. Перезапуск седьмого — на аппаратный пин. Без софта.

Нора собирала обвязку. На втором экране оставила старую цепь — пусть молотит параллельно.

Мел тянул провода от платы к динамику — толстые, экранированные, в потрескавшейся серой изоляции.

Он сидел на стуле и смотрел на свои руки. Пальцы не дрожали.

Нора протянула ему два зачищенных конца провода.

— Замкнёшь — перезапуск.

Он взял провода. Медный срез холодил подушечки пальцев.

— Пускай.

Он уже знал, как это звучит. Вой поднялся. Он стиснул провода. Ударило — и всё равно дёрнулся. Медный срез впился в подушечки пальцев.

Динамик затрещал — плотный, рваный шум, хаос после импульса. Он смотрел на диод и слушал.

Шум был живой. Не белый, не ровный — у него была фактура: толчки, провалы, заикания. Он искал ритм, которого ещё не было. Искал момент, когда железо начнёт дышать, а не захлёбываться.

Диод мигнул. Матрица поднялась.

Он замкнул провода.

На экране — красный.

— Рано, — сказала Нора.

Он услышал это за мгновение до того, как она сказала.

— Сброс. Ещё раз.

Вой. Удар. Пальцы обожгло.

Шум пошёл иначе — или он уже привыкал, начинал различать. Те же толчки, те же провалы, но теперь между ними проступал рисунок.

Пенка.

Не мысль — вспышка. Поверхность, которая дрожит за мгновение до того, как сорваться. Он всю жизнь снимал турку не когда пена поднималась, а когда вода начинала дрожать.

Он ждал паузу. А надо было бить в дрожь.

Шум дрогнул — коротко, удушливо, как будто тактовый генератор поперхнулся.

Он замкнул провода.

Тишина.

Зелёный.

— Одиннадцать и три, — сказала Нора.

На втором экране — красный. Автоматика не попала.

Мел посмотрел на неё.

— Это окно?

— Окно. PLL поймал фронт и открыл окно на одиннадцать и три.

Одиннадцать наносекунд. В чертеже их не было.

Он выдохнул. Разжал пальцы. Медь оставила вмятины на подушечках.

— Ещё раз, — сказал он. — Не празднуем. Ещё раз.

Нора сбросила. Вой. Удар. Стенд зашумел тяжелее — плата грелась, дрейф усиливался.

Динамик. Шум. Он перестал смотреть на диод — ему нужно было раньше. Только слух.

Дрожь.

Он замкнул.

Зелёный. Десять и шесть.

— Ещё.

Четвёртый. Вой. Удар отдался в запястья. Шум стал гуще, труднее. Он искал дрожь и не находил — толчки шли ровнее, и момент расплывался. Замкнул чуть позже, чем хотел.

Красный.

На плате сухо щёлкнул конденсатор. Потянуло горелым — лак и стеклоткань.

Нора быстро глянула на телеметрию.

— Ёмкость на входе питания. Вылетела.

Нора сняла питание. Человек у стены уже шёл к столу. Без спешки, без вопросов. Открыл ящик, порылся, достал конденсатор, паяльник и пинцет. Сел на корточки у платы. Пока Нора диктовала позицию, он уже нашёл место, выпаял сгоревший, впаял новый. Прижал жало к выводу и площадке, подождал, пока олово затечёт как следует. Убрал. Тронул пайку пинцетом — проверил, что не шевелится.

Встал. Вернулся к стене. Вытер пальцы о куртку.

— Пятый, — сказала Нора. Посмотрела на телеметрию. — Стенд ещё держит.

Вой. Между контактами банки треснуло — коротко, сухо. Запахло горячей изоляцией. Удар.

Замкнул.

Зелёный. Десять и девять.

На втором экране тоже зелёный. Впервые.

От платы тянуло сладковатым — не дым, хуже. Текстолит подгорал. У дальнего края лак потемнел и вспучился, дорожка начала отходить.

Шестой.

Вой оборвался раньше, чем должен, — что-то в банке не набрало заряд. Удар вышел короче и тише. Между дорожками обвязки сверкнуло.

Динамик хрипел. Шум стал тише и гуще, как будто железу не хватало воздуха. Диод горел тускло и неровно.

Дрожь.

Он замкнул.

Зелёный. Десять и восемь.

Нора подняла руку. Стенд зашипел и замолчал. Экран погас. Вентиляторы остановились один за другим, и стало очень тихо.

Он положил провода на стол. Пальцы дрожали. Глаза щипало от едкого дыма.

— Четыре из шести, — сказала Нора. — Окно — от десяти и шести до одиннадцати и трёх. Среднее — десять и девять.

Она помолчала.

— Автоматика на тех же прогонах — два из шести.

Нора медленно вынула шнурок из-за уха и положила коннектор перед собой — аккуратно, как вещь, которая больше не нужна. Потом повернулась к нему. Впервые за всю ночь посмотрела не на его руки, а в лицо.

Мел сидел на краю стола и смотрел в пол.

Человек у стены больше не жевал. Смотрел не на экран — в стену. Губы беззвучно шевелились, будто что-то считал. Не такты.

— Это воспроизводимо? — спросил он.

— Четыре из шести на стенде. В поле — нужен аналоговый пусковик на борту. Руками. Без софта.

— Вашими руками.

Он посмотрел на свои пальцы. Они всё ещё дрожали.

— Да, — сказал он. — Моими.

Человек у стены достал телефон, набрал номер. Назвал две цифры. Слушал долго. Убрал телефон, не сказав больше ни слова.

— Правку окна — по звену. Куда успеете, — сказал человек у стены.
— Во все не ляжет, — сказала Нора.
— Значит, в те, что поднимутся с нами.

Нора кивнула. Мел уже шёл к стойке.

Снаружи светало.

Он вышел в коридор. За боковой дверью был бетон, утро и чужая парковка. Его машина стояла там, где он её оставил. Восемнадцать часов назад.

Телефон в кармане куртки. Moleskine остался там, на столе, рядом с клавиатурой. Он достал телефон. На экране — кактус, переживший три переезда. Под кактусом — четырнадцать уведомлений. Он не стал разблокировать. Подержал в руке, как держат вещь, которую собираются положить обратно.

5.

Когда он вернулся, обвязку уже перебирали. Банки на стенде заменили, кабели перетянули. Плата — та же, со свежей пайкой на входе питания и отходящей дорожкой на дальнем краю.

Нора порылась в ящике, нашла микрик, припаяла провода, воткнула между кнопкой и пином крошечный формирователь и замотала всё чёрной изолентой. Получилась грубая кнопка — мёртвый ход и короткий щелчок.

Он повертел её в руках. Щёлкнул. Ещё раз. Пальцы запомнили.

Сунул в карман куртки.

Дальше всё двигалось быстро и не через него. Его пересаживали с места на место, один раз принесли еду, дважды просили показать пуск на стенде, но уже не объясняли, куда именно всё идёт и кто дал команду.

К вечеру во рту стоял металлический привкус кофе и недосыпа, и если он слишком быстро поворачивал голову, взгляд собирался не сразу.

Мел упаковал модуль в армированный кейс. Человек в куртке куда-то позвонил — коротко, без имён. Нора отключила шнурок от терминала и смотала его в ладони привычным, домашним жестом, как сматывают наушники.

Его вывели через боковой док. Снаружи была ночь. Воздух был холодный и мокрый и после целого дня в сухом электрическом свете ударил по лицу, как вода.

В фургоне без окон он сел напротив Мела. Кейс лежал у Мела на коленях. Ехали молча. Фургон пах соляркой и сырым металлом. Вибрация пола отдавалась в коленях.

Мел смотрел в рифлёный пол.

— Мел, — сказал он.

Мел поднял глаза.

— На схеме не было обратного маршрута.

Мел ответил не сразу.

— У остальных бортов будет автоматика. Старая схема. Без перезапуска седьмого ядра.

— Один из трёх.

— Один из трёх, — повторил Мел.

Где-то за стенкой фургона прошла встречная — короткий тяжёлый гул, и снова тихо.

Фургон остановился. Двери открылись в ветер и натриевый свет. Бетонная полоса, запах авиационного керосина — резкий, сладковатый, ни на что не похожий.

Ноги несли его по плитам, мимо техников в сером, по ребристой аппарели внутрь — и всё это было уже не вполне с ним, а чуть в стороне, как бывает, когда слишком долго не спал и тело продолжает двигаться по инерции.

Внутри было тесно. Голый металл, кабели, запах смазки и перегретой электроники. Кейс зафиксировали в носовой стойке. За пульт села женщина с коротким ёжиком и впалыми щеками. На затылке, у основания черепа, торчал стационарный разъём — несъёмный, вросший в кожу, с потёртым кольцом вокруг. Она вогнала штекер, тело коротко дёрнулось, лицо расслабилось, и она перестала моргать.

Ему указали на место у борта. Ремни легли на грудь. Из подголовника — плотные чашки наушников, прижавшие виски.

Он достал из кармана кнопку. Вытащил заглушку из сервисного порта на кейсе. Коннектор, который Нора обжала на конце провода, вошёл в разъём со щелчком. Из второго порта вытянул штатный штекер и воткнул в гнездо ложемента — огибающая шины, сырая, без сглаживания, пошла прямо в левое ухо. Чёрная изолента на кнопке выглядела дико на фоне матового военного металла вокруг.

Впереди, в командирском ложементе, сидел человек в куртке. Затылок ровный, плечи неподвижны.

Люк втянулся в пазы. Свет переключился на красный. По корпусу пошла вибрация, перешла в тонкий вой.

Ускорение вдавило его в кресло, выбило воздух из лёгких. Рука с кнопкой стала тяжёлой и чужой. Он ждал. Не команды. Не сигнала. Короткой, удушливой дрожи в левом наушнике.

В правом ожил голос — сухой, ровный, диктующий координаты с той пустотой, с какой читают прогноз погоды. Слух зацепило название — Киренск, — но мысль не удержалась.

Человек в командирском ложементе нажал клавишу интеркома. Эфир бормотал позывные, цифры маршрутных точек.

— Полковник Корто. Борт принял.

Голос в эфире повторил что-то, уже другому борту.

Он сжал кнопку крепче. Мёртвый ход пружины. Короткое сопротивление перед щелчком.

Четыре из шести.

Он закрыл глаза и стал слушать.