OSDev http://osdev.su/ |
|
Эмулятор http://osdev.su/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/ |