Вернуться на ГЛАВНУЮ страницу
Вернуться к СПИСКУ СТАТЕЙ


Автор: Дмитрий Быстров aka Alone Coder
Дата:
13.05.2007 г.
Примечание: опубликовано в электронном журнале "InfoGuide" №10


Аппаратный скроллинг на ПК ATM-turbo 2+ (v7.xx)

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