Изучив режимы ZX-EVO, можно сделать такие выводы:
- Они используют страницы ОЗУ, которые используются в модели 128K - это плохо.
- Они могут включать страницы графики в любое окно по 16К - это хорошо.
- Последовательность байтов и битов сложная - это плохо.
- Экраны или их части располагаются с адреса, отличного от 0 - это плохо.
- Возможна палитра 16->64 цвета - это хорошо.
Что можно улучшить - упростить и ускорить ?:
- Графику расположить с 0 адреса - это упростит и ускорит определения адреса в ОЗУ экрана.
- Использовать другие страницы свыше 8 страниц режима 128K. Это позволит дорабатывать старые игры.
- Адресацию сделать непрерываной. Это упростит копирование спрайтов.
- Биты атрибутов сгруппировать по 4.
- Дополнительные экраны тоже размещать с адреса 0.
- Фон рисовать в нижнем слое, а спрайты в верхнем. Это устранит клешинг атрибутов.
Давайте сделаем новый режим 256x192 NEWATTR CONTINUOUS 2 LAYERS+SELECTOR:
Для работы с графикой в новых режимах будем временно отключать ПЗУ компьютера. Для этого в шине ZX-BUS есть специальный сигнал.
Будет два основных слоя - нижний и верхний, а также вспомогательный слой-селектор. Основные слои похожи на обычные экраны ZX Spectrum, но с оптимизированной адресацией. Слой селектор показывает, из какого слоя отображать точку на экране TV/VGA. 0 - из нижнего, 1 - из верхнего.
Адресация байтов у всех слоев одинаковая. Экран можно представить состоящим из 32х24 клеток размером 8х8 пикселов. У каждой клетки цвет задается байтом NEWATTR. Биты D7-D4 задают цвет единичного пиксела COLOR1, а биты D3-D0 задают цвет нулевого пиксела COLOR0.
Адрес HL в области пикселов по координатам X,Y клетки можно определить так: H=X, L=Y*8 (сдвиг влево три раза).
Адрес HL в области атрибутов по координатам X,Y клетки можно определить так: H=X, L=Y+192 (OR $00C0).
Нужный экран временно подставляется в окно с 0 адреса. Для этого в специальный порт записывается номер страницы.
Чем новый режим лучше стандартного:
- Линейная адресация с 0 адреса упрощает и ускоряет вычисление адреса в области пикселов и атрибутов.
- При копировании блока размером более 8 байтов по-вертикали нет необходимости контролировать переход в другой сектор (треть) экрана, что делалось для старого экрана.
- Возможность ускорения копирования спрайтов с помощью новых комбинаций команд Z80 (змейкой и т.п.).
- Атрибуты задают независимую яркость цветов для 0 и 1 пикселов.
- Нет клешинга атрибутов при движении спрайтов, так как их можно отображать в верхнем слое.
- Не надо сохранять и восстанавливать фон при движении спрайта.
- Использвание дополнительных страниц вне основного ОЗУ позволяет дорабатывать старые игры, использующие все 8 страниц 128 К.




Ответить с цитированием