Можно ли вызывать библиотеки Windows, которые будут жить на жестком диске, из программы, которая живет в BIOS? - PullRequest
8 голосов
/ 16 февраля 2010

Я пытаюсь написать программу, которая будет вариантом BIOS (после POST). Мне бы хотелось, чтобы приложение имело приятный графический интерфейс вместо текстового (есть несколько причин для этого, одна из которых - локализация).

Моя проблема в том, что мы ограничены размером приложения, которое мы можем перенести в BIOS.

Возможно ли использовать MASM32 для "привязки" к DLL на жестком диске, чтобы мы могли использовать API Windows для разработки графического интерфейса?

Или есть ли API, который нам доступен для создания GUI, который можно связать с конечным исполняемым файлом? (Ограничение размера 60 КБ для конечного исполняемого файла программы)

Любая помощь, которую вы можете оказать, будет принята с благодарностью.

Ответы [ 5 ]

9 голосов
/ 16 февраля 2010

Это возможно. Все, что вам нужно сделать, это:

  • установить процессор в защищенный режим и отобразить память как положено (плоская модель)
  • разработайте драйвер файловой системы и загрузите его
  • поддержка всех возможных видеокарт, мышей, мониторов, клавиатур и т. Д., Включая потенциально устаревшее оборудование
  • настроить среду выполнения таким образом, чтобы присутствовали все внешние ссылки на запрошенную DLL, включая (для Windows) KERNEL32, GDI и т. Д.

В этом есть много чего, и это нелегко. Однако, пример, который приближается, это MenuetOS , впечатляюще компактная среда. Но это полностью родилось из полного переосмысления того, как реализовать среду графического интерфейса.


Я написал код BIOS, который имитирует интерфейс GUI. Видеокарта находится в текстовом режиме, шрифт выглядит лучше, разделители текстовых ячеек отключены, а мышь распознается. С простой анимацией все это умещалось в 60 КиБ или около того.

5 голосов
/ 16 февраля 2010

Нет, это невозможно. Приложение Windows требует, чтобы операционная система Windows работала поверх него, поэтому BIOS должен загрузить ОС и завершить работу, прежде чем использовать Windows GUI (или консольное приложение). Даже для доступа к DLL-файлам на диске вам нужна файловая система, которая не будет доступна, пока не загрузится ОС.

Тем не менее, в 60K вы должны уметь использовать достаточно разумный графический интерфейс. Я хотел бы взглянуть на то, как некоторые загрузчики Linux делают это.

0 голосов
/ 25 февраля 2010

Я не уверен, что запрос действительно возможен. (С учетом контекста вопроса)

Чтобы это работало, вам нужно было бы инициализировать всю среду Microsoft Windows, чтобы использовать функции API для рисования графического интерфейса.

Из любопытства, что вы делаете в этой программе BIOS?

0 голосов
/ 16 февраля 2010

Возможно, вам будет интересно посмотреть на исходный код XOSL - старого менеджера загрузки , который имеет приятный оконный графический интерфейс.

0 голосов
/ 16 февраля 2010

Нет реализаций BIOS, которые поддерживают это. Но теоретически это возможно, но имейте в виду, что сначала вы должны разработать целую ОС:)

...