перед переходом в PM необходимо инициализировать IDT, GDT. вот AMD: Load the 32-bit IDT, in case any interrupts or exceptions occur after entering protected mode, but before enabling long mode. вопрос1: насколько вероятно возникновение прерываний до перехода в LM? ни в одном стандартном загрузчике (grub, lilo...)я не увидел команды lidt. точнее, в GRUB IDT грузится, но она почему-то занулена. нужно ли создавать 32х IDT, если далее сразу же идёт переход в LM? вопрос2: какие обработчики вообще необходимы? и не совсем понятно как дальше работать с оборудованием (после перехода в PM). через порты ВВ? хотелось бы какую-нибудь доку по портам ВВ и прерываниям BIOS.
Если никакие прерывания не используются -- то и IDT не нужна. Такое возможно, если не используются команды, генерирующие прерывания (INT, INTO, BOUND), не возникает разного рода исключений (типа деления на ноль), а прерывания от внешних устройств с помощью флага IF запрещены. Правда, есть ещё немаскируемое прерывание, но на него можно не обращать внимания, по большому счёту: оно возникает только при обнаружении сбоев в аппаратуре, при которых всё равно нормальная работа, скажем так, проблематична. Работа с внешними устройствами после перехода в защищённый режим в общем случае должна осуществляться программой самостоятельно, в т.ч. путём обращения к соответствующим портам.
IDT не нужна, я инициализацию PM выполняю с запрещенными прерываниями (не только переключение, но и довольно большое количество других действий).
идт в общем-то нах не нужна на стадии инициализации в большинстве случаев. Однако для отладки лучше все таки создать обработчики основных исключений.
Кстати имеет смысл обнулять IDT на этапе инициализации. Конечно предполагается, что работающий во время инициализации код не будет приводить к исключениям, но вот если код был поврежден, к примеру, еще в файле, то обнуленные дескрипторы шлюзов обработчиков исключений гарантировано будут вызывать трипл-фолт и ресет при возникновении исключений в следствии повреждения кода, а хз какие ака дескрипторы, лежащие начиная с нулевого адреса, наверняка тоже будут, но есть вероятность, что случится какое-то чудо, а не трипл-фолт.
Quark Для отладки прерывания нужны и чем раньше их сделать тем лучше. Это избавит от проблем. Прерывания могут происходить. Но на стадии перехода RM-PM они блокируются/маскируются. Так что загружать IDT32 нет необходимости можно сразу грузить IDT64. Надо настроить исключения. И аппоратные обработчики, те которые нужны. Да с оборудованием придеться работать через порты в/в. BIOS тут мало чем помогает. Их полно. Но тут такой кошмар, что-то стандартно, что-то не стандартно. Кулаков В. Программирование на аппоратном уровне IO-DOC-Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC Ю. С. Лукач, А. Е. Сибиряков Ralf_Brown Interrupt List сокращенно INTERRUP BIOS Programmer's Guide v10.pdf
Что за идиотская архитектура? Сегментация, конечно, не нужна, но без неё варя не работает - оставили. Общих стандартов нет, но есть множество вариантов. VESA режим в PM - кто вообще это разрабатывал? просканировать память, сверить чек-сумму, скопировать, инициализировать... А если совершенно случайно и сигнатура и чек-сумма совпадут. как-то это всё не серьёзно. такие методики только в вирусах применять.
А чего удивляться? ИБМ, создавая свой ПК, никакого значения ему не придавала, поэтому лепили как попало и из чего попало. Ну а дальше -- больше: каждый производитель пытался придумать и впихнуть что-то своё, такое-эдакое особенное.