Jump to content

Problems with "Why Don't Old Games Work on New Computers?" from Techquickie

 

I found the forum post at 1:12. It's this one: https://superuser.com/questions/961171/run-32bit-applications-on-windows-10-64-bit

 

If you scroll down, you'll see this:

Quote

First run (From the error message I guess it's a 16-bit program) 

vn0B4.jpg

The problem was 16 bit, not 32 bit. The user just didn't pay attention.

 

Also WoW64 is not an emulator. WoW64 simply has a 32 bit version of each DLL in Windows. 32 bit programs run natively on 64 bit Windows.

Emulation only happends on Itanium CPUs.

 

Drivers, on the other hand, are a different story. Drivers must be must be 64 bit.

 

The reason why old games don't work is a bit more complicated:

  • The developers sometimes use undocumented features in the API. Microsoft promises backwards compatibility only for features found in Microsoft's official documentation.
  • AMD and NVIDIA sometimes remove features from older versions of DirectX from their drivers, which is why Windows now has a full blown DirectX emulator just in case (but only works with DirectX 9 and newer, and with the DirectX 11 runtime and newer): https://en.wikipedia.org/wiki/Windows_Advanced_Rasterization_Platform
Link to comment
Share on other sites

Link to post
Share on other sites

There is a way to get 16-bit applications to run on 64-bit, I've had to do it a couple times but unfortunately I don't remember the process right now.

[Out-of-date] Want to learn how to make your own custom Windows 10 image?

 

Desktop: AMD R9 3900X | ASUS ROG Strix X570-F | Radeon RX 5700 XT | EVGA GTX 1080 SC | 32GB Trident Z Neo 3600MHz | 1TB 970 EVO | 256GB 840 EVO | 960GB Corsair Force LE | EVGA G2 850W | Phanteks P400S

Laptop: Intel M-5Y10c | Intel HD Graphics | 8GB RAM | 250GB Micron SSD | Asus UX305FA

Server 01: Intel Xeon D 1541 | ASRock Rack D1541D4I-2L2T | 32GB Hynix ECC DDR4 | 4x8TB Western Digital HDDs | 32TB Raw 16TB Usable

Server 02: Intel i7 7700K | Gigabye Z170N Gaming5 | 16GB Trident Z 3200MHz

Link to comment
Share on other sites

Link to post
Share on other sites

15 hours ago, 2FA said:

There is a way to get 16-bit applications to run on 64-bit

16 bit applications need NTVDM, which only exists on 32 bit Windows.

 

I suppose there is a way to get it from 32 bit Windows and put it on 64 bit Windows.

Link to comment
Share on other sites

Link to post
Share on other sites

On 4/15/2018 at 2:24 PM, 2FA said:

There is a way to get 16-bit applications to run on 64-bit, I've had to do it a couple times but unfortunately I don't remember the process right now.

DOSBox worked for me when I wanted to get Master of Orion II back up and running. (Since Wargaming bought the MoO franchise they have released it in a pre-packaged DOSBox shell.)

Link to comment
Share on other sites

Link to post
Share on other sites

imo easiest way to run old games is to create a win98 VM, or DOSBox if the game needs that system

ASUS X470-PRO • R7 1700 4GHz • Corsair H110i GT P/P • 2x MSI RX 480 8G • Corsair DP 2x8 @3466 • EVGA 750 G2 • Corsair 730T • Crucial MX500 250GB • WD 4TB

Link to comment
Share on other sites

Link to post
Share on other sites

On 4/15/2018 at 12:49 AM, alextulu said:

Also WoW64 is not an emulator. WoW64 simply has a 32 bit version of each DLL in Windows. 32 bit programs run natively on 64 bit Windows.

Microsoft's official documentation calls it an emulator (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384274(v=vs.85).aspx)

Quote

The WOW64 emulator runs in user mode. It provides an interface between the 32-bit version of Ntdll.dll and the kernel of the processor, and it intercepts kernel calls.

And in the loosest sense, an emulator provides an environment for software to run in another environment that isn't natively supported.

 

But otherwise the other points are good.

Link to comment
Share on other sites

Link to post
Share on other sites

On 4/17/2018 at 6:23 PM, M.Yurizaki said:

Microsoft's official documentation calls it an emulator (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384274(v=vs.85).aspx)

When running 32 bit x86 code on Itaniun or ARM CPUs, then it works like an emulator in the sense that it translates all 32 bit instructions into IA-64 (Itanum) or ARM instructions.

 

When running 32 bit x86 code on 64 bit x86 CPUs, then it just loads 32 bit DLLs and hadles the switching between 64 bit Mode and Compatibility Mode on the CPU:

 

https://en.wikipedia.org/wiki/X86-64#Operating_modes

 

Compatibility mode allows x86 CPUs to natively run 32 bit programs, when a 64 bit operating system is running.

 

16 bit programs are supported in compatibility mode, but only protected mode (meaning Windows programs, but not MS-DOS programs), but it's not supported by 64 bit Windows.

Link to comment
Share on other sites

Link to post
Share on other sites

On 4/17/2018 at 6:11 PM, Norseman4 said:

DOSBox worked for me

DOSBox only works with 16 bit MS-DOS programs.

 

But 16 bit isn't just MS-DOS. Windows 3.1 and older use 16 bit.

 

Also, older 32 bit programs have installers, that are 16 bit Windows programs.

 

16 bit Windows programs are not supported by DOSBox.

Link to comment
Share on other sites

Link to post
Share on other sites

3 hours ago, alextulu said:

When running 32 bit x86 code on Itaniun or ARM CPUs, then it works like an emulator in the sense that it translates all 32 bit instructions into IA-64 (Itanum) or ARM instructions.

If you strictly define an emulator to mean "runs an application in one hardware architecture for another", then that complicates things. DOSBox is considered an emulator, but it doesn't necessarily need to translate any code to another architecture since all x86-64 processors have x86 in them. Likewise, calling a GBA or Nintendo DS emulator on an Android device running an ARM chip also doesn't make sense considering both systems used ARM.

3 hours ago, alextulu said:

When running 32 bit x86 code on 64 bit x86 CPUs, then it just loads 32 bit DLLs and hadles the switching between 64 bit Mode and Compatibility Mode on the CPU:

 

https://en.wikipedia.org/wiki/X86-64#Operating_modes

 

Compatibility mode allows x86 CPUs to natively run 32 bit programs, when a 64 bit operating system is running.

The switching doesn't happen automatically on the CPU. The CPU doesn't know if it's running x86-64 or x86 code. It just knows it's trying to run some code. The OS has to tell the CPU to switch modes. (See https://www.codeproject.com/Articles/45788/The-Real-Protected-Long-mode-assembly-tutorial-for) The problem though is that the core OS components in 64-bit Windows are all 64-bit, and 32-bit programs can't access them directly. You can't mix a 32-bit environment with 64-bit libraries or vice versa. WOW64 has to intercept 32-bit system calls and translate them into 64-bit ones so the 32-bit program can use the OS:

Quote

Instead of using the x86 system-service call sequence, 32-bit binaries that make system calls are rebuilt to use a custom calling sequence. This calling sequence is inexpensive for WOW64 to intercept because it remains entirely in user mode. When the custom calling sequence is detected, the WOW64 CPU transitions back to native 64-bit mode and calls into Wow64.dll. Thunking is done in user mode to reduce the impact on the 64-bit kernel and to reduce the risk of a bug in the thunk that might cause a kernel-mode crash, data corruption, or a security hole. The thunks extract arguments from the 32-bit stack, extend them to 64 bits, then make the native system call.

Linux has the same issue more or less, you can't run 32-bit x86 programs in a 64-bit x86-64 Linux environment unless you have the 32-bit libraries installed (https://askubuntu.com/questions/454253/how-to-run-32-bit-app-in-ubuntu-64-bit)

 

3 hours ago, alextulu said:

16 bit programs are supported in compatibility mode, but only protected mode (meaning Windows programs, but not MS-DOS programs), but it's not supported by 64 bit Windows.

MS-DOS can run in protected mode. It's been that way since whatever version came out in 1989 (https://en.wikipedia.org/wiki/DOS_Protected_Mode_Interface)

Link to comment
Share on other sites

Link to post
Share on other sites

On 4/21/2018 at 4:29 PM, M.Yurizaki said:

DOSBox is considered an emulator, but it doesn't necessarily need to translate any code to another architecture since all x86-64 processors have x86 in them.

If the DOS program uses real mode, then it requires virtual 8086 mode, which isn't supported when running a 64 bit OS.

 

In that case, it does translate code.

 

On 4/21/2018 at 4:29 PM, M.Yurizaki said:

The OS has to tell the CPU to switch modes

That's what I meant by "hadles the switching between 64 bit Mode and Compatibility Mode".

 

On 4/21/2018 at 4:29 PM, M.Yurizaki said:

MS-DOS can run in protected mode

Forgot about that. On the other hand, there are no real mode Windows programs, so I was half right.

Link to comment
Share on other sites

Link to post
Share on other sites

9 minutes ago, alextulu said:

If the DOS program uses real mode, then it requires virtual 8086 mode, which isn't supported when running a 64 bit OS.

 

In that case, it does translate code.

If that's what you call an emulator, then that's what WOW64 is doing. It has to translate the 32-bit system calls into 64-bit ones because 64-bit Windows does not have any 32-bit system calls.

Quote

Forgot about that. On the other hand, there are no real mode Windows programs, so I was half right.

Windows until after 3.0 could run on an 8088, so there had to be real-mode support for those applications.

 

Anyway, LMG probably called WOW64 an emulator because the official documentation says its an emulator.

Link to comment
Share on other sites

Link to post
Share on other sites

On 4/15/2018 at 12:16 PM, wasab said:

Another example of inaccuracies in their video :/ 

Yes it is sad to see that happening.

 

It is a phenomenon of the fake news syndrome where they scrape info from other people scraping info.

Link to comment
Share on other sites

Link to post
Share on other sites

On 4/21/2018 at 10:36 PM, alextulu said:

DOSBox only works with 16 bit MS-DOS programs.

 

But 16 bit isn't just MS-DOS. Windows 3.1 and older use 16 bit.

 

Also, older 32 bit programs have installers, that are 16 bit Windows programs.

 

16 bit Windows programs are not supported by DOSBox.

Thats true, you can also get 32-bit installers for some of these titles like the Star-Wars games. 

Link to comment
Share on other sites

Link to post
Share on other sites

15 hours ago, M.Yurizaki said:

If that's what you call an emulator, then that's what WOW64 is doing. It has to translate the 32-bit system calls into 64-bit ones because 64-bit Windows does not have any 32-bit system calls.

It only translates system calls and nothing else. Therefore, the performance is virtually the same.

 

When DOSBox runs a real mode program on a 64 bit OS, then it translates everything, not just system calls.

 

In this case, a lot more CPU power is required, compared with running natively, but in doesn't matter because DOS programs are so old, that modern CPUs don't have a problem.

 

What I'm trying to say, is that the definition on an emulator is too broad.

Link to comment
Share on other sites

Link to post
Share on other sites

16 bit programs used to run under Windows 7 32bit if I remember correctly-at least some of them did.

"We also blind small animals with cosmetics.
We do not sell cosmetics. We just blind animals."

 

"Please don't mistake us for Equifax. Those fuckers are evil"

 

This PSA brought to you by Equifacks.
PMSL

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×