Пользователь
0,0
рейтинг
8 марта 2014 в 22:27

Игры с UEFI

Одним из важнейших нововведений спецификации Unified Extensible Firmware Interface явилось появление и интеграция в firmware персональной платформы особой операционной среды UEFI Shell, позволяющей выполнять небольшие задачи или UEFI приложения без загрузки операционной системы. В этом контексте, в первую очередь речь идет о задачах, связанных с обслуживанием вычислительной системы: обновление firmware платформы и периферийных устройств, восстановление модулей операционной системы после различных сбоев, а также утилиты системной информации и диагностики. Упоминание об игровых приложениях, а тем более современных 3D играх в этом контексте прозвучит несколько парадоксально. И все же давайте попробуем ответить на вопрос: можно ли написать игру для выполнения в среде UEFI? Если можно, то как? Если нельзя, то почему?

Вспомнить все: программный вывод графики


На ранних этапах развития графических подсистем персональных платформ, во времена господства шины ISA, «рисование» объектов на экране осуществлялось программным путем. Принцип прост: видео память располагается в адресном пространстве центрального процессора, вывод графического объекта сводится к записи заданной информации по заданным адресам. Несколько упрощая, можно сказать, что координаты каждой отображаемой точки определяются адресом, по которому выполнена запись, а цвет – записанными данными. Достоинство такой модели — простота программной и аппаратной реализаций, недостаток — низкая производительность.

Компьютер в компьютере: аппаратный вывод графики


Как известно, современный видео адаптер, это «компьютер в компьютере». Графический процессор, входящий в его состав, способен выполнять собственный командный поток, взаимодействуя с оперативной памятью платформы в режиме bus-master, а также с локальной памятью видео адаптера. При этом основная задача центрального процессора сводится к подготовке в оперативной памяти блоков заданий для графического процессора.

В типовой современной персональной вычислительной системе, для шины, связывающей микросхему видео контроллера с видео памятью, характерны разрядности и тактовые частоты, существенно превышающие аналогичные параметры для шины оперативной памяти системной платы. И заметим, что в отличие от центрального процессора, графический процессор не использует транзитных звеньев (в виде шин AGP или PCI Express) при доступе к видео памяти. В результате, очевидное преимущество — высокая производительность. Но есть и недостатки. Об этом ниже.

Проблемы решенные и не решенные


Так уж исторически сложилось, что индустрия не выработала единой унифицированной программной модели для низкоуровневого доступа к регистрам видео акселератора. Унификация реализована исключительно на уровне программного интерфейса драйверов. Разработчику приложений, выполняемых в среде современных операционных систем, не требуется заботиться о низкоуровневом взаимодействии с регистрами видео контроллера потому, что его производитель предоставил драйвер, берущий эту задачу на себя. Проблема в том, что для среды UEFI такой инфраструктуры не предусмотрено.

Несомненно, такие факторы, как переход от 16-битного режима Real Mode к 64-битному Protected Mode, а также использование UEFI Driver Model вместо программных прерываний Legacy BIOS, закладывают фундамент для создания такой инфраструктуры. Но на сегодня фундамент есть, а инфраструктуры нет.

Компромиссы возможны


Ряд современных технологий позволили «вдохнуть вторую жизнь» в реализацию графики средствами центрального процессора. Речь в первую очередь об использовании 128 и 256-битных SSE инструкций, а также технологии Write Combining, позволяющей объединять результаты нескольких процессорных циклов записи в пакет размером до 4 килобайт для отправки по шине PCI Express. Иногда, такой подход позволяет получить приемлемый результат для 2D графики в рамках использования UEFI Graphics Output Protocol в сочетании с «дедовским» методом визуализации:

image
Рис 1. Снимок экрана, полученный из UEFI-среды в процессе запуска игры Tetris64

Но очевидно, что достичь функциональности и производительности, реализуемой средствами аппаратных графических процессоров, данный метод не позволит.

Резюме


