Продолжаю колдовство с VESA.
Поменял модель организации вызова 16-разрядного кода. Теперь Код располагается в специальном сегменте, который начинается с адреса 0×90000. В этом же сегменте создаётся аллокатор страниц и аллокатор блоков. Их можно использовать для выделения памяти в пределах этого сегмента (что весьма удобно). Например, можно выделить 512 байт под общую информацию VBE или под буфер для получения информации о режиме.
Проблема в другом: после вызова 10h почему-то отваливаются IRQ-прерывания, хотя процессор возвращается обратно в защищённый режим и продолжает цикл. Возможно, надо будет попробовать переинициализировать контроллер.