[Перевод] Как работал графический чип 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 имеет более низкий приоритет. Второй — ещё более низкий, и так далее.


eaab6c7535c7683807b97c4d85d90097.png


OAM Viewer эмулятора No$sns (SMW)

Два основных типа машин


NTSC-консоли

  • «Super Nintendo (SNES)», 60-герцовые машины, в основном продававшиеся в США. Разрешение экрана 256×224 пикселя (как и у NTSC NES)


PAL-консоли

  • «Super Famicom (SFC)», 50-герцовые машины, продававшиеся во всём остальном мире. Разрешение экрана 256×240 пикселей (как и у PAL Famicom)


50631e184ec22d7dcc826da1a5bb38d2.png


Слева: NTSC Super Nintendo (Model 1), справа: PAL Super Famicom

Тайловые карты


SNES имела 7 разных «режимов» обработки фонов

  • Они назывались Mode 0–7. Mode 1 имел режим варьирования. У Mode 7 был подрежим Mode 7 Ext. BG. В каждом режиме было своё количество доступных плоскостей фонов. У каждого режима было собственное количество цветов для плоскостей фонов, доступных в этом режиме. Свойства рендеринга каждого из фонов немного отличались. Во всех режимах и во всех плоскостях графики индекс цвета 0 в любой субпалитре всегда обозначал прозрачный цвет.


164a83f95719008f76e78b1dd40fcd7c.png


Сводная таблица режимов

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 тайла


cecb6d02d6692c15d2b1e395b1a2c237.png


Tilemap viewer для 4 фонов (BG) в SWM

Видеорежимы

Mode 0

  • 4 фона (BG), каждый с 4 цветами
  • Приоритет BG (спереди назад)
    f7312b8e5930d6e906669d823f439223.png


Mode 1

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


Mode 2

  • 2 BG с 16 цветами каждый
  • Приоритет BG (спереди назад)
    120c9a642ddd637a1a0aa5e51a4c3da3.png
  • Первый режим со «смещением на тайл» (подробнее см. в Mode 2)


Mode 3

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


Mode 4

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


Mode 5

  • 1 BG с 16 цветами
  • 1 BG с 4 цветами
  • Приоритет BG (спереди назад)
    fe4972e7bcf4018407729329a0763170.png
  • «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 (спереди назад)
    5021db86d5aaf944658bd2d0aaa8655d.png
  • Особые свойства: как и 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


22dfd34f435f31754e7075a78dd8157b.png


528a3a602f495495adaf959f589d5242.png


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


d82be3e2f5899794a841779b766a8018.png


Разбивка палитры 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
  • Информация


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

© Habrahabr.ru