Кладовщик, попрощавшись, укатил ящики на низкой тележке в сторону склада. Корпуса «Сфер» качнулись и исчезли за дверью, словно их не было. Остался только пустой класс с полосами от ножек на линолеуме и чуть сладким запахом воска.
— Всё, — сказал Саша. — Отправили в ссылку.
— В отпуск, — поправил Алексей. — До осени.
Он знал, что это не отпуск. Это пауза между «по описи» и «по‑настоящему». Но вслух говорить не стал.
Через неделю жизнь в КБ снова стала похожа на график из стенгазеты: планёрка, кулёк с карамелью к чаю, споры над чертежами, беготня в снабжение, очереди в машзал.
За окном было начало апреля. Снег лежал только в тенях — грязный, с полосками песка. Дороги подсохли, по двору между корпусами снова пошли народные тропинки, а не тоннели в сугробах.
Внешне «Сферы» стояли на складе, опечатанные. Внутри — у Алексея в тетрадке — ещё было пусто. От самотеста и табличных форм они спустились к железу, к питанию, к памяти. Следующий шаг был непростым: научить будущую машину не только считать, но и показывать хоть что‑то, кроме восьми лампочек.
В дверях КБ, как всегда без стука, появился Евгений. Свитер, «Ява» за ухом, под мышкой — пачка перфокарт с резинкой.
— Морозов, — сказал он, не здороваясь. — Ты хотел телевизор? У тебя будет телевизор.
— Мы ещё блок сопряжения к телевизору не сделали, — заметил Алексей. — ВКУ пока только на уровне разговоров.
— Телевизор на телевизоре — это роскошь, — отмахнулся Евгений. — Мы нарисуем его на ЕС. Большая машина — это такая очень дорогая бумага, на которой можно рисовать экраны.
Он явно был доволен собой.
— Что выбил? — спросил Алексей.
— Полтора часа ночью, — гордо объявил Евгений. — Кирилл Савельевич сказал: «Громов, за старые заслуги — в этот четверг с двух до трёх ночи. Или даже до полчетвёртого. Только без цирка».
Он улыбнулся шире. — Министерский расчёт я ему в прошлый раз спас. Теперь можно и самому немного пожить.
Алексей потер переносицу.
В его времени, чтобы вывести один символ на экран, достаточно было вызвать одну функцию. Здесь, чтобы нарисовать пустой прямоугольник с мигающей точкой, приходилось договариваться с начальником вычислительного центра, таскать пачки перфокарт и спорить с оператором.
— Ладно, — сказал он. — Что мы хотим от «Сферы» на ЕС?
— Простой протокол, — Евгений опустился на край стола и одним движением ладони смахнул лишние листы. — Представь: у тебя телевизор, внутри сетка — двадцать четыре строки, тридцать две позиции в строке. «Сфера» думает в своих шинах, а для вывода шлёт: «строка такая‑то, позиция такая‑то, символ такой‑то».
Он постучал по пачке карт. — Мы это сейчас на ЕС отработаем. Массив, подпрограмма вывода, рамочка, курсор. Потом по этому протоколу будем писать программу управления для ВКУ.
Алексей кивнул. Логично. Сначала придумать, как будет выглядеть экран, а уже потом городить под него железо.
— Массив двадцать четыре на тридцать два, — сказал он. — Адрес — строка умножить на длину строки плюс смещение.
Он поймал себя на том, что мысленно произносит привычный адрес из своего далёкого будущего, где видеопамять начиналась с определённого шестнадцатеричного числа. Прикусил язык.
— Пишем на фортране?
— А на чём же ещё? — удивился Евгений. — На коболе я только под дулом паяльника писать буду.
Он поморщился. — И немного автокода сверху, чтобы быстро двигать курсор и просчитать задержки. Без него фортран всё растянет, как макароны.
— Оператор нас убьёт, — заметил Алексей. — Она и так не любит, когда вместо отчётов — «игрушки».
— Это не игрушка, — серьёзно сказал Евгений. — Это учебно‑демонстрационный комплекс…
Он театрально поднял палец. — Для визуализации табличной информации при подготовке операторов ЕС ЭВМ.
Он ухмыльнулся. — Ты же сам это говорить наверху любишь.
Алексей усмехнулся. Логика железная: если что‑то трудно объяснить, надо придумать правильное длинное название.
Ночью машзал был похож на трамвайное депо после смены. Гул вентиляторов, редкие голоса, свет только над пультом, между шкафами ЕС‑1035 — настоящие сумерки.
Воздух был сухой, пах пылью и лёгким перегревом трансформаторов. От фальшпола тянуло холодом. Алексей поёжился, поправил пропуск на груди.
У пульта сидела Тихонова. Очки, аккуратный пучок, стопка маршрутных карт возле клавиатуры. Она посмотрела на вошедших поверх оправы.
— Опять вы, Громов, — сказала она. — Я думала, вы уже все свои «старые заслуги» использовали.
— Таких заслуг много не бывает, — вежливо ответил Евгений и положил на стол пачку перфокарт. — Задание короткое. Тестовая программа для служебного применения.
Алексей уловил, как у неё при словах «служебного применения» чуть смягчились губы. Всё‑таки он учился.
— Что считать будем? — строго спросила Тихонова. — Массивы, отчёты, план?
— Формально — массив символов, — сказал Евгений. — По содержанию — прототип учебного стенда для операторов. Мы потом Кириллу Савельевичу отчёт принесём.
— У вас в прошлый раз тоже «учебный» был, — заметила она. — А принтер полчаса рисовал ваши шахматки для памяти.
— Зато теперь память у нас рабочая, — вмешался Алексей. — Вы же не хотите, чтобы у учебного прибора в середине цикла всё падало?
Тихонова вздохнула.
— Ладно, — сказала она. — Только если какой‑нибудь отдел придёт ночью с «экстренным», я ваше задание сниму без разговоров.
Она посмотрела на часы. — У вас час сорок. В два — старт, в три сорок — конец. Ни минуты больше.
— Есть, — сказал Евгений. — Работать будем быстро и красиво.
Комната подготовки программ была тесной. Два перфоратора, стол, стул, пепельница, на стене — пожелтевший плакат «Соблюдай чистоту перфокарт».
Евгений сидел за перфоратором, пальцы у него стучали по клавишам, как по старому пианино. Лента карты медленно шла под кулаками, выбитые прямоугольные дырочки ложились в аккуратные столбцы.
— PROGRAM TVTEST, — проговорил он вслух, пробивая заголовок. — DIMENSION SCREEN(24,32)…
Он посмотрел на Алексея. — Тебе двадцать четыре строки хватит?
— На школьную доску хватало, — сказал Алексей. — Телевизор хуже доски быть не обязан.
— А ты думал про… — Евгений сделал неопределённый жест. — Про эти самые «буквы»? У нас же алфавитно‑цифровое, а не только цифры.
Алексей видел перед глазами зелёные буквы на чёрном фоне из своей жизни. Видел первый BASIC на дешёвом домашнем аппарате, где курсор мигал в углу, а весь мир помещался в двадцать пять строк. Тогда это казалось чудом. Сейчас — задачей на индексацию.
— Начнём с цифр и пары служебных символов, — сказал он. — Потом расширим. Главное — чтобы протокол был один: строка, позиция, код. А что за код — цифра, буква, стрелка — уже вторично.
— То есть вся магия — в шине и в таблице символов, — пробормотал Евгений и начал набивать очередную строку фортрана:
— DO 10 I=1,24…
Перфоратор постукивал, иногда угрожающе кашляя, когда Евгений слишком резко нажимал клавишу «Отмена». На полу уже образовалась кучка бумажной стружки.
— Ох уж этот фортран, — проворчал Евгений. — Всё время кажется, что я пишу письмо тёще: длинно, вежливо и без права на ошибку.
Он наклонился, пробивая формат вывода. — FORMAT(1X,32A1)… Надеюсь, принтер не взвоет.
— Лучше длинно и вежливо, чем коротко и сгорело, — заметил Алексей.
К двум ночи программа лежала в стопке карт. На первой аккуратно красовалось «TVTEST», на последней — «END». Между ними — массив, заполнение его пробелами, подпрограмма, которая ставила символ «*» на заданную позицию, и блок выхода на печать, рисующий прямоугольник.
— Первый прогон — только рамку, — сказал Алексей. — Посмотрим, не перепутали ли строки со столбцами.
— Если перепутали, — вздохнул Евгений, — скажем, что это так и задумано. «Эстетика диагональных таблиц».
В машзале снова гудели шкафы. Тихонова вставила их колоду в приёмник, пальцами привычно пригладила край.
— Задание TVTEST, — объявила она. — Принимается.
Пальцы побежали по клавишам пульта. На ленте мониторинга мелькнуло «TVTEST», из недр шкафов раздался тяжёлый вздох вентиляторов.
— Если он повиснет, Громов, я тебя из очереди вычеркну, — предупредила Тихонова.
— Он повиснет только на красоте, — ответил Евгений.
Через минуту ожило печатающее устройство. Стальной вал со стуком пошёл по строкам, алфавитно‑цифровой барабан загремел. Лист за листом падали на приёмный лоток.
Алексей с Евгением почти одновременно наклонились над первым листом.
На нём было нечто. Вся страница была заполнена точками, цифрами, пустыми местами, но среди этого хаоса угадывалось: по краю — линия из «#», внутри — расплывчатая диагональ из «*», а в левом нижнем углу — странный «ступеньчатый» угол.
— Ну, — сказал Евгений, — это… авангард.
— Это когда строки и столбцы местами спутаны, — спокойно заметил Алексей. — У нас координаты перепутаны. Мы заполняем SCREEN(I,J), а печатаем по J,I.
— Значит, художник был пьян, — заключил Евгений. — Перезаправляем кисти.
Он быстро пролистал остальные листы: везде «диагональный телевизор». Смешно, если бы не было так жалко бумаги.
— Ещё один прогон — и нас Тихонова убьёт, — тихо сказала стоящая рядом девушка из соседнего НИИ, которая дожидалась очереди со своей пачкой расчётов.
— Ничего, — отмахнулся Евгений. — ТВ без настройки не бывает.
Они вернулись в комнату подготовки программ. Евгений аккуратно вытащил пару карт, перепробил строки с индексами, поменял местами I и J, добавил ещё один FORMAT, чтобы рамка не «съезжала».
— Вот так, — сказал он, — теперь у нас будет настоящий прямоугольник.
Второй прогон дал уже почти то, что хотелось: прямоугольник из «#», внутри — пустота, и звёздочка примерно посередине. Только рамка почему‑то «прилипла» к левому краю, а справа оставалась одна пустая колонка.
— Относительная адресация, — пробормотал Алексей. — Один сдвиг — и весь экран косится.
Он достал карандаш, прямо на распечатке нарисовал воображаемую сетку, прикидывая, как будет вычисляться адрес в «Сфере».
В его голове уже выстраивалась формула: базовый адрес видеопамяти плюс номер строки, умноженный на длину строки, плюс номер позиции. Простая арифметика. Гораздо приятнее, чем пляска с форматами Фортрана.
Тихонова тем временем всё больше хмурилась. Лист за листом с «телевизором» на ней производили впечатление не «служебной программы», а дорогостоящего развлечения.
— Громов, — сказала она наконец, когда очередной лист плюхнулся на лоток. — Что вы там рисуете?
Её голос стал заметно жёстче.
— Учебно‑демонстрационный комплекс, — автоматически ответил Евгений. — Визуализация табличной информации…
— Я вижу, что вы визуализируете, — перебила Тихонова. — У меня на ночи два задания от планового отдела висят. А вы сюда свою картинную галерею вставили.
Она подняла один из листов. — Это что? Таблица?
— Это модель экрана, — вмешался Алексей. — Для подготовки операторов.
Он постарался говорить спокойно. — Мы отрабатываем протокол взаимодействия малой ЭВМ с устройством отображения. Потом по этим же принципам сделаем учебные стенды для ваших операторов ЕС.
Тихонова прищурилась.
— Мне кажется, — сказала она, — это разговор не со мной. Это разговор с Кириллом Савельевичем.
Она поднялась. — Я его сейчас позову. А вы пока подумайте, как вы ему объясните, зачем у нас в журнале работы записано «TVTEST» вместо «расчёт фонда заработной платы».
Кирилл Савельевич спустился быстро. В халате поверх костюма, с неизменной папкой под мышкой. По виду — человек, которого подняли из кабинета, когда он уже собрался домой, но передумал.
— Что происходит? — спросил он у порога.
— Громов запускает непонятные задания, — отчеканила Тихонова. — Все принтеры заняты его «рисунками».
— Это не рисунки, — попытался улыбнуться Евгений. — Это…
— Я сам слушаю, что это, — перебил его Кирилл. — Так, Громов, Морозов, объясняйте.
Алексей почувствовал лёгкое дежавю. Та же интонация, что у любого начальника проектного отдела в его прежней жизни, когда заходишь к нему с «мелким экспериментом», а сам уже занял половину стенда.
— Мы отрабатываем протокол вывода табличной информации на экран, — сказал он. — В рамках работ по учебно‑демонстрационному комплексу.
Он повернулся к Евгению. — Евгений Александрович предложил использовать ЕС, чтобы смоделировать поведение будущего устройства отображения.
— На принтере? — поднял бровь Кирилл. — Устройство отображения на принтере?
— У нас нет ВКУ, — честно сказал Алексей. — Телевизор ещё не согласован, блок сопряжения пока на стадии чертежей. А программистам уже нужно понимать, как будет выглядеть экран. Мы рисуем матрицу символов и двигаем курсор.
Он развернул один из листов и показал. — Вот рамка, вот область вывода, вот позиция курсора. То же самое потом будет на экране.
Кирилл внимательно посмотрел на лист. Потом на ещё один. Потом на массив пунктирных «#», образующих прямоугольник.
— Честно говоря, — сказал он, — это больше похоже на кроссворд.
Он перевёл взгляд на Евгения. — Вы это зачем делаете на ЕС, а не на листе в клетку?
— Потому что нам важна не картинка, а протокол, — вступил Евгений. — Мы измеряем, сколько операций и времени требуется на обновление одной строчки, одного символа. Смотрим, как лучше организовать табличный вывод.
Он чуть наклонился вперёд. — И потом, эти материалы можно использовать для учебных занятий с операторами. Вместо того чтобы рисовать на доске схемы, можно показывать им такие «экраны» и объяснять, что стоит за каждым символом.
Кирилл задумчиво постучал пальцем по папке.
— Сколько времени это уже идёт? — спросил он у Тихоновой.
— Полчаса, — ответила она. — По журналу — сорок минут. Ещё один прогон — и будет час.
— И сколько вы ещё собираетесь… визуализировать? — повернулся он к Алексею.
— Один, максимум два прогона, — сказал Алексей. — Мы уже почти всё подогнали.
Он почувствовал, как внутри сжимается что‑то маленькое и упрямое. — После этого мы оформим служебную записку. Отделу разработки учебного комплекса нужны эти данные. Можем даже доклад на НТС подготовить.
Кирилл посмотрел на него внимательно. Не как начальник на подчинённого, а как человек на человека.
— Ладно, — сказал он наконец. — Уговорили.
Он повернулся к Тихоновой. — Отмечаем в журнале работы как «служебное задание по учебному комплексу». Но…
Он поднял палец. — Первое. Ещё один прогон — и всё. Остальное — или днём, или на бумаге.
Второе. Писать отчёт. Краткий. Что именно вы тут проверяли, какие времена, какие выводы. Чтобы если «наверху» спросят, я не выглядел человеком, который разрешает «рисовать телевизоры».
Третье. Такие штуки в следующий раз согласовывать заранее, а не через жалобы оператора.
Евгений вытянулся почти по‑военному.
— Есть, — сказал он. — Отчёт будет. Называться будет…
Он встретился взглядом с Алексеем. — «Оценка временных параметров вывода табличной информации в учебном комплексе».
— Уже лучше, — кивнул Кирилл. — Только слово «телевизор» туда не суйте.
Он ушёл так же быстро, как пришёл. Тихонова, проводив его взглядом, вздохнула.
— Ещё один прогон, — сказала она. — И чтобы на последнем листе было видно, за что я вам простила этот цирк.
Последний прогон они готовили как приёмку эксперимента.
Евгений ещё раз проверил карты. Алексей нашёл в программе место, где курсор двигался по диагонали, и изменил сценарий: теперь он хотел, чтобы мигающий символ стоял в правом нижнем углу рамки. Чтобы было видно, что адресация работает по всей площади, а не только в центре.
— Почему в правом нижнем? — удивился Евгений.
— Потому что там сложнее всего не перепутать, — сказал Алексей. — Если мы туда попадём точно, значит, формулы правильные.
Задание снова пошло по ленте. В машзале было тихо. Даже вентиляторы казались менее громкими — или это нервы.
АЦПУ очнулось, забарабанило. Листы падали один за другим.
На первом — рамка. Внутри — пустота. В правом нижнем углу — аккуратная звёздочка.
На втором — то же самое, только вместо звёздочки — пробел.
На третьем — снова звёздочка.
— Мигание, — удовлетворённо сказал Евгений. — Кадр, другой кадр, третий кадр. Если их быстро листать — будет как живой курсор.
Алексей взял три листа, сложил в стопку и начал перелистывать, как детские рисунки‑раскадровку. Звёздочка действительно то появлялась, то исчезала на одном и том же месте.
Примитив. Никакого люминофора, никакого настоящего экрана. Бумага, чернила, барабан. Но для него это был первый мигающий символ будущей «Сферы».
— Ну что, — сказал Евгений, — поздравляю. У твоего учебного комплекса появилась первая моргающая точка.
Он вытащил из кармана карамельку и бросил Алексею. — За успешную работу.
— Спасибо, — сказал Алексей.
Он снова посмотрел на прямоугольник на бумаге. В голове потянулись линии: к плате ВКУ, к шине, к табличным формам, к самотесту памяти. Всё это складывалось в одну цельную картинку.
В его прошлом, чтобы вывести «А» на экран, он просто писал в память по нужному адресу. Здесь они сначала нарисовали экран на бумаге, договорились с начальством, проверили время исполнения, придумали правильные слова для отчёта. Дольше, тяжелее, зато после этого никто не сможет сказать, что это «игрушка» и «зачем это нужно».
— У нас теперь есть протокол, — тихо сказал он. — Строка, позиция, символ. Остальное — дело техники.
— И бюрократии, — добавил Евгений.
— И бюрократии, — согласился Алексей.
Тихонова взяла один из листов, внимательно посмотрела. Угол её рта чуть заметно дрогнул.
— Если вы это и правда в учебный курс засунете, — сказала она, — может, мои молодые операторы наконец перестанут путать строки со столбцами.
— Постараемся, — сказал Алексей.
Когда они вышли из машзала в ночной коридор, лампы под потолком казались слишком яркими. За стеклом двери виднелся заводской двор, редкие фонари, полосы чуть подтаявшего снега.
Алексей сунул распечатку с мигающей звёздочкой в папку — рядом с чертежом ВКУ и своими расчётами по шине.
Ещё один маленький шаг. Ни списка «великих свершений», ни фанфар. Просто несколько листов бумаги с прямоугольником и мигающей точкой. Зато теперь он знал: когда в их малой ЭВМ загорится первый настоящий символ на экране, он будет выглядеть именно так.