Перевод этой страницы:
ru

Обзор

PPU (Picture Processing Unit) - специальная микросхема для генерации видеосигнала.

Примерная картинка, которую может выдать PPU:

Существует 3 основные версии PPU:

  • 2C02: применялась в Famicom и американской версии NES. Генерирует NTSC сигнал.
  • 2C07: PAL-версия PPU для европейских NES
  • 2C03, 2C04, 2C05: RGB-версии для аркадных автоматов на базе NES (PlayChoise-10, Vs. System)

Возможно существуют:

  • 2C06: такую никто не видел.
  • Также возможно существует и отладочная версия 2C01

На этом сайте мы изучаем версию 2C02, так как это единственная версия PPU, на которую есть микрофотографии. Всё дальнейшее описание будет идти в контексте 2C02.

Архитектура

Основные компоненты PPU:

breaknes.com_files_ppu_ppu_preview.jpg

  • VIDEO OUT: содержит схему формирования NTSC-сигнала и ЦАП, для преобразования его в аналоговую форму. То есть по сути PPU является полу-аналоговой микросхемой, так как с контакта VOUT выходит уже готовый к употреблению аналоговый сигнал (композитное видео).
  • Рядом со схемой VOUT находится блок управления, который на базе двух счетчиков H и V формирует пачку управляющих сигналов, для остальных компонентов.
  • Палитра. Содержит 16 цветов бекграунда и 16 цветов спрайтов. По индексу в палитре в COLOR BUFFER загружается цвет пикселя, который будет выведен на экран.
  • Мультиплексор (MUX). Выбирает что будет выводиться на экран: точка бекграунда или точка спрайта, на основе их приоритетов. Также есть возможность подмешать цвет с внешних контактов EXT.
  • Регистры. Всего адресное пространство PPU позволяет адресовать 8 внутренних регистров. Разработчики очень хитро подошли к вопросу организации регистров и чтение/запись по одному адресу может делать 2 разных действия.
  • Спрайтовая память (OAM). Содержит данные 64 спрайтов, а также дополнительное место для хранения выбранных 8 текущих спрайтов.
  • Спрайтовая логика. На базе H-счетчика выбирает 8 текущих спрайтов, которые в процессе сравнения помещаются в дополнительную память OAM.
  • Спрайтовая FIFO (OAM FIFO). Содержит схему, которая активирует вывод 8 выбранных спрайтов в нужный момент, а также схему контроля их приоритета.
  • Схема управления адресной шиной. Управляет адресацией VRAM.
  • Схемы выборки данных (data reader). Схема для выборки исходных данных из VRAM: тайлов и атрибутов.

Видеосигнал NTSC

Структура видеосигнала выглядит следующим образом :

  • На этой картинке представлена развертка одной строки
  • Вначале находится импульс вертикальной синхронизации (HSYNC), чтобы луч был установлен в начало строки
  • После импульса HSYNC находится "задняя часть" (Back porch), которая содержит специальную "вспышку": 8-10 импульсов поднесущей, для автоподстройки фазового детектора (ФАПЧ).
  • Затем идёт непосредственно сигнал изображения
  • Завершается сигнал строки "передней частью" (Front porch)

Теперь немного пояснений, что тут за херня.

Во-первых - стандарт NTSC был создан с учётом совместимости с черно-белым телевидением. В Ч-Б сигнале можно было задать только яркость сигнала, которая тупо изменялась в зависимости от амплитуды. Back porch и front porch - это чёрные рамки с левой и правой стороны экрана.

Чтобы добавить цветовую составляющую разработчики добавили фазовую модуляцию:

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

Чтобы сказать декодеру где находится 0o была добавлена специальная "вспышка" (color burst). Сдвиг по фазе считается относительно колебаний этой вспышки.

В свою очередь цветовая составляющая состоит из двух компонентов: насыщенности (Saturation) и тона (Hue). Насыщенность определяется амплитудой фазовой составляющей, а тон - сдвигом по фазе.

Формирование кадра

Теперь поговорим о том, как формируется 1 кадр изображения.

Нужно брать в расчёт тот факт, что разложение видеосигнала в строку пикселей не обязывает телевизор иметь фиксированное количество пикселей. У телевизора вообще нет пикселей в обычном понимании. У него есть "зёрна". Сигнал может "размазаться" как на 100 зёрен в ширину, так и на 1000. Это особенность работы электронно-лучевой трубки.

Поверхность кинескопа старых цветных телевизоров выглядит следующим образом:

Насыщенность и тон закодированные в фазовой составляющей поднесущей задают яркость трёх электронных лучей: красного, синего и зеленого. Лучи падают на зерна, которые покрыты люминофором. У люминофора есть послесвечение: после прохождения луча по зерну оно продолжает светиться ещё некоторое время (обычно несколько миллисекунд). Поэтому на черном фоне могут появляться "хвосты" от перемещающихся объектов.

В отличии от ширины, количество строк 1 полного кадра чётко фиксирована стандартом NTSC и составляет 525 строк. Из этих 525 строк непосредственно под изображение выделяется примерно 480, а остальные используются для вертикальной синхронизации (обратного ходя луча).

"Примерно 480", потому что разные модели телевизоров могут выводить на самом деле меньше, из-за устройства трубки и конструкции телевизора. При этом часть изображения может быть скрыта за границей экрана. Ну такая вот была раньше технология в каменном веке аналогового телевидения )))

Другие особенности

Кадр выводится двумя половинками, методом черезстрочной развертки. Вначале выводятся чётные строки 0, 2, 4 итд, а затем нечётные 1, 3, 5 итд. Но в общем не важно в какой последовательности начинать вывод, при формировании изображения это не имеет значения. После включения телевизора луч его начинает сканировать экран (все помнят "войну микробов"?) и формирование кадра может начаться в любом месте экрана, после того, как приёмник получит адекватный видеосигнал.

Строчная частота NTSC составляет 15734 Гц, а кадровая (точнее - полукадровая) - 59.94 Гц. Сделано это было для того, чтобы уменьшить помехи от биения поднесущей и звукового сигнала. Но помехи окончательно не исчезли и проявляются в виде "волн".

ppu.txt · Последние изменения: 2014/01/27 22:18 — org
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: Public Domain
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki