Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура и программирование Dendy.doc
Скачиваний:
9
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Спрайты. Контроллер dma.

Со спрайтами все очень просто. В качестве спрайтов выступают все теже иконки знакогенератора (определенного, «как знакогенератор спрайтов» - см. регистр $2000 - бит 3). Внутри PPU есть отдельно адресуемая (от основного адресного пространства PPU – 16k) память спрайтов, размером 256 байт. Эта память хранит «записи» о 64 спрайтах, размер каждой записи 4 байта. Располагаются записи последовательно от младших адресов.

Формат записи следующий:

Байт записи

Биты

Назначение

0

Абсолютная координата верхнего левого угла спрайта по вертикали.

1

Номер иконки из знакогенератора

2

Атрибуты спрайта

7

Отражение спрайта относительно вертикальной оси. 0 – Обычный; 1 - Зеркальный

6

Отражение спрайта относительно горизонтальной оси. 0 – Обычный; 1 - Зеркальный

5

Приоритет спрайта. 1 – Спрайт перед фоном; 0 – Спрайт за фоном

4-2

Не используются

1,0

Два старших бита цвета (аналог атрибута цвета для фона)

3

Координата верхнего левого угла спрайта по горизонтали.

Таблица 4.

Спрайты нумеруются начиная с нуля. После вывода нулевого спрайта (а он может быть в любом месте экрана) устанавливается бит 6 регистра $2002 PPU. Запись/чтение в/из память/и спрайтов производится при помощи регистров $2003 (адрес) и $2004 (данные). При каждой операции адрес автоинкрементируется на 1.

Существует более быстрый способ записи в память спрайтов – запись через контроллер DMA. Контроллер DMA занимает в адресном пространстве CPU один адрес - $4014. При записи в этот порт числа $HH, контроллер DMA отправляет в память спрайтов содержимое 256-ти ячеек памяти, начиная с адреса = $HH x $100. (Например: при записи в регистр контроллера DMA $02 – в память спрайтов отправится содержимое ячеек $0200-$02FF). В программах рекомендуется использовать именно этот способ записи – как наиболее быстрый (около 100мкс.)

Отражение экранных страниц.

Как уже упоминалось выше – в Денди установлено 2k VRAM (сразу еще раз ругнемся на разработчиков – пожалели еще одну микросхему ОЗУ). Да именно пожалели, если посмотреть на карту адресного пространства PPU (см. выше) – то можно видеть, что реально видеопроцессор может работать с четырьмя страницами VRAM. Оно так и бывает, если на картридже установлены недостающие 2k VRAM – уймись программист или раскошелься пользователь, если разработчик решил сэкономить!

Но вернемся к архитектуре – какие возможности добавляют нам лишние 2k VRAM?

Рассмотрим все по порядку …

PPU Денди обеспечивает такой эффект, как «скроллинг» фонового рисунка (независимо от спрайтов) – причем, абсолютно аппаратно. Скроллинг может быть как горизонтальным, так и вертикальным или и тем и тем сразу (по диагонали). Экранные страницы имеют следующую пространственную модель:

3 ($2800)

4 ($2C00)

1 ($2000)

2 ($2400)

В регистр $2005 последовательно записываются два значения - абсолютное вертикальное и горизонтальное смещение (соответственно) относительно текущей активной страницы. Например, активная страница 1 ($2000) – горизонтальное смещение ноль, а вертикальное $E0 (240) – как результат, на экране видно содержимое страницы 3. Варьируя значение вертикального смещения, можно получить фон, состоящий из части страниц 1 и 3 (их стыковку). Если «закрутить» эту операцию в цикл – то можно получить эффект «скроллинга» фоновой картинки. Аналогично происходит горизонтальный скроллинг (прокрутка).

Но есть один нюанс – в Денди нет памяти подо все четыре страницы. Как и в прочих случаях, тут тоже имеет место «отражение» - и на этот раз экранных страниц (друг на друга). Вид отражения определяет архитектура используемого картриджа. Существует 2 вида отражения – горизонтальное (1=2 и 3=4) и вертикальное (1=3 и 2=4). То есть содержимое указанных страниц идентично.

3

4

1

2

Горизонтальное отражение

3

4

1

2

Вертикальное отражение

Если в картридже установлены недостающие 2k VRAM – то содержимое всех четырех страниц может быть различным.

3

4

1

2

Вне зависимости от способа отражения (или при наличии всех четырех страниц) – скроллинг возможен в любом направлении (в том числе и по диагонали).

Программы, не использующие функцию скроллинга, должны записывать в регистр $2005 два нуля, иначе, изображение будет нестабильным.