- •Архитектура и программирование Dendy.
- •Общие сведения об архитектуре Денди.
- •Процессор Денди (cpu).
- •Видеопроцессор Денди (ppu)
- •Принципы работы ppu.
- •Спрайты. Контроллер dma.
- •Отражение экранных страниц.
- •Картридж Денди.
- •Маппер unrom.
- •Ввод/Вывод в Денди.
- •Программирование мапперов.
- •«Порт a»
- •«Порт b»
- •Джойстики.
- •Сопроцессор pApu.
- •Приложение №1. Система команд 6502.
- •Приложение №2. Палитра в rgb.
- •Приложение №3. Спецификации мапперов.
- •226 Multi-cart(pirate) 76-in-1
- •Приложение №4. Разъём картриджа.
- •Приложение №5. Схемотехника.
Спрайты. Контроллер 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 два нуля, иначе, изображение будет нестабильным.
