Да, мы слышали этот жалкий и бессмысленный аргумент миллион раз, и обычно на его основании делается аналогичное, и весьма невежественное заключение (или, возможно будет правильнее сказать, предположение) что просто потому, что Xbox похож на ПК, его аппаратная начинка должна сравнительно легко поддаваться эмуляции. Это крайне ошибочный образ мышления. Насколько сложной может быть эмуляция? Очень. Аппаратная начинка Xbox очень сложна, и на сегодняшний день всё ещё ужасно документирована. Здесь нам потребуются некоторые разъяснения.
1. Легко ли эмулировать ПК?Ну, я бы не сказал такого про себя. Взгляните на исходный код проекта «Bochs». Куча труда и исходного кода, не так ли?
2. Эмулировать процессор типа x86 не намного сложнее, чем болтать про него.Я не знаю, откуда пошло это бессмысленное предположение. Да, существует куча документации о том, как работает процессор типа х86, но это не сильно облегчает работу. Во-первых, набор инструкций у х86 О-Г-Р-О-М-Е-Н! Возможны как минимум 20 различных вариантов одной и той же инструкции (например, существует множество разных вариантов инструкции MOV, таких, как INC, DEC, ADD, SUB, SHR, SHL, AND, OR, XOR, и так далее.) и реализация их всех занимает время. Но, конечно, это - не самая большая трудность.
Настоящая проблема - в том, что любой современный процессор типа x86, начиная с Pentium III, может выполнять несколько инструкций одновременно. Это не то же самое, что эмулировать процессор Z80, выполняя инструкции по одной. Практический алгоритм, и сам принцип его исполнения на процессоре типа x86 - недокументированны, и всё ещё неизвестны. Короче говоря, эмуляция центрального процессора Xbox возможна, но даже в этом случае без ошибок не обойтись.
3. Эмуляция любого оборудования NVIDIA не похожа на прогулку в парке!Зачастую считается, что графический чип Xbox, NV2A – это простая GeForce 3.
Это не так!
Он похож, но не идентичен. У него, к тому же, есть ещё и некоторые возможности от GeForce 4, так что это скорее смесь из NV20 и NV25. Их эмуляцию также никак не назовёшь простой. У графических процессоров NVIDIA очень большое количество регистров, и, насколько я знаю, даже половина из них ещё не опознана, к тому же назначение многих уже открытых регистров по-прежнему неизвестно. Документации о том, как работают графические процессоры NVIDIA мало, либо нет совсем. Лучшее, что мы можем сделать - это посмотреть на похожие графические процессоры, такие как RIVA, TNT, и более старые карты семейства GeForce. Некоторые их регистры похожи, но тоже не идентичны. Лучше всего искать информацию в драйверах с открытым исходным кодом, доступных в сети. В добавок ко всем этим сложностям, никто до сих пор не понял, как на картах NV2x работают пиксельные шейдеры, хотя с вершинными шейдерами уже разобрались. У графического процессора Xbox к тому же есть особые регистры, которые нельзя найти ни в одной другой карте семейства GeForce. Информация по регистрам графического процессора NV2A вообще начала появляться всего несколько месяцев назад.
И это ещё не конец. Карты серии GeForce 3 - самые загадочные из всех графических процессоров NVIDIA, (кроме, разве что, G7x и G8x) а NV2A - и того хуже. "Но разве нельзя просто напрямую выполнить инструкции для NV2A на другой карте от NVIDIA?". Мне часто задают этот вопрос.
Нет, это невозможно.
MMIO-адреса одних и тех же инструкций на различных картах отличаются, и к тому же нужно эмулировать те самые недостающие регистры. В добавок ко всему, в среде Windows мы всё равно не можем работать с оборудованием напрямую (уровень доступа ring 0), так что все вы теперь можете стереть эту идею с вашей бумажки.
Дальше идёт комплекс микросхем под названием NForce2. Здесь уже можно расслабиться. NVIDIA MCPX управляет звуком, USB-вводом, сетевыми картами, слотами PCI, AGP, и так далее. Всё это, по моему мнению, не так уж и трудно эмулировать, кроме, разве что, звука.
4. Звуковая система весьма сложна.Звук на Xbox обеспечивается как минимум четырьмя цифровыми сигнальными процессорами, звуковым кодеком AC'97 и звуковым чипом NVIDIA SoundStorm. Цифровые сигнальные процессоры не должны быть большой проблемой, (достаточно просто разыскать их) не должен быть проблемой и AC'97, но звуковой чип NVIDIA SoundStorm - по-настоящему трудная часть. К настоящему моменту я не нашёл по нему никакой информации, но сейчас она нам особо и не требуется.
5. BIOS Xbox не до конца понятен.Принцип работы BIOS понятен в общих чертах, но детали его теряются. Реакция BIOS на наши действия может дать нам подсказки, но перед тем, как мы сможем эмулировать его, нам ещё нужно будет лучше понять общую схему взаимодействия компонентов Xbox между собой, так как во время загрузки приставки BIOS неизвестным образом включает оборудование (проводит инициализацию), и записывает на него данные напрямую, без использования каких-либо инструментов из пакета для разработчиков для Xbox. Потребуется некоторое время и усилия, но в конце концов я заставлю его работать.
6. Кодировщик видео "Ад".Xbox кодирует видео вместо того, чтобы просто выводить его при помощи RAMDAC. Почему это такая большая проблема? Microsoft считала необходимым менять кодировщик видео с каждой версией Xbox (а всего их семь, 1.0 - 1.6). Почему?
Я низзаю, это ж Microsoft, они всегда стараются «починить» то, что не сломалось >.>
Насколько я знаю, использовалось по крайней мере 3 кодировщика: Conexant CX25871, Focus FS454 и Xcalibur. Если вам нужна дополнительная информация по кодировщикам видео для Xbox, вам сюда:
http://www.xbox-linux.org/wiki/Xbox_Hardware_Overview.
Эмуляция всех трёх кодировщиков - всего лишь менее половины нашей битвы, настоящая проблема в том, что BIOS могут быть специфически связаны с конкретным кодировщиком, в зависимости от его версии (хотя в разговоре на эту тему меня не стоит цитировать). Так же как у PS2, у каждой модели Xbox был обновлённый BIOS и новые ожидания от этой модели. Эта проблема возможна, но не очень важна.
В общем, я попытался выбить из ваших голов эту дурь про то, что "Xbox должен легко эмулироваться, ведь он устроен совсем как ПК". Я уверен, что большинство из вас не согласятся со мной, однако по вышеизложенным причинам, а также с точки зрения оборудования, Xbox эмулировать сложнее, чем PS2. Я оставлю эту тему открытой, так что любой сможет подключиться к обсуждению.
DVD-привод тоже с трудом поддаётся эмуляции, так как на играх для Xbox стоит защита, и нельзя просто так посмотреть содержимое диска. Так что не стоит ждать эмулятора, который позволит вам просто вставить DVD, и начать играть.
Процессор Xbox – стандартный Coppermine Intel Pentium III с половинчатым кэшем второго уровня (128KB). MMX, SSE, прочим, и особой функцией CPUID. Также, насколько я знаю, им не поддерживается инструкция INT. Не знаю, как макинтошевский PowerPC эмулирует все эти инструкции, но факт в том, что x86 способен выполнять больше одной инструкции за раз.
Возможно, я должен был рассказать об этом ранее, но существует много вещей, которые упрощают строение Xbox, снижая трудность его эмуляции.
Например, все устройства MMIO и оперативная память размещены на одном адресном пространстве размером в 4ГБ. К примеру, если вы исполняете инструкцию из «верхней» части DVD-диска (адреса 0xFF000000 - 0xFFFFFFFF) и эта инструкция не меняет напрямую регистр EIP, то она перемещается по адресу 0x00000000, (начало оперативной памяти) не производя никаких исключений, что немного упрощает мне жизнь. К тому же, шина PCI устроена намного более просто и ясно, чем на ПК, что также упрощает эмуляцию.
В общем, всё оборудование Xbox – это настоящее приключение!