Специалисты Kitten Labs запустили GTA: Vice City на Wi-Fi роутере TP-Link TL-WDR4900

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Специалисты Kitten Labs в своём техническом блоге подробно рассказали, как они запустили GTA: Vice City на TP-Link TL-WDR4900 (это был долгий процесс с ошибками и переделками кода и железа). Wi-Fi роутер построен на базе ЦП NXP/Freescale QorIQ P1014, который представляет собой 32-разрядный процессор PowerPC e500v2 с 36-битным адресным пространством и работает в режиме big-endian.

Для запуска игры инженеры установили на сетевое устройство Debian Linux вместо OpenWrt и подключили внешний GPU AMD Radeon RX 570 (потом AMD Radeon HD 7470) через слот miniPCIe, припаявшись к линии PCIe2, ведущий от ЦП к одному из чипсетов Atheros (фактически отключив этот чипсет), чтобы иметь возможность расширить возможности штатного контроллера PCIe.

В Kitten Labs пояснили, что выбрали Debian Linux, так как там есть специальная сборка PowerPCSPE для этого типа процессоров (e500/e500v2). В системе со статически скомпилированными пользовательскими двоичными файлами QEMU и правильно настроенными обработчиками binfmt можно было использовать инструмент debootstrap Debian для создания загрузочного пользовательского пространства.

В ходе подключения видеокарты и запуска Debian Linux специалисты использовали графический драйвер amdgpu, но столкнулись с тем, что у amdgpu имеется нерешённая несовместимость с 32-битными платформами. С картой AMD Radeon HD 7470 и использованием более старого драйвера Radeon всё начало работать. Также они потратили несколько дней на исправление игры и механизма рендеринга librw, чтобы они корректно работали на этом нестандартном ПК в режиме big endian.

В Kitten Labs рассказали, что игра GTA: Vice City и движок рендеринга (по крайней мере, в декомпилированной версии) вообще не поддерживают режим big endian. Это приводит к тому, что игра пытается получить доступ к памяти с абсурдными смещениями и практически сразу же вылетает. В итоге инженеры внесли более 100 патчей в код игры, чтобы спрайты в игре не моргали, а структуры нормально загружались.

Но это особо не помогло. Тогда в Kitten Labs связались с автором порта GTA: Vice City для Wii U, так как этот проект поддерживает ЦП IBM Espresso (тоже процессор на базе PowerPC). Разработчик согласился проверить сборку с кодом игры от Kitten Labs и подготовил нужные патчи для запуска GTA: Vice City. Но это тоже не помогло, игра не запускалась без багов и графических проблем.

В Kitten Labs решили установить на роутер Linux с новым ядром и с новыми драйверами Radeon. Проблема была в том, что GCC прекратила поддержку PowerPC SPE, а сборка современного Linux 6.7 с помощью GCC 8 не работает. Однако LLVM/clang только что получил поддержку PowerPC SPE, и оказалось, что новую версию Linux можно собрать с помощью clang. После переустановки новых libglvnd, drm и mesa на новом ядре Linux рендеринг в игре стал работать нормально.

Источник: https://habr.com/ru/news/797973/


Интересные статьи

Интересные статьи

В понедельник основатель компании по производству электрических грузовиков Nikola был приговорён к четырём годам тюремного заключения за мошенничество. The New York Times провели «ревизию» электромоби...
Habr, привет! Меня зовут Женя, и в настоящий момент я лидер направления Self-Service BI в крупном FMCG. Очень хочется начать делиться с вами своими знаниями и наработками, поэтому в рамках первой...
При наличии множества сервисов работа может легко превратиться в хаос — чтобы наладить пути коммуникации между ними, понадобится много ресурсов, а любое нововведение потянет за собой череду изменений,...
В этой статье руководитель группы защиты инфраструктурных ИТ-решений компании «Газинформсервис» Сергей Полунин рассмотрит два способа управления учётными записями и их правами в облачной среде на прим...
На этой неделе производитель чипов Qualcomm представил новый флагманский SoC, получивший название Snapdragon 888. Он выполнен по 5 нм технологии и базируется на архитектуре ARM Cortex-X...