OSDev
http://osdev.ru/

Эмулятор
http://osdev.ru/viewtopic.php?f=22&t=735
Страница 1 из 2

Автор:  pavia [ 02 апр 2013, 19:53 ]
Заголовок сообщения:  Эмулятор

Предыстория. Изначально отладчик я делать не собирался.
Но появилась надобность. Был замечен баг в коде загрузчика, две недели бился над поискам места бага все стандартные средства провалились.
Bochs не позволяет сделать брекпоинт на память, а именно это требуется проверить.
Поэтому было решено делать свой эмулятор.

Интересное это занятие делать эмулятор. Поэтому и завёл журнал.

Первые дни скучная работа надо набрать более 100 процедур для эмуляции команд. Большая часть работы была проделана давно. Делалось это для того чтобы понять, как кодируются и работают команды.

Архитектуры как таковой у эмулятора нет. Что конечно плохо. Но на данный момент я и не ставлю задачу делать полноценный эмулятор. Много работы.

Автор:  pavia [ 02 апр 2013, 20:02 ]
Заголовок сообщения:  Re: Эмулятор

Прикольно наблюдать и радоваться как он развивается. Вначале выполняется 1 команда на второй ошибка. Потом 2 команды, потом 4 потом 5.А потом долго 10, 10, 10. А потом 20 и 100.

В качестве тестирования синтетический тест делать не стал. Думаю когда буду делать полноценный эмулятор, то тогда о качественном тестировании буду заботиться.

Поэтому в качестве теста взял BR от доса.
Параллельно запускаю Bochs и смотрю где разница с моим.

Из проблем не знаю как сделать качественное чтение и запись через именованные каналы. Постоянно, то зависает. То не все данные читает. Причем как с начала так и с конца.

Автор:  pavia [ 02 апр 2013, 20:11 ]
Заголовок сообщения:  Re: Эмулятор

Думаю что эмулятор можно будет использовать, как автоматический тест загрузчиков. Эмулируя поведения разных БИОСов и проверяя загрузку с разных образов. Правда это далёкие планы, ещё надо добавить поддержку 32 битных инструкций, а на данном этапе это не планируется.

Факты.
1. BR Дос,а использует вектор 1Eh (00:[78h]) для чтения параметра дискеты.
2. bochs при первым вызове int 13h считая от 0x7с00 изменяет этот вектор.
А вот поэтому у меня данные и не совпадают, ушёл править.

Автор:  pavia [ 05 апр 2013, 21:30 ]
Заголовок сообщения:  Re: Эмулятор

Написание эмулятора напоминает гонки. Чем дольше выполняется тем больше очков.
Очень быстро вышел 10000 инструкций до первой ошибки.

В ходе работ было замечено что загрузчик вызывает int 12h и далее загружает свои файлы в верхнюю область базовой памяти.

Оказалось что эмуляцию прерываний int сделал очень просто. Пара строчек и готово. Но далее пошли запросы в порты в/в. Что пока не хотелось делать.

Для реальной работы эмулятор ещё не готов, но для боевого крещения в самый раз. Буду пробовать отлаживать свой загрузчик.

Забыл сказать что на данном моменте эмулятор поддерживает только инструкции х286. А х386 планируется нескоро.

У кого есть идеи, как сделать простой тест для проверки эмулятора?

Автор:  Yoda [ 05 апр 2013, 22:08 ]
Заголовок сообщения:  Re: Эмулятор

Увы, я думаю, только писать искусственные тесты. Все мало-мальски естественные (которые приходят в голову) либо используют высокоуровневые функции (прерывания DOS), либо работают с железом.

Автор:  Nable [ 06 апр 2013, 13:58 ]
Заголовок сообщения:  Re: Эмулятор

> Делалось это для того чтобы понять, как кодируются и работают команды.
В таких случаях надо читать Opcode.txt, ну или (если времени много, или нужно узнать точную последовательность действий, или инструкция современная) интеловские доки.

> Bochs не позволяет сделать брекпоинт на память, а именно это требуется проверить.
Рекомендую ещё раз внимательно перечитать документацию, а так же почитать про instrumentation в bochs. В крайнем случае, почитать про AMD SimNow. Есть и более детальный софт, но к нему прибегать пока не приходилось.

Если же вдруг там чего-то действительно нет, то нередко это можно быстро дописать, в коде bochs разбираться весьма легко (по сравнению с другими проектами, с которыми в жизни сталкивался). А писать из-за фичи ещё один эмуль и с нуля - даже не смешно.

Автор:  iz56 [ 06 апр 2013, 15:48 ]
Заголовок сообщения:  Re: Эмулятор

> А писать из-за фичи ещё один эмуль и с нуля - даже не смешно.
"Ещё один" = Коммунизм. Понятно что пишется эмулятор для своего интереса написания ещё одного эмулятора - процесс как никак. Здесь все пишут ещё одну ОС. Не аргумент, как бы.

Автор:  JSON [ 06 апр 2013, 19:17 ]
Заголовок сообщения:  Re: Эмулятор

iz56 писал(а):
> А писать из-за фичи ещё один эмуль и с нуля - даже не смешно.
"Ещё один" = Коммунизм. Понятно что пишется эмулятор для своего интереса написания ещё одного эмулятора - процесс как никак. Здесь все пишут ещё одну ОС. Не аргумент, как бы.


Ого. Это сильно.

Автор:  pavia [ 06 апр 2013, 21:28 ]
Заголовок сообщения:  Re: Эмулятор

Нет эмулятор пишется не ради одной "фичи". причин было несколько.

1. Для ОС нужен отладчик, а значит нужен дизассемблер.
2. Давно в планах сделать транслятор x86 -> GPU
3. Режим VM в x86 мне показался кривым. Да и x86-64 его не поддерживает. Поэтому решено делать свой эмулятор для поддержки вызова VESA и int 13h
4. Возможности Bochs не устраивают.

5. Да я знаю, что вместо своего можно было взять готовое и оно будет лучше. И исходники Bochs 2.4 очень легко читаются в отличии от 2.6. Использования чужого кода возможно, но идеология мой ОС не позволяет использовать BOCHS.

Эмулятор не является основной целью. Но задача мне показалось простой и не слишком нагруженной.Поэтому было решено развивать все 4 пункта постепенно. А сделать крюк на данном этапе в одну неделю возможно. И да я хорошенько подумал.

Сейчас могу сказать что время на отладку эмулятора я не закладывал и решил пойти по пути экстремального программирования. Т.е. немного просчитался со временем, но в целом укладываюсь в срок.
Стало видно, что надо подойти к вопросу более серьёзно чем я планировал изначально. И делать нормальную отладку всех функций и процедур. Что конечно увеличивает сроки. Эмулятор уровня Bochs я могу сделать ориентировочно за 2-4 месяца если делать его вечерами. Но пока это в мои планы не входит.

Автор:  Yoda [ 06 апр 2013, 21:56 ]
Заголовок сообщения:  Re: Эмулятор

pavia писал(а):
3. Режим VM в x86 мне показался кривым. Да и x86-64 его не поддерживает. Поэтому решено делать свой эмулятор для поддержки вызова VESA и int 13h

Разумный аргумент. Я тоже подумывал о том, что эмулятор - единственное нормальное решение проблемы работы с функциями BIOS в 64-битном режиме. Для этого, кстати, и железо не нужно эмулировать, только систему команд.

pavia писал(а):
Эмулятор уровня Bochs я могу сделать ориентировочно за 2-4 месяца если делать его вечерами.

Типичная переоценка своих сил. Или недооценка сложности проекта.

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