Три года, да?
Собстно, ничего крупного за это время не прибавилось - всякая мелочь в сервисах, api, поддержка iso9660, монтирование этих самых iso, итд, итп ...
Ссылка выше всё так же верна
А на что же ушли эти три года?
На ещё одну вещь, созданную на базе этого загрузчика. На этот раз без исходников, ибо коммерческое (см arcanoae.com
). Но сама история стоит того, чтобы её описать.
Задача - загрузить 16/32-битную систему (в данном случае OS/2) из EFI
Нетривиально, но выполнимо.
Если 32-битная система имеет в наличии драйвера для железа (свежий ACPI, ahci, nvme, usb, итп), то вопроса о том, что она запустится на голом железе в общем-то нет.
Требуется только проскочить момент между выходом из EFI фирмвари и стартом всех драйверов системы. Эдакий "прыжок над бездной" - без дисков, клавиатуры и прочих "удобств цивилизации".
Загрузчик должен уметь закэшировать в памяти все модули, необходимые для старта "базовой части системы" и каким-то образом отдать их потом системе вместо обращения к сервисам BIOS.
Помимо этого выстраивается минимальная эмуляция BIOS (на уровне, ожидаемом загружаемой системой), и после выхода в реальный режим начинается обычный процесс старта, с той разницей, что файлы берутся из памяти. Когда базовые драйверы загружены и начинают работать - всё превращается в обычное 32-битное окружение.
В случае OS/2 дополнительная трудность состоит в полном отсутствии поддержки "современного видео". Собстно, история аналогична FreeBSD без притащенного из линукса закрытого кода драйверов. Здесь нет и такого
В BIOS режиме используется VESA (видеопамять с Write Combine, в общем-то, вполне шустра для бытового интерфейса). В EFI режиме, соответственно, используется унаследованный от фирмвари графический режим, для чего написан новый обработчик полноэкранной консоли и новый драйвер видео для VDM (с полной эмуляцией штатных видеорежимов).
Эмуляция биоса в этой истории уместилась в 8kb, львиную долю которых занимает код int 10h. Большая часть этого кода нужна даже не для загрузки системы, а для VDM. VDM в полуоси довольно активно использует видео BIOS, вызывая его по дефолту практически для всех функций.
Код эмуляции int 10h довольно сложный, поскольку должен работать и в режиме "графической консоли" (при загрузке системы) и обычного VGA (в VDM, где уже сам VGA целиком эмулируется).
Прочие сервисы BIOS представлены фрагментарно - строго в пределах необходимого самой системе и VDM или каким-то старым играм.
Результат, в общем, вполне юзабелен ...
Сама полуось бегает и резвится. Собственно, у GUI есть некий графический режим и оно в нём штатно работает. Win16 подсистема ведёт себя аналогично, так как использует те же видеодрайвера, что и осевой "рабочий стол".
А вот для VDM видео уже эмулируется и тут всё довольно сурово - софтварная конверсия и масштабирование режимов только на целые числа.
Удивительно, но и в таком режиме (когда видео в VDM тупо гонится этой самой софтварной конверсией и всю скорость обеспечивает Write Combine) оно выглядит лучше, чем многие наличные виртуальные машины.
Собственно, эмуляция всех не-VGA режимов сводится к преобразованию цветов и маштабированию при сбросе эмулируемого буфера на реальный экран (плюс опциональному рисованию курсора, когда DOS софт полагается в этом на драйвер мыши). Это даёт абсолютную играбельность как 320x200x256 игр, так и всей VESA (и CGA).
И квака с еретиком, колонизацией и сеттлерами и vesa версии Master of Orion II и фоллаута - бегают и резвятся.
Самое печальное начинается в VGA и mode-x.
Их эмуляция возможна только софтварно (пока кто-то не встроит в процессор команду "чтение/запись VGA"
). В силу этого
любая VGA или mode-x игра это лютое испытание для каждого эмулятора и VDM (и загрузка для процессора).
EGA/VGA режимы реализуемы только через исключение на каждую запись/чтение видеопамяти - иначе физически невозможно обработать все комбинации режимов VGA контроллера.
Чтобы убедиться в этом просто запустите Master of Magic в VBox или VirtualPC или dosbox - без разницы ... Это одна из самых нагрузочных для эмуляции игр (причина в активном копировании видеопамяти именно средствами VGA - вывод осуществляется чередованием страниц и частая операция дублирования старого содержимого в новую страницу вносит лютые тормоза. Просто представьте даже не rep movs видео в видео, a lods/stos на каждый байт для каждого кадра
).
Тут даже "3D стрелялка" типа Wolfenstein3d, работающая в mode-x - выглядит куда шустрее. Она абсолютно играбельна на 2.4Ghz процессоре (при том, что каждый доступ к видеопамяти обрабатывается софтварно).
В общем, по итогам написания всех этих вещей у меня возникло много вопросов - и к авторам спецификации UEFI, и к авторам VBox (можно было написать ещё хуже и тормознее или это таки рекорд?) и к Джону Кармаку с его Commander Keen, который создан, чтобы издеваться над эмуляторами. К авторами кучи досовских игр, которые верят, что шрифт 8x8 хранится строго в F000:FA6E, как завещал великий PC XT ...
Это всё, разумеется, натуральное некрофильство, но ...
а). есть люди, которым бывает нужно запустить что-то в Win16. На западе их куда больше, чем у нас. Возможно есть и люди, которым требуется DOS - и осевая VDM вполне может быть решением.
б).
нетривиальная задача
в). я сам, бывает, ностальгически играюсь в тот же master of magic и, за исключением нативного VGA, (хоть как-то!) приемлем по скорости он только тут.
Из плохих новостей - даже если вы можете это купить (сейчас), оно ещё не вышло
Официально EFI будет в 5.1 той самой ArcaOS.