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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
image

Описание концепций PPU


Super PPU

Super "Picture Processing Unit" — чип видеоконтроллера, обрабатывающий тайловую графику, плоскости скроллинга и спрайты SNES. По функциям схож с PPU консоли NES.

VRAM

VideoRAM — ОЗУ, используемое Super PPU. Содержит тайлы. В каждом режиме экрана используется собственный размер тайлов. Обычно это 8x8 или 16x16 пикселей на тайл. 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 тайл 16x16 пикселей), 1=для текущего режима доступен спрайт большего размера (обычно 4 тайлов (2x2 тайлов 16x16 пикселей))
  • Приоритет спрайта. Приоритет в OAM: 2 бита; эти биты определяют приоритет спрайта относительно плоскостей фона (см. ниже раздел о плоскостях графики). Приоритет относительно других спрайтов. Нулевой спрайт в OAM имеет наивысший приоритет. Первый спрайт в OAM имеет более низкий приоритет. Второй — ещё более низкий, и так далее.


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

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


NTSC-консоли

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

PAL-консоли

  • «Super Famicom (SFC)», 50-герцовые машины, продававшиеся во всём остальном мире. Разрешение экрана 256x240 пикселей (как и у 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. Эти плоскости графики могли прокручиваться (скроллиться).

Размеры тайловых карт

  • Тайловые карты плоскостей скроллинга могли иметь размер 32x32, 32x64, 64x32 или 64x64 тайлов. В зависимости от размера каждого блока тайловой карты (блоки по 16x16 px/1 тайл или 32x32/2x2 тайлов), размер тайловой карты мог меняться от 256x256 до 1024x1024 пикселей
  • Более подробную информацию о размерах тайлов в тайловых картах см. в разделе «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

  • Мультиплатформенный редактор тайлов
  • Новая версия на C#
  • Старая версия на C++

Irfanview

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

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

No$sns

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

Higan

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

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



  • Веб-сайт SNESDev
  • Спрайты SNES
  • Информация о палитрах
  • Информация о слоях фонов SNES
  • Тема на форуме о PAL/NTSC
Источник: https://habr.com/ru/post/478580/


Интересные статьи

Интересные статьи

Тестирование на проникновение позволяет ответить на вопрос, как кто-то со злым умыслом может вмешаться в вашу сеть. Используя инструменты пентеста, «белые хакеры» и профессионалы в об...
Начало использования Git напоминает посещение новой страны, языка которой вы не знаете. Пока ясно, где вы и куда идти, все хорошо, но стоит заблудиться — и начинаются большие проблемы. В и...
Перевод приложения на разные языки и его локализация — это нечто такое, чем приходится заниматься всем разработчикам. В материале, перевод которого мы сегодня публикуем, представлено краткое руко...
Уже давно сформулировал для себя этот подход. Возможно, он очевиден, но хуже от этого не становится. Сначала сами пункты. Никогда не требуйте и не хвалите сотрудников за: вовремя при...
Мы публикуем видео с прошедшего мероприятия. Приятного просмотра.