Rick Borup
To make sure this solution works before making a permanent change, you can set the processor affinity at runtime by locating the Windows virtual DOS machine ntvdm.exe in Task Manager while the DOS app is running, Right-click and choose Set Affinity, then un-mark either CPU 0 or CPU 1. This will persist until you terminate the app. If the app runs without freezing after you do this then this is probably the solution you need and you can proceed to make the permanent change as outlined below.
To set the processor affinity permanently you need to use a utility called imagecfg to modify the Windows virtual DOS machine ntvdm.exe which is located in the %system% folder (e.g. system32). When I was researching this problem I found several references to imagecfg on the Web, but to give credit where credit is due the one that was most helpful to me was Mark Wilson's blog entry at http://www.markwilson.co.uk/blog/2005/01/troubleshooting-ms-dos-application.htm.
First you have to download a utility called imagecfg.exe. It's evidently a Microsoft utility, but I could not find it for download on the MS site. However I did find it at http://www.robpol86.com/Pages/imagecfg.php. This appears to be the legitimate tool and it worked for me, but as with any download, use at your own risk. A search will turn up other download sources for this utility, too.
What we did was to run imagecfg.exe with the -u parameter to change ntvdm.exe to uni-processor mode, as in imagecfg.exe -u ntvdm.exe. Note that this modifies the executable file ntvdm.exe, and as Mark points out in his blog post, Windows File Protection will complain about this and will attempt to restore the original file from the dll cache, so you have to change it there also. Being cautious, I started out by making a copy of ntvdm.exe in a temporary folder, running imagecfg on that, then copying it to the dll cache and the system folder.
We did not find it necessary to run imagecfg with the -a option to set affinity to a particular processor. In our case running it with -u to set uni-processor mode was sufficient. In other words, it did not matter which of the two processors ntvdm.exe uses as long as it uses only one.
Hope this was clear enough. I would be interested in knowing if this solves your problem.
-Rick