Эмуляция KolibriOS API

Running Kolibri and its programs in other OSes
  • Leency wrote:Вот это менясмутило http://prntscr.com/ipqgnr
    мвахаха!!!! Ох лол!!! Советую автору сего поделия поучить матчасть для начала. eax на rax он заменил :lol: думает так заработает :lol:
    Кто не помнит, ALEXS1983 — это который http://board.kolibrios.org/viewtopic.ph ... 309#p66309

    Leency, там всё та же SetLDTEntries, которая под x64 работать не будет.
    Leency wrote:Vista/7/10
    pavelyakov wrote:Из-за чего с windows 7 и выше не запускается? Это возможно из-за защиты windows?
    Насколько я смог нагуглить, это появилось в одном из обновлений безопасности на семёрке.
    То есть, теоретически, на каких-то семёрках оно может работать.
    Возможно на висте работает.
    Мой вариант не использует SetLDTEntries, и, по идее(если я ничего больше не упустил :roll: ) должен на x64 тоже запуститься.
    Хорошо бы проверить XP 64 bit, Vista 32 bit и 64 bit.
    Kopa wrote:Здесь какое то видео.
    В EMET самом можно галочку просто снять. Но теперь это уже похоже на уровне системы.
  • Понял, давай все же не будем довить на мозоли и так уже потерями Марио и Диамонда.
    Из хаоса в космос
  • 0CodErr wrote:Некоторые приложения пишут\читают изображения "directly to\from LFB" — это тоже не поддерживается.
    Пока что в процессе отладки своего эмулятора обнаружил лишь три такие программы, все три в каталоге /kolibrios/games/codemaster
    0CodErr wrote:Мой вариант не использует SetLDTEntries, и, по идее(если я ничего больше не упустил :roll: ) должен на x64 тоже запуститься.
    Что-то сомневаюсь я. А как ты собираешься сказать процессору, что ты хочешь запустить 32-битный код?

    Вот в Linux-е есть modify_ldt как в 32-битной ОС, так и в её 64-битном варианте. Благодаря чему, я надеюсь, можно будет скомпилить мой эмуль и для 32-битного Linux-а (пока разработка идёт только под 64-битной версией).
    Last edited by tsdima on Sun Mar 11, 2018 10:55 pm, edited 1 time in total.
  • Windows XP SP3 x32 со всеми обновлениями - kEm РАБОТАЕТ http://prntscr.com/ipsmpv Image
    Last edited by Leency on Sun Mar 11, 2018 10:56 pm, edited 1 time in total.
    Из хаоса в космос
  • tsdima wrote:А как ты собираешься сказать процессору, что ты хочешь запустить 32-битный код?
    Так же, как и для всех остальных 32-битных программ.
    32-битная программа вполне работает и на x64.
  • 0CodErr wrote:32-битная программа вполне работает и на x64
    И что, вообще нет отличий?
  • tsdima, ты лучше по-конкретней.
    Конечно есть различия.
    Я о том, что можно взять, скажем, какой-нибудь 32-битный калькулятор и запустить эту программу на x64, и она запустится и будет работать.
    Вопрос в том, какие конкретно различия должны нас интересовать.
  • 0CodErr wrote:"Read File error" — значит, что не загружен файл куда надо(по смещению 0).
    У меня аналогично, тоже на х64.
    А ReadFile случайно не проверяет указатель на ноль?
  • 0CodErr wrote:Я о том, что можно взять, скажем, какой-нибудь 32-битный калькулятор и запустить эту программу на x64, и она запустится и будет работать.
    В том, что ОС имеет поддержку запуска 32-битных программ, я не сомневаюсь. Но, например, в списке задач на x64-битной винде после имени, если это 32-битная программа, указано *32. То есть, отличие в процессах делается неспроста? Хотелось бы знать - зачем, если разницы в исполнении 32/64 нет.
  • tsdima wrote:
    0CodErr wrote:"Read File error" — значит, что не загружен файл куда надо(по смещению 0).
    У меня аналогично, тоже на х64.
    А ОС какая?
    tsdima wrote:А ReadFile случайно не проверяет указатель на ноль?
    Вроде не должна. Можно взять VMMap и посмотреть, что стало с регионом памяти 0..64K. Скорее всего NtAllocateVirtualMemory не отрабатывает.
  • 0CodErr wrote:tsdima, ты лучше по-конкретней.
    1. Команды, место которых заняли префиксы REX. А это, на минуточку, INC/DEC r16/32
    2. Отрицательное смещение в регистре, типа

    Code: Select all

    mov ecx,-300
    mov eax,[ebp+ecx]
    На мой взгляд, тут будет адресация не назад, а вперёд на почти 4Gb

    3. Опкоды некоторых команд типа AAA, AAS в 64-битном режиме invalid
    0CodErr wrote:
    tsdima wrote:У меня аналогично, тоже на х64.
    А ОС какая?
    Win 7 x64

    Может стоит добавить вывод GetLastError при выводе ошибок?
    Да и анализ на ошибку в большем количестве мест, например при маппинге нулевых 64Кб.
  • Реализовал поддержку DrawText.
    Для этого был взят необходимый код из ядра KolibriOS из файлов font.inc и parse_fn.inc.
    На 99% взятый код остался без изменений.
    Были заменены вызовы функций kernel_free, kernel_alloc, syscall_getpixel, __sys_putpixel
    на эмулирующие, которые вызывают функции Windows.
    KEm.7z (44.06 KiB)
    Downloaded 349 times
    Так выглядит tinfo:
    Spoiler:
    tinfo1.PNG
    tinfo1.PNG (27.37 KiB)
    Viewed 10731 times
    Для реализации DrawNumber можно сначала преобразовать число в соответствии с форматом в строку,
    а затем передать полученную строку в DrawText.
    Похожим образом сделано в
    • KlbrInWin — функция "i40_display_number" в файле "I40EMUL.INC"
    • MeOSEmul — функция "func _47 ;///// DRAW NUMBER" в файле "Emul_MeOS.asm"
    • а также в ядре KolibriOS — функция "display_number" в файле "kernel.asm"
    Также начал реализацию функции SysFn2:GetKey.
    Теперь можно поиграть в некоторые игрушки, например, Heliothryx, Arcanii, Invaders, Piton(by Albom), Donkey(by Albom).
    Работает пример "{3} GetKey, DrawText" из первого сообщения темы Delphi7 examples http://board.kolibrios.org/viewtopic.ph ... 469#p68254 можно вводить как английские, так и русские символы при переключении раскладки.

    Можно поиграть в игру ALMAZ:
    Spoiler:
    almaz.PNG
    almaz.PNG (22.26 KiB)
    Viewed 10731 times
  • Клево, шрифты как раз одно из слабых мест KlbrInWin - т.к. новый большой шрифт не поддерживается.
    Из хаоса в космос
  • Who is online

    Users browsing this forum: No registered users and 2 guests