[Перевод] Как работал графический чип Super Nintendo: руководство по Super PPU
![[Перевод] Как работал графический чип Super Nintendo: руководство по Super PPU [Перевод] Как работал графический чип Super Nintendo: руководство по Super PPU](https://habrastorage.org/getpro/habr/post_images/d82/be3/e2f/d82be3e2f5899794a841779b766a8018.png)
Описание концепций PPU
Super PPU
Super «Picture Processing Unit» — чип видеоконтроллера, обрабатывающий тайловую графику, плоскости скроллинга и спрайты SNES. По функциям схож с PPU консоли NES.
VRAM
VideoRAM — ОЗУ, используемое Super PPU. Содержит тайлы. В каждом режиме экрана используется собственный размер тайлов. Обычно это 8×8 или 16×16 пикселей на тайл. VRAM имеет объём 64 КБ.
OAM
«Object Attribute Memory» — содержит данные определений спрайтов. Может содержать данные не более чем 128 спрайтов. Схожа с OAM в NES, но более совершенная.
Данные OAM, хранящиеся для каждого спрайта
- Позиция спрайта по X (9 бит, 0-511 или $00-$1FF)
- Позиция спрайта по Y (8 бит, 0-239 или $00-$EF). Значения 0-239 находятся на экране, от -63 до -1 — «выше экрана», поэтому нижняя часть спрайта видна сверху экрана. Это подразумевает, что очень большой спрайт может начинаться внизу и заканчиваться наверху.
- ID первого тайла спрайта. 8-битный индекс
- Таблица имён спрайта
- ID палитры, используемой спрайтом (0-7/$00-$07). Спрайты используют индексы субпалитр в последних 8 субпалитрах, поэтому на самом деле используется ID, равный 7+N
- Размер спрайта. 1 бит: 0=для текущего режима доступен спрайт меньшего размера (обычно 1 тайл 16×16 пикселей), 1=для текущего режима доступен спрайт большего размера (обычно 4 тайлов (2×2 тайлов 16×16 пикселей))
- Приоритет спрайта. Приоритет в OAM: 2 бита; эти биты определяют приоритет спрайта относительно плоскостей фона (см. ниже раздел о плоскостях графики). Приоритет относительно других спрайтов. Нулевой спрайт в OAM имеет наивысший приоритет. Первый спрайт в OAM имеет более низкий приоритет. Второй — ещё более низкий, и так далее.

OAM Viewer эмулятора No$sns (SMW)
Два основных типа машин
NTSC-консоли
- «Super Nintendo (SNES)», 60-герцовые машины, в основном продававшиеся в США. Разрешение экрана 256×224 пикселя (как и у NTSC NES)
PAL-консоли
- «Super Famicom (SFC)», 50-герцовые машины, продававшиеся во всём остальном мире. Разрешение экрана 256×240 пикселей (как и у PAL Famicom)

Слева: NTSC Super Nintendo (Model 1), справа: PAL Super Famicom
Тайловые карты
SNES имела 7 разных «режимов» обработки фонов
- Они назывались Mode 0-7. Mode 1 имел режим варьирования. У Mode 7 был подрежим Mode 7 Ext. BG. В каждом режиме было своё количество доступных плоскостей фонов. У каждого режима было собственное количество цветов для плоскостей фонов, доступных в этом режиме. Свойства рендеринга каждого из фонов немного отличались. Во всех режимах и во всех плоскостях графики индекс цвета 0 в любой субпалитре всегда обозначал прозрачный цвет.

Сводная таблица режимов
4 плоскости графики
SNES могла обрабатывать до 4 плоскостей графики, имевших названия BG1-BG4. Эти плоскости графики могли прокручиваться (скроллиться).
Размеры тайловых карт
- Тайловые карты плоскостей скроллинга могли иметь размер 32×32, 32×64, 64×32 или 64×64 тайлов. В зависимости от размера каждого блока тайловой карты (блоки по 16×16 px/1 тайл или 32×32/2×2 тайлов), размер тайловой карты мог меняться от 256×256 до 1024×1024 пикселей
- Более подробную информацию о размерах тайлов в тайловых картах см. в разделе «Tile Maps & Character Maps» этой статьи
Свойства каждого тайла в тайловой карте
- V/HFlip тайла (отражение по вертикали/горизонтали)
- Приоритет тайла (низкий/высокий)
- Номер палитры (3 бита, 0-7/$00-$07). Плоскости используют первые 8 субпалитр CGRAM; вторые 8 субпалитр используются для спрайтов (OAM)
- ID тайла

Tilemap viewer для 4 фонов (BG) в SWM
Видеорежимы
Mode 0
- 4 фона (BG), каждый с 4 цветами
- Приоритет BG (спереди назад)

Mode 1
- 2 BG c 16 цветами
- 1 BG с 4 цветами
- Приоритет BG (спереди назад). Приоритет варьируется в зависимости от состояния бита 3 в регистре $2105.

Mode 2
- 2 BG с 16 цветами каждый
- Приоритет BG (спереди назад)

- Первый режим со «смещением на тайл» (подробнее см. в Mode 2)
Mode 3
- 1 BG с 256 цветами
- 1 BG с 16 цветами
- Приоритет BG (спереди назад)

- Доступен Direct Color Mode (регистр $2130)
Mode 4
- 1 BG с 256 цветами
- 1 BG с 4 цветами
- Приоритет BG (спереди назад)

- Второй режим со «смещением на тайл» (подробнее см. в Mode 4)
Mode 5
- 1 BG с 16 цветами
- 1 BG с 4 цветами
- Приоритет BG (спереди назад)

- «Mode 5 отличается от предыдущих режимов. Вместо стандартного тайла шириной 8/16 пикселей он всегда использует тайл шириной 16 пикселей (высота по-прежнему может быть 8 или 16) и пользуется только половиной пикселей (начиная с нуля, чётные пиксели для подэкранных тайлов, нечётные — для тайлов основного экрана). Затем он переключается в псевдо-hires для рендеринга растровой строки шириной 512-пикселя. Кроме того, если включен Interlace mode (см. бит 0 в регистре $2133), то экран в высоту вместо 224 или 239 составляет 448 или 478 полустрок. В каждом кадре отрисовываются или чётные, или нечётные строки, что определяется битом 7 в регистре $213f. Это также означает, что $212c и $212d можно присвоить одинаковое значение, чтобы получить „ожидаемый“ дисплей».
Mode 6
- 1 BG с 16 цветами
- Приоритет BG (спереди назад)

- Особые свойства: как и Mode 5, имеет определённые отличия. Как и Mode 2, тоже является режимом со «смещением на тайл». «Однако стоит помнить, что в Mode 6 всегда используются тайлы шириной 8 пикселя (16 полупикселей), что относится к BG3, а также к BG1. Невозможно применить смещение к тайлу в 8 полупикселей или к области шириной 16 пикселей (только если не использовать два значения смещений для двух 8-пиксельных областей).»
Mode 7
- 1 BG с 256 цветами
- Сильно отличающийся режим; позволяет выполнять матричные преобразования слоя BG
- Используется для эффекта псевдо-3D в таких играх, как Super Mario Kart, FZero, и т.д.
- Все подробности см. в Mode 7


CGRAM
«Color Graphics RAM»
- Содержит информацию о цвете для палитр
- В сумме содержит 256 ($FF) записей цветов палитр.
- Каждый графический режим разделяет 256 записей палитр на подпалитры, в каждой из которых по N цветов. N зависит от видеорежима. По умолчанию каждая субпалитра состоит из 16 цветов (256 цветов/16 цветов на субпалитру = 16 субпалитр). По умолчанию первые 8 субпалитр (с ID 0-7/$00-$07, ID записей палитр 0-63/$00-$3F) используются для тайлов переднего плана (FG), а последние 8 субпалитр (ID субпалитр 8-16/$08-$10, ID записей палитр 64-127 или $40-$80) — для спрайтовых объектов. Первый цвет в субпалитре рендерится прозрачным для тайлов/спрайтов, использующих эту субпалитру
- 15-битный формат цвета BGR. Каждая запись цвета в CGRAM имеет формат 2 байта («слово») и вид 0BBBBBGG GGGRRRRR (B=биты синего, G=биты зелёного, R=биты красного). 16 бит, первый бит не используется, поэтому остаётся 15-битный диапазон цветов. Каждый компонент цвета (B, G, R) имеет значение в интервале 0-31 (десятичные) или $00-$1F (шестнадцатеричные)
![[Перевод] Как работал графический чип Super Nintendo: руководство по Super PPU [Перевод] Как работал графический чип Super Nintendo: руководство по Super PPU](https://habrastorage.org/getpro/habr/post_images/d82/be3/e2f/d82be3e2f5899794a841779b766a8018.png)
Разбивка палитры SNES (Super Mario World в Palette viewer эмулятора no$sns)
Рекомендуемые инструменты для отладки и создания графики
Поиск хорошего ПО для создания ретро-графики, разделения пиксель-арта на тайлы и снижения количества цветов для обработки в различных видеорежимах SNES может оказаться сложным процессом. Ниже представлен список рекомендуемого ПО для работы с ретро-графикой и специализированных эмуляторов, позволяющих исследовать содержимое VRAM и плоскости.
ПО для графики:
YY-CHR
- Мультиплатформенный редактор тайлов
- Новая версия на C#
- Старая версия на C++
Irfanview
- Программа для просмотра/редактирования общего назначения, имеет плагины и широкую поддержку множества типов файлов
- Может редактировать, экспортировать и импортировать палитры, а также увеличивать/уменьшать количество цветов в изображениях и отображать это количество
- Свободное и открытое ПО
- Имеет PNG-плагин для изменения изменения глубины цвета с сохранением порядка палитры
- Домашняя страница
Рекомендуемые специализированные эмуляторы для отладки Super PPU
No$sns
- Эмулятор SNES, предназначенный для отладки
- Может эмулировать homebrew-прототипы SNES-CD Super Disc
- Может отображать состояние машины/ЦП
- На лету отображает слои BG
- Может отображать на лету OAM
- Может отображать содержимое тайлов VRAM в различных режимах цвета
- Может отображать содержимое CGRAM
- Информация
Higan
- Эмулятор различных ретро-консолей
- Имеет очень точную эмуляцию циклов оборудования SNES; используется для эмуляции/отладки аппаратных проблем SNES
- Информация
В Marvel’s Wolverine появилась возможность отключать лишние подсказки
Games Workshop показала окрашенные миниатюры из наборов Хаоса для Warhammer The Old World
Ubisoft разрабатывала аналог Zelda без Линка, но Nintendo отменила проект
Вышла настольная игра Шакал Аркхэм
Sony зарегистрировала товарный знак Sly Cooper
Создатель Stardew Valley намекнул на новинки в обновлении 1.7 загадочным постом
Анонсирована cRPG Olympus 2249 от создателей российского мода Olympus 2207 для Fallout 2
Фанатский порт GTA Liberty City Stories перенес игру на ПК спустя 21 год