Как работал графический чип Super Nintendo: руководство по Super PPU

image

Описание концепций 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 (шестнадцатеричные)

Разбивка палитры SNES (Super Mario World в Palette viewer эмулятора no$sns)

Рекомендуемые инструменты для отладки и создания графики

Поиск хорошего ПО для создания ретро-графики, разделения пиксель-арта на тайлы и снижения количества цветов для обработки в различных видеорежимах SNES может оказаться сложным процессом. Ниже представлен список рекомендуемого ПО для работы с ретро-графикой и специализированных эмуляторов, позволяющих исследовать содержимое VRAM и плоскости.

ПО для графики:

YY-CHR

Irfanview

  • Программа для просмотра/редактирования общего назначения, имеет плагины и широкую поддержку множества типов файлов
  • Может редактировать, экспортировать и импортировать палитры, а также увеличивать/уменьшать количество цветов в изображениях и отображать это количество
  • Свободное и открытое ПО
  • Имеет PNG-плагин для изменения изменения глубины цвета с сохранением порядка палитры
  • Домашняя страница

Рекомендуемые специализированные эмуляторы для отладки Super PPU

No$sns

  • Эмулятор SNES, предназначенный для отладки
  • Может эмулировать homebrew-прототипы SNES-CD Super Disc
  • Может отображать состояние машины/ЦП
  • На лету отображает слои BG
  • Может отображать на лету OAM
  • Может отображать содержимое тайлов VRAM в различных режимах цвета
  • Может отображать содержимое CGRAM
  • Информация

Higan

  • Эмулятор различных ретро-консолей
  • Имеет очень точную эмуляцию циклов оборудования SNES; используется для эмуляции/отладки аппаратных проблем SNES
  • Информация

Ссылки и дополнительное чтение

FavoriteLoadingДобавить в избранное
Posted in Без рубрики

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *