Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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.


share|improve this question
up vote 7 down vote accepted

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

share|improve this answer
thanks, i thought that would be the case but wanted to make sure – Daniel Wardin Apr 21 '13 at 19:04
In this case recompiling would most probably involve recoding - adjusting api calls and handles it's not just a matter of having larger variables – M.Bennett Apr 21 '13 at 19:11
Question wasn't that clear about that but while recompiling would be the only way to do this, the issue here isn't just architecture, its variable types. Even if he did recompile it, its still a 'short' integer as opposed to a standard integer or a long integer. – Journeyman Geek Apr 22 '13 at 1:18

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.

share|improve this answer
DosBox is a good program that fuifills that need. It will let you run 16bit games on a modern 64bit system. – Scott Chamberlain Apr 22 '13 at 0:47

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

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .