Пока отлаживал загрузчик столкнулся с такой проблемой. Код работает в vmware, но не работает в bochs. Если подправить некоторые моменты, ситуация меняется ровно наоборот. Работает в bochs, но не работает в vmware. Отсюда вопрос - какой эмулятор "правильнее" эмулирует? Оба кода, к сожалению привести на данный момент не могу, только один - который работает в Bochs (в аттаче). ЗЫ. Разница в правке частично проявляется в перестановке директив use32 и use16. Я заметил, что даже после переключения в 32битный режим Bochs продолжает воспринимать код как 16битный вплоть до дальнего джампа. Vmware так не делает. А может и наоборот) не помню уже
Да просто ребутаться было влом ) Ну все-таки я проверил на своем проце.. результат превзошел все ожидания, BOCHS эмулирует правильно, а VmWare - нет. На самом деле в первом посте я слегка слукавил, реально ситуация обстоит так - какая текущая разрядность у процессора между командой записи в CR0 и командой дальнего джама JMP, которая очищает кеш и перезагружает CS при переходе из нереального режима (UNREAL MODE) в защищенный. У Bochs - 32 бит, у VmWare - все еще 16. На реальном компе проверил - на самом деле 32. Вывод - VmWare неверно эмулирует переключение из нереального режима.
ну-ну.. помню, тож извращался с протектом под варь, так она, сволочь, ваще валилась в пртекшн фаулт )
дык зубков пишет, что при бит1=1 регистра сr0, проц в защищенном режиме. значение бит1=0 не уточнено, сталобыть это уже неопределенность.
FreeManCPM В этом "странном" месте бит PE уже равен еденице (фактически, проц в защищенном режиме уже), однако код выполняется в старом сегменте и будет выполняться до явной перезагрузки сегмента CS командой JMP FAR. Просто возникла необходимость уточнить это неопределенное состояние проца на этом участке. (От разрядности текущей банально зависит то, как надо кодировать JMP FAR - с префиксом 66 или без. Оказывается, без, Bochs тоже так считает, а вот VMWare брыкалась) Nouzui и правильно делала) реалмоде-протектедмоде переход она эмулирует нормально. другое дело, когда вопрос заходит об unreal mode..
ну я дальше книжки не рыл. а там явно не указанно поведение. скорее всего будет зависеть от параметров сегмента, что и привело Great-а в зоблуждение. а при бит1=1 параметры сегмента не учитываются
какие еще параметры сегмента в реал моде? и кстати, Great, а где ты в своем аттаче увидел, как проц в этом промежутке себя ведет?
просто по тому, падает ли тачка без префикса 66 у джампа или нет. вмваря падает с #GP, бошс и реальный комп - нет. отсюда однозначный вывод о разрядности проца в тот момент вмваря наверное переходит в защищенный режим по-настоящему из unreal только при перезагрузке CS
да VMWare вообше кривость для тестинга своего загрузчика :\ Помниться писал чтение с дискетки через порты в/в. Нихрена не работало. ПРоверяю на боще и реальной машине - всё пашет.
вмварь как уже было сказано нормально мулит переход из РЕАЛЬНОГО в защищенный. А что такое unreal - это вопрос открытый.
ну блин, это и так ясно) если бы не так, винда бы не грузилась ) ну, видимо, там не так реализован переход PM->RM отсюда такие последствия. На реальном компе это будет уже "unreal mode", а у нее там нечто вообще странное образуется. Наверное, обычный реальный режим