[Перевод] Архитектура Playstation 2

c2b8599cc88a01baee92fbb71fab3325.png

Оригинальная Playstation 2, выпущенная 04.03.2000 в Японии, 26.10.2000 в Америке и 24.11.2000 в Европе

Краткое введение


Playstation 2 не была одной из самых мощных консолей своего поколения, однако смогла достичь уровня популярности, немыслимого для других компаний.

Эта машина даже близко не сравнится по простоте с первой Playstation, но вскоре мы узнаем, почему она не разделила судьбу рассмотренных нами ранее сложных консолей.

e5f57cad0355535fd8125c68b58dfcc3.png

ac62a5b4a87dcfabbb7ed2be2d6b09a0.png

Материнская плата версии «GH-001» модели SCPH-10000, выпускавшейся только в Японии. Благодаря полученным донатам мне удалось купить эту модель и сделать качественное фото, чтобы идентифицировать большинство чипов. Предполагаю, что чип в нижнем правом углу — это BIOS ROM на 4 МБ
6c9030e8f28567460cdf38c79765d4b6.png

Оригинальный дизайн (реализованный в версии SCPH-10000). На каждой шине данных указаны ширина и скорость. Эта архитектура подвергалась множеству ревизий, о чём я расскажу ниже.

CPU


Сердцем этой консоли является спроектированный Sony мощный чипсет под названием Emotion Engine (EE), работающий с частотой примерно 294,91 МГц. Этот чипсет содержит множество компонентов, одним из которых является CPU, а остальные находятся в распоряжении CPU и предназначены для ускорения выполнения определённых задач.

Лидер


Основное ядро — это совместимый с MIPS R5900 ЦП, имеющий множество усовершенствований. Это первый чип, начинающий исполнять команды после включения консоли. Этот процесс обладает следующими особенностями:
  • ISA MIPS III: 64-битный набор команд RISC. Постойте, я что-то путаю, или та же ISA использовалась в конкурирующей консоли? . Да, это так, но Sony усовершенствовала этот CPU, добавив часть команд из MIPS IV (выборку из памяти с упреждением и условную пересылку) вместе с собственным расширением команд SIMD под названием multimedia instructions («мультимедийные команды»).
  • 32 дополнительных 128-битных регистра: ещё одно усовершенствование. Ими удобнее было управлять с помощью мультимедийных команд и они очень полезны для обработки векторов.
    • Доступ к этим регистрам выполняется через 128-битную шину, а остальная часть CPU использует внутреннюю 64-битную шину.
  • Двусторонняя суперскалярность: параллельно выполняется до двух команд.
  • Кэш L1 на 24 КБ: разделён на 16 КБ для команд и 8 КБ для данных.
    • Также он имеет функцию prefetch (выборки из памяти с упреждением) для кэширования команд и данных до того, как они будут запрошены. Это реализовано дополнительной схемой, определяющей, к каким областям памяти доступ выполняется чаще всего.
  • Scratchpad RAM на 16 КБ: также называемая Fast RAM.
  • Блок управления памятью: управляет доступом к памяти с остальной частью системы.

Ядро дополнено выделенным модулем обработки чисел с плавающей запятой (COP1), ускоряющим операции с 32-битными числами с плавающей запятой (в языке C называемыми float).

Уже знакомая память


Рядом с Emotion Engine расположены два блока по 16 МБ RAM, в сумме дающие 32 МБ основной памяти. Используется тип памяти RDRAM (дежавю! ), доступ к памяти осуществляется через 16-битную шину.
9e5ce4d7a09b0f6c5262192d7958ad48.png

Структура памяти Emotion Engine. Можно догадаться, где будут возникать заторы.

Поначалу это может разочаровать, ведь внутренняя шина Emotion engine имеет ширину целых 128 бит. Однако оба чипа RAM продуманно расположены в соответствии с двухканальной архитектурой, заключающейся в подключении обоих чипов двумя независимыми 16-битными шинами (по одной шине на каждый чип) для повышения пропускной способности. В результате такая схема теоретически способна обеспечить скорость 3,2 ГБ/с, поэтому будьте уверены в том, что задержки памяти для этой консоли не проблема!

