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