запуск Win32:x86 приложения на WinCE:ARM

Тема в разделе "WASM.ZEN", создана пользователем valerko, 9 дек 2008.

  1. valerko

    valerko New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2008
    Сообщения:
    12
    ощутимого прогресса в этом направлении насколько я знаю нет. Есть какие-то эмуляторы процессоров x86, Qemu, dosbox..очень медленные.

    Но что если немного изменить условия задачи? Цель- запустить одно, конкретное приложение, не использующее MFC и ресурсы Win32. Только системные API и графика DirectX, которую можно и на другой движок переделать.
    АПИ эмулироваться не будет, а это большой плюс к скорости.

    Я не могу выбрать способ как это все сделать.
    У меня есть несколько идей:

    1)создать среду для запуска конкретного Win32 EXE-шника (PE формата) с прилагающимися DLL.
    варианты:

    -заменять каждую инструкцию исходного x86-кода на 1,2,3 или 4 инструкций ARM, мне кажется это позволит как-то решить проблему offset'ов. но неуверен. Виртуальную память Windows здесь придется эмулировать, но плюс к скорости будет за счет того что большая часть кода будет транслирована в АРМ.

    -транслировать какие-то блоки инструкций. Какой-то процент. чтобы был хоть какой-нить плюс к скорости. Виртуальная память тут тоже будет эмулироваться. Тут будет проще организовать модель памяти Windows, как мне кажется.

    2)перекомпилировать сами exe под ARM (XScale)
    варианты:

    -декомпилировать ехе с использованием современных decompiler'ов типа Hex-rays, потом подправить и собрать заново. Попробавл это сделать: впринципе возможно, но много времени уйдет на дебаг. Так что решил пока подождать до выхода новых версии декомпилеров.

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

    -----------------------------------------------------

    Помогите выбрать что лучше на ваш взгляд
     
  2. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    Имхо это сильно затратно, и проще написать саму программу заново.
    Эмулятор винды (импорт ведь из виндовых библиотек) + эмулятор х86, да и DirectX в СЕ тот еще...
    Правда дизасмит ь и собирать заново еще хуже.

    А что за программа? Может ей можно найти альтернативу среди готовых, или открытых программ, тогда её хоть можно будет попробовать портировать.
     
  3. valerko

    valerko New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2008
    Сообщения:
    12
    программа такая, что с нуля ее делать точно сложнее будет. http://wasm.ru/forum/viewtopic.php?id=29645
     
  4. valerko

    valerko New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2008
    Сообщения:
    12
    да, придется заменить вызовы нескольких функций..
    Код (Text):
    1. CloseHandle  DeleteCriticalSection  DeleteFileA  EnterCriticalSection  ExitProcess  FlushFileBuffers  FreeEnvironmentStringsA  FreeEnvironmentStringsW  GetACP  GetCPInfo  GetCommandLineA  GetCurrentProcess  GetCurrentThreadId  GetDriveTypeA  GetEnvironmentStrings  GetEnvironmentStringsW  GetEnvironmentVariableA  GetFileAttributesA  GetFileType  GetLastError  GetLogicalDriveStringsA  GetModuleFileNameA  GetModuleHandleA  GetOEMCP  GetProcAddress  GetStartupInfoA  GetStdHandle  GetStringTypeA  GetStringTypeW  GetTickCount  GetVersion  GetVersionExA  GlobalAlloc  GlobalFree  GlobalLock  GlobalUnlock  HeapAlloc  HeapCreate  HeapDestroy  HeapFree  HeapReAlloc  InitializeCriticalSection  InterlockedDecrement  InterlockedIncrement  LCMapStringA  LCMapStringW  LeaveCriticalSection  LoadLibraryA  MultiByteToWideChar  RtlUnwind  SetFilePointer  SetHandleCount  SetLastError  SetStdHandle  Sleep  TerminateProcess  TlsAlloc  TlsFree  TlsGetValue  TlsSetValue  VirtualAlloc  VirtualFree  WideCharToMultiByte  WriteFile  lstrcatA  lstrcpyA
    Большинство из которых есть в API WindowsMobile.
    Эмулятор х86.. сложно конечно, но там в дизасме кроме MOV, ADD, JMP и CALL, других сложно-эмулируемых инструкций типа прерываний, как в досе, нет. С памятью вот только придется повозиться.
     
  5. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    Ну с памятью может и проще будет, если под СЕ 6.00 делать, они ведь там сделали адресное пространство 4 Гб. Есть правда оговорки, но думаю это несущественно.
    Кстати, насчет памяти, не забывай сколько её на КПК, и что там нет подкачки. Правда в той-же 6.00 можно нормально работать мапирую большие файлы.
    Я просто не помню уже, сколько диабла просит памяти, так что это еще смотри.
     
  6. valerko

    valerko New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2008
    Сообщения:
    12
    yeaahh!!

    а если памяти хватать не будет закажу себе апгрейд ram, 130 метров даже с музыкой хватит
     
  7. Dr0ne

    Dr0ne New Member

    Публикаций:
    0
    Регистрация:
    22 фев 2009
    Сообщения:
    4
    ИМХО эмулятор х86 под ARM писать довольно малоперспективно (скорость будет понятно какая - мало того что эмуляция так еще и проц на здорово меньшей частоте).Но вообще, в природе встречается как минимум LibMPQ умеющий доставать файлы из архивов в формате MPQ (столь любимые Blizzard-ом).Это раз.Выпотрошив файлы думается не так уж сложно вкурить их формат и прикрутить его к подходящему открытому движку, коих - есть.Это может даже будет ползать с более приемлимой скоростью.Во всяком случае QII и Doom так вработают.Только это долго и очень геморройно... но так появилось немало игр использующих данные от оригинала но с своим собственным движком.
     
  8. valerko

    valerko New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2008
    Сообщения:
    12
    Ation, сенкс, я всетаки решился на это, сделал что-то типа среды для запуска приложения. Результаты есть. Серьезных проблем с памятью в WM 6 пока не было, но 320-метровый файл, забивается на первой минуте).
    Насчет скорости эмуляции - на данный момент требуется 4Х-10Х ускорение для нормальной игры. Но оптимизация еще будет.
     
  9. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    Как успехи?
     
  10. valerko

    valerko New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2008
    Сообщения:
    12
    Целый год потребовался для всего этого. Теперь работаю над DirectX, после чего можно будет портировать многое, что создавалось для виндов от 95-й до 2000-й. А с Д2 проблем много, работает, но медленно. Но оно и на современных компах иногда с тормозами идет.
     
  11. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    valerko
    Каким путем пошол? Как запустил?
     
  12. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    valerko
    Есть какие-то продвижения?