Инди-разработчик под ником MZLabs раскрыл подробности технического инструмента SwitchRecomp. Проект предназначен для статической рекомпиляции бинарного кода игр для консоли Nintendo Switch в нативные исполняемые файлы формата .exe для операционной системы Windows. В отличие от стандартных эмуляторов, программа не использует динамическую трансляцию инструкций на лету через JIT, а конвертирует архитектуру ARM64 напрямую в код на языке C, что позволяет полученным играм работать на центральном процессоре компьютера без лишних прослоек.
Архитектура построена на базе собственной реализации операционной системы Horizon OS и графического уровня, который на лету преобразует инструкции видеочипа Maxwell в команды OpenGL 4.3. Автор разработки уточнил, что не занимается индивидуальным переносом каждой отдельной игры, а разрабатывает универсальную утилиту, способную автоматически генерировать готовые исполняемые файлы из директории с дампами.
Работоспособность решения была продемонстрирована на примере платформеров Super Kirby Clash и Super Mario 3D World с дополнением Bowser Fury. Тестирование проводилось на бюджетном ноутбуке с двухъядерным процессором Intel Celeron N4500 и встроенным видеоядром Intel UHD. Если актуальные эмуляторы на подобном оборудовании аварийно закрываются при старте, то рекомпилированная версия Bowser Fury запускается и стабильно выдает от 20 до 40 кадров в секунду в первом мире, хотя встроенная звуковая подсистема пока функционирует без вывода аудиоэффектов.
Для оптимизации графической части программист устранил узкие места конвейера рендеринга. Было реализовано объединение повторяющихся инстансированных вызовов отрисовки в единые пакеты, внедрен дисковый кеш скомпилированных шейдеров и добавлен алгоритм динамического изменения разрешения при высокой нагрузке на видеочип. Фоновая обработка графических инструкций в отдельном потоке также помогла свести к минимуму типичные задержки при появлении новых объектов на экране.
Скомпилированные приложения поддерживают геймпады стандарта XInput, клавиатуру и индивидуальную настройку через файлы конфигурации .ini, где регулируются лимиты частоты кадров и масштабирование внутреннего разрешения. В экспериментальном виде тестируется даже интеграция алгоритмов генерации кадров LSFG из утилиты Lossless Scaling без необходимости запуска стороннего софта.
В игровом сообществе разработка вызвала живой интерес на фоне недавних юридических преследований эмуляторов со стороны компании Nintendo. Создатель инструмента подчеркнул, что программа создается с нуля и не распространяет закрытые ключи prod.keys или защищенные файлы прошивки, поэтому пользователям понадобятся собственные дампы. Публикация исходного кода на GitHub намечена через 3-4 месяца, после чего начнется разработка портов для операционных систем Linux и мобильных устройств на базе Android.
Источник: www.playground.ru