Ночью газета лежала на тумбочке, сложенная вдвое, заголовком внутрь.
Днём она висела под стеклом у курилки.
К вечеру — перекочевала в папку у Седых.
А к утру для Алексея от неё осталась тонкая стопка листов в клетку: карта ПЗУ, разбитая на байты, стрелки, пометки «проверить» и один крупный заголовок на первой странице — «Монитор».
Не экран. Программа.
Тот самый «мозг», которого у их «электронного мозга» пока не было.
Он сидел за столом в КБ‑3, подперев щёку кулаком, и в который раз водил карандашом по прямоугольнику:
0000–01FF — монитор: ввод/вывод, редактор строки.
0200–03FF — служебные сообщения.
0400–07FF — шрифт.
Квадрат за квадратом. Как в тетрадке по арифметике.
— Опять рисуешь? — спросила от двери Люба. — Тебя Михалыч ищет. Говорит: «Если ваш мозг такой же, как в газете, пусть идёт ко мне лично».
— Этот умнее, — буркнул Алексей. — Его хотя бы можно будет отладить.
Люба усмехнулась, кивнула на листы.
— Только смотри, не нарисуй лишнего, — сказала она. — А то потом опять придут и скажут: «Вы обещали». Седых уже с утра на ушах.
— Это они ещё про ПЗУ не знают, — сказал Алексей и поднялся. — Ладно. Сначала — к Михалычу, потом — к Николаю Петровичу. Без железа вся наша газета — бумага.
Бюро снабжения пахло бумагой, пылью и каким‑то особым бюрократическим холодом. Здесь даже летом было прохладно, а уж в конце марта — тем более.
Николай Петрович сидел за столом, склонившись над описями. На носу — очки в тонкой оправе, на столе — три печати, две ручки и тяжёлый металлический дырокол. С его стороны баррикады жизнь выглядела как бесконечная колонка «выдано — принято — списано».
— Опять вы, Морозов, — не поднимая головы, сказал он. — Что на этот раз? К155 вы у меня уже все пересчитали. ОЗУ я вам выбил. Остались только гвозди и канифоль.
— Мне бы мозг, — сказал Алексей спокойно. — Постоянный. На килобайт. Лучше — с правом на ошибку.
Николай Петрович всё‑таки поднял глаза.
— Право на ошибку у нас есть только у министерства, — сухо заметил он. — Вам положено попадать сразу. Что конкретно нужно?
— ПЗУ, — ответил Алексей. — К556РТ4, если вы их ещё прячете.
При слове «РТ4» у Николая дёрнулся уголок губ.
— Это откуда вы их вспомнили? — спросил он. — Их сюда один раз на выставку завозили, лет пять назад, для какой‑то «экспериментальной аппаратуры». Потом весь остаток ко мне неожиданно приехал «на хранение».
Он выдвинул нижний ящик, порылся, достал невзрачную серую коробку с потёртой этикеткой.
— Вот, — поставил на стол. — К556РТ4. ПЗУ с прожигаемыми перемычками. Двести пятьдесят шесть байт на корпус. Восемь выводов адреса, восемь — данных. Вставил, прожёг — и всю жизнь с этим живёшь. Стираемых у меня нет. РФки все ушли на одну секретную тему, о которой мне ничего не сказали.
Он посмотрел поверх очков.
— Зачем вам такие сложности, Морозов? У вас же шрифтовое ПЗУ уже есть.
— Шрифт есть, головы нет, — сказал Алексей. — Нам нужен монитор. Программа, которая при включении встретит оператора, даст ему строку ввода и будет знать, что с этой строкой делать. Это не в ОЗУ держать, там и так тесно. Это надо зашить раз и надолго.
— Раз и надолго, — передразнил Николай. — Знаю я это «раз». Потом прибежите: «Ой, мы там ошиблись на одном бите, давайте ещё раз». А это ПЗУ — как бетон. Ошибся — считай, залил фундамент с чужой дверью.
— Поэтому я и пришёл к вам, — сказал Алексей. — Дайте фундамент. А остальное мы сами построим.
Николай хмыкнул.
— Шутите, — сказал он. — А мне потом перед ОБХСС отчитываться, куда я дефицит дел. Ладно… — Он постучал пальцем по коробке, прикидывая. — Сколько вам надо?
— Килобайт, — сказал Алексей. — Восемь корпусов минимум. Плюс один в запас, если рука дрогнет.
— В запас, — скептически повторил Николай. — Вы у меня что, строители? Килобайт… К556РТ4 по накладной числится двенадцать штук. Четыре уже ушли на какую‑то химию. Остаётся восемь. В запас у нас — пальцы. Чтобы не дрожали.
Он открыл коробку, пересчитал микросхемы — восемь чёрных «гробиков» с серебристыми ножками.
— Всё, — констатировал. — Вот они. Восемь штук. Девять вам дать не могу, потому что девятой нет. И другой партии нет. Если что‑то испортите — пойдёте и сами в отчёте напишете: «сами виноваты».
— Пишите, что нас предупредили, — сказал Алексей. — А я напишу, что взял ответственность.
Николай вздохнул, достал накладную, начал заполнять.
— Назначение? — спросил он.
Алексей на секунду задумался.
«Монитор», «мозг», «программа» — всё звучало слишком живо для бюро снабжения.
— Постоянное запоминающее устройство контролирующей программы учебного комплекса, — выдал он. — По ТЗ.
Николай оценил формулировку, кивнул.
— Вот это язык, — сказал он. — Напишите мне когда‑нибудь пояснение, что вы этим хотели сказать. Ладно, ставьте подпись. И, самое главное, больше ко мне с ПЗУ не приходите. Больше их нет.
Алексей расписался, аккуратно забрал коробку.
Восемь маленьких корпусов. В сумме — килобайт.
В двадцать шестом году он бы этим количеством памяти разве разворачивающийся список в IDE вывел. Здесь — целый «монитор» для малой ЭВМ.
К вечеру в КБ‑3 стало тихо.
Кто‑то ушёл на собрание, кто‑то — в очередь за колбасой, кто‑то — на лекцию по ленинской учёбе.
В лаборатории остались трое.
Алексей. Евгений. И Саша, который категорически отказался уходить домой «в самый интересный момент».
На столе стоял самодельный программатор — неприметный серый ящик с панелью из дюраля.
Слева — гнездо под микросхему. Справа — два ряда маленьких тумблеров: верхний — адрес, нижний — данные. Полубайт. Внизу — две кнопки, крупные, чёрные — «ЗАПИСЬ» и «ПРОЖИГ». Над ними — красная лампочка.
Саша с гордостью поглаживал панель.
— Красота же, — сказал он. — Почти как на ВДНХ. Вот раньше большие делали, а теперь мы сами, тут, на месте.
— Раньше большими делали машины, на которых сейчас работает весь завод, — заметил Евгений. — А мы сейчас делаем штуку, на которой, возможно, будет работать Миша из шестого «Б». Так что да, почти как ВДНХ.
Алексей развернул тетрадь с распечатанным листингом монитора.
Байты в столбик. Адрес, код, комментарий простым языком:
0000 — 3F — ИНИЦ СТЕКА
0001 — 12 — СБРОС ЭКРАНА
0002 — 05 — ВЫВЕСТИ ''
…
— Ну что, — сказал он. — Кого назначим жертвой?
— Давайте первого, — предложил Саша. — Самого ближнего к лампочке. Чтобы видно было, как ему больно.
Он аккуратно вынул из коробки первый корпус К556РТ4, вставил, глядя на панель программатора, выровнял ножки, щёлкнул фиксацией.
Микросхема села в гнездо, как в кресло.
— Поехали, — сказал Евгений. — Я буду читать адреса и коды. Саша — за тумблеры. Морозов — нажимать страшную кнопку и отвечать за последствия.
Так и поделили.
Евгений устроился с тетрадью и карандашом.
— Шьём младшую тетраду, правую цифру, — напомнил он. — Адрес ноль. Данные — эф. Все единицы.
Саша щёлкал тумблерами. На верхнем ряду погасли все лампочки — адрес 0000. На нижнем — четыре тумблера вверх.
— Готово, — сказал Саша.
Алексей проверил, кивнул.
— Нажимай «ЗАПИСЬ», — сказал он. — Это у нас «подать напряжение на адрес». А потом я прожгу.
Саша нажал «ЗАПИСЬ». Внутри программатора тихо щёлкнуло реле — подали питание.
Алексей положил палец на чёрную кнопку «ПРОЖИГ». Сделал вдох. Выдох.
Нажал.
Щёлкнуло громче. Красная лампочка вспыхнула, тут же погасла. Где‑то внутри, на кристалле, сгорела тонкая перемычка.
— Всё, — сказал Евгений. — Первый байт приговорён. Адрес ноль — три эф. Дальше — ноль первый, двенадцать.
И пошло.
Адрес. Щёлканье тумблеров. «ЗАПИСЬ». «ПРОЖИГ». Короткая вспышка лампочки. Карандаш, который ставит галочку напротив байта.
Час.
Второй.
К середине первого корпуса пальцы у Саши начали путаться, но он упирался, делая вдох перед каждой комбинацией. У Алексея слегка ныла ладонь — кнопка прожига была тугая, с запасом по долговечности. Евгений периодически морщился, когда видел особенно «толстые» места кода.
— Морозов, вот здесь вы, конечно, разошлись, — комментировал он. — Десять байт на проверку одного символа? Это вы на будущее запас оставили, да?
— Это я оставил место, чтобы потом иметь, что выкидывать, — отозвался Алексей. — Сейчас главное — чтобы работало. Оптимизировать будем, когда нас не будут гонять газетами.
Где‑то далеко, за стеной, потрескивал «Маяк». Рассказывали про очередное достижение науки и техники. Про космос. Про автоматические линии на заводах.
У них в лаборатории автоматической линией было трое человек и одна красная лампочка.
К полуночи четыре корпуса «младших половинок» были заполнены.
Они перевели дух, выпили остывший чай и взялись за «старшие» — те, что отвечали за левую половинку байта.
Саша аккуратно вынул К556РТ4 из гнезда, положил в отдельную коробочку с надписью: «Монитор. Корпус 1».
— Лучше, чем детей воспитывать, — сказал Евгений. — Через десять лет откроете, там всё то же самое. Никаких «воспитательных воздействий», никаких «плохих влияний».
Пятый корпус пошёл быстрее. Руки привыкли, мозг перестал цепляться за каждый байт, превратился в конвейер: адрес — тумблеры — запись — прожиг — галочка.
На седьмом корпусе начали зевать.
На восьмом, последнем, который должен был стать старшей половинкой четвёртого блока — ошиблись.
Это почувствовалось сразу.
Евгений сказал:
— Адрес ноль семь… нет, подождите… — и чуть‑чуть запнулся.
Саша дёрнул тумблеры.
Алексей, уже по инерции, нажал «ЗАПИСЬ».
Реле щёлкнуло. Красная лампочка моргнула.
— Морозов, стой! — одновременно крикнули Евгений и Саша.
Слишком поздно.
— Я же ещё код не сказал, — выдохнул Евгений. — Там должны быть ноль два… а я только начал…
Адрес стоял. Данных не было. На нижнем ряду тумблеров горело некое хаотичное сочетание — смесь предыдущего байта с чем‑то, что Саша не успел сбросить.
А Алексей уже нажал «ПРОЖИГ».
— Всё, — сказал он через паузу. — Один байт ушёл в светлое будущее.
Они перевели программатор в режим чтения, выставили тот самый адрес — 07.
Красная лампочка на этот раз не зажигалась. Зато на панельке «данные» высветилась двойка. А должен был быть ноль.
— Старшая тетрада битая, — сухо констатировал Евгений. — В паре с младшей, где у нас записана двойка, процессор увидит не «02», а «22».
Саша виновато втянул голову.
— Я не успел, — сказал он. — Я думал, вы ещё спросите, уточните…
— Я тоже думал, — признал Евгений. — Что успею сказать «подождите». В итоге оба подумали.
Алексей молчал.
К556РТ4 лежала в гнезде ровно так же, как и раньше. Только на кристалле, в глубине, одно место уже никогда не станет прежним.
— Можно как‑нибудь… — начал Саша, но сам оборвал. — Нельзя. Там же перемычки.
— Ну всё, — выдохнул Саша. — Я всё испортил.
Евгений собирался сказать что‑то язвительное, но посмотрел на Сашу и передумал.
— Ты испортил один адрес, — сказал он. — И один байт. Остальные двести пятьдесят пять ещё живы. Это, между прочим, как в жизни. Не стоит из‑за одной неправильной буквы сжигать всю книгу.
Алексей наконец оторвался от панельки, сел, облокотился на стол.
— Мы не можем выкинуть этот корпус, — сказал он. — И не можем сделать вид, что ошибки не было. Значит, надо сделать так, чтобы наш ЦУБ туда просто никогда не заходил.
— Пропустить? — уточнил Евгений. — С дыркой? Не очень‑то красиво. У нас же разметка, таблица состояний…
— Сейчас главное — чтобы программа шла по нужному маршруту. — отозвался Алексей. — А то, что у нас в одном домике в деревне проживает идиот, — это не повод сжигать деревню.
Саша смотрел то на одного, то на другого, явно не успевая за метафорами.
— Что ты предлагаешь? — спросил Евгений уже серьёзно.
Алексей подтянул к себе тетрадь, положил рядом, сверился.
— Смотри, — сказал он, показывая карандашом. — Вот у нас последовательность: здесь — проверка флага, здесь — условный переход, здесь — обслуживание ошибки. Мы в адрес 07 хотели положить команду «перейти, если…» — условную. А получилась какая‑то чушь. Либо вообще не команда, либо команда, которую наш ЦУБ не знает. Если он туда дойдёт, он начнёт делать неведомо что.
— Останется в дурдоме, — кивнул Евгений.
— Значит, — продолжил Алексей, — надо сделать так, чтобы он туда не доходил. Мы можем на предыдущем шаге допрожечь биты и у нас получится безусловный прыжок почти в самый в конец кода, и оттуда, после обработки, вернём управление обратно туда, где оно должно было быть. А в конце тоже код немного поправим, как раз крошечный запас ячеек был.
Он чертил стрелки:
…06 → (JMP) → 10…
…HND_ERROR →… → RET…
Евгений склонился ближе, щурясь.
— То есть ты предлагаешь поставить костыль, — резюмировал он. — Прыгнуть через дырку, потом с нижней улицы вернуться по заднему ходу.
— А у тебя есть идеи лучше? — спросил Алексей.
Евгений поднял руки.
— Не имею, — признал он. — Идеологически мне, конечно, противно оставлять в ПЗУ битые байты. Но практически… — он посмотрел на пустую коробку из-под непрошитых корпусов, — практически меня коробка убедила.
Саша потянулся было взять битый корпус, но Алексей остановил.
— Не трогай, — сказал он. — Он нам ещё пригодится.
Он взял карандаш, зачеркнул в тетради строку «07 — 02 — Усл. переход», написал рядом: «JMP 03BA».
Внизу добавил:
«Вставить безусловный переход по адресу 03BA–03BF, сделать безусловный переход оттуда на 0010».
— Громов, — сказал он, — это всё ещё будет работать. Просто вместо одной аккуратной развилки у нас получится петля. Но ЦУБу всё равно, сколько раз мы обойдём дом, если приходим к той же двери.
Евгений задумчиво кивнул.
— Ладно, — сказал он. — Я потом в автокоде нарисую это как «ветвление с обходом дефектной ячейки». Если кто‑нибудь спросит, скажу, что это реакция на производственный брак. Мы же, как говорится, отрабатываем взаимодействие с реальностью.
Саша облегчённо выдохнул.
— То есть меня не отправят дворником навечно работать? — уточнил он.
— Тебя отправят за чаем, — отрезал Евгений. — И будешь нам наливать, пока мы эту петлю рисуем. Это называется «ответственность за несовершенство мира».
Чайник зашипел. Запахло пакетиком «со слонами», чуть горечью, железом крана.
За окном, в темноте, изредка проезжали по территории завода редкие машины — фары полосами скользили по стенам корпуса.
Алексей и Евгений сидели над тетрадью, перекладывая команды с одного адреса на другой. Обычное для них занятие, только вместо стираемого листинга здесь было ПЗУ, где каждая ошибка стоила корпуса.
— Знаешь, — сказал Евгений, когда они в который раз перечертили стрелки, — у нас получается монитор с характером. От ошибок бегает.
— Это не он бегает, это мы его учим обходить грабли, — парировал Алексей. — Вот ты своим студентам будешь говорить: «Никогда не выходите за пределы массива». А мы своему монитору будем говорить: «Никогда не заходи на 07». Педагогика.
Саша принёс три гранёных стакана в подстаканниках, осторожно поставил на край стола, чтобы не залить ничего важного.
— Всё, — сказал Алексей, отодвигая тетрадь. — План есть. Дальше — опять этот наш ВДНХ.
Они перевели программатор в режим записи. Допрожгли три байта в начале. Пропустили ошибочный байт. И — дальше по схеме.
— Может, через двадцать лет археологи найдут и скажут: «Тут был секретный код», — пробормотал Евгений.
— Пусть тренируются, — отозвался Алексей.
К трём часам ночи все восемь корпусов были готовы.
Семь — ровные, один — с «характером». Они разложили их по парам: «ПЗУ‑1 Мл/Ст», «ПЗУ‑2 Мл/Ст»…
Саша выглядел уже как человек, способный заснуть стоя. Евгений — как человек, способный заснуть, продолжая читать листинг. У Алексея глаза слипались, но внутри вместо сна шевелилась нетерпеливая мысль: «А вдруг заработает».
— Спать пойдём после включения, — сказал он. — Иначе всё равно не уснём.
Плату ПЗУ они заранее развели под восемь корпусов — две линейки по четыре. Короткие дорожки от ЦУБа, паутина соединений парами. На полях — пометки Любы карандашом: «уплотнить монтаж».
Сейчас панельки выглядели как пустые койки в казарме.
— Первая пара, — бормотал Алексей, вставляя микросхемы. — Вторая. Третья. Четвертая — наш инвалид с товарищем.
Саша держал плату двумя руками, как хрустальную вазу. Евгений стоял рядом с тетрадью, готовый в любой момент сказать: «А давайте ещё примем одну меру предосторожности».
— Лампу‑ограничитель не забыли? — спросил он.
— Лампа уже в разрыв, — ответил Алексей. — Без лампы мы теперь даже чайник включать не будем.
Они подсоединили плату к основному стенду «Сферы». ЦУБ, ОЗУ, ВКУ, клавиши — всё уже было на месте. Теперь у машины впервые появлялся не только шрифт и тест, но и собственная постоянная программа.
Алексей сел за панель, положил руку на тумблер «СЕТЬ».
Знакомый ритуал.
— Готов? — спросил он у стенда, у себя, у всех сразу.
— Что спрашивать, — пробормотал Евгений. — Включай. В газетах уже всё включили за нас.
Тумблер щёлкнул.
Лампочка «ПИТАНИЕ» вспыхнула. Лампа‑ограничитель на проводе сначала ярко загорелась, потом послушно погасла, уступив ток железу. Где‑то в блоке питания загудел трансформатор.
Телевизор «Рекорд» спереди сначала показал хаос, потом собрал серый растр.
В прошлый раз на этом месте экран сам начинал писать: «СФЕРА‑80 ТЕСТ» во всех строках. Шарманка.
Сейчас экран повис пустой.
Секунду.
Две.
Три.
— Похоже, всё, — прошептал Саша. — Перегнули. Ничего нет.
— Подожди, — остановил его Алексей.
Внизу, слева, в первой строке, справа от края, вспыхнул маленький светлый прямоугольник.
Замигал.
Пауза. Светлое пятно.
Пауза. Опять.
Символа как такового ещё не было — просто «квадратик» курсора. Но он мигал. С периодом, заранее выверенным на ЕС, «чтобы глаз успевал». В нужном месте. На нужной строке.
Через полсекунды справа от квадратика появились два знакомых знака:
больше и пробел.
` _`
— Ох ты… — выдохнул Саша.
— Поздравляю, — тихо сказал Евгений, не отрываясь от экрана. — Ваш уч‑дем‑комплекс впервые в истории официально ничего не делает и при этом честно сообщает, что ждёт от вас команды. Это уже не шарманка, это уже собеседник.
Алексей молчал.
В его времени это «больше‑пробел» было самым банальным видом приглашения. Символ, на который никто не смотрит. Который воспринимается как шум.
Здесь это выглядело как дверной глазок. Как крошечное окно в то, чего ещё не существует.
Малая ЭВМ, стоящая на столе в КБ‑3 провинциального НИИ, впервые внятно показала: «Я здесь. Я жду».
— Ну? — толкнул его локтем Евгений. — Ты будешь с ним разговаривать, или он так и будет молча мигать до утра?
Алексей положил пальцы на клавиши «Консула». Верхний ряд, «ЙЦУКЕН».
Подумал.
«2+2» пока рано. «ИТОГО:=ОКЛАД*К» — тем более.
Он нажал «С».
На экране квадратик исчез, на его месте вспыхнула кривоватая буква.
`С`
Курсор мигнул рядом, ожидая продолжения.
Саша шумно выдохнул.
— Работает… — сказал он. — Она… она пишет.
— Она ничего не пишет, — автоматически поправил Алексей. — Это ты пишешь. Она честно показывает, что ты натворил.
Он отпустил клавишу, посмотрел на экран.
Мигающий курсор снова вёл своё, ритмично исчезая и появляясь.
В крошечном, погребённом под корпусами К556РТ4 килобайте жили команды и ветвления, среди которых одна — на битом адресе — смиренно обходилась костылём. Весь этот клубок логики сейчас сосредоточился в одном маленьком прямоугольнике, который по ГОСТу назывался «символ ожидания ввода».
Калькулятор, который притворялся компьютером, официально умер.
Малая ЭВМ, которая ещё боится собственного отражения в газете, сделала первый шаг к тому, чтобы стать тем, чем Алексей всю жизнь пользовался как чем‑то само собой разумеющимся.
— Запомните, товарищи, — сказал он, не отводя глаз от экрана. — С этого момента у нас в ПЗУ официально прописано право на ошибку. Мы его уже использовали. Значит, и людям можно.
Евгений фыркнул.
— Людям — не знаю, — сказал он. — А вот ЦУБу — да. Теперь, если он промахнётся мимо одного байта, мы его отбираем за шкирку и возвращаем на тропу. Это прогресс.
Саша прислонился плечом к стойке, всё ещё глядя на мигающий знак больше.
За окном уже светало — где‑то на вдали прошумел по шоссе первый утренний автобус.
В лаборатории КБ‑3 на столе стояла первая малая ЭВМ, которая не только считала по чужому сценарию, но и честно ждала, когда ей скажут, что делать.
Это было не спасение страны. Не переворот в науке.
Просто очередная ночная работа. Ещё один килобайт, добитый до нужного состояния.
Но от этого она казалась не менее важной.