2

Is there any way to convert a 16bit DOS app to a 32bit app so that I'm not constrained by the 16383 limit? Or maybe there is a way of running a 16bit app as a 32bit app without converting it?

I don't have the source code to the program so can't rebuild it in any way.

Thanks

3 Answers3

7

you can't convert them. Only if you have source you could recompile them as 32bit.

5

What services like Good Old Games do in order to make really old games (ex 16 bit dos) work on modern systems is to package the dos executable and a virtual machine together so that the game thinks it's running in DOS while the VM translates all the low level hardware interaction that DOS games do into standard Windows/Mac/Linux operating system commands.

You can do similar to run legacy applications on modern hardware, making the new OS think it's running a 32bit application; but all the old 16bit system limitations will remain.

2

I'm assuming by the 16383 limit, you mean the maximum integer size of a variable that a 16 bit software can handle (and its been so long since I did this that I had to look it up). There's no real way to do this without changing the variable type - in this case short integers to long integers.

Lets assume we have a magical software that lets us run a 16 bit software with all the attributes of a 32 or 64 bit system - you'd be able to access more memory, but this is still a 16 bit, short integer variable. You could also speed things up by running multiple instances. One doesn't simply turn a short integer into a long integer by changing the architecture however.

There is absolutely no way, without hacking at the source code (well nearly) to fix this. I guess, if you were a 1337 dissassembling ninja, you might be able to run a dissembler, work out where this variable is and convert it to a long integer. However, at this point you're better off working out what the logic of the software is, and rewriting it.

Sources: C++ header documentation

Journeyman Geek
  • 133,878