ощутимого прогресса в этом направлении насколько я знаю нет. Есть какие-то эмуляторы процессоров 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, потом подправить и собрать заново. Попробавл это сделать: впринципе возможно, но много времени уйдет на дебаг. Так что решил пока подождать до выхода новых версии декомпилеров. -дизассемблировать, и далее аналогично пред. пункту. Думаю какие-то преимущества тут есть.. Но незнаю как потом можно будет собрать полученный код для другого проца, да так чтобы с оффсетами и с памятью проблем не было. ----------------------------------------------------- Помогите выбрать что лучше на ваш взгляд
Имхо это сильно затратно, и проще написать саму программу заново. Эмулятор винды (импорт ведь из виндовых библиотек) + эмулятор х86, да и DirectX в СЕ тот еще... Правда дизасмит ь и собирать заново еще хуже. А что за программа? Может ей можно найти альтернативу среди готовых, или открытых программ, тогда её хоть можно будет попробовать портировать.
программа такая, что с нуля ее делать точно сложнее будет. http://wasm.ru/forum/viewtopic.php?id=29645
да, придется заменить вызовы нескольких функций.. Код (Text): 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, других сложно-эмулируемых инструкций типа прерываний, как в досе, нет. С памятью вот только придется повозиться.
Ну с памятью может и проще будет, если под СЕ 6.00 делать, они ведь там сделали адресное пространство 4 Гб. Есть правда оговорки, но думаю это несущественно. Кстати, насчет памяти, не забывай сколько её на КПК, и что там нет подкачки. Правда в той-же 6.00 можно нормально работать мапирую большие файлы. Я просто не помню уже, сколько диабла просит памяти, так что это еще смотри.
ИМХО эмулятор х86 под ARM писать довольно малоперспективно (скорость будет понятно какая - мало того что эмуляция так еще и проц на здорово меньшей частоте).Но вообще, в природе встречается как минимум LibMPQ умеющий доставать файлы из архивов в формате MPQ (столь любимые Blizzard-ом).Это раз.Выпотрошив файлы думается не так уж сложно вкурить их формат и прикрутить его к подходящему открытому движку, коих - есть.Это может даже будет ползать с более приемлимой скоростью.Во всяком случае QII и Doom так вработают.Только это долго и очень геморройно... но так появилось немало игр использующих данные от оригинала но с своим собственным движком.
Ation, сенкс, я всетаки решился на это, сделал что-то типа среды для запуска приложения. Результаты есть. Серьезных проблем с памятью в WM 6 пока не было, но 320-метровый файл, забивается на первой минуте). Насчет скорости эмуляции - на данный момент требуется 4Х-10Х ускорение для нормальной игры. Но оптимизация еще будет.
Целый год потребовался для всего этого. Теперь работаю над DirectX, после чего можно будет портировать многое, что создавалось для виндов от 95-й до 2000-й. А с Д2 проблем много, работает, но медленно. Но оно и на современных компах иногда с тормозами идет.