Стрекот шагового двигателя ИЗОТа разорвал привычный монотонный гул лаборатории. Звук был тяжелым, лязгающим, словно внутри массивного металлического корпуса перемалывали мелкий гравий.
Евгений Громов сидел перед клавиатурой, ссутулившись так, что острые лопатки натянули выцветшую шерсть свитера. Пальцы программиста летали по клавишам с методичной яростью.
Позади него, прислонившись бедрами к краю монтажного стола, стояли Олег Тимофеев и Наташа Рогова. Олег сосредоточенно жевал ириску. Он протянул пригоршню в сторону Громова.
— Жень, угощайся. Свежие. Мозгу нужна глюкоза.
Громов даже не обернулся, не отрывая взгляда от экрана, где мерцал курсор.
— Убери свои ириски, Тимофеев, — бросил программист, не прекращая отбивать ритм по клавишам. — Я поймал ритм. Сахар вызовет скачок инсулина, расслабит сосуды и собьет мне всю концентрацию. А у меня тут, между прочим, исторический момент.
Олег пожал плечами, отправил очередную ириску в рот и выразительно переглянулся с Наташей. Та лишь усмехнулась, скрестив руки на груди.
Алексей Морозов наблюдал за этой сценой от окна. Осеннее солнце пробивалось сквозь пыльные стекла, высвечивая в воздухе взвесь канифоли и табачного дыма. Он оттолкнулся от подоконника и неспешно подошел к столу Громова.
— Ну как? — коротко спросил Алексей, останавливаясь за спиной программиста.
Громов отнял руки от клавиатуры и медленно выдохнул.
— Смотри, архитектор. И трепещи.
Громов уверенно вбил:
`А КАТ`
Дисковод коротко чавкнул, и экран мгновенно заполнился ровными колонками файлов.
Громов ввел новую команду: `А КОП ТЕСТ.ТКС Б:`
— Копирование. Идеальная отработка. Никаких «копи» или «дир». Советский инженер садится за нашу «Сферу-82» и видит понятный язык. Но это только фасад, Леша. Самое сладкое — под капотом.
Программист полез в ящик стола и вытащил пухлую стопку листов АЦПУ, покрытых плотными столбцами распечатанного ассемблерного кода.
— Я сохранил оригинальную таблицу переходов CP/M по адресу 0005, — Громов довольно постучал пальцем по распечатке. — Мы русифицировали интерфейс для пользователя, но для большинства западных программ, которые ходят через системные вызовы и не лезут напрямую в железо, система выглядит привычно. Компиляторы Фортрана, Паскаля, базы данных — они будут обращаться к знакомым адресам в памяти и получать правильные ответы от нашего железа. Мы перевели язык, не сломав физику.
Морозов кивнул. Это был именно тот компромисс, который они выбили на расширенном техсовете. Система, способная говорить по-русски для партийных отчетов и комиссий, но сохраняющая идеальную совместимость с мировым архивом софта.
Алексей смотрел на тяжелую, квадратную восьмидюймовую дискету, торчащую из зева накопителя. Этот кусок черного, гнущегося пластика служил настоящим порталом во внешний мир. Громов совершил невозможное: он взял буржуазный стандарт, за который бдительные кураторы из первого отдела могли легко сломать карьеру, и виртуозно завернул его в непробиваемую броню советского ГОСТа. Внешне — идеологически выверенная система с русскими командами, понятная любому парторгу или проверяющему из министерства. Внутри — троянский конь технологической интеграции.
Морозов живо вспомнил подвал московского вычислительного центра, низкий гул мощных кондиционеров и то предельное напряжение, с которым они копировали бинарники ядра CP/M. Тогда, на Курском вокзале, когда Громов прижимал к себе портфель с распечатками АЦПУ, это казалось отчаянной авантюрой. Теперь же этот риск воплотился в абсолютно стабильный код, пульсирующий в кремниевых жилах отечественного процессора.
Петров из соседнего КБ «Луч» удавился бы от желчи, узнай он всю правду о происхождении архитектуры. Консервативные «аналоговики», еще недавно презиравшие цифру, уже начали смутно осознавать масштаб происходящего переворота. Они десятилетиями бились за изоляцию, за уникальность схемотехники, которая неизбежно вела в эволюционный тупик. А Морозов и Громов вскрыли этот тупик фомкой изящного алгоритма, открыв советским инженерам доступ к тысячам мировых программ, которые теперь можно было легально запускать на машинах с красной звездой на шильдике.
— А режим совместимости со старым железом? — спросил Алексей, опираясь руками о столешницу и вглядываясь в строчки кода.
— Полная поддержка на уровне базовых вызовов, — самодовольно отозвался Громов. — И старый код будет летать в десять раз быстрее за счет возросшей тактовой частоты.
Люба Ветрова подошла к столу с противоположной стороны. Она поправила очки на переносице, внимательно изучая экран. В ее движениях не было суеты. Люба посмотрела на Громова поверх роговой оправы.
— Идеально, Женя, — тихо произнесла она. — Я смотрела форму сигнала на шине данных. Ты ни разу не заставил процессор ждать дисковод дольше положенного. Программный цикл ожидания синхронизирован с оборотами шпинделя с точностью до такта.
Громов, обычно не упускавший случая выдать язвительную реплику, машинально поправил воротник свитера под ее прямым взглядом.
— Стараемся, Любовь Анатольевна, — пробормотал он с непривычной мягкостью. — Строим коммунизм в отдельно взятом адресном пространстве.
Люба не ответила, но уголки ее губ дрогнули в едва заметной, теплой улыбке. Она аккуратно поправила стопку распечаток на краю стола и вернулась к своему макету.
Морозов перевел взгляд с девушки на программиста. Сейчас перед Алексеем сидел настоящий системный хакер, хоть тот и не знал пока таких терминов. Человек, который голыми руками, вооружившись лишь карандашом и дизассемблером, выпотрошил ядро лучшей западной операционной системы, перекроил ее логику под собранный на коленке прототип и заставил работать на советском заводе.
Эта трансформация вызывала у Алексея глубокое удовлетворение. Он создавал школу. Выращивал инженеров, способных мыслить вне рамок ГОСТов.
Громов откинулся на спинку стула и похлопал ладонью по распечаткам.
— Знаешь, Леша, я тут думал над этим переносом. Ковырял прерывания вслепую, прикидывая в уме, как сработает стек, если железо ответит не так, как я жду. — Евгений перевел взгляд на сейф в углу лаборатории. Туда, где лежали папки с кодом участников олимпиады. — Я теперь понимаю тех пацанов из глубинки. Написать ядро системы, не имея под рукой отладчика, оперируя только абстрактной логикой в собственной голове… Это ведь чистая математика. Мы тут занимаемся тем же самым, просто у нас есть этот болгарский ящик, чтобы проверить свои догадки.
— Логика универсальна, Женя, — ровно ответил Морозов. — Если алгоритм безупречен, ему плевать, на чем исполняться: на американском кремнии, на советском текстолите или на тетрадном листе в клеточку.
Громов хмыкнул, возвращая руки на клавиатуру.
— Это да. Но иногда хочется, чтобы алгоритм не только считал вектора прерываний, но и приносил какое-то удовольствие. Базы данных — это скучно. Хочется проверить графику. Олежа там свой видеоконтроллер вылизал до блеска, а мы выводим на него только текст.
Морозов перевел взгляд на Олега. Тимофеев, методично пережевывая свою ириску, выглядел нарочито расслабленным, но Алексей прекрасно знал, чего стоила команде эта мнимая легкость. Видеоконтроллер, который сейчас выдавал идеальный текст на экран, был плодом изматывающей аппаратной дуэли. Дуэли с законами физики, с вечной нехваткой нужных номиналов и с безжалостными таймингами системной шины.
Ближе к обеду лаборатория опустела — команда ушла в институтскую столовую. Морозов остался. Он сел на край стола Громова, взял чистый лист миллиметровки и карандаш.
Программист сидел рядом, доедая бутерброд с докторской колбасой и запивая его холодным чаем.
— Графику хочешь проверить? — спросил Морозов, не поднимая глаз от бумаги. — И логику заодно. Напиши игру.
Громов поперхнулся чаем. Он промокнул губы рукавом и уставился на Алексея.
— Игру? Какую?
— Хорошую. Обманчиво простую. Полностью визуальную. С математическим движком.
Алексей быстро начертил на миллиметровке квадрат. Разделил его сеткой на шестнадцать одинаковых ячеек. Четыре на четыре.
— Смотри внимательно. Игровое поле. Никаких лабиринтов, никаких гонок. Только цифры. В начале игры в двух случайных ячейках появляются двойки.
Морозов вписал цифру «2» в две клетки.
— Игрок может сделать четыре движения: вверх, вниз, влево, вправо. По любой команде все плитки сдвигаются в выбранную сторону до упора. Если две плитки с одинаковым номиналом сталкиваются — они слипаются в одну, а их номинал суммируется.
Алексей нарисовал стрелку вправо и перерисовал сетку, где две двойки слились в одну четверку у правого края.
— Две двойки дают четверку. Две четверки — восьмерку. Две восьмерки — шестнадцать. И так далее по степеням двойки. После каждого хода на пустом месте появляется новая двойка или, с меньшей вероятностью, четверка.
Громов отложил бутерброд и нахмурился. Он смотрел на квадраты с явным недоверием.
— Подожди. А в чем сюжет? Кого мы стреляем? Кого спасаем? Где логика победы?
— Сюжет в математике, — Морозов сухо усмехнулся. — Твоя цель — собрать плитку с номиналом 2048. Проблема в том, что поле постоянно заполняется новым мусором. Тебе нужно выстраивать геометрические каскады. Строить цепочки так, чтобы одним ходом схлопнуть сразу несколько плиток подряд, освобождая пространство. Если поле заполнится и ходов больше не останется — конец игры.
Евгений потер переносицу.
— То есть это просто сдвиг массивов в памяти с проверкой условий слияния? Генератор псевдослучайных чисел для появления новых элементов. Перерисовка экрана. И всё?
— И всё.
— Звучит как бухгалтерская задача для табулятора, Леша, — фыркнул программист. — Кому интересно двигать цифры?
— Напиши, Жень. Не пожалеешь. Выведи поле псевдографикой. Плюсики, минусики, вертикальные черты. Сделай управление стрелками. И посмотрим, насколько это скучно.
Морозов оставил миллиметровку на столе и направился к выходу, бросив через плечо:
— Только арбитраж шины не сломай, когда будешь перерисовывать матрицу.
Вечер навалился на окна лаборатории густой синевой. Институт давно опустел, стихли шаги в коридорах, отключилась часть вентиляции в коридорах, и тишина стала плотной, звонкой.
Алексей сидел за своим столом, разбирая очередную партию писем, когда услышал странный звук. Это был не ровный стук кодера, а ритмичный, почти гипнотический перестук. Четыре клавиши. Вверх. Вниз. Влево. Вправо. Удар по пробелу. И снова.
Он поднялся и бесшумно подошел к столу Громова.
Евгений сидел близко к монитору. Зрачки лихорадочно бегали по экрану. В пепельнице дымилась забытая сигарета, пепел с которой уже осыпался на стол.
На экране красовалась идеальная таблица. Внутри ячеек мелькали цифры. 16. 32. 128.
Громов жал на стрелки с остервенением маньяка. Поле заполнялось, он бормотал проклятия, выстраивал сложную комбинацию в левом нижнем углу, одним махом схлопывал ряд из 64, 64, 128 и 256, получая заветную 512, и шумно выдыхал.
— Проклятие, — прошипел программист, когда в неудачном месте выскочила двойка, заблокировав ему движение крупной плитки. — Что за генератор случайных чисел? Давай, сдвигайся.
Алексей стоял за его спиной несколько минут. Механика работала безупречно. Логика, рожденная в двадцать первом веке, безжалостно захватывала разум инженера восьмидесятых. Это был чистый дофаминовый крючок, лишенный сложной графики, построенный исключительно на жажде порядка.
Но Морозов, как системный архитектор, смотрел не только на цифры. Он смотрел на то, как ведет себя железо.
При каждом быстром сдвиге всего поля, когда Громов зажимал клавишу и экран обновлялся целиком, по зеленому фону пробегала едва заметная, рваная рябь. Микросекундный срыв синхронизации. Процессор не справлялся с одновременным обсчетом логики слияния массивов и прямой переброской байтов в видеопамять. Ему не хватало тактов.
Морозов бросил мимолетный взгляд на настенный календарь. Конец сентября. Время поджимало. Игры — это прекрасно, но когда они начнут грузить на машину тяжелые математические модели Госплана, эта рябь превратится в зависание. Им неизбежно придется внедрять аппаратный контроллер прямого доступа к памяти. Полностью переделывать арбитраж системной шины, отбирая у процессора монополию на управление. И это будет война, похлеще написания операционки.
На экране моргнула надпись: «ИГРА ОКОНЧЕНА. ХОДОВ НЕТ».
Громов с силой ударил ладонью по столу.
— Зараза! Я почти собрал 1024 в правом углу! Эта четверка вылезла вообще не по теории вероятности!
Он потянулся к кнопке сброса, чтобы запустить код заново, но его рука замерла. Он осознал, что в лаборатории не один. Евгений медленно повернулся в кресле. Глаза у него сильно воспалились и покраснели.
— Леша, — выдохнул Громов сиплым голосом. Он посмотрел на часы. Было начало десятого вечера. — Я сижу здесь с самого обеда безвылазно. Я не ходил курить. Я не поужинал. Я, как проклятый, двигаю цифры в квадратиках.
Морозов оставался невозмутим.
— Ошибки есть? — деловито поинтересовался он.
— Ошибок нет. Массивы отрабатывают идеально. Но это… — Громов ткнул пальцем в экран монитора. — Это цифровой наркотик. Морозов, тебя бы с твоими идеями прямо в логово врага забрасывать, к американцам. Подсунул бы им дискету с этой штукой в вычислительный центр Пентагона — и всё. Они бы сидели и двойки складывали, пока у них ракеты ржавеют.
Алексей хмыкнул.
— Оставь исходники на дискете. Нам пригодится этот код для нагрузочного тестирования при демонстрации. Хотя, кто знает, может, и врагам при случае диск этот подкинем. Завтра вернемся к рабочим задачам. Иди домой, Жень.
Утро следующего дня разорвал пронзительный звонок внутреннего телефона. Аппарат, висящий на стене лаборатории КБ-3, надрывался так, словно на линии произошла авария.
Олег, стоявший ближе всех, снял трубку. Послушал секунду и молча протянул ее Морозову.
— Алексей Николаевич, вас. Из приемной Седых.
Морозов взял трубку, бросив взгляд на часы. Начало десятого.
— Алексей Николаевич, товарищ Седых просит вас зайти, — деловито прозвенел в динамике голос секретарши. — Как можно скорее.
Алексей накинул пиджак и вышел из лаборатории. Коридоры НИИ жили своей обычной утренней жизнью, но интуиция подсказывала Морозову, что вызов к руководству сулит новые вводные. Сделки с системой никогда не заканчивались простым выделением фондов. У системы всегда находился мелкий шрифт.
В приемной секретарша молча кивнула ему на массивную дверь кабинета.
Седых сидел за своим широким столом, выглядя одновременно уставшим и необъяснимо воодушевленным. Пепельница перед ним уже была полна окурков. Рядом лежала пухлая красная папка с золотым тиснением.
— Ну, Морозов, доигрались, — начал Седых, стряхивая пепел. — Твоя олимпиада прогремела так, что эхо докатилось до самых верхов. Из обкома звонили. Партия берет официальное шефство над финалом и призовым фондом.
— Это же отличная новость, — осторожно заметил Алексей, садясь за стол. — Логистика через ДОСААФ получит железное прикрытие.
— Прикрытие она получит, — Седых тяжело вздохнул и похлопал ладонью по красной папке. — Но есть партийная директива. Раз уж машины для пяти победителей собираются под эгидой комсомола и партии, они не должны выглядеть как кустарные поделки из радиокружка. Это должен быть выставочный образец. Лицо передовой советской науки!
С этими словами Седых открыл папку, достал оттуда нечто, завернутое в папиросную бумагу, и с глухим металлическим стуком положил на стол перед Морозовым.
Алексей развернул бумагу.
На зеленом сукне лежал массивный, отливающий горячей эмалью металлический шильдик размером с хорошую пепельницу. На тяжелой латунной основе красовалась рельефная красная звезда, обрамленная золотыми колосьями, и вязью была выведена надпись: «Сфера-80М — Призеру Всесоюзного Марафона ЦК ВЛКСМ».
Морозов взял эмблему в руки. Вещь была увесистой. Настоящая, кондовая металлургия.
— Вот это великолепие, — припечатал Седых, — нужно смонтировать на лицевую панель каждого из пяти призовых корпусов. Намертво.
Алексей смотрел на кусок металла, и его прагматичный ум тут же начал высчитывать последствия. Крепить тяжелую латунь к тонкому пластику или текстолиту корпуса, прямо над чувствительными электронными компонентами… Один неверный винт, одно случайное касание этой бронированной бляхой токоведущих дорожек — и машина стоимостью в месяцы бессонного труда сгорит синим пламенем.
— Петров из «Луча» уже смету видел на изготовление этих значков, ядом исходит, — добавил Седых с легким злорадством. — Стоимость одной такой эмалированной нашлепки превышает стоимость десятка ваших любимых К580. Но это приказ сверху. Партия сказала «надо».
Морозов молча смотрел на эмблему. Вот она, цена легализации. Идеологический налог. Ему придется пустить их в систему, дать им иллюзию контроля и нацепить их символы на свое детище, чтобы взамен получить ресурсы для создания тысяч таких машин.
— Сделаем, — голос Алексея был твердым. — Присылайте их в лабораторию.
Он вышел из кабинета Седых и направился обратно в КБ-3. В руке он сжимал тяжелый металлический герб.
Когда Морозов распахнул дверь своей лаборатории, гул вентиляторов показался ему уютным и родным. Команда посмотрела на него в ожидании новостей.
Алексей прошел к столу Липатова и с громким стуком положил эмалированную эмблему прямо на расстеленные чертежи. Конструктор поперхнулся и судорожно поправил съехавшие на нос очки.
— Что там, Леша? — напряженно спросил Громов.
— Идеологическое аппаратное обновление, — мрачно усмехнулся Морозов. — Сережа, зови Любу. Нам нужно придумать, как прикрутить кусок тяжелой металлургии к нашей машине так, чтобы не закоротить плату и не проломить корпус. Партия берет нас под контроль.