OSDev

для всех
Текущее время: 29 мар 2024, 14:59

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Эмулятор
СообщениеДобавлено: 02 апр 2013, 19:53 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Предыстория. Изначально отладчик я делать не собирался.
Но появилась надобность. Был замечен баг в коде загрузчика, две недели бился над поискам места бага все стандартные средства провалились.
Bochs не позволяет сделать брекпоинт на память, а именно это требуется проверить.
Поэтому было решено делать свой эмулятор.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 02 апр 2013, 20:02 
Аватара пользователя

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 02 апр 2013, 20:11 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 05 апр 2013, 21:30 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Написание эмулятора напоминает гонки. Чем дольше выполняется тем больше очков.
Очень быстро вышел 10000 инструкций до первой ошибки.

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

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 05 апр 2013, 22:08 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Увы, я думаю, только писать искусственные тесты. Все мало-мальски естественные (которые приходят в голову) либо используют высокоуровневые функции (прерывания DOS), либо работают с железом.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 06 апр 2013, 13:58 

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 06 апр 2013, 15:48 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 06 апр 2013, 19:17 

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 06 апр 2013, 21:28 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Нет эмулятор пишется не ради одной "фичи". причин было несколько.

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 месяца если делать его вечерами. Но пока это в мои планы не входит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эмулятор
СообщениеДобавлено: 06 апр 2013, 21:56 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
pavia писал(а):
3. Режим VM в x86 мне показался кривым. Да и x86-64 его не поддерживает. Поэтому решено делать свой эмулятор для поддержки вызова VESA и int 13h

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

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

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

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB