18+
реклама
18+
Бургер менюБургер меню

Станислав Миков – Проект «Сфера-80»: в поисках юности (страница 71)

18

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

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

Но Люба мыслила сигналами.

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

— Ну да, — Люба пожала плечами, словно предлагала просто добавить сахара в чай. — У нас же счетчики К155ИЕ5. У них есть входы предварительной установки. Но они сейчас на земле сидят.

Громов вскочил со стула. Усталость как рукой сняло. Он подлетел к схеме, едва не сбив Любу с ног.

— Покажи!

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

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

— Так… — мозг Громова заработал на форсаже. — Если мы вместо жесткого сброса подадим туда значение из регистра…

— Регистра у нас нет, — осадила его Люба. — Свободных микросхем на плате нет. Места тоже нет. Олег там всё своими проводами заплел.

Эйфория Громова слегка поутихла.

— Тогда как?

Люба закусила губу. Это была привычка, которую Громов замечал и раньше — когда она сталкивалась с

неразрешимой задачей, она начинала грызть нижнюю губу, и это выглядело… трогательно.

— Нам не нужно произвольное смещение, — сказала она медленно. — Нам нужно смещение ровно на одну строку. На 32 байта… или сколько у нас там ширина?

— 32 символа в строке, — задумчиво подтвердил Громов. — А с учётом невидимой области обратного хода луча — 64.

— Точно, 64! Это степень двойки. Это просто один бит, — глаза Любы загорелись тем самым фанатичным огнем, который Громов видел в зеркале, когда ему удавалось сэкономить байт памяти. — Женя, смотри. Если мы будем инвертировать старшие биты адреса… Нет, не так. Если мы просто добавим сумматор? Нет, сумматора нет.

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

— Подожди, — вдруг сказал он. — А если проще? Нам не нужен настоящий аппаратный сдвиг экрана, как на больших терминалах. Нам нужно просто быстро сдвинуть его. Люба, — он резко сменил тон на очень серьезный. — У нас есть свободный порт вывода?

— Адрес вывода… — она нахмурилась. — Ну, мы зарезервировали адрес `F0` для расширения. Там дешифратор стоит, но ничего не подключено.

— Отлично. Если я запишу в порт `F0` число, скажем, 1, это может переключить триггер?

— Может. ТМ2 у нас есть, половинка свободная болтается в узле синхронизации.

— Так вот. Если этот триггер переключит старший адрес видеопамяти… — Громов начал жестикулировать, рисуя в воздухе блоки. — Смотри. У нас 2 килобайта видеопамяти. А микросхемы памяти — РУ2, их там много.

— Их там шестнадцать штук, — вздохнула Люба. — Статика.

— Если мы поставим этот триггер в разрыв адресной шины… скажем, на адрес А10. То при записи единицы в порт, процессор будет видеть ту же память, но со сдвигом? Нет, бред.

Люба вдруг улыбнулась. Улыбка у неё была редкая, немного стеснительная, но преображающая лицо.

— Женя, ты усложняешь. Ты программист, ты мыслишь логикой. А тут надо мыслить

проводами.

Она взяла красный карандаш.

— Давай сделаем так. Мы не будем делать плавную прокрутку текста… Это слишком сложно для переделки готовой платы. Мы сделаем аппаратную подмену адреса начала строки.

— Как?

— Мы возьмём сигнал кадровой развёртки. И задержим его. Просто задержим сброс счётчиков узла вывода на экран на время длительности одной строки.

Громов уставился на неё.

— Задержать сброс… То есть контроллер начнет выдавать данные позже?

— Да. Верхняя строка экрана станет пустой. А то, что было первой строкой, нарисуется второй. Картинка съедет вниз.

— Нам надо вверх! — воскликнул Громов.

— Чтобы вверх — надо сбросить раньше, — парировала Люба. — Но раньше нельзя, там синхроимпульс. Значит, надо просто добавить смещение к счетчику.

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

— Неси плату, — скомандовала она. В её голосе появились металлические нотки главного конструктора. — Тот макет, на котором ты мучаешься.

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

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

— Так, мне нужен один триггер и кусочек провода, — пробормотала она. — Я вмешаюсь в цепь счетчиков.

— Что ты хочешь сделать? — Громов сел рядом, наблюдая за её руками.

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

Громов моргнул.

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

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

— В двадцать пять раз быстрее, — подсчитал Громов. — Люба… ты гений. Но это же «костыль».

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

Громов держал текстолит. Он ощущал тепло паяльника, поднесенного к плате, и тепло Любиного плеча, прижатого к его руке.

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

— Плевать на красоту, — выдохнул Громов. — Мне нужна скорость.

Люба работала быстро. Скальпель в её руке сверкнул, перерезая медную дорожку с противным хрустом. Громов поморщился — ему всегда было больно видеть, как режут живое железо. Но Люба тут же капнула флюсом, и запах сосновой смолы наполнил воздух, перебивая табак.

— ЛА3 приклеим пузом кверху на свободное место, — комментировала она свои действия. — Питание кинем перемычками.

Её пальцы ловко манипулировали тонкими проводками МГТФ во фторопластовой изоляции. Она зачищала концы зубами — варварство с точки зрения ТБ, но Громов нашел в этом что-то невероятно бунтарское.

— Ты зубы испортишь, — сказал он машинально.

— У меня крепкие, — отозвалась она, припаивая проводок к ножке микросхемы. — Не отвлекай.

Следующие двадцать минут прошли в тишине, нарушаемой только шипением припоя и короткими командами Любы: «Поверни», «Держи», «Пинцет».

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

— Всё, — Люба выпрямилась и сняла очки-лупу. На носу остались красные следы от оправы. — Должно работать. Я завела сигнал от неиспользуемого триггера на плате клавиатуры. Если подашь на порт клавиатуры определенный бит… в общем, разберешься. Бит 7. Если он ноль — смещения нет. Если единица — смещение на одну строку.

— Только на одну? — уточнил Громов.

— Ну, я могу сделать на две, но надо еще логику городить. Тебе же для прокрутки надо?

— Для прокрутки идеально, — кивнул он. — Сдвинул на строку, заполнил нижнюю, сбросил триггер, переписал память… Стоп. Если я сброшу триггер, картинка прыгнет обратно вниз.

— Значит, ты должен успеть переписать память, пока триггер держит смещение, — Люба устало потерла глаза. — Женя, я дала тебе аппаратную возможность видеть результат мгновенно. А уж подменить данные в памяти ты можешь в фоне. Пользователь не заметит подмены, если картинка уже сдвинулась.