Re:Win3mu Part 1 –Why I’m writing a 16-bit Windows Emulator
by aruggirello on Monday September 19, 2016 @05:33AM
(#12530061)
BTW you can run 16-bit Windows apps in Wine under 64-bit Linux, provided your kernel version is <= 3.13, or >= 3.15 and you disable a security enhancement preventing 16-bit code execution by issuing (from root, possibly in your start-up scripts):
Re:Win3mu Part 1 –Why I’m writing a 16-bit Windows Emulator
by w0utert on Monday September 19, 2016 @06:24AM
(#12530228)
>> I love this, and think it would be great thing to have if MS don't shut it down.
I would be highly surprised if MS would even try to shut it down. On what basis would it not be allowed to write an emulator that translates old Windows API calls to new Windows API calls? And even if they could shut it down, what does Microsoft stand to gain by doing so?
Re:Win3mu Part 1 –Why I’m writing a 16-bit Windows Emulator
by Jaruzel on Monday September 19, 2016 @09:23AM
(#12531216)
MS have a vested interest in convincing people to migrate to newer Operating Systems and Applications. They could have supported the original WinSXS for 16/32bit thunking in Windows 8 -> 10, but chose not to.
Re:Win3mu Part 1 –Why I’m writing a 16-bit Windows Emulator
by viraptor on Monday September 19, 2016 @05:40AM
(#12530086)
Just curious, maybe someone has better idea if this is harder or easier than writing the whole CPU emulator. What about writing a compiler from 16b binary to 32b/64b binary? Specifically, translate the common calls to be as close to compiled native as possible. It seems to me that unless someone wrote some functions directly in asm, most code should be relatively easy to translate.
Pros: better performance, better memory usage, most instructions map 1:1, there's lots of extra registers for storing extra state required by the translation, easier debugging (you can compile each function separately and verify without running). Cons: harder debugging (at runtime), harder to test, properly translating memory segmentation, need to find a way to adjust all the offsets automatically, need to convert all the API function call conventions (can be quite tricky with variadic arguments).
Re:Win3mu Part 1 –Why I’m writing a 16-bit Windows Emulator
by pjc50 on Monday September 19, 2016 @05:56AM
(#12530130)
There's all sorts of weird stuff like 'thunks' that need to be taken into account. It would be faster but is considerably harder to write, and "faster" isn't much of a requirement for Win3 apps.
Whereas a straightforward emulator of the 16-bit set with the standard computed jump table is fairly easy. Mostly requires a lot of typing. If your interpreter fits in the i-cache it can even be faster.
Although apparently since WINE will run 16-bit code, it looks like preservation of the 16-bit world is a Solved Problem.
(I've long wanted a human-assisted decompiler for 16-bit DOS/Windows code, as a means of salvaging old games. For a few games people have done this by hand and built modernised versions with the bugs fixed.)
Re:Win3mu Part 1 –Why I’m writing a 16-bit Windows Emulator
by viraptor on Monday September 19, 2016 @06:13AM
(#12530188)
Ok, my (unmentioned) assumption was VC-created code with no added assembly. I realise that VB code for example would be stupid hard to convert this way.
I'm curious what do you mean by thunks in this case - specifically why would they be different than other code. Is it that the common code in original program may not be valid common code after translation?
Re:Win3mu Part 1 –Why I’m writing a 16-bit Windows Emulator
by pjc50 on Monday September 19, 2016 @08:51AM
(#12531004)
There was some use of self-modifying code, although I can't find exact references. It'll be on Raymond Chen's blog somewhere.
I don't think it should matter whether the original source was VC or not, and if you write a solution that does make it matter you'll find yourself tripped up a lot. (Your favourite game turns out to have been compiled with Watcom or Borland rather than VC, etc). Presumably if you could find the 16-bit VB interpreter bits and pieces you could run those too and run your VB app.
Re:Win3mu Part 1 –Why I’m writing a 16-bit Windows Emulator
by pjmlp on Monday September 19, 2016 @07:23AM
(#12530449)
Thunks were used to execute 32 applications in 16 bit mode via Win32s, and were also the way you would prepare callbacks to be exposed to Windows APIs.
Re:Win3mu Part 1 –Why I’m writing a 16-bit Windows Emulator
by Zardoz84 on Monday September 19, 2016 @02:17PM
(#12533452)
I need to see if DosEMU keeps working on an moderm Linux of 64 bit. It make circles around DosBox, because not emulates the CPU. Instead, it used the old good virtual x86 mode like the dos box of Windows 3.1/95/98 and XP
Re:Win3mu Part 1 –Why I’m writing a 16-bit Windows Emulator
by nandhp on Monday September 19, 2016 @10:39AM
(#12531749)
ReactOS has an NTVDM, however, which runs on 64-bit (it does processor emulation, like OP). However, it looks like it doesn't support Windows applications yet:
Re:Win3mu Part 1 –Why I’m writing a 16-bit Windows Emulator
by cool-RR on Monday September 19, 2016 @12:27PM
(#12532614)
"A couple of weeks ago I upgraded my partner Jen’s PC to 64-bit Windows. It all was going well until she went to play some Windows 3 card games that she enjoys when we realized that 16-bit programs don’t work on Windows x64. [...] it got me thinking… What would it take to write an emulator with just enough support to run these old games?"
However, for those people who only have an occasional use-case for keeping Win16 apps around, there's always the Win3.1x on DOSBox option.
For Example: https://joshmccarty.com/2013/08/run-windows-3-1-in-dosbox/
I would be highly surprised if MS would even try to shut it down. On what basis would it not be allowed to write an emulator that translates old Windows API calls to new Windows API calls? And even if they could shut it down, what does Microsoft stand to gain by doing so?
Pros: better performance, better memory usage, most instructions map 1:1, there's lots of extra registers for storing extra state required by the translation, easier debugging (you can compile each function separately and verify without running). Cons: harder debugging (at runtime), harder to test, properly translating memory segmentation, need to find a way to adjust all the offsets automatically, need to convert all the API function call conventions (can be quite tricky with variadic arguments).
Whereas a straightforward emulator of the 16-bit set with the standard computed jump table is fairly easy. Mostly requires a lot of typing. If your interpreter fits in the i-cache it can even be faster.
Although apparently since WINE will run 16-bit code, it looks like preservation of the 16-bit world is a Solved Problem.
(I've long wanted a human-assisted decompiler for 16-bit DOS/Windows code, as a means of salvaging old games. For a few games people have done this by hand and built modernised versions with the bugs fixed.)
I'm curious what do you mean by thunks in this case - specifically why would they be different than other code. Is it that the common code in original program may not be valid common code after translation?
I don't think it should matter whether the original source was VC or not, and if you write a solution that does make it matter you'll find yourself tripped up a lot. (Your favourite game turns out to have been compiled with Watcom or Borland rather than VC, etc). Presumably if you could find the 16-bit VB interpreter bits and pieces you could run those too and run your VB app.
I did run across this blog post http://discuss.joelonsoftware.com/default.asp?joel.3.607174...., which could be turned into a Win10 complaint with a simple search-and-replace.
Some compatibility craziness, that isn't quite relevant to our win16 emulation case: https://blogs.msdn.microsoft.com/oldnewthing/20071224-00/?p=...
If you're lucky (like me with EarthSiege 2), your game might also have a 32bit version, which you can run through IDA/Hexrays just fine.
(will try some of the suggestions in this comments thread too - thanks!)
An entirely different beast.
http://community.reactos.org/index.php/news/years-progress-n...
I can hear Jen rolling her eyes from here.