В сердце Emotion engine находится мощный контроллер DMA (DMAC), передающий данные между основной памятью и Scratchpad или между основной памятью и любым компонентом внутри EE. Передача данных выполняется пакетами по 128 бит и здесь есть интересный момент: Через каждые восемь пакетов основная шина временно разблокируется. Это создаёт небольшое окно для параллельного выполнения других передач DMA (до десяти) или для использования основной шины центральным процессором. Такой способ работы называется slice mode, он является одним из множества режимов, доступных для этого устройства DMA. Не надо забывать, что хотя этот slice mode снижает простои основной шины, ценой этого является общее замедление передач DMA.

Исправление ошибок прошлого


При таком объёме трафика, проходящего внутри Emotion Engine, эта архитектура начнёт страдать от последствий Unified memory architecture (UMA): несколько независимых компонентов пытаются одновременно получить доступ к основной памяти, создавая заторы. Чтобы устранить эти проблемы, Sony снизила потребность постоянного использования памяти следующими способами:
  • Обернув процессоры большим объёмом кэша, благодаря чему доступ к памяти выполняется только в самом крайнем случае.
    • 99% упоминаний кэша/scratchpad в статье будет связано с этим.
  • Добавив 128-байтный буфер обратной записи: он очень похож на Write Gather Pipe, но вместо того, чтобы ждать своего заполнения на 25%, он выполняет запись в память, наблюдая за состоянием шины.

Это кажется очень удобным для приложений, способных пользоваться преимуществами кэша, но что насчёт тех задач, которые вообще не используют кэш, например, манипуляции с таблицами отображения (Display Lists)? К счастью, у ЦП есть другой режим доступа под названием UnCached, который использует только буфер обратной записи, не тратя такты на исправление кэша (которое происходит при промахах кэша). Более того, существует ускоренный режим UnCached, добавляющий буфер для ускорения считывания соседних адресов в памяти.

Другие интересные элементы


Внутри того же корпуса Emotion Engine есть ещё один процессор под названием Image Processing Unit (IPU), спроектированный для распаковки изображений. Он может быть полезным, когда игре нужно декодировать фильм в MPEG2, не загружая основной ЦП. Игра отправляет потоки сжатых изображений в IPU (по возможности с использованием DMA), а они потом декодируются в формат, который может отображать GPU. Операционная система PS2 также использует IPU для воспроизведения DVD.

Кроме того, IPU также позволяет манипулировать сжатыми текстурами высокого разрешения, что экономит ресурсы ЦП и позволяет избежать больших объёмов передаваемых данных.

Сопроцессоры


Прошло уже два года с тех пор, как конкуренты представили свой последний продукт. Если вы читали статью про Dreamcast, то, предполагаю, до сих пор ждёте упоминания того, что сделало PS2 такой мощной, какой она казалась в момент выпуска. Теперь я расскажу об очень важном наборе компонентов, которые Sony поместила в Emotion Engine — блоках Vector Processing Unit (VPU).

Vector Processing Unit — это небольшой независимый процессор, предназначенный для работы с векторами, в частности, с векторами, состоящими из четырёх значений float. Эти процессоры настолько быстры, что тратят на операцию всего один такт, что может быть чрезвычайно полезно для обработки геометрии.

VPU состоят из следующих компонентов:

  • Vector Unit: ядро процессора. Содержит немного памяти (называемой Micro Memory) для хранения программы (называемой Microprogram), которая сообщает блоку, как оперировать данными, находящимися во VU Mem.
    • В нём используется 64-битная ISA, а блок исполнения разделён на два параллельных подблока. Первый умножает или складывает числа с плавающей запятой (float), а другой делит float или оперирует с целочисленными значениями (integer). Это позволяет параллельно оперировать и float, и integer.
  • Немного Vector Unit Memory (VU Mem). Используется как рабочее пространство для Vector unit. Эта память хранит значения, с которыми нужно производить операции и/или результаты предыдущих операций.
  • Vector Interface: автоматически распаковывает данные вершин, поступающие из основной памяти в формате, с которым может работать Vector unit. Также этот блок может передавать микропрограммы в Micro Memory.

