— Скорость плывёт, — признал он. — Нагрузку поставили, мотор чуток проседает. Длительность импульсов гуляет. Для «длиннее‑короче» это смерть.
Алексею ответа не требовалось. Всё было и так понятно.
В другом, ещё не наступившем для окружающих времени перед глазами стоял знакомый экран: чёрный фон, белая надпись. Раз за разом: треск, ожидание, и через пять минут вместо игры — короткое: «Tape loading error». А потом — опять перемотка, опять «нажмите play».
Здесь он только подходил к той же стене, но уже знал, сколько раз о неё можно удариться лбом.
— Нам нужен код, которому всё равно, что там с длительностью, — сказал он. — Фаза. Или хотя бы чередование по фронтам. Чтобы важны были не миллисекунды, а последовательность.
— То есть? — не понял Саша.
— Представь качели, — сказал Алексей. — Ты не считаешь точное время, а смотришь: пошли вверх, пошли вниз. Можно закодировать «ноль» как фронт в одну сторону, «единицу» — в другую. Тогда, если качели поедут чуть быстрее, последовательность не изменится.
Игорь задумчиво кивнул.
— Фазовая манипуляция, — сказал он. — Для этого нам понадобится либо более хитрый формирователь, либо часть задачи переложить на программу. То есть считать не длительность, а порядок смены.
— Именно, — подтвердил Алексей. — Мы и так собираемся программой смотреть на каждый такт. Добавить ещё одну проверку — не велика беда.
Евгений ухмыльнулся.
— Как говорил один наш программист, — заметил он, — любое железо можно исправить программой. Ты предлагаешь ровно это.
— Я предлагаю подгонять мир под пользователя, а не пользователя под мир, — возразил Алексей. — Потому что у нас есть мы, трое могучих умов с золотыми руками. А там будут тысячи людей с руками разной кривизны и магнитофонами разной усталости.
— Ты оптимист, — отрезал Евгений. — Думаешь, у нас будет «тысячи».
— Если будет десяток, мне уже спокойнее, — ответил Алексей. — Но пусть хотя бы им не придётся вместо задач по физике разбираться, почему у них повернулся фронт.
* * *
Фазовый эксперимент занял две недели.
Днём Алексей рисовал схемы, менял местами триггеры, ругался с Игорем, который пытался засунуть весь анализ в железо.
— Я хочу, чтобы на выходе был сразу байт, — ворчал Игорь. — Вот сюда подаю шум, отсюда получаю цифру. Всё. А ты мне предлагаешь оставить шум, а цифру вытаскивать мозгами машины.
— У машины мозги уже есть, — упрямо отвечал Алексей. — У тебя их на плате всего десяток К155. И к каждому надо потом бежать с паяльником. А программу я перепишу ночью из тетради — и всё.
Ночью Евгений на ЕС‑ке гонял модель: писал короткие программы, которые принимали на вход псевдосигнал с фазовыми сдвигами и проверяли, насколько криво можно его исказить, пока всё ещё удаётся восстановить исходную последовательность. В листингах фигурировали странные слова «PHASE0», «PHASE1», таблицы переходов.