Этот материал является переводом с английского поста Тома Джеймса (Tom James) на Medium, который в свою очередь является переводом с японского серии постов инженера Тэцуи Ииды (Tetsuya Iida).
Посвящается 20-летию PlayStation 2.
Я разработал эмулятор обратной совместимости с PS1 для Sony Computer Entertainment
Автор: Тэцуя Иида
Шел 1996 год, когда меня взяли на работу в Sony Computer Entertainment (SCE) в рамках второй волны набора свежеиспеченных выпускников. Тогда, я думаю, отдел исследований и разработок SCE состоял из примерно 50 человек, во главе которых был Кэн Кутараги, а ребята типа меня находились в самом низу. Если я правильно помню, меня наняли как раз после того, как компания Square сообщила, что присоединилась к сторонним разработчикам Sony. Во времена, когда выходила Final Fantasy VII, у меня была возможность посмотреть катсцены оттуда, и, как и многие другие, я живо помню шок, когда увидел скоропостижную кончину Айрис…
Думаю, моей первой работой после присоединения к SCE было программирование видео-конвертора, который мог бы применять фильтры к видео-файлам. Так получилось, что это была первая программа, которую я написал как профессиональный разработчик.
Дело в том, что когда я появился в команде, то, наверное, был самым ее ненужным членом. Без преувеличений. У меня не было никаких электротехнических умений, и я даже не знал, как запустить Windows 3.1, не говоря о написании каких-либо программ. Даже сейчас не могу и предположить, что люди из Sony нашли во мне такого, что решили принять на работу.
К счастью, у меня была возможность научиться программировать, благодаря обучающей программе внутри компании. Я легко усвоил материал и закончил обучение с чувством, что могу спрограммировать все что угодно. После завершения обучения я сделал кучу всякой всячины. Мне поручали все подряд — от проверки эмуляторов CD до конверторов моделей данных, libc (Стандартная библиотека языка Си — прим. пер.) и т.д. Я занимался всеми этими штуками, когда где-то в 1998 году (по крайней мере, так я думаю) нашему отделу рассказали первые детали про железо следующего поколения PlayStation.
После этого группа исследований и разработки была разделена на две команды. Одна команда продолжала фокусироваться на железе PlayStation текущего поколения, в то время как вторая должна была заняться новым поколением. Я знал, что мне всегда нравилось что-то новое, поэтому я хотел работать во второй команде. Насколько помню, мне надо было пройти собеседование, и позже меня назначили в эту команду. Я был очень рад.
После того как меня взяли в команду PlayStation 2, мне дали задание сделать так, чтобы игры с PS1 запускались на новой системе. В то время было в порядке вещей, что старые игры не работают на новых консолях, но SCE хотела переломить ситуацию, и я считал, что это показывает их прогрессивное мышление. Учитывая также, что я на тот момент работал в компании всего несколько лет, было очень приятно, что позволили работать над чем-то столь важным.
Когда было принято решение, что PS2 должна быть совместима с играми PS1, планировалось, что PS2 будет переиспользовать процессор PS1 в качестве процессора ввода-вывода для нового железа. Однако в тот момент предполагалось, что никакое другое железо из PS1 не будет включено, а значит, все остальное нужно было эмулировать программно. Поскольку до этого я занимался программной разработкой, то мне и поручили написать эмулятор PS1 PSU, железа, отвечавшего за звук.
Звуковой чип PS2 состоял из двух частей: ядро и процессор цифрового сигнала (the digital signal processor, DSP). Более опытный член команды, который специализировался на разработке, связанной со звуком, взялся за DSP, а я сфокусировал внимание на ядре. Мы сняли отдельное помещение и отгородились от мира, приступив к работе. В этой комнате не было окон, и я помню, что мы часто спорили со вторым разработчиком, пока работали. Впрочем, это было не так уж плохо, потому что после этого времени, проведенного вдвоем, мы стали настоящими близкими друзьями.
Не помню, насколько долго мы работали, но однажды все бесцеремонно перевернулось с ног на голову. Выяснилось, что звуковой чип PS1 все-таки будет включен в PS2, а значит вся наша работа была сделана впустую.
Эмулятор SPU, над которым мы работали, оказался не нужен, и наши позиции оказались в подвешенном состоянии, так как звуковой чип PS1 должен был быть включен наравне с новым звуковым чипом PS2. Мы рассуждали о том, что будет дальше, скажем, написание тестовых векторов для нового звукового процессора. Однако мое следующее назначение оказалось большим сюрпризом.
Конкретно, я был назначен на разработку эмулятора графического процессора PS1, что совершенно сбило меня с толку. Кто-то другой уже вообще-то должен был этим заниматься, и когда я спросил, в чем дело, мне сказали, что этот кто-то уволился и мне придется продолжать там, где он остановился. Никаких иных вариантов не было. Конечно же, после того, как я столько времени посвятил работе над звуком, переключение на графику оказалось очень сильным изменением. Впрочем, это не имело никакого значения, так как мое мнение никого не волновало. Нравилось мне или нет, но я должен был взяться за это, пусть даже все это выглядело как пытка.
Впрочем, я вовсе не думал, что задача невыполнима. В моем понимании, эмулятор это своего рода конвертор, который принимает команды, написанные для старых процессоров, и переводит их на язык, понятный новым процессорам. Если так рассуждать, то хотя звуковое и графическое железо имеют значительные различия, все же и то, и другое занимается отправкой и обработкой команд. Все, что делает эмулятор, это изменяет форму и направление этих команд. И если эмулятор как следует протестирован, то в конце концов все должно работать, пусть даже это и будет сложно реализовать.
К тому моменту, когда я унаследовал работу над эмулятором GPU, предыдущий человек уже сделал базовый функционал, определяющий некоторые рамки, так что мне не пришлось начинать с нуля. Первым делом я познакомился со спецификациями GPU для PS1 и PS2. После этого я начал реализовывать недостающие функции, так как поначалу я фокусировался на перепрограммировании команд PS1.
Первой игрой с PS1, которая была запущена в эмуляторе PS2, была Ridge Racer. Поскольку это была игра из стартовой линейки PS1, казалось, что именно Ridge Racer достоин чести быть первой целью, которая должна была запуститься и работать. Когда включил устройство, я думал о важности того, что эта игра в каком-то смысле снова стала первой, теперь и на PS2.
Впрочем, если говорить очень-очень мягко, первые результаты были далеко не идеальны. Девушка, которая появляется перед началом каждой гонки, например, отрисовывалась как мозаика, а не как нормальный спрайт. Также экран становился розовым, когда игрок завершал круг. И все же я был очень рад видеть, что игра вообще работает. Даже если единственная вещь, которая эмулировалась, было GPU, этого было достаточно, чтобы я мог поверить, что на PS2 удастся добиться обратной совместимости с PS1 на программном уровне.
Ранним утром 2 марта 1999 года я стоял за кулисами Tokyo International Forum, где позже в этот день миру должна была быть представлена PlayStation 2 на мероприятии PlayStation Meeting 1999. Я должен был вживую продемонстрировать обратную совместимость консоли с играми PS1, когда об этой возможности объявят на конференции.
Мне пришлось не спать всю ночь до события. К тому моменту уже прошло несколько месяцев после первого запуска Ridge Racer, и работа над GPU продвинулась далеко. Значительное число игр с PS1 уже можно было запустить, а лучшей среди них была Crash Bandicoot: Warped. Поэтому эту игру выбрали, чтобы показать обратную совместимость PS2. Была только одна проблема: иногда она зависала во время эмуляции.
Нечего и говорить, что это было бы очень серьезной проблемой, если бы игра зависла посреди демонстрации перед такой большой аудиторией. Вот только я так и не смог разобраться, что именно вызывало зависания. Все, что мне удалось понять, так это что по какой-то причине игра работала нормально, если Крэш не останавливался. Зная об этом, я играл всю ночь, держа игру включенной на демонстрационном железе PS2. К счастью, я был не один, мне помогал постоянно играть еще один человек.
Подключение к экрану было настроено так, что картинку можно было выводить на большой экран на сцене, щелкнув переключателем. Конечно же, я как следует наигрался с этим переключателем.
Мы не могли начать играть утром перед выступлением, потому что была вероятность, что эмулятор не загрузится и у нас будет недостаточно времени, чтобы это исправить. Так что как бы странно это не звучало, логичнее и безопаснее всего было держать систему в активном состоянии всю ночь, раз уж она загрузилась.
К счастью, удалось благополучно пережить ночь. Система продолжала работать, пока время шоу приближалось. Нельзя недооценить, насколько важно было это событие. Сам CEO Sony Нобуюки Идэи присутствовал, чтобы оказать поддержку. Показали технические демки, которые продемонстрировали мощь Emotion Engine и Graphics Synthesizer PS2 (названия центрального и графического процессоров консоли — прим. пер.). Из-за кулис я не мог особо ничего видеть, но было слышно радостные возгласы. Все шло согласно плану. И вот пришел черед показа обратной совместимости.
Можете не верить, но я правда мало что помню из произошедшего тогда. Планировалось, что я буду играть в демку Crash Bandicoot как обычно, перепрыгивая через препятствия и продвигаясь все дальше и дальше по уровню. Но когда наступило время играть, то я по-настоящему тупил, врезался в каждое препятствие и не продвигался вперед ни на шаг. После этого в моей памяти провал. Не могу сказать, удалось ли мне доиграть или нет.
Впрочем, как стало ясно потом, в конце концов все получилось нормально, потому что объявление об обратной совместимости было встречено аплодисментами, несмотря на мою слабую демонстрацию. Все говорило о том, что событие имело большой успех.
В итоге PlayStation 2 вышла в Японии 4 марта 2000 года. Если я ничего не путаю, работа над эмулятором PS1 была завершена примерно к Новому году. В итоге была кучка игр, которые не работали как следует: из них мы составили список PS1-игр, в которые игроки не смогут играть на новой системе.
После японского запуска последовали запуски в Северной Америке и Европе, где игры с PS1 тоже поддерживались эмулятором. Непосредственно перед этими запусками я отправлялся в офисы Sony в Америке и Европе, и это был первый раз, когда я ездил за границу.
PS2 не поддерживали все 100 процентов каталога игр PS1, но все-таки запускала почти все из них. Сейчас я понимаю, что эта работа стала одной из самых важных во всей моей карьере.
Кэн Кутараги выставил высокую планку для нашей команды. Он говорил нам измерять нашу работу, задавая себе вопрос, является ли она лучшей в своем классе во всем мире. Когда я задумываюсь о том, что соответствует этому критерию, первое, что приходит в голову, это работа над обратной совместимостью PS1. Вот как я горд этим.
Если быть до конца честным, то я бы не смог сделать это один, и вокруг было много людей. В конце концов, если бы там не было меня, кто-нибудь другой сделал бы это. И все же я очень горжусь тем, что увидел, как такой огромный проект прошел до конца. Могу только надеяться, что мне выпадет возможность работать над чем-то похожим в будущем.