Векторный блок нужно «завести», чтобы он начал работать; для этого основной ЦП передаёт нужный микрокод. В Emotion engine есть два VPU, но они имеют разную схему, что позволяет использовать их по-разному и оптимизировать работу.

Vector Processing Unit 0


4b1948c3cf8c6e9451889a977ba16d77.png

Архитектура VPU0

Первый VPU, имеющий обозначение VPU0, расположен между ЦП и другим векторным блоком (VPU1). Он является «вспомогательным» для основного ЦП.

VPU0 имеет два режима работы:

  • Micromode: традиционный режим, исполняющий «микрокоманды» (microinstructions) из микропрограммы (microprogram), хранящейся в Micro memory. При этом он работает независимо.
  • Macromode: VPU0 превращается в COP2 основного ЦП и исполняет «макрокоманды» (macro-instructions), получаемые от основного ЦП через выделенную 128-битную шину.
    • Макрокоманда имеет ту же функциональность, что и микрокоманды, но использует другие опкоды. Однако теперь блок исполнения VPU больше не разделён (то есть может исполнять за раз только одну команду).
    • Хотя этот режим и не использует полностью все компоненты VPU0, он ускоряет векторные операции ЦП, к тому же сопроцессор программировать проще, чем отдельное устройство (это будет полезным для программистов на PC).

Схема распределения памяти VPU0 также имеет доступ к некоторым другим регистрам и флагам VPU, предположительно для того, чтобы проверять их состояние или быстро считывать результаты операций, выполненных другим VPU.

Vector Processing Unit 1


dac5bb10fcb5551d9a6c0e976b73c6eb.png

Архитектура VPU1

Второй VPU, называющийся VPU1 — это расширенная версия VPU0 с удвоенным объёмом микропамяти и памяти VU. Кроме того, в этом блоке есть дополнительный компонент под названием Elementary function unit (EFU), ускоряющий исполнение степенных и тригонометрических функций.

VPU1 расположен между VPU0 и Graphics Interface («шлюзом» к GPU), поэтому он содержит дополнительные шины для максимально быстрой передачи геометрии в GPU без использования основной шины.

VPU1, в том числе и из-за своего расположения, работает только в micromode.

Очевидно, что этот VPU оптимизирован под тригонометрические операции и может использоваться в качестве препроцессора GPU, обеспечивая передачу знаменитых таблиц отображения (Display Lists).

Бесконечные миры


Полезная техника, которую можно реализовать с помощью этих блоков — это процедурная генерация. Другими словами, вместо построения сцены из жёстко прописанной геометрии можно позволить блокам VPU генерировать её алгоритмически. В таком случае VPU вычисляет математические функции для создания геометрии, которая может интерпретироваться GPU (например, треугольников, линий, четырёхугольников и т.д.) и в конечном итоге использоваться для отрисовки сцены.

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

  • Сложные поверхности (например, сферы и колёса).
  • Рендеринг мира (например, рельефы, частицы, деревья).
  • Кривые Безье (очень популярное в компьютерной графике уравнение, используемое для отрисовки кривых), которые превращаются в поверхность Безье (явно заданную геометрию) и поддерживает разные степени точности в зависимости от требуемой детализации.

С другой стороны, процедурный контент может сталкиваться с трудностями при анимировании и если алгоритм слишком сложный, VPU может и не сгенерировать геометрию за требуемое время.

Подведём итог: процедурный рендеринг — не новая технология, но благодаря VPU он открывает возможности дальнейших оптимизаций и более качественной графики. Тем не менее, это непростая в реализации техника и научно-исследовательский отдел Sony опубликовал несколько статей о различных подходах, которые можно использовать на консоли компании.

Рабочий процесс выбираете вы


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

Вот несколько примеров графических конвейеров с различными оптимизациями:

d3222f2d066a71d77c4906369badcd25.png

Архитектура параллельного конвейера
154459fc08bfb492f41d27956c763352.png

Архитектура последовательного конвейера

