Глава 13 Первая модель

Через неделю инженерная логика потребовала продолжения банкета.

* * *

Двадцать четвёртое сентября, без двадцати двенадцать ночи. Коридор, ведущий к машинному залу, был почти пуст: редкие шаги дежурного, тусклые лампы под потолком, запах побелки и холодного металла. Сквозь застеклённые двери виднелись те же шкафы ЕС, тот же фикус на подоконнике у пульта.

Алексей поймал себя на мысли, что начал скучать по этому гулу вентиляторов. Признак профессиональной деформации: нормальный человек в полночь скучает по кровати.

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

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

В папке под мышкой шуршали листинги и схемы. Программа-модель, с которой они пришли, была простой до неприличия: массив из условных «ячеек памяти», регистр-аккумулятор, счётчик шагов и три команды.

Не «ADD A,B» и «JNZ», а строго по ГОСТу:

«Прочесть значение из ячейки»,

«Выполнить операцию сложения»,

«Перейти к другой записи в таблице по условию».

Но по сути — тот же набор, с которого начинал любой пригодный к жизни процессор. Только здесь он назывался не процессором, а «ядром последовательной обработки табличных формул».

* * *

Тихонова встретила их у дверей с тем же журналом, но без дневной очереди за спиной. В полночь очереди заканчивались.

— Опять вы, — сказала она вместо приветствия. — Вам что, дома не спится?

— Нам дома не моделируется, — ответил Евгений. — Там нет ЕС-1035.

— Дом там, где машина, — добавил Алексей.

Тихонова хотела было огрызнуться, но вспомнила, по-видимому, исправленный «Свод-76» и только вздохнула:

— Ладно, романтики. Вас записали с нуля до трёх.

Она ткнула карандашом в журнал.

— Два часа сорок пять — фактическая работа, пятнадцать минут — на всякий пожарный. Если зациклите свою «игрушку» так, что мне потом всё сбрасывать, пожарный будет настоящий, и начнётся он прямо с вас. Я ясно выразилась?

— Кристально, — кивнул Евгений. — Ни одного бесхозного цикла.

Алексей показал служебную записку — ту же, что они добыли через Кирилла Савельевича, только с новой датой.

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

— Системные области у вас в голове, — буркнула Тихонова. — Проходите.

* * *

Ночной машинный зал выглядел как декорация к фильму про будущее: зелёные огоньки на панелях, ленточные накопители медленно вращают катушки, на АЦПУ белеет свежий рулон бумаги. ЕС-1035 дышала ровно, уверенно, как большой холодильник с характером.

Евгений сел за терминал, привычно пробежался по клавишам.

— Значит так, — сказал он. — Сначала ваш табличный цирк. Потом — один контрольный прогон «Свод-76», чтобы Кирилл Савельевич не нервничал.

Алексей разложил на соседнем столе бумаги: схему ЦУБ, условные обозначения команд, таблицу тестовой программы. Для ЕС-ки это всё было просто текстом на фортране с аккуратным массивом: `MEM(0:255)`, `ACC`, `PC`, шаги цикла. Для него — первый прототип того, как будет жить их будущее «железо».

— Значит, ещё раз, — произнёс Евгений, набирая команду чтения с перфоленты. — Что делает ваша высокоинтеллектуальная программа?

— В первом тесте — заполняет восемь ячеек суммой двух других, — ответил Алексей. — Каждая команда — запись в таблице: «взять из ячейки А, сложить с ячейкой Б, результат положить в ячейку С, перейти дальше».

Он показал пальцем на схему.

— Если всё работает, к концу цикла в памяти получается красивая лесенка: 1, 2, 3, 4, 5, 6, 7, 8. Никаких сюрпризов.

— А если не работает? — спросила Тихонова, заглянув им через плечо.

— Тогда, — сказал Алексей, — получится современное искусство.

— Мы это искусство печатать не будем, — отрезала она. — Бумага не резиновая.

Евгений загрузил перфоленту с программой, проверил параметры задачи и нажал «Пуск». На панели ЕС-ки вспыхнули лампочки, блоки загудели чуть сильнее, АЦПУ кашлянул и выдал первую строку: заголовок теста.

Алексей опёрся на стол и вслушался в шум. В его 2026-м такие моменты происходили беззвучно: где-то в облаке крутились виртуальные ядра, а на мониторе мелькали зелёные галочки. Здесь каждый байт сопровождался реальным шелестом бумаги и щелчком реле.

Первые строки распечатки были обнадёживающими:

«Тест 1. Начальное состояние памяти…»

«Адрес 00: 0001, Адрес 01: 0001…»

«Шаг 1: ACC = 0002, MEM(02) = 0002…»

Аккуратные нули и единицы выстраивались в столбики.

— Смотри, — кивнул Евгений. — Лесенка пошла.

Алексей отметил в блокноте: «Тест 1 — ОК (предварительно)».

