Привет всем.
Перед новогодним праздником 2023 года, представляю вашему вниманию новый проект: Эмулятор ядра ОС Windows.
Ниже немного лирики, а потом по делу.
По моему личному мнению, сочетание ОС Колибри и эмулятора, написанных на языке ассемблере, обеспечат безусловное конкурентное преимущество над другими проектами типа Wine и прочие.
Если я не ошибаюсь, все участники сообщества Колибри ОС желают, чтобы наша операционная система стала популярным среди пользователей настольных ПК и ноутбуков.
Первая проблема заключается в том, что почти все пользователи поголовно сидят под ОС Windows. И я в том числе
Вторая проблема. Обычный пользователь неохотно меняет свои привычки. Я сам такой. Однако можно постепенно изменить свои привычки, если это дает преимущество перед другими пользователями в чем либо или улучшает функциональность чего либо.
Эмулятор позволит решить эти проблемы. К финальной доработке эмулятора мы сможем предложить пользователю такой вариант: «Хочешь, чтобы твоя стрелялка, перделка, свистелка работала быстрее — переключись!!»
Если пользователь переключается на ОС Колибри и запускает этот эмулятор ему будут предлагаться два варианта — Запуск его приложения или запуск рабочего стола Винды.
Пользователь запускает то, что ему надо и как бы ничего не изменится для него, только его Винда и его приложение стали работать явно быстрее.
В итоге, в перспективе, весь мир IT , основанный на платформе ОС Windows, окажется в лапке (под лапкой) нашей птички!
А теперь перейдем к реалиям. Процесс разработки эмулятора я разбил на несколько основных этапов:
1. Обеспечить запуск системных модулей Винды (ntdll, kernel32, gdi32, user32) в среде ОС Колибри. Эти системные модули сами автоматически сформируют среду окружения обеспечивающий запуск приложения.
2. Все вызовы системных функций API, которые обращаются в ядро Винды, замкнуть на свой эмулятор и написать обработчики этих функций.
3. Запустить стандартное приложение из дистрибутива Винды
4. Окончательно отладить межмодульное взаимодействие по стандартам Винды
5. Полностью отладить функциональность приложения Винды
6. Сделать адаптацию эмулятора с этим приложением под все версии Винды, начиная от Window XP и выше.
7. Запустить Explorer (Рабочий стол) Винды и отладить его.
8. Разработать и отладить механизм работы с драйверами, входящих в состав приложений.
9. Сделать адаптацию под 64 бит версию (Предполагается работа эмулятора в совместимом режиме х86 32-64.
В качестве исходного ОС был выбран Windows XP SP-2 (Меньше мегатонн кода для изучения).
В качестве стандартного приложения Винды был выбран Notepad,так как он имеется во всех дистрибутивах Винды и есть его аналог в Колибри — Tinypad, что позволяет мне быстрее адаптировать Notepad к особенностям Колибри.
Проект я начал в сентябре 2021 года. Решил специально ничего не сообщать здесь, пока не достигну результата, на которое можно посмотреть. На данный момент идет работа по п 4-5 и частично п.2. Уже запускается Notepad (см. ниже скрин).
У кого есть установленный Windows XP SP-2 на жестком диске и если Колибри читает этот диск, то вы можете проверить запуск эмулятора. Должно появиться окно Notepad с мигающим кареткой (то есть типа приложение готово к работе).
Примечание по Notepad :
1. Курсор в Notepad временно установлен в виде изображении ручки из ресурсов Винды, так как стандартный курсор Винды, в виде двутавровой балки, Функция 37,5 от Колибри не хочет отображать.
2. Шрифт временно выбран из стандарта Колибри, так как векторный шрифт от Винды пока не поддался мне: Прямые линии шрифта норм отображает, но кривые неправильно — возможно неправильно применил формулу Безье для кривых..
«»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
Внимание:
1.Так как конфигфайлы у Windows XP могут достигать размера более 50МБт, то эмулятор НЕ загрузится из-за ограничения размера загрузки файла в 16МБт, в системном файле ОС Колибри - dll.inc. (строка 472)
Предлагаю модератору изменить ограничение максимального размера загрузки файла в dll.inc до 1ГБт на перспективу.
Например прописать в файле dll.inc так: cmp eax,1024*1024*1024 (строка 472)
2. В целях безопасности, эмулятор пока ничего не сохраняет на диск с Виндой и не меняет данные в конфигфайлах Винды, даже если это требуют системные модули Винды.
«»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
Примечание:
Если выполнены выше условия и после запуска вами эмулятора в течение 3-5 сек. не появилось окно Notepad, то сообщите мне ниже в теме форума с приложением скрина сообщения Board
(Запустите Board. Нажмите кнопку – User. )
Выкладываю сам файл и исходник к нему.
Если у кого есть конструктивные предложения или замечания по исходнику — коды, алгоритмы и структуры хранения данных — сообщайте.
На данный момент у меня действует принцип — пусть кривой, косой код и тупые алгоритмы, но главное запустить приложение. И уже потом, в том числе на основе ваших предложений, оптимизировать алгоритмы и код.
Эмулятор ядра OS Windows
-
- Attachments
-
-
WCore.zip (239.29 KiB)Downloaded 264 times
-
scrin_notepad2.jpg (245.25 KiB)Viewed 27650 times
-
Круто! Респект!!
The best way to predict the future is to create it.
Полмегабайта на асме - это круто!
Крутой проект. И очень масштабный. Ковырял подобное. Потом изучал сырцы Wine ради описаний ядерных функций, ну и с целью что-то портировать. Терпения не хватило)
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Спасибо. И ваша цитата очень в тему:The best way to predict the future is to create it.
"Полмегабайта на асме - это круто!"
Это еще код причесанный без кмментариев и пояснений. Мой рабочий файл содержит 1,7 Мбт
Это еще код причесанный без кмментариев и пояснений. Мой рабочий файл содержит 1,7 Мбт
" Ковырял подобное. Потом изучал сырцы Wine ради описаний ядерных функций, ну и с целью что-то портировать. Терпения не хватило)"
Я также с этого начал и убил зря три месяца... Это тупиковый путь!!!
Нужно просто поставить самую первую практическую цель -запустить в Колибри первый файл от Винды -ntdll. Как только начал по этой цели работать, тут же у меня поперло!!! Даже азарт появился -добить этот ntdll, заставить инициализироваться. А дальше уже пошло по накатанной....
Я также с этого начал и убил зря три месяца... Это тупиковый путь!!!
Нужно просто поставить самую первую практическую цель -запустить в Колибри первый файл от Винды -ntdll. Как только начал по этой цели работать, тут же у меня поперло!!! Даже азарт появился -добить этот ntdll, заставить инициализироваться. А дальше уже пошло по накатанной....
Отличный проект. Хорошо, что занялись этим.
Я попытался запустить, но:
WCore вылетает, если запускать с диском, на котором Windows XP Professional 2002 Service Pack 3.
Ядро я перекомпилировал, поставив 1ГиБ в core/dll.inc (408 и 514 строки в последней ревизии: 9885). Таким образом, менял kernel.mnt и kolibri.krn в raw-диске KolibriOS r9885.
В процессе также происходит перезапись в 0-ой ячейке памяти (заголовок приложения стирается).
Да, было написано, что запускать с SP-2, но у меня такой пока нет, а это, может, пригодится (вдруг дело не в Service Pack).
Я попытался запустить, но:
WCore вылетает, если запускать с диском, на котором Windows XP Professional 2002 Service Pack 3.
Ядро я перекомпилировал, поставив 1ГиБ в core/dll.inc (408 и 514 строки в последней ревизии: 9885). Таким образом, менял kernel.mnt и kolibri.krn в raw-диске KolibriOS r9885.
В процессе также происходит перезапись в 0-ой ячейке памяти (заголовок приложения стирается).
Да, было написано, что запускать с SP-2, но у меня такой пока нет, а это, может, пригодится (вдруг дело не в Service Pack).
- Attachments
-
-
Screenshot_20221208_163715.png (105.74 KiB)Viewed 27548 times
-
Спасибо за инфу.
Там сообщает, что какой-то объект не найден. Чтобы узнать какой объект не найден, надо будет трассировать.
Ваша цитата:
"В процессе также происходит перезапись в 0-ой ячейке памяти (заголовок приложения стирается)."
Это нормально. Системные модули Винды постоянно обращаются к памяти по селектору fs:[0]. Поэтому мне пришлось выделить пустое место в 40h, чтобы они не затирали названия функций.
Там сообщает, что какой-то объект не найден. Чтобы узнать какой объект не найден, надо будет трассировать.
Ваша цитата:
"В процессе также происходит перезапись в 0-ой ячейке памяти (заголовок приложения стирается)."
Это нормально. Системные модули Винды постоянно обращаются к памяти по селектору fs:[0]. Поэтому мне пришлось выделить пустое место в 40h, чтобы они не затирали названия функций.
Это не нормально. fs:[0] не должен указывать туда-же, что и ds:[0]. fs:[0] это TLS данные, для каждой thread свои.
Было бы интересно получать список файлов, к которым обращается эмулятор. Может быть сделать лог для этого где-нибудь на /tmp0/1 ?
"Это не нормально. fs:[0] не должен указывать туда-же, что и ds:[0]. fs:[0] это TLS данные, для каждой thread свои."
Может быть для Винды это ненормально... Но для эмулятора такая реализация селектора является "нормальным", потому-что так задумано.
Я "разрешил" системным модулям Винды использовать адреса от 0 до 40h для своих нужд.
В итоге, такое "ненормальное" применение селектора не мешает эмулятору запустить Notepad
Может быть для Винды это ненормально... Но для эмулятора такая реализация селектора является "нормальным", потому-что так задумано.
Я "разрешил" системным модулям Винды использовать адреса от 0 до 40h для своих нужд.
В итоге, такое "ненормальное" применение селектора не мешает эмулятору запустить Notepad
"Было бы интересно получать список файлов, к которым обращается эмулятор. Может быть сделать лог для этого где-нибудь на /tmp0/1 ?"
Если вас интересует список загружаемых файлов при стартовой инициализации эмулятора, то он есть в исходнике со структурами.
В ходе формировании среды окружения, системные модули Винды дополнительно автоматически подгружают около десятка модулей.
Если вас интересует такая инфа, то вы можете сделать свой обработчик данных на основе исходников эмулятора.
Если вас интересует список загружаемых файлов при стартовой инициализации эмулятора, то он есть в исходнике со структурами.
В ходе формировании среды окружения, системные модули Винды дополнительно автоматически подгружают около десятка модулей.
Если вас интересует такая инфа, то вы можете сделать свой обработчик данных на основе исходников эмулятора.
Есть такая проблема с фукцией номер 0 - создание окна. (См. скрин)
При создании окна отсутствует такая опция - не показывать его в трее.
Так как дополнительное окно приходится создавать для субменю и контекстного меню, то в трее появляется новый объект. Это ведет к ненужным расходам процессорного времени на отрисовку лишних элементов.
Эта проблема есть и у Tinypad.
Может, кто-то возьмется доработать эту функцию?
При создании окна отсутствует такая опция - не показывать его в трее.
Так как дополнительное окно приходится создавать для субменю и контекстного меню, то в трее появляется новый объект. Это ведет к ненужным расходам процессорного времени на отрисовку лишних элементов.
Эта проблема есть и у Tinypad.
Может, кто-то возьмется доработать эту функцию?
- Attachments
-
-
proba3.jpg (85.18 KiB)Viewed 27364 times
-
А, не думали/рассматривали ли возможность разработки представленногo решения для запуска программ из Win98/95 (может и Win 3.11)?
P.S. В рамках запуска слвременного софта в WinXP показывает неплохие результаы проект Core One API
Думают и возможности запуска Хромиум 100 под Win98.
Windows 98 Second Edition в обсужении на ru-board.com
P.S. В рамках запуска слвременного софта в WinXP показывает неплохие результаы проект Core One API
Думают и возможности запуска Хромиум 100 под Win98.
Windows 98 Second Edition в обсужении на ru-board.com
Who is online
Users browsing this forum: No registered users and 1 guest