В первом примере (параллельная архитектура) ЦП (CPU) комбинируется с VPU0 в макрорежиме для создания геометрии параллельно с VPU1. Группа CPU/VPU0 полностью использует scratchpad и кэш, чтобы избежать использования основной шины, которую VPU1 использует для получения данных из основной памяти. В конце обе группы рендеринга паралелльно отправляют свои таблицы отображения в GPU.

Во втором примере (последовательная архитектура) используется другой подход, при котором группа CPU/VPU0 выполняет задачи препроцессора для VPU1. Первый этап получает и обрабатывает всю геометрию, которую VPU1 в дальнейшем превратит в таблицу отображения.

Существует и множество других примеров, поэтому программист сам может выбирать оптимальную схему, и это хорошо.

ef29fef2aacdfe2d83ff1e5a53ae380a.jpg

Частицы, составляющие пламя свечей и свет, падающий из окна. Crash Bandicoot: The Wrath of Cortex (2001 год)

Джон Бартон (бывший директор Travellers Tales) объяснил, как его команда реализовала систему частиц, полностью поместившуюся в VPU1. VPU1 получал из памяти предварительно заполненную базу данных, которая затем использовалась для вычисления координат частиц в текущий момент времени, результат можно было преобразовать в таблицы отображения и сразу же передать дальше.

Благодаря такой методике значительно снижена нагрузка на ЦП, что позволяет ему выполнять другие задачи, например, расчёт ИИ и физики.

Графика


Учитывая, что вся работа выполняется процессором Emotion Engine, остаются ли ещё какие-то задачи? На самом деле остаётся последний шаг: отображение на экране!
a1679e72ec4da53b8aa8ba9d2716b6d5.jpg

Final Fantasy X (2001 год)

В консоли есть простой, но скоростной чип, специализирующийся на этой функции: Graphics Synthesizer (GS), работающий с частотой примерно 147,46 МГц. Он содержит 4 МБ встроенной внутрь памяти DDRAM, чтобы выполнять всю обработку самостоятельно, избавляясь таким образом от необходимости доступа к основной памяти. Доступ к встроенной RAM выполняется при помощи различных шин, в зависимости от типа необходимых данных.

GS имеет меньше функций, чем ранее рассмотренные на этом сайте другие графические системы. Тем не менее, со своими задачами он справляется очень быстро.

Архитектура и конструкция


Этот GPU занимается только растеризацией, то есть генерацией пикселей, наложением текстур, применением освещения и некоторыми другими эффектами. Это означает, что в нём нет преобразований вершин (их выполняют VPU). Кроме того, он является конвейером с фиксированными функциями, поэтому в нём невозможны хитрые настройки или шейдеры, можно использовать только постоянную модель затенения (например, по Гуро).
e43f0b4c625209b077756daea72c7f9b.png

Структура конвейера Graphics Synthesizer

Выглядит довольно просто, верно? Давайте подробнее рассмотрим, что происходит на каждом из этапов.

Препроцессинг


1f0fc81397a54deeadb8ee1376a8a9ad.png

Этап препроцессинга

Emotion Engine запускает Graphics Synthesizer, заполняя встроенную DDRAM требуемыми материалами (битовыми картами текстур и таблицами поиска цветов, также известными под названием CLUT), назначает значения регистров GS, чтобы сконфигурировать его, а в конце отдаёт команды отрисовки (таблицы отображения), которые приказывают GS отрисовывать примитивы (точки, отрезки, треугольники, спрайты и т.п.) в нужных местах экрана.

Затем GS выполняет препроцессинг некоторых значений, которые потребуются для дальнейших вычислений. Самым важным из них является изначальное значение для Digital Differential Algorithm, который будет использоваться для интерполяций при отрисовке.

Растеризация


63004a14f8cf37d22d55d0b671068a4e.png

Этап растеризации

