Лаборатория КБ-3 пропиталась запахами, совершенно не свойственными конструкторскому бюро. Привычный технический дух отступил под натиском плотного запаха старой бумаги, сургуча, силикатного клея и грубой мешковины. Май выдался по-настоящему жарким, но форточки открывать запрещалось: малейший сквозняк грозил устроить в помещении бумажную бурю.
Почтовое отделение ДОСААФ сдалось на пятый день после выхода майского номера журнала «Радио». Центральный абонентский ящик оказался физически не способен вместить лавину корреспонденции, и почту снова начали доставлять в институт в брезентовых мешках. Аналоговики из КБ-2 едва успевали делать черновую сортировку, отсеивая пустые вопросы и просьбы, а коробки с решениями олимпиадных задач громоздились вдоль стен лаборатории КБ-3, напоминая баррикады, за которыми Морозов и Громов держали круговую оборону.
Алексей сидел за сдвинутыми столами, методично просматривая тетрадные листы и миллиметровку, извлеченные из вскрытых конвертов. География этих писем завораживала. Перед Морозовым лежал весь Советский Союз: штемпели Магадана и Риги, Воркуты и Ташкента, маленьких таежных поселков и закрытых наукоградов. От конвертов пахло сургучом, вагонным дымом и почему-то хвоей.
Удивительнее всего было наблюдать за стариками из КБ-2. Сперва они восприняли сортировку как личное оскорбление. Но сегодня утром Алексей, проходя мимо их открытой двери, заметил, как седой ветеран-аналоговик, вооружившись огромной лупой, с восхищением цокает языком, разглядывая присланную школьником блок-схему, и спорит с коллегой: «Ты глянь, Петрович, какая культура чертежа! Ни одной лишней петли, прям как в гетеродинном приемнике! Растет смена-то!». Старая гвардия начала втягиваться в игру.
Рядом на столе высились три стопки: «Отсев», «Интересно» и «Блестяще». Первая была самой высокой, третья пока состояла лишь из нескольких листков.
— Смотри на это, — проворчал программист, сдвигая на лоб очки и потирая уставшую переносицу. — Он пытается отсортировать библиотечные карточки через вычисление факториала. Зачем? Это же простая сортировка, а не расчет орбиты спутника! Я ему сейчас напишу, что он переусложнил логику в ущерб памяти.
— Жень, ты забываешь главное, — Морозов отложил линейку и потянулся, разминая затекшую спину. — Он это придумал без железа. У него нет консоли, чтобы проверить код. У него нет компилятора, который выдаст ошибку синтаксиса на пятнадцатой строке. У него есть только карандаш, ластик и собственная голова.
Алексей запустил руку в очередной мешок, вытащил пухлый конверт с криво наклеенной маркой и аккуратно вскрыл его. Внутри обнаружился сложенный вчетверо лист бумаги в мелкую клетку. Морозов развернул послание.
Это была блок-схема. Нарисованная простой шариковой ручкой, но с такой идеальной геометрией, будто автор использовал офицерскую линейку. Ромбы условий, прямоугольники процессов, стрелки переходов. Ни единой помарки. Никакой математической зауми, только кристально чистая, безупречная логика. Алгоритм управления конвейером ОТК.
По спине Морозова пробежал холодок. Там, в двадцать первом веке, программисты жаловались на медленную работу сред разработки, нехватку оперативной памяти, искали готовые решения на форумах. А здесь, где-то в тысячах километров от Владимира, неизвестный человек сидел за кухонным столом при свете торшера и выстраивал в уме сложнейшую виртуальную машину. Он удерживал в памяти состояния датчиков, прокручивал циклы, отлавливал тупиковые ветви алгоритма силой одного лишь воображения. Это был чистый, первозданный интеллект, запертый в аналоговом мире, который только что получил первый канал связи.
Алексей молча протянул тетрадный лист через стол.
Громов взял бумагу. Снисходительная ухмылка столичного программиста медленно сползла с его лица. Он схватил со стола карандаш и принялся водить грифелем по бумаге, прогоняя мысленные тестовые значения через нарисованные ромбы. Карандаш скользил по стрелкам, уходил в циклы, возвращался к проверке условий.
— С ума сойти, — выдохнул Евгений спустя две минуты абсолютной тишины. — Он не просто предусмотрел аварийную остановку. Он аппаратно-независимо реализовал систему приоритетных прерываний! Без самого понятия прерываний! Робот на его схеме не ждет окончания полного цикла проверки, а мгновенно сбрасывает деталь при критическом несовпадении, зажигая красную лампу и блокируя ленту. Это же экономит… половину машинного времени. Если перевести это в ассемблер, код будет работать как часы.
Громов поднял на Алексея ошарашенный взгляд.
— Кто это написал?
Морозов посмотрел на конверт.
— Ученик девятого «Б» класса, город Новосибирск.
Под мерное гудение люминесцентных ламп оба осознали масштаб происходящего. Они не просто проверяли ответы на школьную задачку. Они активировали колоссальную сеть умов, раскиданную по всей огромной стране. Десятки тысяч умов, лишенных доступа к ЭВМ, откликнулись на призыв и начали решать задачи. Это был распределенный мозговой штурм эпических масштабов. Бумажный код. Безошибочный, выверенный, рожденный в абсолютном вакууме.
— В стопку «Блестяще»? — хрипло спросил Громов, бережно кладя лист на стол.
— На самый верх, — кивнул Морозов. — Этому парню мы отправим комплект деталей первой же бандеролью. Если он такое делает на бумаге, представь, что он напишет, когда мы дадим ему реальный процессор.
Олег Тимофеев навис над верстаком. Он бережно, почти не дыша, вставлял в отдельную, намертво припаянную к плате контроллера панельку микросхему, кварцевое окошко которой было плотно заклеено черной изолентой.
— Эталонная ПЗУ, — пояснил он, перехватывая взгляд Алексея. — Женя Громов ее вчера полночи вылизывал и прошивал вручную на старом программаторе. Мастер-чип. С нее наша Молотилка будет считывать байты и дублировать их на конвейер.
Морозов одобрительно кивнул, но тут же нахмурился, оценив объем бункера с пустыми деталями.
— А как вы планируете не перепутать прошивки? — спросил Алексей. — Код весит четыре килобайта, чипы вмещают по два. Внешне они абсолютно одинаковые. Если в бандероль случайно упадут две одинаковые половины, пацан компьютер не запустит, а мы получим рекламацию.
— Обижаешь, начальник, — Валера достал из кармана засаленного халата стеклянный пузырек с ярко-красной жидкостью и тонкую кисточку. — Цапонлак. Сегодня мы штампуем только первую половину. На коробку «Годно» мы посадили Наташу — она каждую прошедшую верификацию микросхему помечает красной точкой прямо на керамике. Завтра Женя выдаст нам второй эталон, и мы запустим конвейер для второй половины. Будем метить синим лаком. Красная и синяя микросхема — готовый комплект в посылку.
Морозов усмехнулся. Гениальность простых решений.
Тимофеев щелкнул тумблером. Вал пришел в движение.
Щелк. Оглушительный, пулеметный удар шагового искателя эхом отскочил от бетонных стен цеха. Первая микросхема соскользнула из загрузочного желоба на контактную площадку. Эксцентрик плавно опустился, намертво зафиксировав керамическую деталь. На плате контроллера вспыхнул красный светодиод.
В воздухе отчетливо запахло озоном от искрящих реле. Пошел процесс записи кода — двадцать пять вольт жгли кремний, впечатывая в него микробейсик.
Три секунды. Красный диод погас, и на плате тут же вспыхнул зеленый.
— Верификация прошла! Контрольная сумма совпала, — довольно выдохнул Тимофеев.
Вал провернулся. Контактная пластина поднялась, и стальной зубчик изящным пинком отправил прошитую память по правому желобу в картонную коробку, на дно которой предусмотрительно постелили поролон.
Тут же на освободившееся место скользнул следующий чип.
Щелк. Фиксация. Запись.
Но на этот раз после красного диода зеленый не загорелся. Вместо него тревожно замигал желтый, а из динамика на плате раздался противный писк.
Сибирская отбраковка была лотереей. Далеко не каждый чип, забракованный военприемкой по климатике, оставался полностью живым при комнатной температуре. У многих обнаруживалась битая адресация или выжженные ячейки памяти. Контроллер «Молотилки» прочитал залитый код и нашел ошибку.
Шаговый искатель громко треснул. Вал провернулся, и на этот раз электромагнитная заслонка, которую Левша приспособил от списанного турникета, перекинула микросхему в левый желоб. Чип с сухим, звонким стуком упал в железное ведро с надписью «БРАК».
Щелк. Фиксация. Запись. Верификация. Брак.
Щелк. Фиксация. Запись. Верификация. Годно.
Ритмичный, гипнотический звук наполнил мастерскую. В этом пугающем механическом лязге крылась невероятная эстетика. Механика, достойная паровых машин девятнадцатого века, прямо сейчас без устали клонировала и тестировала программное обеспечение для персональных ЭВМ. Жесткая кинематика снимала непредсказуемость человеческого фактора.
Алексей завороженно смотрел на падающие микросхемы. Примерно три из десяти летели в железное ведро — мертвый кремний, не выдержавший верификации. Но остальные семь стабильно пополняли коробку с готовыми призами. Это была честная цена за использование копеечного неликвида. «Молотилка» блестяще оправдывала свое название, деловито пережевывая сибирские отходы и отделяя цифровые зерна от плевел.
Вернувшись в лабораторию, Морозов обнаружил, что мешков с почтой визуально не убавилось, зато Громов вел себя крайне странно.
Программист больше не вскрывал конверты. Он сидел за своим столом, обложившись длинными бумажными лентами перфоратора, исписанными листами и какими-то графиками. В его руках безостановочно мелькала ручка. Евгений писал так быстро, словно боялся потерять мысль.
Алексей подошел ближе и заглянул через плечо коллеги.
Громов писал не код. Он писал обычный русский текст, обильно перемежая его вставками на своем диалекте Tiny BASIC.
«Как мы видим из предыдущего примера, оператор GOTO может быть полезен, но его чрезмерное использование превращает вашу программу в запутанный клубок ниток, — гласил текст. — Чтобы избежать этого, давайте рассмотрим пример создания простой текстовой игры „Посадка на Луну“, используя циклы и подпрограммы…»
— Пишешь мемуары? — негромко спросил Морозов.
Громов вздрогнул, оторвался от бумаги и протер глаза. Он выглядел уставшим, но в его взгляде горел совершенно новый для него огонь.
— Я пишу документацию, Алексей, — серьезно ответил он. — Расширенное руководство. То, что мы отправим в редакцию журнала вместе с ответами.
Он порылся в стопке проверенных писем и вытащил несколько листков.
— Понимаешь, я думал, что написал дуракоупорный, академичный язык для расчетов. Строгий и скучный. А эти дети… — Евгений потряс листками писем в воздухе. — Они присылают блестящие блок-схемы отборочных задач, а на обратной стороне в приписках спрашивают: «Товарищи инженеры, а сможет ли ваша машина отрисовать летящую точку? А можно ли с помощью циклов заставить эту точку уворачиваться от препятствий?». Они на тетрадных листках пытаются изобретать видеоигры!
Морозов не смог сдержать улыбку. Геймдизайнеры восьмидесятого года. Без компьютеров, на одной лишь голой фантазии.
— И ты решил переписать транслятор?
— Я решил дать им прямой, легальный доступ к видеопамяти! — горячо возразил Громов. — Зачем их ограничивать? Им будет скучно просто считать уравнения. Они хотят рисовать псевдографикой, хотят динамики. Мой код — это не просто набор команд, это должна быть творческая среда. И раз уж они готовы выстраивать такую сложную логику ради игр, я должен дать им правильный словарь. Только вот знаешь, в чем главная беда?
Громов нервно покрутил в пальцах ручку.
— У нас в русском языке вообще нет нужных слов! Как мне объяснить школьнику концепцию пикселя? Светящаяся точка люминофора? Как объяснить функцию «PEEK» или «POKE»? Запихнуть байт по адресу? Они путают адрес в оперативной памяти с почтовым адресом на конверте! Мне приходится буквально на ходу изобретать терминологию, переводить эти английские концепции на понятный советскому человеку язык. «Знакоместо», «цикл», «массив», «подпрограмма». Я тут не просто код пишу, Леша. Я букварь составляю.
Евгений снова склонился над листами, вчитываясь в свои правки.
— Я пишу расширенное руководство. Подробно, на пальцах объясняю, как обращаться к экранной области. Как создать простую анимацию из текстовых символов, чтобы получилась летящая ракета. Как считывать нажатия клавиш на лету без остановки программы. Я покажу им инструменты, чтобы они не гадали на кофейной гуще и не изобретали велосипеды на костылях, а проектировали осознанно.
Алексей смотрел на склоненную голову программиста и одобрительно кивал. Трансформация завершилась. Из вечно недовольного сноба, презирающего «недалеких пользователей», Громов превращался в архитектора экосистемы. Он осознал величайшую истину IT-индустрии: технология мертва без сообщества. И прямо сейчас он это сообщество создавал.
Морозов тихо отошел, чтобы не мешать. Процесс пошел. Система начала обучать саму себя.
Вечер окончательно вступил в свои права. За окном КБ-3 сгустились сумерки, прорезаемые желтыми пятнами уличных фонарей. Лаборатория опустела. Громов ушел домой, унеся с собой черновики руководства. Тимофеев и остальные инженеры давно покинули институт.
Остался только Морозов.
Мягкий свет настольной лампы выхватывал из полумрака часть стола, заваленного рассортированной почтой. Днем здесь стоял невыносимый шум, звенели телефоны, спорили люди, шуршала бумага. Теперь слышалось лишь редкое потрескивание остывающих чугунных батарей да глухой гул трансформатора в соседнем помещении.
Алексей откинулся на спинку скрипучего стула. День был безумным, но невероятно продуктивным. «Молотилка» уже наштамповала три сотни рабочих чипов. Громов взялся за создание полноценной учебной базы. Идея с олимпиадой, которая еще недавно казалась чистой авантюрой, превращалась во всесоюзный конвейер по поиску талантов.
Его взгляд упал на край стола. Там, отдельно от всех стопок, лежал один-единственный конверт. Морозов отложил его еще в середине дня, но так и не успел прочитать из-за суеты с «Молотилкой».
Морозов взял конверт. Пальцы скользнули по бумаге, чувствуя необычную плотность вложения. Он достал содержимое.
Внутри лежал не только привычный тетрадный лист в клеточку с блок-схемой. Там были исписанные мелким почерком страницы и аккуратный, выполненный синими чернилами рисунок — забавный кот, составленный из типографских символов.
Алексей развернул письмо и начал читать.
«Здравствуйте, уважаемая редакция и инженеры лаборатории. Высылаю вам решение задачи „Сортировщик“. Я использовал метод пузырька, но добавил флаг проверки, чтобы цикл прерывался раньше, если массив уже отсортирован».
Морозов кивнул. Классическая оптимизация. Умно для школьника. Он перевернул страницу.
«Я очень хочу собрать вашу „Сферу-80“. Но пока я перечерчивал схемы из журнала, у меня возникло несколько вопросов по архитектуре, которые не дают мне покоя».
Алексей подобрался. Школьники не задают вопросов по архитектуре. Они спрашивают, где достать резисторы или как правильно паять.
«Вы используете восьмиразрядную шину данных. Это понятно. Но почему вы жестко привязали адресацию видеопамяти к основному блоку ОЗУ? Если я захочу подключить дополнительный блок памяти, не возникнет ли аппаратного конфликта на шине адреса? Не планируете ли вы внедрить механизм переключения банков памяти через порты вывода? Это позволило бы обойти ограничение в 64 килобайта».
Сердце Морозова екнуло.
Парень из Свердловска, глядя на примитивную принципиальную схему в журнале «Радио», увидел проблему, над которой сейчас бились инженеры по всему миру. Проблему аппаратного потолка восьмибитных систем. Он не просто хотел спаять игрушку. Он смотрел в суть системы.
Письмо продолжалось.
«И еще. В описании сказано, что программы будут загружаться с кассеты. Вы используете частотную модуляцию? Если да, то какова избыточность кода для коррекции ошибок? Ведь бытовые магнитофоны очень нестабильны, пленка тянется, и один пропущенный бит разрушит весь машинный код. Я набросал идею алгоритма контрольной суммы на основе проверки четности, посмотрите, пожалуйста, приложение».
Алексей отложил письмо. В горле пересохло.
Перед ним на столе лежал голос из того самого будущего, ради которого Морозов затеял всю эту игру с советской бюрократией. Дима Кориков. Имя, которое пока ничего не значило для системы, но для Алексея оно стало символом. Символом того, что его архитектура не уйдет в пустоту. Что там, по ту сторону абонентского ящика ДОСААФ, есть люди, способные принять эстафету.
Морозов медленно выдохнул. Чувство усталости растворилось без остатка.
Он придвинул к себе чистый, белоснежный лист плотной бумаги. Щелкнул кнопкой авторучки.
Впервые с момента своего попадания в это время он не чувствовал себя одиноким архитектором, тянущим на себе неподъемный груз прогресса. У него появились собеседники.
Алексей склонился над столом и уверенно вывел на чистом листе:
«Здравствуй, Дима. Твой алгоритм сортировки принят. Детали для сборки будут высланы в ближайшее время. Что касается переключения банков памяти и контрольных сумм — ты абсолютно прав. Давай я расскажу тебе, как мы решаем эту проблему на системной шине…»
В тихой лаборатории зашуршало перо по бумаге. Морозов писал ответ, прекрасно понимая, что этот диалог только начинается, и именно такие письма изменят этот мир надежнее, чем любые подписи в обкоме партии. За окном спал владимирский май тысяча девятьсот восьмидесятого года, а на письменном столе рождалось будущее.