Опорные изображения
Краткое введение
PlayStation 2 не была одной из самых мощных консолей своего поколения, но ей удалось достичь уровня популярности, немыслимого для других компаний.
Эта консоль далеко не такая простая, как прошлая PlayStation, но мы посмотрим как ей удалось избежать судьбы предыдущих сложных консолей.
Процессор
В центре этой консоли находится мощный блок под названием Emotion Engine или ‘EE’, совместный проект Toshiba и Sony [1], работающий с частотой ~294.91 МГц [2].
Этот чипсет содержит множество компонентов, одним из которых является основной процессор. Остальные находятся в распоряжении процессора для ускорения выполнения определённых задач. Для этого анализа мы разделим EE на три секции:
- Лидер: основной компонент, который контролирует весь чип.
- Доступная память: важнейший ингредиент, чтобы процессоры могли выполнять значимые операции.
- Сопроцессоры: они ускоряют выполнение определённых вычислений.
Ведущий
В двух словах, основной процессор - это MIPS R5900, эксклюзивное ядро MIPS, разработанное для этой консоли. Вы можете вспомнить, когда Sony начала экспериментировать с MIPS с самой первой PlayStation (где мы можем найти MIPS R3000A, вторично произведённый LSI). Для следующего поколения мы получили MIPS ‘R5900’… но что это имя значит для нас?
Чтобы понять, что скрыто за этими новыми числами, давайте взглянем на историю того времени.
Опередив все ожидания
MIPS R4000 был популярной серией процессоров, принятой широким рядом систем, включая близкого конкурента. Благодаря своему успеху, MIPS привнесла ранее недоступные достижения (64-битные вычисления, 8-ступенчатые конвейеры и так далее) в массы.
Перенесёмся вперёд, следующий большой шаг вперёд случился в 1995 году с выпуском R10000. Теперь при финансировании от SGI MIPS выпустила новый процессор, который значительно улучшил параллелизм R4000, впервые внедрив такие техники, как [3]:
- Спекулятивное выполнение: процессор предсказывает результат условных ветвлений до их вычисления. Прогнозы основываются на предыдущих результатах, хранящихся во внутренней таблице на 512 записей. Как только условие вычислено, если прогноз оказался верным, процессор сэкономил драгоценное время. В противном случае, дополнительные вычисления отбрасываются.
- Благодаря этому, MIPS наконец-то превратила повторяющуюся проблему (опасности управления) в преимущество.
- В других процессорах вы можете найти аналогичную функциональность, называемую динамическим прогнозированием ветвлений.
- Конвейер с поддержкой 4 операций: Помимо конвейерной архитектуры, процессор будет теперь извлекать до четырёх инструкций в начале конвейера и распределять их по отдельным блокам, позволяя процессору выполнять эти инструкции одновременно. Таким образом, процессор достигает большей степени параллелизма.
- Выполнение вне порядка: процессор также будет изменять последовательность инструкций, чтобы максимально загружать свои блоки (при условии, что не добавляются опасности).
- Кэш L2 с 128-битной шиной, что позволяет загружать больше данных в процессор одновременно, что становится необходимостью в связи с предыдущими усовершенствованиями.
Тем не менее, такое новшество стоило сложного дизайна, и конечный продукт оказался совсем не дешевым. SGI включала его только в высококлассное оборудование, и любая попытка интегрировать его в домашнюю консоль была исключена.
Высококлассное для массов
Уже осознавая коммерческие ограничения R10000, SGI/MIPS наняли Quantum Effect Devices (QED) для разработки доступной версии R10000 для рынка среднего и низкого ценового сегмента. QED, будучи компанией, основанной бывшими сотрудниками MIPS, занималась разработкой вариантов ядер MIPS для бюджета.
В конечном итоге QED вернулась с новым ядром под названием R5000, это был R10000, подвергшийся значительным сокращениям [4]:
- Выполнение команд вне порядка заменено на выполнение команд в порядке.
- Спекулятивное выполнение команд удалено.
- Суперскалярность ограничена двумя инструкциями (двухпутевая) и больше не параллелизует целочисленные инструкции. Однако команды с плавающей запятой все еще могут быть совмещены с другими.
- В результате предыдущих снижений, L2 сокращается до 64-битной шины.
Таким образом, это стало идеальным процессором для экономичного оборудования, такого как низкопроизводительные рабочие станции SGI. В любом случае, обратите внимание, что урезанная конвейерная линия все еще выполняла параллельные операции с плавающей запятой, как будто QED планировали сохранить его привлекательным продуктом для векторных/3D приложений. Скоро вы увидите, что еще одна компания быстро заметила это.
Стоит отметить, что на другой стороне океана были похожие достижения, но в противоположном направлении: ARM объединилась с DEC в стремлении поднять ARM-чипы на рынок высококлассного оборудования.
Спецзаказ для Sony
Toshiba уже некоторое время была лицензиатом MIPS [5] и хорошо знала, как производить варианты MIPS и комплекты. В какой-то момент Sony и Toshiba объединились, чтобы создать процессор, специально разработанный для предстоящей консоли Sony. Это было огромным преимуществом для Toshiba: часто процессоры должны удовлетворять широкий спектр требований, поступающих от различных заинтересованных сторон, что ограничивает возможности для специализации. Теперь была только одна цель: 3D-игры. Таким образом, предоставляя достаточно места для всех видов инноваций.
Тогда Toshiba взяла доступный дизайн R5000 и изменила его, чтобы ускорить векторные операции. Новое ядро называется R5900 и включает следующие ‘3D’ улучшения [6]:
- Вариация ISA MIPS III. Это включает оригинальную 64-битную ISA, ранее видимую на Nintendo 64, но расширенную с интересными опкодами. Sony добавила несколько инструкций из MIPS IV (предвыборка и условное перемещение), а также собственное расширение SIMD, названное мультимедийные инструкции, чтобы ускорить векторные расчеты (аналогично SH-4, но только целочисленные).
- Мультимедийные инструкции все еще широки 32 битами, но могут работать одновременно с тремя 128-битными векторами. Они предлагают такие операции, как векторная арифметика, min/max и многие виды скалярных комбинаций для формирования новых векторов.
- 32 128-битных общих регистра: Еще одно значительное улучшение от Toshiba. Забудьте о типичном 32-битном хранилище, мы теперь вошли в 128-битную сферу. Тем не менее, большинство операций вряд ли будут использовать все доступное пространство (слова MIPS все еще длиной в 64 бита). Здесь на сцену выходит упомянутое ранее мультимедийное расширение, так как его набор позволит полностью использовать расширенный регистровый файл.
- При использовании новых инструкций каждый регистр может хранить векторы, состоящие из множества типов скаляров (от двух 64-битных целых чисел до шестнадцати 8-битных).
- Чтобы избежать потерь производительности, эти регистры доступны через 128-битную шину, в то время как остальная часть ЦП использует внутреннюю 64-битную шину данных.
- Два 64-битных АЛУ. Каждый из них может работать с 64-битными целыми числами независимо, но также могут объединяться, образуя 128-битный АЛУ. Последний является «мозгом» за счет этих блестящих мультимедийных опкодов.
Кроме этого, мы находим и другие улучшения, которые разработчики могут также приветствовать:
- 6-ступенчатый конвейер: Это одна дополнительная ступень по сравнению с предшественниками.
- 2-канальное суперскалярное выполнение: Благодарю двух АЛУ, теперь выполняются до двух 64-битных целочисленных операций параллельно.
- Это восстанавливает еще одно потерянное преимущество MIPS R10000.
- 24 КБ L1 кэша: Разделены на 16 КБ для инструкций и 8 КБ для данных.
- Схемотехника также реализует функцию предвыборки для кэширования инструкций и данных перед запросом. Это достигается за счет добавления логики, которая может определить, какие места в памяти чаще запрашиваются.
- 16 КБ ОЗУ Scratchpad, также известное как ‘Быстрая оперативная память’.
- Управление памятью: Интерфейсирует доступ к памяти с остальной частью системы.
Кроме того, ядро дополнено специализированным блоком с плавающей запятой (обозначенным как ‘COP1’), который ускоряет операции с 32-битными числами с плавающей запятой (также известными как floats
в C). Это своеобразный блок, так как он не следует стандарту IEEE 754, наиболее очевидный отсутствием бесконечности
(вычисляется как 0
вместо этого) [7]. В дополнение к этому, он имеет 32 32-битных регистра.
Узнаваемый выбор памяти
Рядом с Emotion Engine расположены два блока по 16 МБ ОЗУ, что в сумме дает 32 МБ основной памяти. Используется тип памяти RDRAM (déjà vu!), который доступен через 16-битную шину.
Сначала это может разочаровать, учитывая, что внутренняя шина Emotion Engine имеет ширину до 128 бит. Однако, чипы оперативной памяти стратегически размещаются, соблюдая двухканальную архитектуру, которая состоит из подключения обоих чипов с использованием двух независимых 16-битных шин (по одной шине на чип) для улучшения пропускной способности данных. Полученная установка обеспечивает теоретическую скорость 3,2 ГБ/с, так что будьте уверены, что задержка памяти не является проблемой в этой консоли!
В одном углу Emotion Engine находится мощный DMA-контроллер или ‘DMAC’, который передает данные между основной памятью и Scratchpad; или между основной памятью и любым компонентом внутри EE.
Передача данных осуществляется пакетами по 128 бит, но вот интересная часть: каждые восемь пакетов основная шина временно разблокируется. Это оставляет небольшое окно возможностей для выполнения других передач DMA параллельно (до десяти) или позволяет ЦП использует основную шину. Этот modus operandi называется режим резки и является одним из многих режимов, доступных на этом блоке DMA. Имейте в виду, что режим резки уменьшает задержки на основной шине, но делает это за счет замедления общей передачи DMA.
Предотвращение прошлых ошибок
Независимо от того, хотим мы этого или нет, при таком объеме трафика внутри Emotion Engine этот дизайн в конечном итоге будет страдать от последствий унифицированной архитектуры памяти или ‘UMA’. Речь идет о: нескольких независимых компонентах, пытающихся получить доступ к основной памяти одновременно, вызывая перегрузку. Чтобы исправить эти проблемы, Sony ослабила постоянную потребность в памяти следующим образом:
- Обертывание их процессоров большим количеством кэша. Таким образом, доступ к основной памяти требуется только в случае крайней необходимости.
- 99% упоминаний кэша/оперативной памяти в этой статье будут по этой причине.
- Добавление 128-байтового буфера записи: Очень похоже на Write Gather Pipe, но вместо ожидания, пока он заполнится на 25%, он сначала проверяет состояние шины (т.е. занята или свободна).
Это звучит очень удобно для приложений, которые могут извлечь пользу из кэша, но что насчет тех задач, таких как манипуляция списками отображения, которые вообще не должны использовать кэш? К счастью, ЦП предоставляет другой режим доступа к памяти, называемый UnCached, который только использует буфер записи. Таким образом, он не будет терять такты на корректировку кэша (продукт промахов кэша).
Более того, также доступен ускоренный режим UnCached. Этот добавляет буфер для ускорения чтения непрерывных адресов в памяти.
Другие интересные моменты
В том же пакете Emotion Engine есть еще один процессор под названием Image Processing Unit или ‘IPU’, который предназначен для декомпрессии изображений. Как преемник MDEC, IPU может быть полезен, когда игре нужно декодировать видео MPEG2 без блокирования основного ЦП.
Короче говоря, игра отправляет сжатые потоки изображений на IPU (надеюсь, используя DMA), которые затем декодируются в формате, который GPU может отображать. Операционная система PS2 также использует IPU для обеспечения воспроизведения DVD.
Наконец, IPU также обрабатывает сжатые высококачественные текстуры, что экономит использование ЦП и уменьшает большие передачи данных.
Сопроцессоры
Прошло два года с тех пор, как конкуренты представили свои последние предложения. Если вы читали предыдущую статью и только начали читать эту, я полагаю, вы все еще ждете ‘того самого’, что делает PS2 такой мощной, как это казалось тогда. А теперь позвольте мне представить очень важный набор компонентов, установленных Sony в Emotion Engine, векторные вычислительные блоки или ‘VPU’.
Архитектура
Векторный вычислительный блок — это маленький независимый процессор, предназначенный для работы с векторами, в частности, с векторами, состоящими из четырех плавающих точек
. Эти процессоры настолько быстрые, что тратят всего один такт на операцию, что может быть чрезвычайно удобно для обработки геометрии. Хотя они демонстрируют схожее нестандартное поведение с FPU ЦП.
ВПУ состоят из следующих компонентов:
- Некая Vector Unit Memory или ‘VU Mem’: Используется как рабочее пространство для векторного блока. Она хранит значения, которые нужно обработать и/или результаты предыдущих операций.
- Некоторый Vector Unit: Ядро процессора. Она содержит некоторую память (называемую микропамятью) для хранения программы (называемой микропрограммой), которая инструктирует блок о том, как обрабатывать данные, найденные в ‘VU Mem’.
- Она реализует 64-битную ISA, а блок выполнения разделен на два параллельных подблока. Первый умножает или складывает числа с плавающей запятой, в то время как второй делит числа с плавающей запятой или обрабатывает целые числа. Это позволяет одновременно работать с числами с плавающей запятой и целыми числами одновременно.
- Некоторый Vector Interface: Автоматически декомпрессирует вершинные данные, поступающие из основной памяти в формате, который векторный блок может понять. Этот блок также может передавать микропрограммы в микропамять.
Функционал
Чтобы начать работать, векторному блоку нужно ‘запуститься’. Для этого главный ЦП отвечает за предоставление микрокода.
В Emotion Engine установлены два ВПУ, но они расположены по-разному, что позволяет использовать их для разных задач и оптимизаций.
Векторный вычислительный блок 0
Первый ВПУ, VPU0, расположен между ЦП и другим векторным блоком (VPU1). Он выполняет вспомогательную роль для основного ЦП.
У VPU0 два режима работы:
- Микрорежим: Это традиционный режим. VPU будет независимо выполнять микроинструкции из микропрограммы, хранящейся в микропамяти.
- Макрорежим: VPU0 становится ‘COP2’ главного ЦП и выполняет макроинструкции, полученные от главного ЦП через выделенную 128-битную шину.
- Макроинструкции имеют ту же функциональность, что и микроинструкции, но используют разные опкоды. Тем не менее, блок выполнения VPU больше не разделен (значит, он может выполнять только одну инструкцию за раз).
- Хотя этот режим не полностью использует все компоненты VPU0, он все же ускоряет векторные операции ЦП. Более того, в плане простоты, сопроцессор проще программировать, чем независимый блок (что будет полезно программистам ПК).
Карта памяти VPU0 также имеет доступ к некоторым регистрами и флагам другого ВПУ, предположительно для проверки его состояния или быстрого чтения результатов некоторых операций, выполненных другим ВПУ.
Векторный вычислительный блок 1
Второй найденный VPU, VPU1, является улучшенной версией VPU0 с увеличенным количеством микро и VU памяти в четыре раза. Более того, этот блок включает в себя дополнительный компонент, называемый элементарным функциональным блоком или ‘EFU’, который ускоряет выполнение экспоненциальных и тригонометрических функций.
VPU1 расположена между VPU0 и Графическим интерфейсом (ворота к GPU), поэтому она включает в себя дополнительные шины, чтобы как можно быстрее передавать геометрию к GPU, не используя главную шину.
С другой стороны, из-за её расположения, VPU1 работает только в микрорежиме.
Очевидно, что эта VPU была разработана для тригонометрических операций и может служить предобработчиком для GPU. Поэтому её часто ставят ответственным за передачу знаменитых Списков отображения.
Бесконечные миры
Полезный подход, который можно использовать с этими блоками, - это процедурная генерация. Другими словами, вместо построения сцены с использованием жёстко закодированной геометрии, позвольте VPUs генерировать её с помощью алгоритмов. В этом случае, VPU вычисляет математические функции для создания геометрии, которая затем интерпретируется GPU (то есть треугольники, линии, квадраты и т. д.) и в конечном итоге используется для отрисовки сцены.
По сравнению с использованием явных данных, процедурный контент идеально подходит для параллельных задач, освобождает пропускную способность, требует очень мало хранения и является динамическим (программисты могут устанавливать параметры для достижения различных результатов) [8]. Многие области могут существенно выиграть от этой техники:
- Сложные поверхности (например, сферы и колеса).
- Рендеринг мира (например, ландшафты, частицы, деревья).
- Кривые Безье, очень популярное уравнение в компьютерной графике, используемое для рисования кривых. Эти кривые превращаются в патч Безье (явная геометрия) и поддерживают различные степени точности в зависимости от уровня детализации.
С другой стороны, процедурный контент может испытывать трудности с анимацией, и если алгоритм слишком сложен, VPU может не создать геометрию вовремя.
Резюмируя, процедурный рендеринг - это не новая техника, но благодаря VPUs открываются двери для дальнейших оптимизаций и более насыщенной графики. Тем не менее, это не простая техника для реализации, и отдел исследований и разработок Sony опубликовал множество статей, описывающих различные подходы к использованию на их консоли [9].
Вы определяете рабочий процесс
С этими новыми дополнениями у программистов теперь есть большая гибкость в разработке своих графических движков. Для помощи в этом компания Sony потратила дополнительные ресурсы на разработку и документирование эффективных конструкций конвейеров. Ниже приведены примеры графических конвейеров, оптимизированных для различных типов рабочих нагрузок [10]:
В первом примере, Параллельной конструкции, CPU совмещается с VPU0 в макрорежиме для создания геометрии параллельно с VPU1. Группа CPU/VPU0 полностью использует свободное ОЗУ и кэш, чтобы избежать использования главной шины, которую VPU1 использует для получения данных из основной памяти. В конце обе группы рендеринга отправляют свои соответствующие Списки отображения на GPU одновременно.
Во втором примере, Последовательной конструкции, предлагается иной подход, при котором группа CPU/VPU0 работает как предобработчик для VPU1. На первом этапе будет извлечена и обработана вся геометрия, которую VPU1 будет затем преобразовывать в Список отображения.
До сих пор это были примеры с теоретической точки зрения, но чтобы объяснить более ‘практическую’ реализацию, я обращусь к видео Джона Бертона, опубликованному по поводу разработки одной из их игр для PS2 [11].
Бывший директор Travellers Tales объяснил, как его команда разработала полностью инкапсулированную систему частиц в VPU1. В общих чертах, VPU1 сосредоточилась на чтении предварительно заполненной базы данных из своей VU-памяти, которая использовалась для вычисления координат частиц в любой момент времени без зависимости от других компонентов. Результат операции можно было преобразовать в Списки отображения и сразу же отправить.
С этим подходом CPU была значительно разгружена, что позволило ей выполнять другие задачи, такие как ИИ и физика.
Существует много других примеров, но чтобы подвести итог: Теперь всё зависит от программиста, чтобы найти оптимальную настройку, и это хорошая вещь.
Графика
Учитывая всю работу, выполненную Emotion Engine, осталось ли что-нибудь еще? На самом деле последний шаг: Отображение!
Существует простой, но быстрый чип, специализирующийся на этом: Графический Синтезатор или ‘GS’, работающий на частоте ~147,46 МГц. В него встроено 4 МБ DRAM для обработки всех задач. Таким образом, отпадает необходимость в доступе к основной памяти. Встроенное ОЗУ (embedded RAM, eDRAM) соединяется с различными шинами в зависимости от типа необходимых данных.
GS имеет меньше возможностей, чем другие графические системы, ранее рассмотренные на этом сайте. Тем не менее, он очень быстр в том, что он делает.
Архитектура и строение
Этот GPU выполняет только растеризацию, и это… Генерация пикселей, картирование текстур, наложение освещения и некоторые другие эффекты. Это означает, что нет преобразований вершин (они обрабатываются VPUs). Также это конвейер с постоянной функцией, поэтому ни сложных настроек, ни шейдеров нет, вы ограничены фиксированной моделью затенения (например, Гуро).
Выглядит довольно просто, верно? Ну что ж, давайте углубимся, чтобы понять, что происходит на каждом этапе.
Предварительная обработка
Процессор Emotion Engine запускает синтезатор графики, заполняя его встроенную DRAM необходимыми материалами (битмапы текстур и таблицы поиска цвета, последние также известны как ‘CLUT’), назначая значения в регистрах GS для его настройки и, наконец, выдавая команды рисования (списки отображения), которые инструктируют GS рисовать примитивы (точки, линии, треугольники, спрайты и т.д.) в определенных местах экрана.
Кроме того, GS будет предварительно обрабатывать некоторые значения, которые будут нужны для последующих расчетов. Наиболее заметным является значение алгоритма цифрового дифференциального анализа, которое будет использоваться для интерполяций во время рисования.
Растеризация
Используя ранее рассчитанные значения, рендерер генерирует пиксели из примитивов. Этот блок может генерировать 8 пикселей (с текстурами) или 16 пикселей (без текстур) одновременно, каждый из которых содержит следующие рассчитанные свойства:
- RGBA: Соответствующий градиент красного, зеленого, синего и альфа (прозрачности).
- Z-значение: Используется для тестирования глубины на поздних стадиях.
- Туман: Необязательный, для имитации тумана в окружающей среде.
- Свойства текстуры: Содержит адрес текстуры в DRAM и другие свойства (координаты, уровень детализации, фильтр и т.д.), которые будут использоваться на следующем этапе.
Он также выполняет тесты на отсечение, чтобы отбрасывать полигоны вне области кадра (на основе их значений X/Y), некоторые свойства пикселей передаются на стадию ‘тестирования пикселей’ для дополнительных проверок. Освещение также обеспечивается выбором одного из двух доступных вариантов: Гуро и Равномерное.
Пакет затем передается в ‘двигатель текстурирования’, но каждое свойство обрабатывается специализированным ‘поддвигателем’, что позволяет обрабатывать различные свойства параллельно.
Текстурирование
Эта стадия обеспечивается мощной пиксельной единицей, которая может обрабатывать до 16 пикселей одновременно, здесь текстуры будут наложены на полигоны (теперь пиксели). Кроме того, здесь применяются эффекты тумана и сглаживания.
Текстурные карты извлекаются из DRAM в области, определенной как буфер текстур, хотя это администрируется отдельной областью, называемой буфер страницы текстур, который, по-видимому, служит механизмом кэширования для текстур. CLUT также отображаются с использованием этой системы страниц. Оба элемента извлекаются с использованием 512-битной шины.
Пиксельная единица выполняет коррекцию перспективы для отображения текстур на примитивах (значительное улучшение по сравнению с предыдущим подходом аффинного картирования). Более того, он также обеспечивает билинейную и трилинейную фильтрацию, последняя используется вместе с мип-картами текстур.
Тестирование
Здесь определенные пиксели будут отброшены, если они не соответствуют нескольким требованиям. Итак, выполняются следующие тесты:
- Альфа тест: Сравнивает альфа значение (прозрачность) пикселя со ‘стандартным’ значением. Это связано с тем, что в некоторых случаях альфа значение должно находиться в определенном диапазоне или быть больше/меньше произвольного значения.
- Тест альфа-значения точки назначения: Проверяет альфа-значение пикселя перед его отрисовкой в буфер кадра.
- Тест глубины: сравнивает Z-значение пикселя с соответствующим Z-значением в Z-буфере. Это предотвращает обработку пикселей, которые будут скрыты за другими пикселями.
Пост-обработка
Последняя стадия может применить некоторые эффекты на наши новые пиксели, используя предыдущий буфер кадров, найденный в локальной DRAM:
- Альфа смешивание: Объединяет цвета текущего буфера с предыдущим в памяти.
- Дизеринг: Большие значения RGBA необходимо обрезать, чтобы сгладить потерю точности.
- Ограничение цвета: После применения операций, таких как альфа-смешивание, новое значение RGB может превысить допустимый диапазон (0-255), поэтому ограничение устанавливает значение в пределах диапазона.
- Форматирование: Это преобразует конечный буфер кадра, сгенерированный в конвейере, в формат, который может храниться в памяти.
В конце концов, новый буфер кадров вместе с обновленным Z-буфером записываются в память с использованием 1024-битной шины.
Еще больше пост-обработки
В GS есть специальный компонент, называемый программируемый контроллер ЭЛТ или ‘PCRTC’, который отправляет буфер кадров в памяти на видео выход, чтобы вы могли видеть кадр на экране телевизора. Но это еще не все: он также содержит специальный блок под названием Схема слияния, который позволяет альфа-смешивать два отдельных кадровых буфера (полезно, если игры хотят повторно использовать предыдущий кадр для формирования нового). Результирующий кадр может быть выведен через видеосигнал и/или записан обратно в память.
Лучшие модели
С учётом всего сказанного, это, конечно, принесло лучшее дизайны для обновления уже известных персонажей. Посмотрите на этот ‘До & После’:
Каркас | Поверхность | Текстурированный |
Нажмите, чтобы разрешить взаимодействие |
732 треугольника.
Каркас | Поверхность | Текстурированный |
Нажмите, чтобы разрешить взаимодействие |
2226 треугольника.
Вот персонажи из новых игровых серий, которые были смоделированы с высоким уровнем детализации с нуля:
Каркас | Поверхность | Текстурированный |
Нажмите, чтобы разрешить взаимодействие |
2744 треугольника.
Каркас | Поверхность | Текстурированный |
Нажмите, чтобы разрешить взаимодействие |
2700 треугольника.
Стоит отметить, что игры, такие как Dragon Quest, реализовали пользовательскую модель освещения под названием Cel Shading (термин, который я упоминал раньше), однако в моих предыдущих статьях я объяснял, что за это в основном отвечает GPU. В случае PS2, предполагается, что необходимые цветовые вычисления выполняются Emotion Engine, так как GS не такой гибкий, как другие GPU.
Видеовыход
Как уже упоминалось ранее, PCRTC отправляет кадровый буфер через видеосигнал. Интерфейс может транслировать видео с использованием широкого диапазона форматов (чтобы работать с телевизорами из любого географического региона) [12]:
- PAL: Передает до 640x512 пикселей с частотой 50 Гц, либо прогрессивно (576p), либо чересстрочно (576i).
- На рынке не найдено игр, использующих 576p. Хотя некоторые поддерживают прогрессивный режим, они делают это в 480p.
- NTSC: До 640x448 пикселей с частотой 60 Гц, либо прогрессивно (480p), либо чересстрочно (480i).
- VESA: До 1280x1024 пикселей.
- DTV: До огромного количества 720x480 пикселей в прогрессивном режиме или 1920x1080 в чересстрочном режиме.
- Настройка параметров PCRTC, игра также может заставить выводить изображение в 1080p. Однако этот режим не документирован и, следовательно, подвержен непредсказуемому поведению.
- Значит ли это, что PS2 может ‘отображать HD’? Технически… да, но я не думаю, что большинство игровых студий рискнули бы ухудшить производительность ради формата, который еще не был распространен.
Есть довольно много режимов на выбор, но все сводится к принятию формата в начале 2000-х годов, что сужает выбор до PAL и NTSC. Также, хотя PAL обеспечивал более высокое разрешение, чем NTSC, некоторые европейские версии NTSC-игр использовали letterboxing, чтобы скрыть неиспользуемые горизонтальные линии, и замедляли частоту до 50 Гц (я называю это ‘плохими портами’!).
Видео-выходной порт (Multi A/V) очень удобен. Он переносит RGB, компонентное, S-Video и композитное видео. Таким образом, все важные сигналы присутствуют без необходимости в проприетарных адаптерах или внутренних модификациях.
Звук
Новый аудио-чип является инкрементальным обновлением старого СПУ и называется… SPU2! Улучшения включают в себя добавление 2 МБ внутренней памяти и 48 доступных каналов (вдвое больше, чем в оригинале).
SPU2 состоит из двух звуковых процессоров внутри, называемых CORE0 и CORE1, и работает на частоте ~36.86 МГц. Каждый из них обрабатывает 24 канала.
Любопытно, что это до сих пор два независимых процессора, и для их настройки вам нужно изменить их регистры. Однако Sony предупредила разработчиков, что оба набора регистров должны быть установлены с интервалом в 1/48000 секунды. Если слишком торопиться, поведение SPU2 становится непредсказуемым!
SPU2 наследует те же эффекты, что и оригинальный SPU. Предоставляемая память используется в качестве ‘рабочей области’: вы можете хранить необработанные данные формы волн и выделять дополнительное пространство для их обработки и применения эффектов.
Наконец, чип может смешивать все каналы для предоставления стереовыхода. Теперь, вот что интересно: SPU2 может использовать смешанный стереосэмпл как новый ввод, что позволяет EE получить к нему доступ (чтобы смешать его с еще большим количеством аудио, например), или добавить больше эффектов (таких как реверберация, эхо и задержка).
Аудиовыход
Аудио сигнал выводится через два носителя:
- Цифровое аудио: Упоминается как цифровой интерфейс Sony/Philips или ‘S/PDIF’.
- Аналоговый аудиосигнал: Проходит через цифро-аналоговый преобразователь и заканчивается на мульти A/V порту.
Ввод/вывод
Изначально ввод/вывод PS2 не были особо сложными. Однако последующие ревизии этой консоли полностью изменили как внутренние, так и внешние дизайны. Так что в целом эта консоль демонстрирует множество форм ввода/вывода, распределенных по различным ревизиям.
Специальный ЦП
Для начала, есть специальный процессор, который арбитрирует связь между различными компонентами, этот ЦПУ не что иное, как оригинальное ядро на основе MIPS R3000, найденное в PlayStation 1. На этот раз он называется I/O Processor (IOP) и работает на частоте 37,5 МГц, подключаясь к 32-битной шине [14].
IOP общается с Emotion Engine с использованием специализированного интерфейса ввода-вывода под названием Системный интерфейс или ‘SIF’. Оба конца используют свои DMA-модули для передачи данных друг другу. IOP также поставляется с выделенной памятью - 2 МБ EDO RAM (точно как в PS1) - используется в качестве буфера.
В общем, этот процессор обеспечивает доступ к фронтальным портам, контроллеру DVD, SPU2, BIOS ROM и слоту для PC-карт.
Как бы там ни было, через год после выхода ревизии ‘Slim’ (2005), IOP был заменен на SoC, который включает в себя PowerPC 401 ‘Deckard’ (урезанный PowerPC 601 для микроконтроллеров), 4 МБ SDRAM (на 2 МБ больше, чем раньше) и Ethernet трансивер (ранее встречавшийся в внешнем аксессуаре).
Наследственная совместимость
Для моделей с предшествующим процессором, можно предположить, что совместимость с PS1 будет частью комплекта. Как удобно, Sony действительно включила эмулятор PS1 (называемый PS1DRV
), который загружается всякий раз, когда вставляется диск PS1. Когда это происходит, IOP работает на пониженной частоте, чтобы соответствовать скорости PS1, EE ‘перепрофилируется’ для эмуляции старого GPU, а SPU2 перенастраивается для работы как оригинальный SPU.
В моделях на базе PowerPC обратная совместимость сохранилась, но через полную программную реализацию.
Наличие интерфейсов
Эта консоль сохранила предыдущие фронтальные порты, которые были в оригинальной PlayStation, также включает пару ‘экспериментальных’ интерфейсов, которые поначалу казались многообещающими.
Самыми популярными дополнениями являются два порта USB 1.1. Теоретическая скорость их работы составляет 12 Мбит/с, но это сильно зависит от пропускной способности IOP (которая, как правило, значительно ниже). Тем не менее, этот интерфейс был широко принят сторонними аксессуарами.
Однако, были и некоторые ‘эксперименты’, которые долго не продержались. Например, фронтальный i.Link порт (также известный как IEEE 1394 - или ‘FireWire’ в мире Apple). Этот порт использовался для соединения двух PS2 для локального многопользовательского режима, но был удален после третьей ревизии (предположительно заменен на ‘Сетевую карту’, больше деталей ниже).
Необычный комбо Ethernet + HDD
На задней стороне консоли также был слот для PC карт. Для этого можно было купить ‘Сетевую карту’ от Sony, которая предоставляет два дополнительных интерфейса:
- Порт Ethernet для многопользовательской игры онлайн.
- Порт для фирменного внешнего жёсткого диска: Он продавался компанией Sony и включал типичный 3,5” ATA жесткий диск объёмом 40 ГБ. Он позволял играм сохранять временные данные (или постоянно устанавливаться там) для более быстрого времени загрузки. Тем не менее, лишь несколько игр использовали эту функцию.
В более поздних ревизиях, порт PCMCIA был заменен на Expansion Bay, куда теперь мог устанавливаться 3,5” жесткий диск внутри консоли. Сначала нужно было купить Сетевой адаптер, который не только предоставлял Модем и/или Ethernet порты (в зависимости от модели), но также включал разъемы для подключения ATA-66 жесткого диска.
Внутри данные на HDD структурированы с использованием файловой системы под названием ‘PFS’ [17]. Странно, но планировка не содержит таблицы разделов, только очень примитивный каталог под названием ‘Aligned Partition Allocation’ (APA). Возможно, это связано с тем, что Sony поставляла только жесткие диски на 40 ГБ. Таким образом, масштабируемость не входила в их список приоритетов.
Эфирный трансивер в адаптере поддерживает скорость передачи до 100 Мбит/с (12,5 МБ/с). Однако, наблюдаемая скорость значительно ниже (в некоторых случаях до 2 МБ/с). Объяснение этому довольно простое: для достижения работоспособной сетевой связи требуется реализовать все уровни стандартной ‘модели OSI’; и передатчик - это всего лишь одна часть головоломки. Остальное часто делегируется IOP (таким образом, выполняется в программном обеспечении), но из-за ограниченной производительности IOP [20] это приводит к узким местам.
Уменьшение размеров
Ревизия Slim пересмотрела всю модель Ethernet + HDD: больше нет Expansion Bay, но Ethernet порт установлен на задней части консоли (определенные модели также включали Модем).
Кроме того, новая ревизия добавила новый инфракрасный сенсор, который используется с фирменным пультом дистанционного управления Sony (продается отдельно).
Интерактивные аксессуары
Новая версия их контроллера, DualShock 2, немного улучшенная версия DualShock.
Во времена оригинальной PlayStation были выпущены несколько ревизий оригинального контроллера с различными функциями (что также привело к фрагментации рынка). Теперь для удобства разработчиков появился единый контроллер, который объединил все предыдущие свойства.
По сравнению с оригинальным DualShock, новая версия имеет небольшой редизайн, включает два аналоговых стика и два вибрационных мотора для более богатого ввода и обратной связи соответственно.
Рядом со слотом для контроллера находится слот для карты памяти, теперь совместимый с картами для PS1 и PS2. Последние карты встраивают дополнительную схему для целей безопасности, которая называется MagicGate, что позволяет играм ограничивать передачу данных между различными картами памяти. IOP отвечает за шифрование и дешифрование содержимого, и делает это при помощи чипсета MagicGate (расположенного внутри карты памяти) и DVD-дисковода, последний содержит ключи шифрования.
Некоторые карты памяти от сторонних производителей не поддерживали MagicGate.
Операционная система
На материнской плате установлен чип с 4 МБ ПЗУ, который содержит значительное количество кода, используемого для загрузки меню оболочки (с которым могут взаимодействовать пользователи), а также предоставляет системные вызовы для упрощения доступа к вводу/выводу [23] (на который опираются игры).
При получении питания и MIPS R5900, и IOP начнут работу с адреса 0xBFC00000
(это сигнатурный вектор сброса для всех MIPS ЦПУ). Чтобы справиться с ожидаемыми конфликтами, код, хранящийся по этому адресу (указывает на BIOS ПЗУ), заставит каждый ЦПУ ветвиться в разные места на основе его идентификатора.
В случае с R5900, ЦПУ будет следовать этим шагам [24]:
- Инициализировать оборудование.
- Загрузить ядро из ПЗУ в ОЗУ. После загрузки ядро предоставит слой абстракции для приложений (в основном игр) для взаимодействия с оборудованием. Кроме того, оно также предоставляет многопоточную API (кооперативную и основанную на приоритетах).
- Ядро загружает
EELOAD
, модуль ядра, который, в свою очередь, загружаетOSDSYS
. Последний представляет собой программу, которая отображает анимацию заставки и меню оболочки.
В свою очередь, IOP будет инициализировать часть своего оборудования, а затем загружать несколько модулей, которые позволяют IOP обращаться к аппаратному обеспечению этой консоли. После завершения IOP будет переведен в состояние ‘ожидания команды’.
Стоит отметить, что использование модулей позволяет Sony выпускать новые аппаратные ревизии PS2 без изменения IOP (до тех пор, пока они это делали), таким образом снижая затраты на производство.
Интерактивная оболочка
Функциональность оболочки PS2 находится примерно на уровне остальных консолей шестого поколения.
Оболочка состоит из нескольких пользовательских интерфейсов для управления типичными операциями, такими как управление сохраненными данными, хранящимися на карте памяти, или изменение настроек часов. Она также предоставляет некоторые расширенные параметры, такие как изменение текущего видео режима.
Обновляемость
БИОС действительно хранится в памяти только для чтения, но это не помешало Sony внести в него изменения после выхода с завода. Видите ли, за кулисами, БИОС оставил две двери открытыми для будущих изменений:
- Приложения (игры и
OSDSYS
) могут показывать исправления ядра в режиме реального времени [25]. И официальный SDK, и неофициальный ‘ps2sdk’ активно это использовали, так как инженеры Sony впоследствии обнаружили, что их ядро было пронизано ошибками (каламбур не намерен). EELOAD
будет искать обновленную версиюOSDSYS
, хранящуюся на карте памяти и/или жестком диске [26]. Sony полагалась на это, чтобы добавить DVD-плеер и поддержку жесткого диска, так как ни один из этих драйверов не был включен в более ранние ревизии этой консоли.- Эти обновления распространялись на установочных дисках, которые поставлялись с консолью или с комплектом жесткого диска (часть набора Final Fantasy XI).
- В отличие от ядра, которое должно быть совместимо с предыдущими SDK, последующие ревизии консоли включали предыдущие обновления в BIOS ПЗУ.
- Чтобы контролировать распространение, бинарные файлы должны быть подписаны с использованием стандарта шифрования данных (DES) [27], симметричной системы шифрования, используя ключи, известные только Sony (в теории). Кроме того, бинарные файлы должны храниться на устройстве с поддержкой MagicGate.
В любом случае, Sony в конечном итоге удалила второй метод в поздних моделях PS2 (с версией BIOS 2.30
). Полагаю, Sony больше не собиралась делать обновления, тем более это увеличивало поверхность атаки.
Игры
Невероятный уровень популярности, достигнутый этой системой в нулевых годах. К концу её жизненного цикла (2013 год, спустя 13 лет!) библиотека игр насчитывала 1850 названий [28].
То, что здесь произошло, действительно впечатляет. У PS2 нет ‘дружественной программисту’ архитектуры (с точки зрения программиста ПК), но с таким количеством разработанных игр, мне тоже интересно, не было ли здесь других факторов (таких как ‘лицензионные послабления’, низкие затраты на распространение, затраты на разработку, маленький форм-фактор и так далее).
Экосистема разработки ПО
Sony предоставила аппаратное и программное обеспечение для поддержки разработки игр.
С точки зрения программного обеспечения, был PlayStation 2 SDK, который включал [29]:
- The Emotion Engine toolchain: Набор C и C++ компиляторов, ассемблеров, линкеров и отладчиков, используемых для контроля каждого элемента EE. Основной ЦП в основном программировался с использованием C/C++, однако, компоненты, критичные по производительности, такие как векторные блоки, программировались с использованием ассемблера (микрокода/макрокода).
- В комплект также входил ‘эмулятор Emotion Engine’, который мог грубо протестировать код без отправки его на реальное оборудование, хотя эмулятор не был так точен, как физический чип EE.
- Все эти инструменты работали на Linux, Solaris и Windows. Последний вариант работал под средой Cygnus.
- Низкоуровневые библиотеки: Интерфейсировали многие системные функции (используя вызовы BIOS).
- Инструменты ‘Анализ’ для профилирования использования производительности.
- Дополнительные инструменты для подключения к официальному оборудованию для разработки.
С точки зрения аппаратного обеспечения, Sony предоставила студиям специальное оборудование для запуска и отладки игр на месте. Начальные девкиты представляли собой голые платы, сложенные вместе, чтобы воссоздать не выпущенное оборудование PS2. Поздние наборы (названные Development Tool) имели более презентабельный вид, улучшенный ввод/вывод и комбинированное рабочее оборудование (работающее под управлением RedHat 5.2) с оборудованием PS2 для создания и развёртывания игры в одном корпусе [30].
Сочетание Devkit, официального SDK и CodeWarrior (известного IDE) было одной из самых популярных конфигураций.
Носитель
Дисковод может читать как DVD, так и CD, поэтому игры можно было распространять в любом формате, но по понятным причинам, большинство игр выпускались на DVD.
DVD-диски могут вмещать до 4.7 ГБ данных в случае DVD-5 (наиболее распространенный ‘субформат’) или 8.5 ГБ в случае DVD-9 (двухслойная версия, менее распространенная) [31]. Фактически существует третий формат, DVD-10, который является двухсторонним, но ни одна коммерческая игра его никогда не использовала.
Из-за типа используемого носителя можно было проигрывать не только игры, но и фильмы. Для этого требуется декодер для чтения формата DVD-фильмов, и поэтому PS2 изначально включала необходимые элементы, установленные на карте памяти (в конце концов, карта - это просто носитель), но поздние модели поставлялись с предустановленным программным обеспечением для DVD в ПЗУ BIOS.
По скорости CD-ROM считываются со скоростью 24x (3.6 МБ/с), а DVD-ROM со скоростью 4x (5.28 МБ/с) [32].
Сетевой сервис
Как вы видели, сетевые функции этих консолей не были стандартизированы до более поздних ревизий, которые появились через четыре года после первого выпуска. Аналогично, студии разработчиков игр несли ответственность за обеспечение необходимой инфраструктуры, если они решали предоставлять онлайн-сервисы (например, многопользовательскую игру). В более поздние годы Sony внедрила Dynamic Network Authentication System или ‘DNAS’, это была не онлайн-сервер, а система аутентификации, предотвращающая подключение пиратских игр к сети.
Необычная игра
Помимо всех этих игр с их яркой графикой, Sony выпустила дистрибутив Linux на основе ‘Kondara’ (который в свою очередь основан на Red Hat 6), доступный на двух DVD (первый диск называется ‘Runtime Environment’, а второй - ‘Software Packages’) вместе с VGA адаптером, USB-клавиатурой и мышью; плюс некоторые руководства разработчика. Комплект был известен как Linux Kit и вы могли запускать ОС, загрузив первый DVD и затем продолжать как в любой старой среде Linux. Для установки дистрибутива Linux вам, очевидно, понадобился жёсткий диск, установленный в консоль. После установки всегда требовался первый DVD для загрузки этой ОС.
Набор Linux включал компиляторы, нацеленные на EE (gcc 2.95.2 с glibc 2.2.2), и ассемблеры для векторных блоков, вместе с оконной системой (XFree86 3.3.6) ‘ускоренной’ в Graphics Synthesizer [33]. В целом, это звучит как интересная среда. Фактически, одна из научных статей, которые я читал при написании этой статьи, была выполнена с использованием этой среды.
Борьба с пиратством и хоумбрю
Здесь есть о чем поговорить, так что давайте начнем с DVD-привода, хорошо?
Защита от копирования DVD
Эта область особенно беспокоила игровые студии, так как эта консоль использовала очень доступный формат дисков для распространения игр. Таким образом, риск пиратства был высок.
Когда ОС загружает игру, она делает это, отправляя специальные команды приводу DVD. Команды, используемые для чтения содержимого игры, работают совершенно иначе, чем стандартные команды DVD (например, для чтения DVD-фильма). Оказывается, авторизованные игры содержат недосягаемый ‘файлообразующий файл’ во внутренней части диска, который индексирует файловую систему по имени, позиции и размеру. Когда DVD-привод запрашивает чтение игрового диска, он всегда навигирует по диску, используя файлообразующий файл, что делает невозможным чтение пиратской копии игры, которая не может включать этот файлообразующий файл.
Это дополнялось системой региональной блокировки, которая предотвращала работу импортных игр на консоли из другого региона.
Обход защиты
Объяснив наиболее критичные части этой консоли, давайте рассмотрим несколько методов, которые были обнаружены (и коммерциализированы) для обхода защитных механизмов.
Атака на DVD-привод
Как только PS2 поступила в магазины, появилось множество продуктов третьих сторон, обещающих ‘разблокировать’ DVD-привод. Не поддерживая Homebrew (кроме Linux решения), пиратство стало главным бенефициаром.
Чиповка
Как и с любой другой консолью своего поколения (и предыдущих поколений) используя дисковую систему, рано или поздно компании третьих сторон обратной инженериирании DVD подсистемы. Цель здесь заключалась в нахождении эксплоита, который мог бы заставить драйвер навигировать по файловой системе без необходимости использования недоступного файла карты.
Это в конечном итоге материализовалось в виде мод-чипов, которые также снимали проверки защиты от копирования и ограничения по региону.
Читы
Вместе с мод-чипами, которые требовали навыков пайки для их установки, на рынке появились несанкционированные, но ‘подлинные’ диски. Эти диски патчили ядро, чтобы снять региональную защиту и использовать игровые чит-коды.
Самое главное, ‘чит-диски’ имели преимущество в том, что не требовали никакой модификации консоли. Думаю, лучший пример, который можно упомянуть, это CodeBreaker.
Замена дисков
Посреди последних достижений появился еще один трюк. На этот раз, эксплуатируя обработку поврежденных секторов. Swap Magic выглядел как еще один ‘подлинный’ диск, но его ‘игра’ заставляла DVD считывать несуществуемый исполнимый файл, находящийся в специально поврежденном секторе, полностью останавливая драйвер [34]. Это окно возможностей позволило пользователям заменить диск на нелицензионный. Затем Swap Magic, еще загруженный в память, загружал основной исполняемый файл нового диска, загружая настоящую игру в конце. Все это происходит, пока привод все еще считает, что вставлен лицензионный диск.
Это не обязательно требует изменения консоли. Тем не менее, в зависимости от модели, внешнюю часть PS2 придется подделать, чтобы заблокировать датчики извлечения привода. В некоторых моделях частью пошагового руководства было размещение кусочков хлопка в определенных местах.
Отказ от мод-чипов
Со временем было собрано и распространено больше исследований об этой консоли. Следовательно, новые и более сложные открытия привели к новой волне разработок, которые больше не полагались на внешнее оборудование, по крайней мере в основном. Более того, пиратство уже не было главным фокусом. Вместо этого способность запускать программы третьих сторон без одобрения Sony (называется Homebrew) быстро стала одной из главных целей.
Переполнение независимости
PS2 хранит файл базы данных под названием TITLE.DB
на MemoryCard, который содержит информацию, используемую для оптимизации эмуляции игр PS1 [35]. Когда вставляется игра PS1, ОС извлекает файл базы данных и загружает весь файл в память по фиксированному адресу (первый фол). Парсер информации реализован с использованием strncpy()
, функции на языке программирования C, которая копирует строки (цепочки символов) из одного места в другое.
Для тех, кто знаком с C, вы, наверное, догадались, о чем я говорю. Дело в том, что strncpy()
не знает, какой длины строка, поэтому, если строка не завершается (путем добавления \0
в конец цепочки), копирование продолжается ‘вечно’ (с непредсказуемыми результатами!). К счастью, эта функция содержит необязательный параметр, который указывает максимальное количество байтов для копирования, защищая копирование от переполнения буфера. Как бы абсурдно это ни казалось, Sony не использовала этот параметр, хотя каждая запись в базе данных имеет фиксированный размер в 256 байт (второй фол).
При ближайшем рассмотрении в ОЗУ, оказывается, что файл TITLE.DB
копируется рядом с сохраненным регистром, $ra
, который указывает адрес возврата после завершения выполнения текущей функции (третье предупреждение), что приводит к эксплойту независимости [36]: Создайте файл TITLE.DB
с длинной строкой, встроите в него исполняемый файл и спроектируйте эту строку так, чтобы $ra
был перезаписан и указывает на исполняемый файл. Если вам удастся загрузить этот файл на вашу Memory Card (через другой эксплойт или адаптер USB для ПК), у вас будет простой «загрузчик» Homebrew.
Это открытие было опубликовано в 2003 году. Следовательно, с выпуском slim-версии, Sony добавила новую версию BIOS ROM, исправляющую этот эксплойт. Достаточно любопытно, что это не была последняя ошибка, которая обнажила неуклюжий код.
Эксплойт с подписью
В ноябре 2007 года хакерская группа начала продавать Memor32 [37], еще одну обычную карту памяти от третьей стороны, за исключением того, что по какой-то причине она содержала FPGA и USB-порт. Только после появления прошивки под названием Memento на интернет-форумах стало ясно, для чего на самом деле предназначен Memor32: запускать неавторизованные исполняемые файлы с карты памяти, как и эксплойт Independence.
Реализация Memento основывалась на уязвимости в проверке подписи DVD-плеера. Было обнаружено, что, хотя двоичные файлы должны быть подписаны с помощью ключей Sony, целостность двоичного файла не проверяется. Таким образом, любой мог заменить исполняемый код чем-то другим (если это помещается в то же пространство), и операционная система с радостью его исполняла бы. Прошивка Memento использовала этот эксплойт, чтобы замаскировать свою нагрузку в DVD-плеере и включала несколько утилит, которые позволяли пользователям загружать игры (либо с дисковода, либо с HDD).
Однако популярность Memor32 и Memento вскоре снизилась после появления бесплатной (и первоначально с открытым исходным кодом) альтернативы: FreeMCBoot.
Универсальное решение
Как только Memento было разобрано, в интернете появилась альтернатива, не требующая Memor32. FreeMCBoot использовал ту же уязвимость, за исключением того, что его можно было установить на любую карту памяти MagicGate. Единственным недостатком было то, что для загрузки установщика все еще требовался другой эксплойт (например, замена диска).
Что интересно, интерфейс пользователя FreeMCBoot заимствует элементы из OSDSYS
, предоставляя знакомое меню для запуска других программ Homebrew. Он также патчит Kernel для добавления API для доступа к устройствам хранения данных в портах USB 1.1, что многие приложения homebrew используют для поиска дополнительных файлов.
Кроме того, установщик предлагает два варианта: установить только необходимые файлы для текущей консоли или установить глобальную настройку для всех вариантов PS2. Любопытно, но последний вариант был сложен для выполнения [38]. Изначально установщик изменял таблицу разделов карты памяти, чтобы избежать нехватки места, что не было особенно безопасным.
Как это ни странно, в 2011 году система безопасности PlayStation 3 была компрометирована, раскрывая множество секретов. Среди прочего, была раскрыта коллекция ключей MagicGate, глобально используемых для обратной совместимости с PS2. С тех пор больше не было необходимости прибегать к ограниченному трюку с подписью двоичных файлов DVD для создания исполняемых файлов PS2. Таким образом, начиная с версии 1.8b
, FreeMCBoot сохраняет свою позицию как самый безопасный и популярный метод запуска любого типа homebrew на PlayStation 2.
Дальнейшие разработки
Как только возможность запуска Homebrew стала более доступной, работа продолжилась в виде доработки предыдущих эксплойтов и разработки приложений Homebrew. Некоторые из последних в конечном итоге способствовали пиратским действиям, но также расширили ограниченные возможности операционной системы (например, предоставляя патчи для игр), в конечном итоге это зависело от намерений пользователей.
Вот несколько примечательных примеров разработок, связанных с homebrew:
- FreeHDBoot: Вариант FreeMCBoot, который вместо этого устанавливается на HDD, откуда система также пытается загрузиться.
- ps2sdk от группы ps2dev [39]: Фактический неофициальный SDK для написания homebrew для PS2 без риска нарушения авторских прав. Проект существует с 2000 года, когда он существовал только в виде отдельных библиотек для доступа к конкретным компонентам [40], а со временем был объединен в единый пакет для пользы разработчиков homebrew.
- LaunchELF от нескольких авторов [41]: Файловый менеджер с дополнительными утилитами. Он был продолжен как ‘uLaunchELF’, а затем как ‘wLaunchELF’.
- Open USB Loader (OPL) от нескольких авторов [42]: Позволяет загружать образы дисков из разных источников (HDD, USB, i.Link и даже SMB и NMB через Ethernet) с возможностью применения патчей.
- ESR от ffgriever [43]: Изначально назывался ‘Vast CDVDV’, это приложение, которое обманывает всю систему (включая привод DVD), чтобы запустить записанную копию игры без аппаратных модификаций. Оригинальное содержимое игры должно быть пропатчено, чтобы замаскировать себя как DVD-фильм (чтобы привод DVD не отклонил его), в то время как ESR берет под контроль Emotion Engine и IOP для перенаправления выполнения к фактической игре.
В последующие годы будут обнаружены новые уязвимости:
- Fortuna от krat0s [44]: Альтернативный Homebrew-лаунчер, выпущенный в 2019 году, который использует совершенно другой эксплойт. На этот раз, это переполнение буфера в парсере значков менеджера сохранений (часть
OSDSYS
) [45]. Главное преимущество — совместимость с поздними моделями PS2, которые убрали поддержку внешних обновленийOSDSYS
(следовательно, несовместимость с FreeMCBoot). - OpenTuna от alexparrado [46]: Опенсорсная альтернатива Fortuna, возникшая в результате реверс-инжиниринга последнего.
- FreeDVDBoot от cturt [47]: Новая уязвимость, опубликованная в 2020 году. Она представляет собой новое переполнение буфера в DVD-плеере, которое можно использовать для выполнения произвольного кода. Пользователям нужно лишь записать DVD с FreeDVDBoot, чтобы выполнить любой предназначенный для них бинарный файл, включая установщик FreeMCBoot или даже ESR (Sony очень повезло, что это не было обнаружено намного раньше! как это не случилось с другими).
Вот и всё, ребята
Поздравляю и благодарю за то, что дочитали статью до конца! Честно говоря, было так много тем для обсуждения, что я сомневался, не устанут ли читатели от материалов, связанных с PlayStation, к моменту завершения этого.
В любом случае, серьезно, я надеюсь, что вы узнали что-то новое после прочтения этой статьи, и если у вас есть какие-либо комментарии, не стесняйтесь <a href=“code>r ref(about_url, root = TRUE) связаться со мной.
Увидимся в следующий раз!
Родриго