Используя предыдущие вычисленные значения, рендерер генерирует пиксели примитивов. Этот блок может параллельно генерировать 8 пикселей (с текстурами) или 16 пикселей (без текстур), и каждая запись пикселя содержит следующие вычисленные значения:

  • RGBA: соответствует градиенту Red, Green, Blue и Alpha (прозрачности).
  • Z-value: используется для проверки глубин на последующих этапах.
  • Туман: для включения эффектов тумана.
  • Свойства текстур: указывают адрес текстуры в DRAM и другие свойтва (координаты, уровень детализации, фильтрацию и т.п.), которые будут использоваться на следующем этапе.

Также на этом этапе выполняются Scissoring Tests для отбрасывания полигонов, находящихся вне области кадра (на основании из значений X/Y); некоторые свойства пикселей передаются на этап тестирования пикселей для дальнейших проверок.

Затем пакет передаётся в движок наложения текстур, но каждое свойство передаётся специализированному «субдвижку», что позволяет обрабатывать различные свойства параллельно.

Освещение также обеспечивается выбором одного из двух возможных вариантов, затенения по Гуро (Gouraud) и плоского (Flat).

Текстуры


7a02d5a057fabdea43be3ffb7f417e39.png

Этап наложения текстур

Этот этап выполняется большим «пиксельным блоком» (Pixel Unit), способным одновременно вычислять до 16 пикселей. На этом этапе текстуры накладываются на полигоны. Кроме того, могут быть наложены эффекты тумана и сглаживания.

Карты текстур запрашиваются из DRAM в области, называемой буфером текстур (Texture Buffer), однако взаимодействие с ней обеспечивается отдельной областью, называемой буфером страниц текстур (Texture Page Buffer); похоже, она используется как механизм кэширования текстур. CLUT также накладываются с помощью этой системы страниц. Оба элемента передаются по 512-битной шине.

Pixel Unit выполняет коррекцию перспективы для наложения текстур на примитивы (это стало значительным усовершенствованием по сравнению с аффинным наложением PS1). Более того, он также обеспечивает билинейную и трилинейную фильтрацию, в дальнейшем она используется вместе с текстурами с mip-уровнями.

Тестирование


53e5d41d4cf63c177bd8d2701a43d06a.png

Этап тестирования пикселей

На этом этапе отбрасываются некоторые пиксели, не отвечающие определённым условиям. Выполняются следующие тесты:

  • Альфа-тест: альфа-значение (прозрачность) пикселя сравнивается со «стандартным» значением. Это нужно, потому что в определённых случаях альфа-значение должно находиться в определённом диапазоне или быть больше/меньше произвольного значения.
  • Тест альфа-значения результата: альфа-значение пикселя снова проверяется перед отрисовкой в буфер кадров.
  • Тест глубин: Z-value пикселя сравнивается с соответствующим Z-value в Z-буфере. Это позволяет не обрабатывать пиксели, которые окажутся скрытыми за другими пикселями.

Постобработка


ad276255ba082fd9bf8f33b50559eade.png

Этап постобработки

На последнем этапе могут применяться некоторые эффекты при помощи находящегося в DDRAM буфера кадров:

  • Альфа-смешение: сливает цвета текущего буфера с предыдущим буфером в памяти.
  • Дизеринг: большие значения RGBA необходимо урезать, поэтому для снижения потери точности можно применять дизеринг.
  • Ограничение цветов: после применения таких операций, как альфа-смешение, новое значение RGB может превосходить допустимый интервал (0–255), поэтому ограничение (clamping) переносит значение в нужный интервал.
  • Форматирование: этот эффект преобразует сгенерированный в конвейере готовый буфер кадров в формат, который можно хранить в памяти.

Затем новый буфер кадров с обновлённым Z-буфером записываются в памяти через 1024-битную шину.

Дополнительная постобработка


Внутри GS есть специализированный компонент под названием Programmable CRT Controller (PCRTC), передающий находящийся в памяти буфер кадров на видеовыход, чтобы кадр отобразился на экране телевизора. Но это ещё не всё: также он содержит в себе специальный блок под названием Merge Circuit, позволяющий выполнять альфа-смешение двух отдельных буферов кадров (это полезно, когда играм нужно повторно использовать предыдущий кадр для создания нового). Получившийся кадр можно вывести через видеосигнал и/или записать обратно в память.

Улучшенные модели


Благодаря описанным выше системам разработчики игр могли улучшить дизайн уже известных персонажей. Взгляните на эти сравнения:
xjx3casko6fpufx7wiwxaag4jsw.gif

Crash Bandicoot (1996 год) для PS1, 732 треугольника
90hjq3yqndmju4guasrjyxv4_ya.gif

Crash Bandicoot: The Wrath of Cortex (2001 год), 2226 треугольников

А вот персонажи из новых серий игр, изначально моделировавшиеся с высоким уровнем детализации:

yghqyf7l4zqali6cnppzagmjtnu.gif

Kingdom Hearts (2002 год), 2744 треугольника
x77gjnhzzc8gf1ohi4z9_oyynto.gif

Dragon Quest VIII (2004 год), 2700 треугольников

Стоит упомянуть, что в играх наподобие Dragon Quest реализована собственная модель освещения под названием Cel Shading (этот термин я уже упоминал ранее), однако в предыдущих статьях говорилось, что за это в основном отвечает GPU. В случае PS2 для реализации такой модели освещения требовались вычисления цветов, предположительно выполняемые Emotion Engine, поскольку GS не так гибок, как другие GPU.

Вывод видео


Как говорилось выше, PCRTC отправляет буфер кадров через видеосигнал; для совместимости с телевизорами из любых географических регионов он может транслировать видео в следующих форматах:
  • PAL: передаёт до 640×512 пикселей с частотой 50 Гц, как в прогрессивном (576p) режиме, так и с чересстрочной развёрткой (576i).
    • Ни одна из продаваемых игр не использует 576p. Хотя некоторые игры поддерживают прогрессивный режим, они обеспечивают разрешение всего 480p.
  • NTSC: до 640×448 пикселей с частотой 60 Гц, или в прогрессивном (480p), или в чересстрочном (480i) режиме.
  • VESA: до 1280×1024 пикселей.
  • DTV: до огромного разрешения в 720×480 пикселей в прогрессивном режиме или 1920×1080 в чересстрочном режиме.
    • Означает ли это, что PS2 может отображать HD-изображение? Теоретически это правда, но я не думаю, что большинство игровых студий рискнуло бы повышением требований ради формата, который ещё не был популярен.

8cf807e6d42b092d7962dc4c4f547e07.png

Правая задняя часть консоли, на которой видны разъёмы питания, цифровой аудиоразъём и AV Multi Out

Консоль имела довольно много режимов, но основной вопрос заключался в популярности разных форматов в начале 2000-х, что сводило выбор только к PAL и NTSC. Кроме того, хотя PAL обеспечивал большее разрешение, чем NTSC, в некоторых европейских играх NTSC-игр использовалась обрезка кадра (letterboxing) для сокрытия неиспользуемых горизонтальных линий и замедление частоты обновления, чтобы уместиться в ограничение 50 Гц. Я называю такие игры «плохими портами»!

Разъём видеовыхода (Multi A/V) очень удобен. Он выводит сигнал RGB, компонентный, S-Video и композитный. То есть можно было использовать все важные сигналы без необходимости покупки проприетарных адаптеров и внутренних модификаций консоли.

Звук


Новый аудиочип стал усовершенствованной версией старого SPU и получил название SPU2. В список улучшений вошло появление 2 МБ внутренней памяти и наличие 48 каналов (в два раза больше, чем у PS1).

SPU2 состоит из двух процессоров обработки звука (называемых CORE0 и CORE1), работающих на частоте примерно 36,86 МГц и обрабатывающих по 24 канала.

Любопытно, что они по-прежнему являются двумя независимыми процессорами, конфигурируемыми изменением регистров, однако Sony предупредила разработчиков, что оба набора регистров должны задаваться с интервалом в 1/48000 секунды. Если слишком поторопиться, то поведение SPU2 становится непредсказуемым!

