Still, you must be aware of a few thing.
- Wine is not 100% byte order clean.
Alpha seems to be "correct" endian ;)
True. But what I meant was since the size of integer changes from 32 to 64 bits, any code that rely on the exact layout of memory might have problems becuase of this.
This is not the same as the problem below where you have pointer truncation issues or because code expects that
DWORD x; int y; x = y;
will work correcly.
But OK. I shold probably explained better what I meant.
Anyway all code should be byte order clean regardless and making it so might solve some 32/64 bit byte layout problems as well.
When you change to code for Alpha you might as well change it to work with big endian platforms as well.
- Wine is not 64 bit clean. This is a little worse especially since Win32 often stores pointers in 32 bit integers and this problem really can't be solved in a good way, since extending the size of the storage is not possible at least not if you want to be able to implement a x86 emulator in the future. However I guess it will be possible to force all memory usage to be in the lower 32 bits of memory to be able to cope with truncated pointers.
Digital has(d) a lot of very good emulation technologies - FX!32 which let to run win32 386 apps on NT Alpha with almost full speed, em86 which runs 386 Linux apps on Linux Alpha (http://www.cs.rose-hulman.edu/~donaldlf/em86/index.html), x86emu which is used in XFree86 and MILO to initialize graphic card's 386 BIOS.
True, but Wine might need something a little more than that and FX!32 doesn't have souce code available AFAIK.
Of course that is perhaps not a problem for an internal Digital project. :-)
Anyway, that is a later problem. Just making Winelib work might take some effort.