Из журнала Info Guide #10, Рязань, 05.2007 Аппаратный скроллинг Я откопал у ATM turbo 2+ недокументиро- ванную фичу - аппаратный скроллинг. Фича полезная для игр и прессы и, к сожалению, отсутствующая почти на всех других моделях ZX Spectrum. ATM2, GMX, Sprinter - вот, вроде, и весь список железок,где она есть. Аппаратный скроллинг на ATM2 (обращаю ваше внимание: на ATM1 ничего подобного нет!) получается за счёт того,что счётчики растра и видеоадресов раздельны, а в текс- товом режиме (в отличие от графических) счётчики видеоадресов считают в том числе на бордере. Сигнал CROW (прибавить 64 к адресу) уп- равляется через мультиплексор D64 (по сиг- налу RG2).Таким образом,в моменты времени, когда V2<>B6, можно нащёлкать любой адрес, делящийся на 64. А чтобы нащёлкать любой адрес, делящийся на 8, надо пожертвовать верхними 8 строками основного экрана (за- мазать их чёрным):изначально включить тек- стовый режим, а выключить его на 0..7-й строке. Остаётся 192 строки, которые можно использовать по своему усмотрению. Эту возможность я обнаружил чисто слу- чайно.Во время редактирования документации по V9990 мне захотелось посмотреть, какие прошивки на ATM2 (у ХЛ8,а может,и у микро- контроллера) следует заменить и что ещё сделать в железе (перебросить проводки,по- ставить вместо ХЛ8 другую микросхему...), чтобы на ATM2 появился аппаратный скрол- линг. И оказалось, что не нужно менять ВООБЩЕ ничего! За этим последовала (в обстановке край- ней секретности ;)) лихорадочная сборка демонстрации CATDEMO. Демонстрация была выпущена в виде загадки - предлагалось угадать,как работает эффект.Однако угадать никто не смог, из чего я сделал вывод, что данная фича не выпячивалась разработчиками (информация о ней не дожила в виде слухов) или просто не была им известна. Исходники CATDEMO лежат у меня на сайте http://alonecoder.narod.ru/zx/ Предлагаю всем желающим использовать дан- ный эффект в своих программах брать куски кода именно оттуда, и вот почему. 1. Я упарился настраивать времянки. Пона- добилось примерно две сотни промежуточных версий. В результате настройки весьма хо- роши - ничего не дрожит, даже если преры- вание приходится на чрезвычайно долгую ко- манду. 2. Чтобы это работало на будущих моделях АТМ, все времязависимые куски, начиная от входа в обработчик прерываний, работают в нетурбо-режиме,а остальная программа может включать турбо. 3. В CATDEMO уже предусмотрены (и исполь- зуются) процедуры, позволяющие рассматри- вать видимый экран как кусок большой кар- тинки,с адресацией по номеру верхней види- мой строки. 4. Поддержка в эмуляторах упростится, если во всех программах будет использоваться один и тот же кусок кода. Потактовая эму- ляция всех глюков реального железа - дело очень трудное и неблагодарное. Для данного кода достаточная модель выглядит следующим образом. Рассмотрим экранный адрес (в режимах EGA, Multicolor, Text), состоящий из час- тей: 000bS1 BMMMMM MMLLLLLL, где: S - номер экрана; Bb - горизонтальная координата внутри знакоместа; LLLLLL - младшие счётчики; MMMMMMM - старшие счётчики. 1. Если включен текстовый режим, то в начале экрана MMMMMMM=0, потом каждую 8-ю строку MMMMMMM++. 2. Если включен графический режим,то ка- ждую строку MMMMMMMLLLLLL+=40. 3. Если на бордере переключились из гра- фического режима в текстовый,то MMMMMMM++. Основной экран (в режимах EGA, Multico- lor, Text) начинается на 56-й строке после INT. В строке 224 такта в нетурбо-режиме и не менее 320 тактов в турбо-режиме. Текстовый экран сдвинут на одно знако- место вправо относительно EGA/Multicolor экрана. Уточняю потому, что, может быть, удастся использовать верхние 8 пиксельных строк (которые в демке чёрные) под тексто- вые индикаторы TIME/LIVES/SCORE. Если ис- пользовать только несколько знакомест в этих 8 строках,то это не будет стоить про- цессорного времени,т.к.в этом случае вывод информации можно организовать во время ве- рхнего бордера, вместо задержек. Если во время обратного хода горизонта- льной развёртки (кроме переходов со строки номер 8x+7 на строку номер 8x+8) включить текстовый режим (до HR), а потом выключить (после HR), можно дублировать графическую строку. Т.е.делать масштабирование по вер- тикали или волны. * * * Чтобы скомпилировать мои ATM-овские ис- ходники,нужно в UnrealSpeccy поставить мо- дель ATM 7.10 и подключить особую прошивку ПЗУ: glukatm.rom (на реале она,скорее все- го, работать не будет, т.к. не инициализи- рует ОЗУ ФАПЧ - впоследствии будет исправ- лено). Эта прошивка в области 48k бейсика содержит процедуры, необходимые для работы драйвера памяти ALASM (на диске ALASM с этим драйвером называется boot ). То же относится к компиляции исходников Ball Quest под ATM. CATDEMO сделана на ос- нове исходников Ball Quest , поэтому под- гружается много лишних модулей. Всё, что относится к теме данной статьи, располага- ется в главном модуле CATDEMO.H . Alone Coder