Он содержит те же эффекты, что и первый SPU. Память устройства используется в качестве «рабочей области»: в ней можно хранить сырые данные о сигнале и резервировать место для их обработки, а также применения к ним эффектов. Кроме того, чип может микшировать все каналы, обеспечивая стереовывод. А теперь об интересном: SPU2 может подавать на себя в качестве новых входящих данных микшированный стереосэмпл, что позволяет EE получать к нему доступ (например, чтобы микшировать его с дополнительным звуком) или продолжать добавлять новые эффекты.

Такие цифровые эффекты, как реверберация, эхо и задержка, можно реализовать циклическим обходом выходных данных CORE0, памяти и сэмплов, обрабатываемых в CORE1. Для этого требуется резервирование большой части памяти.


Без реверберации, Kingdom Hearts II (2005 год)
С реверберацией, Kingdom Hearts II (2005 год)

Сигнал выводится через Digital audio (называемый Sony/Philips Digital Interface, или S/PDIF) или через Analog Audio (проходящий через ЦАП и оканчивающийся разъёмом Multi A/V).

Ввод-вывод


Ввод-вывод PS2 несложен, однако многочисленные версии консоли полностью изменили различные внутренние и внешние интерфейсы.

Начнём с того, что в консоли есть специализированный процессор, управляющий коммуникациями между различными компонентами. Этот ЦП — не что иное, как оригинальное ядро на основе MIPS R3000, которое использовалось в Playstation 1. На этот раз он называется IOP, работает с частотой 37,5 МГц и использует 32-битную шину.

IOP обменивается данными с Emotion Engine при помощи специализированного интерфейса ввода-вывода под названием System Interface (SIF). Обе конечные точки для обмена данными друг с другом используют свои блоки DMA. Также IOP имеет собственную память, применяемую в качестве буфера. IOP предоставляет доступ к разъёмам на передней части устройства, к DVD-контроллеру, SPU2, BIOS ROM и разъёму PC card.

Унаследованная совместимость


Можно заподозрить, что благодаря использованию ЦП PS1 будет каким-то образом реализована совместимость с этой консолью. Очень удобно, что в IOP содержится остальная часть компонентов, образующая подсистему ЦП консоли PS1, а у ядра можно опустить частоту, чтобы оно работало со скоростью PS1. К сожалению, SPU2 слишком изменился по сравнению с версией из PS1, но для решения этой задачи используется Emotion Engine, эмулирующий старый SPU.

В последующих версиях консоли IOP был заменён на PowerPC 401 «Deckard» и 4 МБ SDRAM (на 2 МБ больше, чем ранее). Обратная совместимость сохранилась, но уже была реализована программно.

Доступные интерфейсы


В этой консоли сохранились передние разъёмы, существовавшие в первой Playstation, однако появилась и пара «экспериментальных» интерфейсов, поначалу выглядевших очень многообещающе.
8872317a87ee3f1209ed7761e2a2b792.png

Передняя панель PS2, на которой видны стандартные разъёмы, в том числе для контроллеров и карт памяти, плюс новые USB и i.Link

Наиболее популярные нововведения: два порта USB 1.1, активно использовавшихся различными аксессуарами и сохранившиеся во всех последующих версиях.

А как насчёт «пропавших» разъёмов? Начнём с того, что существовал передний разъём i.Link (также известный под именем IEEE 1394, или Fireware в мире Apple). Этот разъём использовался для подключения двух PS2 и реализации локального мультиплеера и был удалён после третьей версии (предположительно, его заменили на Network card; см. подробности ниже).

На задней панели консоли есть разъём для PC card. Можно было купить Network Adaptor card производства Sony, обеспечивающую два дополнительных разъёма: один для подключения кабеля Ethernet, другой для подключения проприетарного и внешнего Hard Disk Drive Unit, также продававшегося Sony. Наличие жёсткого диска позволяло хранить временные данные игр (или даже устанавливать их туда) для ускорения загрузки. Однако эту функцию использовали очень немногие игры.

ab80e9216240d0f3a6fcda5e7edf143d.png

Отсек жёсткого диска на задней части PS2 (со снятой крышкой)
8310252e5679beba1ccd098425ba3974.png

Передняя часть сетевого адаптера. Конкретно в этой модели есть разъёмы модема и ethernet
ce9861f975250b46bf1739a97741540e.png

