Яр
Тут способов вагон и маленькая тележка. Нужна конкретика.
libc - это системная библиотека, а как известно системные библиотеки под каждую ОС свои. С какой ОС начнём?
Компьютер с UEFI поддерживает 2 режима загрузки родной(Native) и совместимости(CMS).
CMS - режим совместимости со старыми не UEFI-БИОС'ами.
CMS грузит загрузчик, загрузчик грузит образ ОС.
Можно выделить 4 стадии в нашем случае варианта.
1) Мы пишем свой загрузчик. В 512 байт шрифт размером с 4 кб не уместить. Но можно их подгрузить.
Процессор работает в 16 битном режиме.
2) Стадия вторая первичный загрузчик грузит вторичный загрузчик. Нам доступно BaseMemory 640 кб минус служебные данные (таблица прерываний, резиденты программы.).
Процессор работает в 16 битном режиме. Но уже не сложно перепрыгнуть в защищённый режим или остаться посерёдке в нереальном режиме.
Можно сменить 16 битный режим на 32 битный.
3) Вторичный загрузчик грузит образ ОС и передаёт управление.
ОС работает в 32 битном режиме или же в 64 битном. Так как полно старых загрузчиков то скорее всего вас загрузят в 32 битный режим, а в 64 битный вы должны будете сами прыгнуть.
4) Мы в современном 64 битном режиме нас сюда кто-то загрузил.
Из сложностей. Компилятор как правило поддерживает выходной ассемблер только для одного режима! Так как для каждого требуется свой генератор.
Взять хотя-бы формат указателей. Он разный!
Вторая проблема многие вещи можно сделать только в определённом режиме. Есть стандарты API которые поддерживают, а вернее в своё время поддерживали производители железа.
Поэтому приходиться либо прыгать обратно в старые режимы либо заводить БД и по мере загрузки накапливать необходимые данные.
Либо есть третий вариант делать только под один компьютер. Ваша ОС попросту не сможет работать на другом компьютере.
Для примера биос Award и AMI по разному стартуют. Одни устанавливают режим VGA 7 а другие CGA 2. (А ещё это зависит от монитора ч/б или цветной) Соответственно программироваться для установки шрифтов они должны по разному.
Да и для каждого нужен свой шрифт.
А теперь рассмотрим UEFI. Его сделали очень быстро, в результате чего он ещё хуже чем унаследованный БИОС.
По UEFI я не большой знаток. Но там тоже вам на выбор несколько путей.
а) Работаем с UEFI
б) Переходим в режим ядра.
Это надо перемножить на варианты работы
- 32 битный код
-64 битный код
- байт код.
А теперь перемножаем ещё третий раз теперь(тут сразу вспоминаю тензорную математику)
VESA, VGA,
Тут надо по разбираться. Но судя по всему придётся заглянуть в исходники UEFI. Скорее всего вас сразу включат в VESA, так вот что-бы переключиться в VGA вам придётся написать драйвер для каждой видео карты. И только тогда вы сможете запрограммировать знакогенератор.
Короче говоря тут проще уже выводить напрямую.
4 - версии кода, 3 стандарта вывода, 2 шрифта.
Ах да совсем забыли о кодировке и формате строки.
Для правильного вывода кодировка в исходном фале и загруженная должны совпадать. А ещё ОС не всегда даёт её сменить. Или попросту не установлен или не выбран нужный шрифт.
И в ОС у каждый свой формат шрифтов. И ещё надо различать стандартный ввод вывод и оконный текст.
И в линуксе там свои заморочки по этому поводу. Так как позволяют терминальное подключение. А там есть ряд проколов где 255 это служебный символ, а у нас есть кодировка 866 что-ли где на этом месте стоит буква я.
И на напоследок. Эти проблемы не автоматизируются. От слов совсем. Системный программист должен будет выставить 10 ключей что-бы правильно собрать настройку знакогенератора.
Он должен будет во всём этом разбираться иначе ну никак.