«Тест 2» начинался с простого ветвления: если результат не ноль — перейти по адресу, если ноль — остановиться. Это был маленький прообраз будущего условного перехода в их ЭВМ, только замаскированный под «переключение на другую запись табличной формулы при достижении порогового значения».

ЕС-ка добросовестно отрабатывала шаг за шагом. Печатающее устройство жужжало, Тихонова с показным равнодушием листала журнал, но глаз от пульта не отрывала.

На сорок четвёртой секунде всё резко испортилось.

Вместо аккуратных строк вида «Адрес 05: 0005» АЦПУ начал выдавать:

«Адрес 37: 8191»

«Адрес 38: 16383»

«Адрес 39: 32767»

Числа росли скачками, как температура при воспалении.

— Это что ещё такое… — протянул Евгений.

На панели ЕС-ки загорелось слишком много лампочек. Время задачи бежало, а никакого «СТОП» в распечатке не появлялось. Программе явно нравилось бегать по памяти без конца.

— Громов! — Тихонова развернулась уже по-дневному грозно. — У вас задача зависла.

— Не зависла, — машинально возразил Евгений. — Она так задумана.

Он посмотрел на распечатку ещё раз.

— Хотя нет. Так не задумана.

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

Евгений чертыхнулся, нажал клавишу сброса задания. ЕС-ка послушно оборвала поток бессмысленных цифр. АЦПУ обиженно заскрипел и замолчал.

— Полрулона бумаги в мусор, — констатировала Тихонова. — И это вы ещё «аккуратно».

Она осталась стоять у пульта со сложенными на груди руками.

— Ещё один такой «эксперимент» — и я вас не просто из зала выгоню, я вас начальству сдам. Пусть вам там отдельный ЕС выделяют.

— Всё, всё, — успокаивающе поднял руки Алексей. — Мы уже сняли то, что нам нужно.

Он поднял стопку листов с тем самым «современным искусством».

— Теперь мы отойдём в угол и тихо будем раскаиваться.

— Раскаиваться вы будете дома, — отрезала Тихонова. — Здесь у вас есть час двадцать. Или вы за это время находите свою ошибку и показываете мне приличную распечатку, или завтра в журнале в графе «особые отметки» появится «игрушка, нарушающая дисциплину».

Она посмотрела на часы.

— Время пошло.

* * *

Они отступили к дальнему столу. Евгений швырнул пачку распечаток на столешницу.

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

Алексей молча выровнял листы, разложил по порядку, достал карандаш и линейку.

В его обычной жизни всё было проще: компилятор, симулятор, breakpoint на нужной строке, просмотр всех регистров, дамп памяти картинкой. Здесь у него был рулон тонкой бумаги с цифрами, часы ночного времени и привычка школьника, разбирающего дамп памяти БК-шной игры ручкой по клеточкам.

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

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

«Вот и вернулись к истокам, — подумал он. — Только вместо пятого класса — ЕС-1035, вместо игры — табличный вычислитель».

— Ладно, — сказал он вслух. — Давайте смотреть.

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

— Вот здесь у нас был переход, — отметил он. — Условный. Если ACC не ноль — перейти на следующую запись.

Он отметил карандашом строки.

— До этого всё верно: 1, 2, 3, 4. А вот здесь ACC вдруг становится семьдесят шесть тысяч. Значит, либо у нас перенос уехал, либо счётчик команд прыгнул не туда и начал складывать то, что не надо.

— Счётчик команд, — мрачно сказал Евгений. — Печёнкой чувствую.

Он ткнул пальцем в листинг.

— Вы же его на этой вашей упрощённой арифметике повесили? Через тот же сумматор?

— Через тот же, — признал Алексей. — Иначе не укладывались по микросхемам.

Он перевернул листы, нашёл кусок фортрана, описывающий их модель: `PC = PC + 1`, `if (ACC.ne. 0) PC = TARGET`.

— В модели на ЕС-ке это выглядит нормально, но мы же имитируем поведение нашего железного сумматора.

Он черкнул пару формул.

— Смотри: мы сначала считаем ACC = ACC + MEM(X), и только потом, на том же переносе, докидываем PC + 1. Если перенос не сбросить, он начинает попадать и в адрес. Одно неверное место — и счётчик улетает куда-то в третью сотню.

Евгений взял листинг, прищурился.

— То есть ты хочешь сказать, — медленно произнёс он, — что из-за того, что вы сэкономили одну микросхему ЛА3 для сброса флага переноса, у нас теперь весь табличный вычислитель пошёл по… не по плану?

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

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

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

Евгений постучал карандашом по столу.

— А вы не пытались вместо ЭВМ сделать счёты? — спросил он. — Там переносы хотя бы на пальцах видны.

— Счёты не умеют в условные переходы, — возразил Алексей. — А нам без них никуда.

Он быстро набросал новую последовательность операций: сначала в модели «обнулять» перенос перед сложением адресов, отделяя PC от ACC; в железе это означало — всё-таки добавить узел, который очищает флаг, прежде чем крутить счётчик шагов.

