Зачем изобретать велосипед?
Максимум что можно из этого получить это офигенный багаж знаний, но к тому времени как ты завершишь свой проект, они тебе уже не понадобятся
… а отговаривать человека не нужно. Каждый по своему самореализовывается. Может приобретенный опыт поможет ему в его жизни в будущем
P.S. Леха Воронин, если у тебя все получится, вспомни о том, что был на твоей стороне =))))
Да никто не отговаривает, это ж его жизнь, его время. Не лень – пусть делает, я просто вкратце показал, что его ждет. Повторить архитектуру такой сложной системы в одиночку просто нереально.
Господа программисты, ну зачем вы отговариваете человека? Линуса Торвальдса вон никто не отговорил в своё время, и человек "зачал" новую ОС. Вполне возможно, что Лёха Воронин станет во главе нового сообщества, которое забабахает такой эмулятор, который произведёт революцию! Я серьёзно, не прикалываюсь. Если человек настолько самомотивирован, то что плохого, чтобы потратить на это несколько лет? Вы понимаете, что Лёхе это ИНТЕРЕСНО! Вам давно последний раз было интересно? Мне – всё реже и реже, вот такой я конченный человек )
Никаких понтов, горькая правда жизни. Я тоже делал трехмерные игры, системный утиль, софт под заказ, с линуксом, к счастью, сталкиваться не приходилось. Но все это на порядок проще, чем то, что ты задумал. Даже если работать в команде, в ХОРОШЕЙ команде специалистов-профессионалов, вероятность доведения хотя бы до стадии альфы, которая будет запускать 1% простых PC-приложений, очень мала. Смысла убивать на это время я не вижу, коммерческой выгоды ты, похоже, не ищешь, а для прикола несколько лет вкалывать на сомнительный результат… такое я не понимаю. Т.е. я могу понять цель навроде "узнать больше об архитектуре x86", но цель "довести до конца" такой проект по-моему утопична и наивна. Тем более, ты хочешь еще и видеокарту эмулировать? Рекомпиляция шейдеров и какие-то промежуточные драйверы, переводящие команды управления пайплайном в команды конкретного железа – так, что ли? Все это будет эпично тормозить, потому что оптимизация такого эмулятора займет еще пару лет. Просто посмотри, сколько уже разрабатывают VMWare, если ты в сто раз хуже сделаешь, это будет однозначный успех. Только и это сомнительно.
Ответ #30:
Я делал и тетрис, и трёхмерные игры, и проги под линукс писал…
Кроме понтов не чего от тебя не слышу… А код в начале для примера, чтоб яснее понятно было что я требую.
[цитата]
исключения из правил, недокументированные операции, которые могут использоваться софтварными защитами (а у тебя же про эти операции в доках ничего не сказано
- защита свалится) и прочее.
[/конец цитаты]
Можешь привести пример? ) недокументированной операции, используемой защитой (именно на уровне процессора)?
Не встречался с таким никогда )
Я, конечно, не спец в таком, но можешь поискать статьи Криса Касперски про антиотладочные приемы. Там, в частности, рассматривалась инструкция, начинающаяся, вроде бы, с 0xFF и длиной в 5 байт. Отладчик её не переваривает и спотыкается, а в рантайме все ок. Возможно, одна из SSE или модифицированная. В Хакере публиковали, это помню хорошо.
[цитата]
Быстродействие конечно пострадает, но это цена кроссплатформенности. А остальное ложиться на оптимизатор компилятора.
[/цитата]
Я бы не стал возлагать такие надежды на оптимизатор компилятора. Если например для распространенных платформ (win32, linux) оптимизацией еще хоть как-то занимаются, то на разной экзотике вроде ps ситуация гораздо плачевнее )
P.S. Продолжай писать, не слушай этих скептиков Как минимум узнаешь много полезного, пока не забьешь
На много-много порядков проще сделать специальную версию BOCHS, чем с нуля разработать виртуальную машину, совместимую с (по твоей идее) любым железом. Даже на таких монстрах, как VMWare есть приемы, позволяющие "вылезти" из виртуальной машины во внешний мир, а значит, есть и связанные с этим проблемы.
В общем, я считаю, что тратить на такую, в целом, безделушку несколько лет своей жизни просто глупо. Правда, в любом случае ты забьешь уже после месяца кодинга средней напряженности. Тем более, что у тебя даже нет проекта и диздока софтины, набор приведенных на первой странице классов способен написать начинающий кодер на С++, а виртуальные машины пишут профессионалы, разбирающиеся во всех тонкостях реализации систем команд на современных процессорах. Даже если ты точно по докам сделаешь транслятор (или JIT-компилятор) х86-кода в нативный для данной платформы, все равно могут остаться и останутся различные исключения из правил, недокументированные операции, которые могут использоваться софтварными защитами (а у тебя же про эти операции в доках ничего не сказано – защита свалится) и прочее. Напиши лучше тетрис для начала…
Самый полный список опкодов, существующий в природе (для процессоров интел) - //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++.
Кто пробовал что такое Linux на ps3, на котором запущен Windows при помощи VMware поймёт меня. Для его запуска потребуется специальная версия BOCHS для Linux ps3 и много других проблем…
Я все-таки присоединюсь к противникам автора и скажу, что это гиблое дело. Написание эмулятора современного процессора – задача, сравнимая по сложности с написанием операционной системы, если не сложнее. Это десятки или даже сотни человеколет.
Ведь недостаточно просто реализовать арифметику – надо реализовать и всякие "административные команды" и реакцию на изменение машинно-специфичных регистров – всякие там входы в защищенный режим (вот тут начнется полный пиздец), предвыборки и сбросы кэша…
Если ВООБЩЕ не заморачиваться производительностью (т.е. считать допустимым замедление в 100-1000 раз по сравнению с оригиналом) и ставить себе целью "лишь бы хоть что-нибудь запустилось" – то, наверное, за годик можно сделать чтобы запускался дос – он запускался еще когда процессоры былы куда примитивнее. А вот пытаться написать свой VMWare я бы, ой, не советовал.
Если только в этом проблема, то это скорее вопрос времени. Может год, два и думаю все команды процессора будут реализованы. Там меня будет ждать и графическая плата и контролёр прерываний и биос. Думую это реально сделать за 3 года.
Почему так? Все говорят что это гиблое дело, но не говорят почему. Яж не собираюсь пускать его в продажу, и тем самым делать проблемы большим фирмам. Или это просто очень громоздкая задача для одного человека?
Не секрет. Я пишу его на C++ для кроссплатформенности… например перенести этот эмулятор на игровую консоль PS3, и получить возможность на ней запускать программное обеспечение с ПК. Или доделать в эмуляторе функции для отладки и тестирования операционной системы. Главная моя цель написать его и набраться знаний, как и при написании любой сложной программы. К тому же он может оказаться моей будущей кандидатской работе…
Один из самых сложных обьектов это процессор или графическая плата. Эмуляция процессора сходиться к тому что идёт побайтовое чтение комманд(ассемблировщики знают почему)и их выполнение.
Я в книге по ассемблеру нашёл как выглядят команды в шестнадцатеричном виде. Например: "8B D8" это "mov ebx, eax". "8B" – код операции, "D8" – это регистры. В общем я понял как кодировать операции… Проблема другая! Где найти полный список комманд процессора в шестнадцатеричном виде!
Эмуляция начинаться по тому же принципу по которому начинает работать компьютер… Сперва включаться материнская плата и приходит в действие биос. Потом биос обращается ко всем остальным устройствам: процессор, видеокарта, клавиатура, мышь, и другие(в зависимости от биоса). Если подходить к этому вопросу с точки зрения объектного программирования, то можно поделить всё на объекты… Например:
class VideoCard
{
//тут тоже какието методы…
};
class Processor
{
private:
BYTE m_EAX, m_EBX, m_ECX, m_EDX;//к примеру
public:
void ReadCommand(BYTE com);
};
class HardDrive
{
//тут тоже какието методы…
};
И каждый обьект запустить в отдельном потоке…..
6 мая 2008 в 14:04
Зачем изобретать велосипед?
Максимум что можно из этого получить это офигенный багаж знаний, но к тому времени как ты завершишь свой проект, они тебе уже не понадобятся
… а отговаривать человека не нужно. Каждый по своему самореализовывается. Может приобретенный опыт поможет ему в его жизни в будущем
P.S. Леха Воронин, если у тебя все получится, вспомни о том, что был на твоей стороне =))))
5 мая 2008 в 12:00
Да никто не отговаривает, это ж его жизнь, его время. Не лень – пусть делает, я просто вкратце показал, что его ждет. Повторить архитектуру такой сложной системы в одиночку просто нереально.
4 мая 2008 в 7:00
Псих….
4 мая 2008 в 1:02
Господа программисты, ну зачем вы отговариваете человека? Линуса Торвальдса вон никто не отговорил в своё время, и человек "зачал" новую ОС. Вполне возможно, что Лёха Воронин станет во главе нового сообщества, которое забабахает такой эмулятор, который произведёт революцию! Я серьёзно, не прикалываюсь. Если человек настолько самомотивирован, то что плохого, чтобы потратить на это несколько лет? Вы понимаете, что Лёхе это ИНТЕРЕСНО! Вам давно последний раз было интересно? Мне – всё реже и реже, вот такой я конченный человек )
3 мая 2008 в 23:03
Никаких понтов, горькая правда жизни. Я тоже делал трехмерные игры, системный утиль, софт под заказ, с линуксом, к счастью, сталкиваться не приходилось. Но все это на порядок проще, чем то, что ты задумал. Даже если работать в команде, в ХОРОШЕЙ команде специалистов-профессионалов, вероятность доведения хотя бы до стадии альфы, которая будет запускать 1% простых PC-приложений, очень мала. Смысла убивать на это время я не вижу, коммерческой выгоды ты, похоже, не ищешь, а для прикола несколько лет вкалывать на сомнительный результат… такое я не понимаю. Т.е. я могу понять цель навроде "узнать больше об архитектуре x86", но цель "довести до конца" такой проект по-моему утопична и наивна. Тем более, ты хочешь еще и видеокарту эмулировать? Рекомпиляция шейдеров и какие-то промежуточные драйверы, переводящие команды управления пайплайном в команды конкретного железа – так, что ли? Все это будет эпично тормозить, потому что оптимизация такого эмулятора займет еще пару лет. Просто посмотри, сколько уже разрабатывают VMWare, если ты в сто раз хуже сделаешь, это будет однозначный успех. Только и это сомнительно.
3 мая 2008 в 22:01
Ответ #30:
Я делал и тетрис, и трёхмерные игры, и проги под линукс писал…
Кроме понтов не чего от тебя не слышу… А код в начале для примера, чтоб яснее понятно было что я требую.
3 мая 2008 в 21:03
[цитата]
исключения из правил, недокументированные операции, которые могут использоваться софтварными защитами (а у тебя же про эти операции в доках ничего не сказано
- защита свалится) и прочее.
[/конец цитаты]
Можешь привести пример? ) недокументированной операции, используемой защитой (именно на уровне процессора)?
Не встречался с таким никогда )
3 мая 2008 в 21:03
Я, конечно, не спец в таком, но можешь поискать статьи Криса Касперски про антиотладочные приемы. Там, в частности, рассматривалась инструкция, начинающаяся, вроде бы, с 0xFF и длиной в 5 байт. Отладчик её не переваривает и спотыкается, а в рантайме все ок. Возможно, одна из SSE или модифицированная. В Хакере публиковали, это помню хорошо.
3 мая 2008 в 21:03
[цитата]
Быстродействие конечно пострадает, но это цена кроссплатформенности. А остальное ложиться на оптимизатор компилятора.
[/цитата]
Я бы не стал возлагать такие надежды на оптимизатор компилятора. Если например для распространенных платформ (win32, linux) оптимизацией еще хоть как-то занимаются, то на разной экзотике вроде ps ситуация гораздо плачевнее )
P.S. Продолжай писать, не слушай этих скептиков Как минимум узнаешь много полезного, пока не забьешь
3 мая 2008 в 20:02
На много-много порядков проще сделать специальную версию BOCHS, чем с нуля разработать виртуальную машину, совместимую с (по твоей идее) любым железом. Даже на таких монстрах, как VMWare есть приемы, позволяющие "вылезти" из виртуальной машины во внешний мир, а значит, есть и связанные с этим проблемы.
3 мая 2008 в 20:02
В общем, я считаю, что тратить на такую, в целом, безделушку несколько лет своей жизни просто глупо. Правда, в любом случае ты забьешь уже после месяца кодинга средней напряженности. Тем более, что у тебя даже нет проекта и диздока софтины, набор приведенных на первой странице классов способен написать начинающий кодер на С++, а виртуальные машины пишут профессионалы, разбирающиеся во всех тонкостях реализации систем команд на современных процессорах. Даже если ты точно по докам сделаешь транслятор (или JIT-компилятор) х86-кода в нативный для данной платформы, все равно могут остаться и останутся различные исключения из правил, недокументированные операции, которые могут использоваться софтварными защитами (а у тебя же про эти операции в доках ничего не сказано – защита свалится) и прочее. Напиши лучше тетрис для начала…
3 мая 2008 в 19:03
Быстродействие конечно пострадает, но это цена кроссплатформенности. А остальное ложиться на оптимизатор компилятора.
3 мая 2008 в 18:01
Самый полный список опкодов, существующий в природе (для процессоров интел) -
//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++.
3 мая 2008 в 16:04
Кто пробовал что такое Linux на ps3, на котором запущен Windows при помощи VMware поймёт меня. Для его запуска потребуется специальная версия BOCHS для Linux ps3 и много других проблем…
3 мая 2008 в 9:04
Есть кроссплатформенный BOCHS, зачем делать еще один?..
3 мая 2008 в 8:04
Я все-таки присоединюсь к противникам автора и скажу, что это гиблое дело. Написание эмулятора современного процессора – задача, сравнимая по сложности с написанием операционной системы, если не сложнее. Это десятки или даже сотни человеколет.
Ведь недостаточно просто реализовать арифметику – надо реализовать и всякие "административные команды" и реакцию на изменение машинно-специфичных регистров – всякие там входы в защищенный режим (вот тут начнется полный пиздец), предвыборки и сбросы кэша…
Если ВООБЩЕ не заморачиваться производительностью (т.е. считать допустимым замедление в 100-1000 раз по сравнению с оригиналом) и ставить себе целью "лишь бы хоть что-нибудь запустилось" – то, наверное, за годик можно сделать чтобы запускался дос – он запускался еще когда процессоры былы куда примитивнее. А вот пытаться написать свой VMWare я бы, ой, не советовал.
Почитай спецификацию процессора. Там несколько документов по ~1000 страниц. //www.intel.com/products/processor/manuals/inde... например
3 мая 2008 в 3:04
А VMware под линукс разве нет? А линукс тот самый на ps3 встает…
3 мая 2008 в 2:03
Опыта в написании эмуляторов у меня никакого нет. Я вообще считаю это не очень интересным делом.
3 мая 2008 в 2:00
В чём – в этом? Я же не сказал, в чём проблема. Проблем, на самом деле, будет куча, это видно невооружённым взглядом.
3 мая 2008 в 2:00
Понятно… дело характера и желания их решить… Приятно было поговорить с более опытным коллегой))))
3 мая 2008 в 1:05
Если только в этом проблема, то это скорее вопрос времени. Может год, два и думаю все команды процессора будут реализованы. Там меня будет ждать и графическая плата и контролёр прерываний и биос. Думую это реально сделать за 3 года.
3 мая 2008 в 1:04
Ну Вы начните реализовывать команды процессора, и сами всё поймёте, чем раньше – тем лучше.
3 мая 2008 в 1:03
Завидую Вашему оптимизму. Знаете, я не буду Вас отговаривать. Вдруг у Вас получится? Хотя я в это не верю.
3 мая 2008 в 1:03
Почему так? Все говорят что это гиблое дело, но не говорят почему. Яж не собираюсь пускать его в продажу, и тем самым делать проблемы большим фирмам. Или это просто очень громоздкая задача для одного человека?
3 мая 2008 в 1:02
Не секрет. Я пишу его на C++ для кроссплатформенности… например перенести этот эмулятор на игровую консоль PS3, и получить возможность на ней запускать программное обеспечение с ПК. Или доделать в эмуляторе функции для отладки и тестирования операционной системы. Главная моя цель написать его и набраться знаний, как и при написании любой сложной программы. К тому же он может оказаться моей будущей кандидатской работе…
3 мая 2008 в 1:01
А если не секрет, зачем вам писать эмулятор?
3 мая 2008 в 1:00
Да вот хотя бы для Pentium:
//jsimlo.sk/docs/cpu/index.php/
3 мая 2008 в 1:00
Тут принцип почти тот же самый что дизассемблера, команда читаеться и распознаёться. Вот с распознанием и проблема…
3 мая 2008 в 1:00
Спасибо ВАМ большое!!! Очень облегчили труд программисту энтузиасту)))
3 мая 2008 в 1:00
Всегда рад помочь программисту-энтузиасту.
3 мая 2008 в 0:05
Ассемблировщики, что скажитесь для полной эмуляции?
3 мая 2008 в 0:05
Самому как то в лом расшифровывать все комманд процессора в ручную. Помогите: скажите где добыть в электронном виде перечень комманд для процессора.
3 мая 2008 в 0:05
Скажу. Для ка кого проццесора вам нужен перечень комманд?
3 мая 2008 в 0:05
Для любого IBM-совместимого, хоть Intel Pentium, AMD Athlon любого из них…
3 мая 2008 в 0:04
Один из самых сложных обьектов это процессор или графическая плата. Эмуляция процессора сходиться к тому что идёт побайтовое чтение комманд(ассемблировщики знают почему)и их выполнение.
3 мая 2008 в 0:04
Я в книге по ассемблеру нашёл как выглядят команды в шестнадцатеричном виде. Например: "8B D8" это "mov ebx, eax". "8B" – код операции, "D8" – это регистры. В общем я понял как кодировать операции… Проблема другая! Где найти полный список комманд процессора в шестнадцатеричном виде!
3 мая 2008 в 0:03
Эмуляция начинаться по тому же принципу по которому начинает работать компьютер… Сперва включаться материнская плата и приходит в действие биос. Потом биос обращается ко всем остальным устройствам: процессор, видеокарта, клавиатура, мышь, и другие(в зависимости от биоса). Если подходить к этому вопросу с точки зрения объектного программирования, то можно поделить всё на объекты… Например:
class VideoCard
{
//тут тоже какието методы…
};
class Processor
{
private:
BYTE m_EAX, m_EBX, m_ECX, m_EDX;//к примеру
public:
void ReadCommand(BYTE com);
};
class HardDrive
{
//тут тоже какието методы…
};
И каждый обьект запустить в отдельном потоке…..
3 мая 2008 в 0:02
При эмуляции аппаратного обеспечения для полной эмуляции, эмулировать приходиться по частям.