Приходится констатировать невозможность написания UEFI-приложения, реализующего 3D графику с кинематографическим качеством. Почему? Унифицированных протоколов и готовых драйверов, обеспечивающих поддержку 3D под UEFI, не существует. Также нереально решение этой задачи путем прямого обращения к аппаратным ресурсам видео акселератора из UEFI-приложения: отсутствие унификации оборудования потребует от разработчика написания драйверов для всех моделей графических процессоров.
@icbook
карма
19,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (21)

  • +1
    Прочитав заголовок и текст до хабраката ждал большего =( Тема сисек игр для UEFI не раскрыта.
    • +11
      Проделана огромная работа. Написан ремейк тетриса в 64-битном UEFI-исполнении. В результате пришло понимание, что при нынешнем состоянии дел развлекательные приложения написать для UEFI нереально. Отрицательный результат – это тоже результат. Плохо вам? :)
      • +2
        Но вы же об этом в статье не написали. И даже не в этом дело, просто не оправдались ожидания, обидно =/
        • +3
          Наши ожидания от UEFI, по правде говоря, тоже не оправдались. Сожалею.
  • +1
    А зачем писать развлекательные приложения для UEFI? Если уж очень хочется, можно взять какой-нибудь минималистический линукс, выкинуть оттуда всё ненужное, установить ограничения и пускать своё приложение на нём.
    • +3
      И получится… линукс
  • +2
    Хотелось бы в топкие прочитать про процесс написания тетриса. Инструменты, подходы, подводные камни и т.п.
    • 0
      Хороший вопрос! Нужно подумать, как его осветить.
    • +1
      До реализации UEFI-варианта тетриса, была написана и отлажена макетная 16-битная версия под DOS, с использованием TASM 3.0 и Turbo Debugger 2.51. Затем работы были продолжены на FASM 1.69.50, который поддерживает генерацию 64-битных UEFI-приложений, ассемблирование инструкций MMX, SSE-SSE5, AVX и всех современных функциональных расширений.

      Для отладки использовались собственные процедуры, обеспечивающие точку останова в программе и визуализацию дампа регистров процессора и памяти. Основные работы проведены на плате ASUS Z87-K, использовался внешний модуль UEFI Shell.
  • +3
    На сайте утверждается что Tetris64 — первая и единственная игра, запускаемая в среде UEFI.

    Ну… в 64-битной — возможно, но вообще она не первая, далеко не первая и далеко не единственная. Некоторые производители по какой-то абсолютно не понятной мне причине тоже решили этим позаниматься.

    image
    • +1
      Скорее всего, это тоже 64-битная реализация. 32-битная реализация UEFI на сегодня большая редкость (она обнаружена, например, в ноутбуке ASUS T100T).

      Не лавры первопроходцев интересуют в этом вопросе, а свободный доступ к файлам UEFI-приложений. Если окажется, что на сайте MSI можно получить исполняемый код в виде файла с расширением efi (или даже, если его можно извлечь из тела UEFI BIOS), то придется признать, что да, Tetris64 – не первая и не единственная.

      P.S. Полезно было бы указать, на какой платформе MSI обнаружена означенная игра.
      • +1
        Да подходит вроде бы любая материнка с этим самым click bios. Конкретно на картинке вроде бы MSI P45 Platinum, для которой этот click bios вышел позже в виде бесплатного обновления. Игры, кстати, если я не ошибаюсь запускаются (ну раньше по крайней мере) с некоего MSI Extras CD так что если хотите их выдернуть то никто вам не мешает это сделать при наличии диска.
        • 0
          Кстати, ClickBIOS предполагает встраивание во FlashROM кода игрового приложения (сервисные службы MSI безмерно рады, они так прямо об этом и говорят: Q:I failed in the process of re-flash the BIOS, what can I do next? Please contact the MSI office and send the board back to the repair center. :).

          Tetris64 – это полноценное UEFI-приложение, которое может быть встроено во FlashROM по усмотрению разработчиков платформы (в чем мы, лично, глубоко сомневаемся), а может быть выполнено с любого подходящего внешнего запоминающего устройства: USB-флешка, жесткий диск, флопик, абак, счеты, узелки на память ))
          • 0
            ClickBIOS предполагает встраивание во FlashROM кода игрового приложения


            К сожалению подтвердить или опровергнуть это не могу так как сам не сталкивался, но опять же повторюсь — если судить по статьям то при выборе игры оно предлагает вставить в дисковод msi extras cd чтобы загрузить выбранную игру оттуда, тобишь сами исполняемые файлы не встроенны.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      coreboot?
  • 0
    Хотелось бы расставить акценты в опубликованной статье, заметив, что это не блог разработчиков тетриса и не обзор примеров программирования, а анализ потенциальных графических возможностей UEFI:

    • Как уже сказано, использовать аппаратную акселерацию графики под UEFI невозможно, так как это потребует device-specific поддержки для каждой модели видео адаптера, а драйверной инфраструктуры, унифицирующей протокол доступа к акселератору под UEFI нет.
    • С другой стороны, есть старый, простой и универсальный метод, основанный на записи центральным процессором информации в видео память, но он не обеспечивает производительность, необходимую для динамических игр.

    Одним из своих достижений мы считаем разработку технологии, позволяющей существенно ускорить запись в видео память, выполняемую центральным процессором без применения видео акселератора. Метод основан на программировании регистров MTRR (Memory Type and Range Registers) и переопределении статуса диапазона доступа к видеопамяти на Write Combining (WC). Атрибут WC позволяет группировать результаты нескольких шинных циклов записи в пакеты размером до 4 килобайт для отправки по шине PCI Express. Заметим, что подавляющее большинство реализаций Legacy BIOS и UEFI firmware устанавливает для видео памяти статус Uncacheable (UC), запрещающий оптимизировать порядок выполнения шинных циклов.

    Таким образом, существует компромисс между производительностью и совместимостью, которого в большинстве случаев достаточно для 2D-графики и недостаточно для 3D-графики. Всем, кому это интересно, могут ознакомится с исходным кодом ряда наших программных продуктов.
    • 0
      подобный доступ через MTRR специально создавался для подобного/быстрого использования,

      отлично что помогло.

      используется так же на Linux и Windows, как минимум для графических драйверов

      отлично что разбираетесь с UEFI!
    • 0
      Кстати, а почему бы вам не положить исходники на github? Авось и патчи присылать активнее будут :)
      • 0
        Не покидает ощущение, что у больного по фамилии UEFI гангрена. Уже и ByteCode частично ампутировали, а состояние не улучшается. Сомневаемся, что в госпитале github это лечат. В любом случае, спасибо за совет!
  • 0
    Нам подсказывают, что уже была попытка написать Тетрис под UEFI.

    Вот только он не компилируется по причине отсутствия файла #include «piece.h». После внесения исправлений программа при запуске виснет (в двумерных массивах перепутаны X и Y).

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.