— Вот так, — сказал он. — Сначала независимый инкремент PC, без использования результата арифметики. Потом уже — работа с аккумулятором.

Он подчеркнул строку.

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

Евгений скривился, но спорить не стал.

— Хорошо, — сказал он. — В модели это не критично, микросхемы нам ЕС-ка не считает.

Он выхватил листок с формулами.

— Давайте я прямо тут перепишу цикл. Пока наша богиня очередей не передумала.

* * *

Они вернулись к пульту.

— Елена Петровна, — осторожно сказал Евгений, — мы тут нашли одну маленькую ошибку. Сейчас поправим программу и ещё разок прогон — и всё. Обещаю: без лавины.

— У вас «маленькие ошибки» — это сорок листов мусора, — заметила Тихонова. — Сколько вам ещё надо времени?

— Минут двадцать, — сказал Алексей. — Переписать цикл и один раз прогнать.

Он заговорщически снизил голос.

— Если не получится — сами уйдём до трёх, честно-честно.

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

— Двадцать минут, — сказала она. — И ни секундой больше. Если в 2:59 ваша штука всё ещё печатает без остановки, я нажимаю «сброс» и забываю, как вас зовут.

— В 2:59 она уже будет молчать, — пообещал Евгений.

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

— Готово, — сказал он. — Второй заход.

Алексей поймал себя на том, что напрягся сильнее, чем во время защиты проекта на НТС. Там были слова и подписи. Здесь — голые цифры. Если сейчас снова поползёт мусор, придётся снова выбивать время, объясняться, переписывать схему. Если же всё отработает, у них в руках окажется не только красивая диаграмма, но и модель, которая честно делает «load-add-branch» без сюрпризов.

Евгений нажал на запуск.

ЕС-ка загудела. На АЦПУ снова пошли строчки.

«Тест 1…» — аккуратные единицы и двойки.

«Тест 2…» — шаги по условному переходу.

Критическое место возникло на тех же строках, где раньше начиналась лавина. Тихонова невольно придвинулась ближе.

«ACC = 0004, PC = 0005»

«ACC = 0000, PC = 0006»

«Флаг окончания — установлен. Остановка.»

АЦПУ затих.

Впервые за всю ночь ЕС-1035 замолчала красиво: без рывка, без обрубленного лога, с аккуратным «СТОП» в конце.

— Вот это уже похоже на инженерию, — тихо сказал Алексей.

Евгений провёл ладонью по распечатке, как по меху кота.

— Давайте посмотрим дамп, — предложил он.

Они попросили машину напечатать содержимое всего их условного «памятного массива». Рулон зашуршал ещё раз, но на этот раз это была не абракадабра, а таблица:

«Адрес 00: 0001»

«Адрес 01: 0002»

«Адрес 02: 0003»

«Адрес 07: 0008»

— Лесенка, — удовлетворённо констатировал Алексей. — Без провалов и взрывов.

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

Она заглянула в журнал, вытянула карандаш.

— Значит так.

Она аккуратно вывела: «Моделирование табличного комплекса. Сбой устранён. Результаты — удовлетворительные. Время — 2.41.»

— Чтобы потом никто не говорил, будто вы тут только бумагу портили, — добавила она.

— Спасибо, — сказал Алексей.

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

Евгений поклонился ЕС-1035 театральным жестом.

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

Он вполголоса добавил:

— И без такой очереди.

Алексей улыбнулся: маленький, глупый — это как раз и был их табличный прибор. Только в его голове он уже не казался ни маленьким, ни глупым. Это был первый кусок будущего, который совпал с расчётами.

* * *

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

Алексей шёл, прижимая к боку папку с распечатками.

Несколько десятков страниц с адресами и числами. На любой другой взгляд — скучный отчёт о какой-то пользовательской задаче. Для него — первое документальное доказательство, что их «ядро» умеет:

1) прочитать значение из ячейки,

2) сложить,

3) принять решение, куда идти дальше.

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

В его прошлом-будущем, когда он первый раз увидел дамп памяти на БК-0010, пестревший числами вместо картинок, он подумал: «Как люди вообще это понимают?»

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

— Ну что, — нарушил тишину Евгений. — Считаем, что ваш внутренний блок выжил?

— Считаем, что он перестал портить память, — ответил Алексей. — Для старта этого более чем достаточно.

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

— Это уже другая история, — сказал Алексей.

Он мысленно отметил: конфликт «получится ли логика» на сегодня снят. В инженерной практике это называлось проще: прошли первый unit-test. Только вместо зелёной галочки в IDE — запись в журнале у Тихоновой и пачка бумаги под мышкой.

Никакого пафоса, никаких фанфар. Просто где-то между нулём и тремя часами ночи в конце сентября 1976 года ещё одна невидимая линия в его внутреннем плане сместилась из столбца «бы» в столбец «есть».

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

Загрузка...