Дисплей издавал едва слышный, высокий свист строчной развертки. Звук тонкой иглой сверлил уши, смешиваясь с гудением блока питания «Сферы». На монтажном столе лаборатории лежал распластанный макет видеоплаты. От системной платы к ВКУ тянулся аккуратно связанный жгут проводов; рядом лежали листы с таблицей уровней и пометками Наташи.
Олег Тимофеев чуть отодвинулся от экрана, потирая переносицу. После трех дней возни ВКУ перестало быть главным подозреваемым: дисплей держал синхронизацию, уровни красного, зеленого и синего каналов совпадали с таблицей, белое поле оставалось белым, черное — черным. Снаружи всё выглядело почти прилично. Как раз это Олегу и мешало.
Наташа Рогова стояла сбоку, скрестив руки. Взгляд ее скользил не по картинке, а по зеленым линиям на трубке осциллографа, выведенного на край стола.
— Дисплей живой, — сказала она. — Теперь проверяем саму «Сферу». Саша, запускай второй режим.
— Не сглазь, — сказал Олег. — Эти коробки любят обижаться, когда про них говорят хорошо.
Наташа не улыбнулась, но лист с таблицей уровней прижала к столу спокойнее. За последние дни Олег уже дважды обвинял ВКУ в грехах, которые потом оказывались на совести видеоплаты, и оба раза она терпеливо возвращала его к контрольным точкам.
— Пусть обижается после проверки, — ответила она. — Сегодня я хочу хотя бы один раз исключить исправный прибор и больше к нему не возвращаться.
У клавиатуры «Сферы-82» сидел Птицын. Он заметно старался держаться спокойно, но пальцы уже лежали на клавишах. Маленькую проверочную программу он загрузил с дискеты заранее: несколько коротких ассемблерных подпрограмм помещались в памяти и дальше переключались с клавиатуры.
Предыдущие проверки он уже показывал. Сначала была монохромная сетка для геометрии экрана: рамки, диагонали, контрольные метки по углам. Потом следовал атрибутный режим: монохромное точечное поле и байты цветовых атрибутов поверх него. Сегодняшний тест касался грубой цветной графики с крупным цветовым элементом — варианта для учебных графиков, простых схем и диаграмм.
— Сначала обычное поле, — сказал Птицын, глядя на экран. — Потом цвет поверх. Потом второй режим.
Олег махнул рукой, но без прежнего раздражения.
— Только без защиты диссертации, Саш. Показывай по порядку. Если поедет, остановишься и скажешь, на каком месте.
— У меня метки стоят на каждом переходе, — сказал Птицын. — Если съедет, будет видно не по ощущению, а по строке.
— Вот это уже разговор.
На экране появилась тонкая монохромная сетка. Белые линии стояли ровно, нижняя строка держала место, контрольные точки по углам совпадали с отметками на бумажной рамке, которую Наташа закрепила на кромке экрана.
Птицын нажал следующую клавишу.
Сетка осталась той же, но отдельные поля получили цвет: заголовок стал красным, левая шкала зеленой, несколько прямоугольников подсветились синим. Это был уже знакомый путь. Монохромное точечное поле оставалось основой, а рядом с ним видеоплата брала байты цветовых атрибутов. Программа писала картинку почти так же, как раньше, только добавляла данные для цветного вывода.
— Первый режим держится, — сказала Наташа. — Олег?
Олег склонился к экрану, потом к осциллографу.
— Держится. На краях чуть грязнее, но эта беда переживет до завтра.
Он сказал это с видимым усилием. Еще утром Олег готов был доказывать, что любая грязь на цветной картинке происходит от ВКУ, плохого кабеля, влажности воздуха и того, что кто-то не так посмотрел на кинескоп. Теперь спорить с прибором было бессмысленно: прибор показывал, что цветной выход слушается.
Птицын ждал. Наташа заметила это и кивнула.
— Давай второй.
Птицын набрал короткую команду. Экран погас на долю секунды, будто машина задумалась. Потом вместо сетки появилась мелкая цветная мозаика, выстроенная в подобие диаграммы. Красные, зеленые, желтые и синие клетки были крупнее физических точек экрана, но на расстоянии вытянутой руки уже складывались в плотную сетку: столбцы, лестница, несколько прямоугольных пятен.
Олег выпрямился.
— Вот ради этого и стоило мучить ВКУ.
Птицын улыбнулся, но рано.
Через несколько строк картинка поплыла. Красный столбец сместился вправо относительно контрольной сетки, зеленая полоса разорвалась на середине строки, а в верхней части экрана один ряд цветных клеток повторил предыдущий.
Олег наклонился к макету.
— Стоп. Это внутри машины.
— Я тоже так думаю, — сказала Наташа.
Она подвинула осциллограф ближе и переключила измерительный провод на контрольную точку видеоплаты. На трубке прибора побежали короткие пачки импульсов. Телевизионные уровни держались чисто. Синхронизация стояла на месте. Срыва развертки не было.
— Дисплей принимает то, что мы ему даем, — сказала Наташа. — А даем мы ему сбитый порядок чтения.
Олег уперся ладонями в край стола.
— В атрибутном режиме контроллер молотит строку за строкой, — заговорил он. — Считал байт монохрома, вывел восемь точек, подтянул байт атрибута.
Наташа придвинула к себе чистый лист и быстро начертила крупную сетку.
— Для грубой графики шаг адресного счетчика меняется, — она обвела ручкой одну из клеток. — Здесь используется отдельный цветовой буфер. Каждое значение должно удерживаться на экране квадратом четыре на четыре физические точки.
— Если гнать этот массив на прежней скорости, контроллер просто проскакивает адреса, — кивнул Олег. — Счетчик улетел вперед, телевизионный луч еще дорисовывает старый цветной блок. Вот фаза и ползет в сторону.
Птицын повернулся от клавиатуры.
— Значит, моя программа поймала другую ошибку. Прошлая сетка проверяла геометрию, а здесь проверяется чтение памяти во втором режиме.
— Да, — сказала Наташа. — Вот это и есть сегодняшний результат, даже если он выглядит уродливо.
Птицын посмотрел на экран уже иначе. Испорченная диаграмма перестала быть провалом и стала пойманной неисправностью.
Олег снова уставился на макет. Ему явно хотелось немедленно что-нибудь перепаять. Это было почти физическое движение: рука сама искала пинцет, кусачки, обрезок МГТФ.
— Для стенда можно сделать просто, — сказал он. — Пусть Саша заранее развернет крупную картинку в памяти: один и тот же цвет повторит четыре раза по строке и еще на четырех строках вниз. Тогда старый счетчик прочитает готовое поле, и на экране всё встанет ровно.
— Встанет, — сказала Наташа. — Только это будет не второй режим, а обман для опыта. Мы сожрем память развернутой картинкой и заставим программу делать работу видеоплаты. Второй режим нужен как раз затем, чтобы хранить маленький буфер, а удержание цвета на четыре точки и четыре строки делало железо.
Олег поморщился.
— Я знаю.
— Тогда не делай вид, что это только твоя плата. Громову всё равно понадобится описание для нижнего слоя МикроДОС: какой порт, какие значения, где лежит буфер, как вернуть обычный экран.
Олег дернул плечом, но промолчал. Имя Громова действовало лучше любого довода: все знали, что тот потом найдет в чужой схеме не только ошибку, но и виноватого.
— Саму МикроДОС мы сегодня не трогаем, — продолжила Наташа уже тише. — Но если ты сейчас заведешь опыт на одном листке, а Саша на другом, через неделю вы оба будете вспоминать адрес по памяти. А Женя будет спрашивать, почему это вообще называется документацией.
— Сначала надо заставить железо считать правильно.
— Да. И сразу записать, что именно мы заставили его делать.
Дверь лаборатории открылась. Вошел Андрей Горелов. В руках у него была тонкая папка с несколькими листами. Он остановился у порога, посмотрел на цветную мозаику на дисплее, потом на осциллограф.
— Я не вовремя?
— Как раз вовремя, — сказала Наташа. — Дисплей уже проверили. Ошибка в видеоплате.
Горелов подошел ближе.
— По экрану видно только, что красное убежало от зеленого.
— Сейчас покажу, куда именно, — сказал Олег.
Он коротко объяснил: первый цветной путь с признаками поверх обычного поля работает, второй режим с крупной точкой сбивается по адресам, ВКУ исправно, проблема в чтении видеопамяти. Горелов слушал молча. Только один раз поднял руку, остановив Олега.
— Как программа включает второй режим? — спросил Горелов.
— Сейчас Птицын пишет прямо в порт, — ответил Олег. — Для стенда это годится.
— А для рабочей машины?
— Для рабочей мы передадим Громову таблицу адресов и значений, — пояснила Наташа. — Громов заведет системный вход в нижнем слое МикроДОС. Прикладная программа будет просить нужный режим через систему.
Горелов одобрительно кивнул, опуская ладонь на картонную папку.
— Для закрытой 82В это принципиальный момент. При смене дешифратора экранные бланки полностью сохранятся. Запрос через систему оставит физические адреса на базовом уровне.
Олег усмехнулся:
— Вот так понятно.
— Привыкаю говорить по-человечески, — ответил Горелов с легкой улыбкой.
В дверях появились Володя Артемьев и Зоя Мельникова. Они пришли из соседней сборочной комнаты. Володя держал рабочий чертеж системной платы. Зоя прижимала к груди планшет с ведомостью комплектовки. Оба замерли на пороге, разглядывая рваные цветные прямоугольники на экране ВКУ.
— Можно? — осторожно спросил Володя.
Ребята пришли с конкретным вопросом сборки. Пустое место под цветовой узел требовало точного списка деталей, любая добавленная микросхема или панелька заставляла Зою оформлять новую заявку на склад.
— Заходите, — сказала Наташа. — Цветовой участок пока в сборку не отдавали.
Володя заметно выдохнул.
— Мы как раз за этим. Базовые платы на столах, по ним вопросов нет. Там всё по утвержденному листу: память, системная шина, питание, разъемы. А около видеовывода оставлено место под будущий цвет. Ребята спрашивают, это место пока обходить или уже ставить хотя бы панельки.
Он говорил спокойно, без попытки давить на Олега. Скорее боялся, что из-за одного неточного слова его отправят обратно с пустыми руками, а на сборочном столе снова начнут гадать.
Зоя разложила рядом ведомость.
— Я детали по цвету пока не брала, — сказала она. — Только отметила, что место есть. Если сейчас скажете ставить разъем или панельки, я выпишу отдельно. Если рано, так и напишу: участок ждать.
Наташа посмотрела сначала на Олега, потом на пустую область на чертеже. Решение было неприятным, но простым: нельзя превращать незавершенную схему в приказ для сборки.
— Панельки под логику пока отложим, — сказала Наташа. — Питание и разъемы согласуем с Любой. Базовые платы паяйте по утвержденному листу. Место под цветовой узел просто обведите карандашом и оставьте до отдельной схемы.
Володя развернул на свободном краю стола рабочий чертеж. Плотная бумага легла рядом с осциллографом. Синие линии показывали системную шину, память, контуры будущего видеоблока и пустую область.
— Значит, я прямо на ватмане помечаю, — Володя достал карандаш. — Чтобы в сборочной комнате не гадали, почему тут пусто. Если спросят — отправляю к вам.
Зоя молча внесла в ведомость только стандартную комплектовку.
Горелов посмотрел на записи Володи, затем перевел взгляд на Птицына.
— А в проверочной программе порт как задан?
Птицын потянулся к своим бумагам.
— В самом листинге есть комментарий. Плюс я составил отдельную табличку: номер порта, значение для обычного точечного поля с байтами атрибутов поверх, значение для грубой графики с крупным цветным элементом.
— Эту табличку держи под рукой, — кивнул Горелов. — Для Громова понадобится точная таблица адресов; по ней закрытая группа потом сверит бланки.
Дверь лаборатории скрипнула. Вошел Иван Михайлович. Он окинул взглядом стол, съехавшие цветные блоки на экране и Олега, сжимающего пинцет так, будто это холодное оружие.
— Ну? — спросил Михалыч. — Цвет горит, счастья нет?
— Горит, — отозвалась Наташа. — Второй режим едет мимо адресов. Обычные восемьдесят вторые можно собирать дальше, цветной кусок пока не трогаем. Как только Олег доведет адресацию до ума, отдадим Громову таблицу портов и областей памяти.
Михалыч посмотрел на чертеж Володи. Для него техническая заминка измерялась людьми, которые сейчас сидят за соседними столами в ожидании работы.
— Сколько плат сейчас в сборочной комнате?
— Пятнадцать заготовок, Иван Михайлович. Две уже начали по базе.
— Что скажешь людям?
Володя посмотрел в свои записи.
— Паять утвержденную основу. Место под цвет обвести карандашом и пропустить. Если кто-то наткнется на свободный вывод или непонятную площадку — при любых сомнениях нести плату сюда.
Зоя добавила:
— Я детали со склада под цвет пока не выписываю. Подготовлю список, когда Наталья и Люба дадут отмашку.
Михалыч одобрительно хмыкнул.
— Добро. Спорный кусок ждет отдельной схемы. Чтобы не получилось так: утром провод припаяли, вечером забыли откусить.
Он сказал это без злости, но Олег все равно поднял глаза: попало точно по адресу.
Олег кашлянул.
— Это вы на меня смотрите?
— На тебя, — сказал Михалыч. — У тебя руки быстрые. Иногда быстрее головы.
Олег хотел ответить, но передумал. Слишком похоже было на правду.
Следующие несколько часов лаборатория жила трудной, монотонной рутиной. Птицын прогонял тест, записывал адреса сбоев и менял порядок заполнения видеобуфера. Олег с паяльником висел над макетом, перебирая логику дешифрации. Наташа сидела рядом, сразу пресекая любые попытки скрестить два разных механизма вывода.
В обычном режиме видеоконтроллер читал экранную область как непрерывный поток точек, параллельно подхватывая байт из памяти атрибутов. Во втором режиме адресный счетчик шел по отдельному цветовому буферу, где каждый байт формировал крупный цветовой элемент размером четыре точки по горизонтали на четыре строки развертки вниз.
Из-под стола, от пучка питающих шин, поднялась Люба Ветрова. Она стряхнула пыль с рукава халата и положила щуп осциллографа на край столешницы.
— Олег, у тебя логика питание просаживает, — сообщила она. — На ярких цветовых блоках по шине идет звон. Завтра вы начнете искать ошибку адресации, хотя причина в обычном дребезге из-за падения напряжения.
— У нас всегда виновато питание, — отозвался Тимофеев, не отрываясь от схемы.
— Вы вспоминаете о нем в последнюю очередь. Зоя! — Люба повернулась к девушке, перебиравшей ведомости у соседнего стола. — Запиши в комплектовку. Обязательны блокировочные конденсаторы прямо у микросхем дешифрации видеопамяти. И землю видеоплаты тянуть отдельным проводом, без петли через ВКУ.
— Записала, — кивнула Зоя.
— Если Тимофеев попытается сэкономить место и припаять что-нибудь из старых запасов, сразу зови меня.
— Я все слышу, — возмутился Олег.
— Поэтому говорю вслух, — парировала Ветрова.
Птицын хмыкнул, глядя на экран.
К вечеру на макете появилась проверяемая схема. Олег вывел управляющую линию режима на отдельную контрольную точку. Наташа проверила щупом уровни, подтверждая правильную работу адресного счетчика. Затем она придвинула к себе чистый лист и начала выписывать технические параметры для команды программистов.
— Подготовим Громову точные данные, — пояснила она, вычерчивая колонки. — Порт управления, значение режима, базовые адреса экранной области и цветового буфера. Без этой таблицы он начнет угадывать логику по обрезкам проводов.
Птицын запустил первую тестовую программу. На экране развернулась ровная таблица: тонкие линии, подкрашенные поля, служебная строка внизу. Затем он ввел команду смены видеорежима. Таблица исчезла. Возникла крупная сетка цветных квадратов. Красные элементы стояли ровно, зеленая диагональ держала форму, а синий прямоугольник больше не смещался в сторону.
— Еще раз туда и обратно, — сказала Наташа.
Птицын нажал клавишу. Таблица. Цветная сетка. Таблица. Цветная сетка. Нижняя контрольная строка каждый раз возвращалась на место.
Олег выдохнул так, будто все это время держал в груди воздух.
— Жить будет.
Наташа посмотрела на экран дольше обычного. Ей тоже хотелось согласиться сразу, но привычка к повторяемости была сильнее радости.
— На макете, — поправила она.
Олег не стал спорить. Он только кивнул, устало и почти благодарно.
— На макете жить будет. Дальше будем делать по-человечески.
Горелов пододвинул свой журнал.
— Для рабочих бланков 82В пока берем обычное точечное поле с байтами атрибутов, — произнес он, вписывая строку. — Крупная графика остается стендовой проверкой. Ждем системного входа через МикроДОС.
Олег кивнул, принимая условие без спора.
Михалыч удовлетворенно крякнул.
— Вот теперь дело. Наташа, как допишешь параметры — оформляй чистовик схемы. Завтра пустим этот узел в серию.
Олег отложил пинцет. Возле паяльника лежал короткий монтажный провод с зачищенными концами — временная обходная перемычка, которую он оставил без дела. Он подцепил проводок ногтем, повертел в пальцах и сбросил в коробку с отходами.
Птицын замер перед монитором. Цветные элементы держались на своих местах, без сдвигов по сетке. Он торопливо ударил по клавишам, очистил буфер и вывел точечное поле. Дождался заполнения атрибутами. Снова переключил адресацию на грубую графику.
Птицын осторожно провел пальцем по краю клавиатуры и запустил переход еще раз.
Таблица.
Цветное поле.
Таблица.
На третьем переходе Олег не выдержал:
— Саша, хватит гонять. Мы уже поверили.
— Я не для вас, — сказал Птицын, не отрывая глаз от экрана. — Я для себя.
Олег хотел съязвить, но не стал. Наташа молча поставила на листе жирную галочку.