singlepost

Написание кросплатформенного эмулятора компьютера << На главную или назад  

Написание эмулятора IBM-совместимого компьютера на C++.

53 ответов в теме “Написание кросплатформенного эмулятора компьютера”

  1. 38
    Лёшка Пьянзин ответил:

    Зачем изобретать велосипед?
    Максимум что можно из этого получить это офигенный багаж знаний, но к тому времени как ты завершишь свой проект, они тебе уже не понадобятся :-)

    … а отговаривать человека не нужно. Каждый по своему самореализовывается. Может приобретенный опыт поможет ему в его жизни в будущем :-)

    P.S. Леха Воронин, если у тебя все получится, вспомни о том, что был на твоей стороне =))))

  2. 37
    Сергей Шпикин ответил:

    Да никто не отговаривает, это ж его жизнь, его время. Не лень – пусть делает, я просто вкратце показал, что его ждет. Повторить архитектуру такой сложной системы в одиночку просто нереально.

  3. 36
    Андрей Евсиков ответил:

    Псих….

  4. 35
    Дмитрий Гайдамович ответил:

    Господа программисты, ну зачем вы отговариваете человека? Линуса Торвальдса вон никто не отговорил в своё время, и человек "зачал" новую ОС. Вполне возможно, что Лёха Воронин станет во главе нового сообщества, которое забабахает такой эмулятор, который произведёт революцию! Я серьёзно, не прикалываюсь. Если человек настолько самомотивирован, то что плохого, чтобы потратить на это несколько лет? Вы понимаете, что Лёхе это ИНТЕРЕСНО! Вам давно последний раз было интересно? Мне – всё реже и реже, вот такой я конченный человек :) )

  5. 34
    Сергей Шпикин ответил:

    Никаких понтов, горькая правда жизни. Я тоже делал трехмерные игры, системный утиль, софт под заказ, с линуксом, к счастью, сталкиваться не приходилось. Но все это на порядок проще, чем то, что ты задумал. Даже если работать в команде, в ХОРОШЕЙ команде специалистов-профессионалов, вероятность доведения хотя бы до стадии альфы, которая будет запускать 1% простых PC-приложений, очень мала. Смысла убивать на это время я не вижу, коммерческой выгоды ты, похоже, не ищешь, а для прикола несколько лет вкалывать на сомнительный результат… такое я не понимаю. Т.е. я могу понять цель навроде "узнать больше об архитектуре x86", но цель "довести до конца" такой проект по-моему утопична и наивна. Тем более, ты хочешь еще и видеокарту эмулировать? Рекомпиляция шейдеров и какие-то промежуточные драйверы, переводящие команды управления пайплайном в команды конкретного железа – так, что ли? Все это будет эпично тормозить, потому что оптимизация такого эмулятора займет еще пару лет. Просто посмотри, сколько уже разрабатывают VMWare, если ты в сто раз хуже сделаешь, это будет однозначный успех. Только и это сомнительно.

  6. 33
    Лёха Воронин ответил:

    Ответ #30:
    Я делал и тетрис, и трёхмерные игры, и проги под линукс писал…
    Кроме понтов не чего от тебя не слышу… А код в начале для примера, чтоб яснее понятно было что я требую.

  7. 32
    Сергей Старовой ответил:

    [цитата]
    исключения из правил, недокументированные операции, которые могут использоваться софтварными защитами (а у тебя же про эти операции в доках ничего не сказано
    - защита свалится) и прочее.
    [/конец цитаты]
    Можешь привести пример? ) недокументированной операции, используемой защитой (именно на уровне процессора)?
    Не встречался с таким никогда )

  8. 31
    Сергей Шпикин ответил:

    Я, конечно, не спец в таком, но можешь поискать статьи Криса Касперски про антиотладочные приемы. Там, в частности, рассматривалась инструкция, начинающаяся, вроде бы, с 0xFF и длиной в 5 байт. Отладчик её не переваривает и спотыкается, а в рантайме все ок. Возможно, одна из SSE или модифицированная. В Хакере публиковали, это помню хорошо.

  9. 30
    Сергей Старовой ответил:

    [цитата]
    Быстродействие конечно пострадает, но это цена кроссплатформенности. А остальное ложиться на оптимизатор компилятора.
    [/цитата]
    Я бы не стал возлагать такие надежды на оптимизатор компилятора. Если например для распространенных платформ (win32, linux) оптимизацией еще хоть как-то занимаются, то на разной экзотике вроде ps ситуация гораздо плачевнее )
    P.S. Продолжай писать, не слушай этих скептиков :) Как минимум узнаешь много полезного, пока не забьешь

  10. 29
    Сергей Шпикин ответил:

    На много-много порядков проще сделать специальную версию BOCHS, чем с нуля разработать виртуальную машину, совместимую с (по твоей идее) любым железом. Даже на таких монстрах, как VMWare есть приемы, позволяющие "вылезти" из виртуальной машины во внешний мир, а значит, есть и связанные с этим проблемы.

  11. 28
    Сергей Шпикин ответил:

    В общем, я считаю, что тратить на такую, в целом, безделушку несколько лет своей жизни просто глупо. Правда, в любом случае ты забьешь уже после месяца кодинга средней напряженности. Тем более, что у тебя даже нет проекта и диздока софтины, набор приведенных на первой странице классов способен написать начинающий кодер на С++, а виртуальные машины пишут профессионалы, разбирающиеся во всех тонкостях реализации систем команд на современных процессорах. Даже если ты точно по докам сделаешь транслятор (или JIT-компилятор) х86-кода в нативный для данной платформы, все равно могут остаться и останутся различные исключения из правил, недокументированные операции, которые могут использоваться софтварными защитами (а у тебя же про эти операции в доках ничего не сказано – защита свалится) и прочее. Напиши лучше тетрис для начала…

  12. 27
    Лёха Воронин ответил:

    Быстродействие конечно пострадает, но это цена кроссплатформенности. А остальное ложиться на оптимизатор компилятора.

  13. 26
    Сергей Старовой ответил:

    Самый полный список опкодов, существующий в природе (для процессоров интел) -
    //developer.intel.com/products/processor/manual...
    (intel64 and ia-32 architectures software developer's manual, volumes 2a and 2b (instruction set reference).
    Впрочем остальные тома тоже понадобятся при эмуляции защищенного режима, mmx/sse/sse2/sse3 и так далее.
    Но мне тяжело представить эмулятор, обладающий нормальным быстродействием, написанный целиком на c++.

  14. 25
    Лёха Воронин ответил:

    Кто пробовал что такое Linux на ps3, на котором запущен Windows при помощи VMware поймёт меня. Для его запуска потребуется специальная версия BOCHS для Linux ps3 и много других проблем…

  15. 24
    Сергей Шпикин ответил:

    Есть кроссплатформенный BOCHS, зачем делать еще один?..

  16. 23
    Жека Кирпичев ответил:

    Я все-таки присоединюсь к противникам автора и скажу, что это гиблое дело. Написание эмулятора современного процессора – задача, сравнимая по сложности с написанием операционной системы, если не сложнее. Это десятки или даже сотни человеколет.

    Ведь недостаточно просто реализовать арифметику – надо реализовать и всякие "административные команды" и реакцию на изменение машинно-специфичных регистров – всякие там входы в защищенный режим (вот тут начнется полный пиздец), предвыборки и сбросы кэша…
    Если ВООБЩЕ не заморачиваться производительностью (т.е. считать допустимым замедление в 100-1000 раз по сравнению с оригиналом) и ставить себе целью "лишь бы хоть что-нибудь запустилось" – то, наверное, за годик можно сделать чтобы запускался дос – он запускался еще когда процессоры былы куда примитивнее. А вот пытаться написать свой VMWare я бы, ой, не советовал.

    Почитай спецификацию процессора. Там несколько документов по ~1000 страниц. //www.intel.com/products/processor/manuals/inde... например

  17. 22
    Иннокентий Еникеев ответил:

    А VMware под линукс разве нет? А линукс тот самый на ps3 встает…

  18. 21
    Дмитрий Гайдамович ответил:

    Опыта в написании эмуляторов у меня никакого нет. Я вообще считаю это не очень интересным делом.

  19. 20
    Дмитрий Гайдамович ответил:

    В чём – в этом? Я же не сказал, в чём проблема. Проблем, на самом деле, будет куча, это видно невооружённым взглядом.

  20. 19
    Лёха Воронин ответил:

    Понятно… дело характера и желания их решить… Приятно было поговорить с более опытным коллегой))))

  21. 18
    Лёха Воронин ответил:

    Если только в этом проблема, то это скорее вопрос времени. Может год, два и думаю все команды процессора будут реализованы. Там меня будет ждать и графическая плата и контролёр прерываний и биос. Думую это реально сделать за 3 года.

  22. 17
    Дмитрий Гайдамович ответил:

    Ну Вы начните реализовывать команды процессора, и сами всё поймёте, чем раньше – тем лучше.

  23. 16
    Дмитрий Гайдамович ответил:

    Завидую Вашему оптимизму. Знаете, я не буду Вас отговаривать. Вдруг у Вас получится? Хотя я в это не верю.

  24. 15
    Лёха Воронин ответил:

    Почему так? Все говорят что это гиблое дело, но не говорят почему. Яж не собираюсь пускать его в продажу, и тем самым делать проблемы большим фирмам. Или это просто очень громоздкая задача для одного человека?

  25. 14
    Лёха Воронин ответил:

    Не секрет. Я пишу его на C++ для кроссплатформенности… например перенести этот эмулятор на игровую консоль PS3, и получить возможность на ней запускать программное обеспечение с ПК. Или доделать в эмуляторе функции для отладки и тестирования операционной системы. Главная моя цель написать его и набраться знаний, как и при написании любой сложной программы. К тому же он может оказаться моей будущей кандидатской работе…

  26. 13
    Дмитрий Гайдамович ответил:

    А если не секрет, зачем вам писать эмулятор?

  27. 12
    Дмитрий Гайдамович ответил:

    Да вот хотя бы для Pentium:
    //jsimlo.sk/docs/cpu/index.php/

  28. 11
    Лёха Воронин ответил:

    Тут принцип почти тот же самый что дизассемблера, команда читаеться и распознаёться. Вот с распознанием и проблема…

  29. 10
    Лёха Воронин ответил:

    Спасибо ВАМ большое!!! Очень облегчили труд программисту энтузиасту)))

  30. 9
    Дмитрий Гайдамович ответил:

    Всегда рад помочь программисту-энтузиасту.

  31. 8
    Дмитрий Гайдамович ответил:

    Ассемблировщики, что скажитесь для полной эмуляции?

  32. 7
    Лёха Воронин ответил:

    Самому как то в лом расшифровывать все комманд процессора в ручную. Помогите: скажите где добыть в электронном виде перечень комманд для процессора.

  33. 6
    Дмитрий Гайдамович ответил:

    Скажу. Для ка кого проццесора вам нужен перечень комманд?

  34. 5
    Лёха Воронин ответил:

    Для любого IBM-совместимого, хоть Intel Pentium, AMD Athlon любого из них…

  35. 4
    Лёха Воронин ответил:

    Один из самых сложных обьектов это процессор или графическая плата. Эмуляция процессора сходиться к тому что идёт побайтовое чтение комманд(ассемблировщики знают почему)и их выполнение.

  36. 3
    Лёха Воронин ответил:

    Я в книге по ассемблеру нашёл как выглядят команды в шестнадцатеричном виде. Например: "8B D8" это "mov ebx, eax". "8B" – код операции, "D8" – это регистры. В общем я понял как кодировать операции… Проблема другая! Где найти полный список комманд процессора в шестнадцатеричном виде!

  37. 2
    Лёха Воронин ответил:

    Эмуляция начинаться по тому же принципу по которому начинает работать компьютер… Сперва включаться материнская плата и приходит в действие биос. Потом биос обращается ко всем остальным устройствам: процессор, видеокарта, клавиатура, мышь, и другие(в зависимости от биоса). Если подходить к этому вопросу с точки зрения объектного программирования, то можно поделить всё на объекты… Например:
    class VideoCard
    {
    //тут тоже какието методы…
    };
    class Processor
    {
    private:
    BYTE m_EAX, m_EBX, m_ECX, m_EDX;//к примеру
    public:
    void ReadCommand(BYTE com);

    };
    class HardDrive
    {
    //тут тоже какието методы…
    };
    И каждый обьект запустить в отдельном потоке…..

  38. 1
    Лёха Воронин ответил:

    При эмуляции аппаратного обеспечения для полной эмуляции, эмулировать приходиться по частям.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.