Сетевой адаптер, вид сзади, с установленным жёстким диском
99124565eb48d5e1baf81d89b02a8fbf.jpg

Задняя панель slim-модели с несъёмным портом ethernet

В последующих версиях разъём PCMCIA заменили на отсек Expansion Bay, через который внутрь консоли можно было установить 3,5-дюймовый жёсткий диск. Для начала надо было купить сетевой адаптер, в котором присутствовали не только разъёмы модема и/или ethernet (в зависимости от модели), но и разъёмы, необходимые для подключения жёсткого диска ATA-66. В «Slim»-версиях эта особенность пропала, зато появился несъёмный разъём ethernet, находящийся на задней панели. Кроме того, в новой версии появился новый передний порт — инфракрасный датчик.

Интерактивные аксессуары


Новая версия контроллера, DualShock 2, является слегка усовершенствованной версией DualShock. Во времена первой Playstation было выпущено множество версий оригинального контроллера с различными функциями, а значит, возникла и разрозненность. Теперь ради удобства разработчиков, использовался единственный контроллер, в котором были стандартизированы все появившиеся ранее функции.
7809fb4862e666b01af8aa06e2769268.png

DualShock 2
38e8ce194c4b8c8bd746a0a2951eb620.png

Карта памяти

По сравнению с DualShock, новая версия имеет незначительный редизайн, два аналоговых стика и два вибромотора для удобства ввода.

Рядом с разъёмом контроллера расположен разъём карты памяти Memory Card, совместимый с картами PS1 и PS2. В новых картах встроены дополнительные схемы для повышения защиты, называемые MagicGate; они позволяют играм блокировать передачу данных между разными картами памяти.

Операционная система


На материнской плате установлен чип ROM на 4 МБ, хранящий большой объём кода, используемого для загрузки меню оболочки, с которой могут взаимодействовать пользователи; также он выполняет системные вызовы для упрощения доступа ввода-вывода, которые используются играми.

При загрузке ЦП исполняет команды в ROM, которые, в свою очередь:

  1. Инициализируют оборудование.
  2. Загружают ядро в ОЗУ, оно будет обрабатывать системные вызовы, а также обеспечит поддержку многопоточности (кооперативную и основанную на приоритетах).
  3. Запускают процессор IOP и отправляют ему модули, позволяющие IOP управлять оборудованием консоли. В конце IOP переключается в состояние ожидания команды.
    • Использование модулей позволило Sony выпускать новые версии оборудования без изменения IOP, что снизило затраты на производство.
  4. Загружают модуль OSDSYS, отображающий анимацию заставки меню оболочки.

0337928c799d40e269353af2efc61f02.jpg

Анимация заставки после включения консоли
6791af3068f6bf496f0b345368987193.jpg

Логотип PS2, отображающийся после вставки диска с официальной игрой PS2

Интерактивная оболочка


Функциональность оболочки этой консоли очень походит на другие консоли того же поколения.
0a80dfe4eb03361b8cdd1740f9ab7c8b.jpg

Первоначальное меню, когда не вставлен диск
29fb140e5ff1dd7955498121cc3940a6.jpg

Браузер карты памяти
effc8e1bed3646a67d160ae4a126b56e.jpg

Браузер сохранений после выбора карты памяти
b046a523ec2c527817501a0b4d85ed06.jpg

Редактор сохранения после выбора сохранения
a3a5c3abf2f5231e9e51cea7657dd630.jpg

Системные конфигурации

В оболочке есть удобные разделы, позволяющие выполнять повседневные операции, например, управление сохранениями на карте памяти. Также в ней есть дополнительные опции, например изменение текущего видеорежима.

Игры


В нулевые эта консоль достигла беспрецедентного уровня популярности, поэтому к концу её срока жизни (в 2013 году, спустя 13 лет!) библиотека игр состояла из 1850 названий.
77b77f4888dcd00fde3152dca132e8d6.jpg

Когда кто-нибудь заявляет об изобилии игр для PS2, я 

© Habrahabr.ru