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.



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

  • thanks, i thought that would be the case but wanted to make sure – Daniel Wardin Apr 21 '13 at 19:04
  • 4
    In this case recompiling would most probably involve recoding - adjusting api calls and handles etc....so it's not just a matter of having larger variables – M.Bennett Apr 21 '13 at 19:11
  • 1
    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.

  • 2
    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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.