OSDev
http://osdev.su/

Virtual 8086 mode
http://osdev.su/viewtopic.php?f=6&t=522
Страница 3 из 4

Автор:  DJ PhoeniX [ 04 апр 2012, 05:04 ]
Заголовок сообщения:  Re: Virtual 8086 mode

grindars писал(а):
Я бы повесил (собственно, и вешал) эмулятор 8086 в отдельную задачу, чтобы не захламлять ядро кучей малонужных костылей для поддержки давно умершего софта.

Проблема в том, что эти костыли в ядре как раз и нужны. И, по сути, только в нём :)

Автор:  grindars [ 04 апр 2012, 07:18 ]
Заголовок сообщения:  Re: Virtual 8086 mode

Ну так пусть задача-эмулятор будет драйвером режима пользователя, а ядро пусть формирует и передает ему запросы на ввод-вывод. И вообще, зачем самому ядру понадобился BIOS?

Автор:  valeri [ 04 апр 2012, 08:21 ]
Заголовок сообщения:  Re: Virtual 8086 mode

Если речь идет о накопителях, и если действительно там работа идет в 32-битном режиме, то прыжки в RM, наверное, единственный выход (тем более там нужна обработка прерываний).
А для установки видеорежимов наверняка хватит эмулятора - перехватываем обращения к пространству ввода-вывода, а ось их обрабатывает.

Автор:  Yoda [ 04 апр 2012, 10:13 ]
Заголовок сообщения:  Re: Virtual 8086 mode

Вот мне интересно, как решает эти вопросы Мелкософт в 64-битых системах?
Сдаётся мне, что они как переходят в защищённый режим, так и забивают на BIOS INT 13h. Все остальные обращения делают только при наличии соответствующего драйвера I/O железки.

Автор:  pavia [ 04 апр 2012, 10:27 ]
Заголовок сообщения:  Re: Virtual 8086 mode

XP решает так. В загрузчике, если не путаю в ntdetect. Работа идёт в RealMode использует int 13h для загрузки загрузочного драйвера жесткого (в 99,9% этот драйвер отсутствует). В случае его отсутствия прыгает между реальным и защищенным режимом, для загрузки ядра. Затем передает управление ядру которое загружает драйвера жесткого диска который грузится либо загрузочным драйвером либо прыжком в реальный режим.

Как видите VM86 windows не использует.
в 64 битной думаю ничего не поменялось.

Автор:  valeri [ 04 апр 2012, 12:44 ]
Заголовок сообщения:  Re: Virtual 8086 mode

В Vista, 7, 8 (BOOTMGR/winload) не зависимо от x86/x64 все абсолютно так же, для загрузки ядра и первичных драйверов используются прыжки.
После запуска ядра, стандартный видеодрайвер (он работает, если нет дров на видюху) использует эмулятор в HAL.

Автор:  grindars [ 04 апр 2012, 15:00 ]
Заголовок сообщения:  Re: Virtual 8086 mode

valeri писал(а):
После запуска ядра, стандартный видеодрайвер (он работает, если нет дров на видюху) использует эмулятор в HAL.


А экспорты эмулятора вам известны? Интересно было бы на него поглядеть.

Автор:  pavia [ 04 апр 2012, 15:59 ]
Заголовок сообщения:  Re: Virtual 8086 mode

HAL - уровень абстракции от железа. Другими словами прослойка в виде интерфейсов. Что такое интерфейс это указатель на функции и описание функции как то список передаваемых и принимаемых параметров. Архитектура виндоуса построена по принципу разработки сверху в низ. Драйверная система в виндоусе построенна следующим образом есть набор мини драйверов в которых описаны интерфейсы такие драйвера называются "MiniPort". Что касается видео драйвера то это "videoprt.sys"
По сути это и есть частичка HAL. В виндоусе есть ещё HAL.dll в котором всякая мелочевка собрана не попавшая в другие части.
Так вот универсальный видео драйвер в виндоусе называется vga.sys он вызывает функции из videoprt.sys либо заменяет на свои. В секции импорта vga.sys лежит функция VideoPortInt10 из videoprt.sys. Далее надо смотреть как там это сделано.
videoprt.sys есть импорт из HAL.dll функции Ke386CallBios (WinXP) x86BiosCall (Win7).

Насколько я думаю там все таки не эмуляция, а переход в реальный режим. Эмулятор у них под NTVDM заточен и там int реальные надо эмулировать в защищенном. Т.е в NTVDM вызов int 10 приводит к вызову VideoPortInt10.

Автор:  valeri [ 04 апр 2012, 16:19 ]
Заголовок сообщения:  Re: Virtual 8086 mode

Я разбирался с x86BiosCall и насколько я разобрался, там как раз чистый эмулятор, без прыжков.
А вот ее предшественница Ke386CallBios, по-моему прыгала.

Автор:  Yoda [ 04 апр 2012, 17:10 ]
Заголовок сообщения:  Re: Virtual 8086 mode

Если исходить из теории, то прыжки действительно вызывают большую головную боль с обработкой возникших в течение работы BIOS аппаратных прерываний. Эмуляция с этой точки зрения надёжней, хотя возникает другая проблема - производительность. Ещё непонятно, до какой глубины эмулировать процессор? Ведь BIOS в принципе, может исполнять любые инструкции реального режима. А т.к. системный BIOS затачивается под конкретную систему, он совершенно не обязан ограничиваться только базовым набором инструкций 386.

Страница 3 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/