Я откопал у 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