К книге
Проект «Сфера-82»: Цвет и слойГлава 6 Программный участок
13%
Глава 6 Программный участок
6

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

Бледный свет от экрана «Сферы-82» выхватывал из полумрака заваленный осциллограммами стол.

Сбоку легла помятая ведомость.

— Евгений Николаевич, подпишите. Логика, резисторы, пара конденсаторов для фильтров по питанию.

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

— Уже поздно, Саша, — Громов отложил карандаш. — Иди домой. Завтра с утра мы с Алексеем Николаевичем и Липатовым уезжаем в Зеленоград, а вам здесь еще держать хозяйство.

— Я листинги смотрел, — глухо сказал Птицын, не двигаясь с места. — Те, что вы на столе оставляли. Подпрограммы обмена для МикроДОС.

Громов медленно повернулся в кресле. Птицын был отличным монтажником. Он собирал макеты с закрытыми глазами, чувствовал железо кончиками пальцев, умел аккуратно резать дорожки и кидать перемычки из тонкого провода, не устраивая коротких замыканий. Но программная часть всегда оставалась для него черным ящиком, территорией математиков и инженеров-системотехников.

— И много понял?

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

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

— Значит, изучал, — Громов придвинул к себе чистый лист миллиметровки. — Отлично. Тогда у нас инициатива наказуема. Садись, дам тебе задачку.

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

— Смотри сюда, — Громов нарисовал три круга, соединив их жирной линией. — Это наш первый тестовый стенд локального обмена. Три машины «Сфера-82». Они соединены коаксиальным кабелем, на концах стоят оптроны для гальванической развязки, чтобы мы не сожгли порты из-за разности потенциалов. На общем совещании про него сказали вскользь, потому что сейчас важнее цвет, дисководы и Зеленоград. Но это не значит, что связь можно бросить в ящик. Весной к локальной вычислительной сети вернемся всерьез, а пока это важная, но не горящая работа. На ней тебя и можно проверить без риска для всей машины. Понятно?

— Понятно. Скорость пятьдесят шесть килобит в секунду. Я видел результаты на экране, когда вы гоняли тесты перед праздниками.

— Верно. Значит, общая задача такая: к моему возвращению этот стенд должен говорить не просто «работает» или «не работает», а где именно сорвалась передача. Узел молчит, маркер потерялся, сумма не сошлась, блок дошел нормально — всё это должно быть видно на экране без гадания по листингам. Сейчас я это вижу только потому, что сам помню, куда смотреть. Это неправильно.

Птицын кивнул. Его глаза блестели в свете экрана. Он ловил каждое слово, боясь перебить.

— Что мне делать?

— Мне нужна проверочная программа обмена, — Громов постучал пальцем по нарисованным кругам. — Сама передача работает, но отслеживать пакеты глазами через отладчик — плохая работа. На той дискете, что лежит возле машины, моя рабочая копия. МикроДОС у нас — не отдельная вселенная, а CP/M с нашими добавками. В расширенном режиме она знает русские буквы, но штатная разработка под восьмидесятый процессор живет в старом английском режиме. Поэтому включаешь МикроДОС как обычную CP/M, работаешь латиницей: ED, ASM, LOAD. Никаких русских имен файлов, никаких украшений. «LAN.ASM» не трогаешь: там сам порядок обмена и маркер, можешь читать, но редактировать нельзя. Тебе нужен «LSTAT.ASM». Это маленькая служебная программа на ассемблере. Она уже выводит номер узла и счетчик блоков, но делает это криво и почти ничего не пишет в журнал. Твоя часть — дописать строку состояния: номер узла-отправителя, номер принятого блока, контрольную сумму и простой код возврата. Успех, ожидание, ошибка суммы.

Он перевернул карандаш тупым концом к схеме.

— Евгений Николаевич, — Птицын осторожно поднял руку, будто отвечал на занятии. — Я в маркер и прерывания не полезу. Я пока не самоубийца.

— Вот за это уважаю, — сказал Громов. — Маркер ходит по кругу, узел ловит его, цепляет свой блок данных, отправляет дальше. Это уже работает, и ломать это тебе рано. Тебе нужен хвост, который смотрит на готовый результат и по-человечески пишет его на экран. Комментарии к исходному коду смотри по моей рабочей тетради, вон там в углу валяется. Почерк у меня, как у врача после ночного дежурства. Если не разберешь сокращения, попроси Любу: она после всех таблиц по видеопамяти уже читает мои каракули лучше меня.

— Контрольную сумму простым сложением байтов делать?

— Исключающим ИЛИ, — отрезал Громов. — Для лабораторного стенда хватит.

Он уже хотел вернуть карандаш к схеме кольца, но задержал руку над бумагой. В задаче со связью Птицыну доставался самый безопасный край работы: взять готовый результат и вывести его так, чтобы живой человек не гадал по внутренностям программы. Для первого шага этого было достаточно. Но такой же край торчал и из другой темы, куда Громов до сих пор никого не подпускал.

— И запомни принцип, — сказал Громов. — Программа в такой работе нужна не для красоты. Она должна быстро показать, что железо делает на самом деле. Сегодня это узел связи: пришел блок, не пришел, сошлась сумма, сорвался маркер. Завтра Олег соберет макет цветного вывода, и там понадобится такая же проверочная штука. Чтобы не спорить над экраном на глазок: этот бит отвечает за фон, этот за знак, этот пока запасной. Дал байт — получил ожидаемую картинку. Не получил — ищешь ошибку в плате, адресе порта или в программе.

Птицын поднял глаза от листа.

— Мне и цвет трогать?

— Пока нет, — Громов подчеркнул слово «пока» короткой чертой. — Сначала сеть. Но таблицу режимов можешь начать готовить уже сейчас. Когда вернусь, из нее получится маленькая пробная программа: вывести полосы, шахматку, все сочетания цвета знака и фона, прогнать несколько адресов подряд. Это не сложнее по мысли, чем твой «LSTAT»: не лезешь внутрь видеогенератора, а даешь ему понятные числа и смотришь, что вышло наружу.

Соседний стол жалобно скрипнул. Из-за стойки с измерительными приборами вынырнул Олег Тимофеев. Его клетчатая рубашка была расстегнута на верхнюю пуговицу, волосы растрепаны на затылке. В руке он держал лист, оставшийся после общего разбора цвета: «80М — приставка», «82 — два режима», «УПИМЦТ — через согласование».

— Раз уж ты сам сказал про цвет, — произнес Олег, подходя к их столу, — я это оформлю как производственную необходимость. Локальный обмен — поэзия, Женя, но мне тоже нужно закрыть свое. Мне нужны числа, чтобы этот лист превратился в схему, а не в благие пожелания.

Громов отодвинул лист со схемой сети и достал новый.

— Хорошо, будут тебе числа, — сказал он. — Саша, ты тоже записывай. Базовый текстовый экран: тридцать два знакоместа в строке, двадцать четыре строки. В экранной области лежат коды знаков, матрица восемь на восемь сидит в ПЗУ знакогенератора. Значит, текущий текстовый экран — семьсот шестьдесят восемь байтов кодов.

Птицын быстро записал: 32 × 24 = 768.

— Дальше атрибуты, — продолжил Громов. — Один байт на знакоместо: три бита на цвет знака, три на фон, два в запас. Еще семьсот шестьдесят восемь байтов нижняя граница. Если дать запас под удобную адресацию и служебные признаки, закладывайте около полутора килобайт. Для «Сферы-80М» это отдельная приставка или боковая плата через порт, чтобы старые программы под МикроДОС писали символы как раньше и не знали, что рядом появился цвет.

— А полная сетка точек? — спросил Птицын.

— Только как верхняя оценка для «Сферы-82», не как обязательный режим, — ответил Громов. — Двести пятьдесят шесть на сто девяносто две точки дают сорок девять тысяч сто пятьдесят две позиции. Один бит на точку — шесть тысяч сто сорок четыре байта. Три бита на точку для восьми цветов — восемнадцать килобайт при плотной упаковке. Если класть точку в байт для удобства, почти сорок восемь килобайт. В таблице прямо напиши: для старой машины это только справочная верхняя оценка.

Люба Ветрова вошла в лабораторию, бесшумно ступая в мягких рабочих тапочках. В одной руке она держала кружку с давно остывшим чаем, а в другой — аккуратно смотанный провод.

— И отдельной колонкой — корпуса микросхем, место на плате и разъемы, — сказала она, останавливаясь рядом с Олегом. — Полтора килобайта тоже не берутся из воздуха. Вы дорожки считали, теоретики? Если в «восьмидесятку» добавить ОЗУ и логику дешифрации, это нужно будет не только нарисовать, но и смонтировать так, чтобы потом можно было найти неисправность без гадания.

— Поэтому выходной конец может быть общим, а вход разный, — Громов повернул лист к ней и Олегу. — Три цветовые линии, синхронизация, развязка, согласование с переделанным телевизионным шасси — это одна физика. Для «Сферы-80М» — дополнительная приставка с собственным узлом согласования. Для «Сферы-82» нормальное сопряжение с шиной, атрибуты в штатной логике и отдельная строка в таблице под ограниченную графику. Сначала текст, атрибуты и проверяемые границы.

Олег положил линейку поперек листа, обозначая край будущей схемы.

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

Птицын быстро перенес это на свой лист и впервые вмешался без робости:

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

Громов посмотрел на него уже внимательнее.

— Правильно мыслишь. Еще добавь поле с одинаковыми буквами: скажем, вся строка из «А», потом из «Ж», потом цифры. Знакогенератор отдельно, атрибуты отдельно. Если поплывет форма буквы — виноват не цвет. Если буква нормальная, а фон не тот — смотришь атрибут или дешифрацию. Если на разных знакоместах цвет меняется через одно — ищешь адресную линию. Вот это и есть программно-аппаратное сопряжение, Саша: программа задает железу такие вопросы, на которые железо не может ответить туманно.

Люба поставила кружку на край стола, но листа не коснулась: у нее была привычка не двигать чужие расчеты без спроса.

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

— Ветрова, ты сейчас оскорбила всю культуру красивых жгутов, — сказал Громов.

— Нет, Женя. Я ее спасаю от тебя.

Олег коротко фыркнул, но спорить не стал. Птицын улыбнулся краем рта и аккуратно дописал рядом с таблицей: «разъемы подписать».

— А если Олег адрес порта потом поменяет? — спросил он. — Я же тогда всю пробную программу переписывать буду?

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

Он постучал карандашом по пустому месту под будущей таблицей.

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

Олег положил перед Птицыным свой лист с тремя строками.

— Вот это и нужно привести в порядок. Режимы, адреса портов, распределение битов атрибута, нижняя оценка памяти и запас. Это внутренняя владимирская работа: за две недели нам нельзя привязать железо к неверному числу. Я буду разводить дешифрацию не по вдохновению, Женя. Мне нужны проверяемые аппаратные режимы на бумаге.

— Будут тебе режимы.

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

Он сдвинул оба листа на край стола, прямо перед Птицыным.

— Бумаги перед тобой, Саша, — сказал он. — Сегодня вникаешь в постановку, а завтра, пока мы будем трястись в электричке и устраиваться в Зеленограде, садишься за работу. Дописываешь хвост для стенда локального обмена и гоняешь тесты под запись. Это первое. И второе — сводишь всю эту арифметику по цветам, битам и портам в одну нормальную таблицу. Чтобы Олег мог сверяться с ней при разводке, Люба — при компоновке, а я после возвращения не тратил время на расшифровку, когда сяду писать пробную программу.

Птицын моргнул, переводя недоверчивый взгляд с Громова на листы.

— Я? Таблицу видеорежимов?

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

Люба хмыкнула.

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

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

Громов вытащил из-под стола тяжелый кожаный портфель. Щелкнули металлические замки. Внутрь отправились папки со спецификациями, командировочные бумаги, черновики предложений для МИЭТа и толстый блокнот с расчетами обмена по шине. Вес картона и бумаги приятно оттягивал руку, придавая грядущей поездке материальную весомость.

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

Предыдущая главаГлава 6 из 47Следующая глава