PowerPC MacOSX work...
Stefan Dösinger
stefandoesinger at gmx.at
Mon May 25 15:27:31 CDT 2009
Am Montag, 25. Mai 2009 20:33:28 schrieb mghughes at embarqmail.com:
> No No No People... Please read the messages before replying.
I did, but they were not clear to me. To be honest, I am still not sure what
you want to achieve.
> For the record... I am not looking to run another full out emulation.
> The best example of what I have in mind is what Apple did when they
> moved their processor base from 68K to PPC. And I am wondering if the
> same could be done for Wine. By the looks of things some of the
> framework to make that happen are already there in the form of thunk
> code... Apple used what they called trampolines iirc.
Do you mean running the Windows app in an emulator, Wine on the native CPU and
inserting trampolines or something else that switches in and out of the
emulator whenever there's a call from the app to Wine code, or from Wine code
back to the app?
Something like that exists - the Win16 support that switches the x86 CPU in 16
bit or 32 bit mode whenever the control is passed between Wine and the app.
It would probably be comparably easy to adopt this for Win16 on PPC.
There are a number of issues that make this much, much harder on Win32 vs PPC.
1) COM interfaces. They pass around function pointers, and there is no DLL
entry point for a COM method. You'd have to write a thunk DLL for each DLL
that uses COM objects.
You'll need a glue DLL that has some PPC code that knows how to convert
parameters and call into the emulator. And you'll need glue x86 code that
knows how to break out of the emulator and call the PPC side of the glue DLL.
2) Wine vs App call. If I understand things correctly, Wine never calls a
Win16 entry point in Wine. There are many cases where a Wine DLL calls
another Wine dll. E.g. WineD3D calls gdi32 and opengl32. You'll have to find
a way to figure out where a call came from, and more important, figure out
where a call is going to if you're calling a callback function.
3) API explosion: Back in the Win 3.1 day the Win16 API has been pretty
compact. Nowadays there are hundreds of DLLs that have hundreds to thousands
of functions or COM methods.
So running Win32 apps in an emulator on a PPC-native Wine is most likely
possible from a technical point of view, but it is a very complex job. In
terms of final usability the needed effort is probably spent more efficiently
by improving the emulator, just run Wine in the emulator and thunk the
comparably small Linux syscall interface(qemu already does that).
The advantages of Wine-level thunks is that the theoretical best performance
is better. This is probably true especially with D3D rendering. E.g. instead
of converting a A8R8G8B8 texture from big endian to little endian one might
just replace the pixelformat with B8G8R8A8. A setup like that could also
allow us to run 32 bit apps on Wine64, and end the "you guys need a proper
ABI" whine from distro maintainers.
It's an open source project, so everybody is free to take the code and give it
a try :-)
More information about the wine-devel
mailing list