Info Guide
#10
30 апреля 2007 |
|
Возможности Спектрума - Аппаратный скроллинг на ZX Spectrum.
Я откопал у 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
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября