The big speech... here it comes. Skip it if you don't want to read about it.
Win95 does all of its hardware control, its network control, its drivers, its protocols, whatever, in '386 protected mode, so none of its software really needs to run in conventional memory, or in upper memory. You get minimum 604 KB free conventional memory, no matter what hardware or drivers for Win95 you have loaded.
In addition to this, all of the MS-DOS software interrupts, hardware interrupts, function hooks, etc operate in protected mode also. This means that DOS programs can still work, even though there aren't any DOS drivers handling the hooks. Win95 only provides a basic real mode driver set for basic compatibility (HIMEM, SETVER, IFSHLP, COMMAND); everything else runs outside of the DOS session. The protected mode hooks are re-entrant, so multiple DOS sessions can use them. They are also faster in many cases; CD-ROM performance greatly improves, for example.
Win95 will also virtualize I/O spaces, if you enable that feature in a DOS program's properties. This is similar to what Windows NT does, but not as robust. This will prevent the programs from accessing the hardware directly. If a "protected" DOS program crashes, it won't take the rest of the system with it. "Protection" will, however, add to the CPU overhead and may cause a program not to run at all, which is why it's an option.
NOTE: Don't confuse this direct hardware access with the DirectX API; DirectX programs run in protected Win32 sessions by design, and access the hardware through an absolute minimal API. DirectX has nothing to do with DOS programs accessing hardware directly.
So, with all this benefit, and not eating any conventional memory and still providing a nice compatible DOS box, you should run your DOS games in DOS sessions in Win95.
So, hide or delete your CONFIG.SYS, remove all TSRs in AUTOEXEC.BAT, get Win95 drivers for all your hardware, and read on.
You can maximize a game's performance in a DOS session by fine tuning its session settings. Right-click on the executable that runs the game (batch file, COM file, EXE file, whatever), and select Properties. Hit the "Program" tab and, if necessary, change the command line used to run the game. Insert any parameters it needs, change the working directory, whatever. Hit the "Advanced" button and quickly see the "Prevent MS-DOS programs from detecting Windows" switch. If a game claims it can't run under Windows, turn on this switch. Now the game will think it's running in DOS. Hah, sucker! Ignore the rest of this window for now; hopefully we won't have to resort to the rest of the stuff here.
Have a look at the other tabs; I'll cover them each in turn with each question.
Win95 will save the changes you make here in a PIF file, or a "Shortcut to MS-DOS Program". Whenever you bring up properties for the program, it will bring up its PIF file.
I had a whole e-mail quoted to me regarding this... here it is in its entirety:
From: Paul Grillo <PGrillo@Relay.com> Subject: Re: your FAQ Thanks for the tip on the PIF fix. Attached is a note confirming that the problem stems from directx3, and a kind of rude fix to it. In case you're interested. I found the solution to this problem. (thanks to Stefano email@example.com) > ------------------------------------------------------------------ > Sure, no problem. It's a rather odd fix, but it works, got it from > some DirectX dude at Microsoft. Find the file VJOYD.VXD from DirectX2 > or your original Win95 disks/CD/whatever and overwrite the one that > DirectX3 installs. This will fix the problem. The Microsoft guy says > you sacrifice some accuracy with the joystick, but I don't see any > difference. > ------------------------------------------------------------------ To extract VJOYD.VXD from Win95 cd use command "extract.exe /a /l c:\windows\system win95_02.cab vjoyd.vxd" (I put this solution on the news writing an answer to my question, but in a few days that answer has been expired) REMEMBER TO REBOOT AFTER SUBSTITUTING THAT FILE. Bye
Basically, the VJOYD.VXD from DirectX 3 is broken. When you replace it with the VJOYD from DirectX 2 or earlier, or even with the original Win95 version, Win95 will let you run DOS games in a DOS session again. Strange.
There's no such thing as "upper memory" under Win95, and no need to worry about it either, if you have Win95 drivers for all your stuff and run your games under Win95.
I cover how to use upper memory in Single Mode MS-DOS later.
In the program's properties, hit the Memory tab. You'll notice the defaults for these settings is "Auto"; this means Win95 will allocate memory as needed for this program to run. This can cause a lot of extra disk swapping, so you should find out what the game needs (Check its manual) and set the EMS and XMS values to match.
Example 1: TIE Fighter (TM) by LucasArts: TIE requires 2048 KB of EMS memory (Expanded memory), so set the EMS value to 2048 KB, and set XMS to None.
Example 2: The Seventh Guest (TM) by Virgin/Trilobyte: T7G needs 4096 KB of XMS memory (Extended memory), so set its XMS setting to 4096 and its EMS setting to None.
Example 3: DOOM (TM) by id Software: DOOM doesn't use EMS or XMS memory, so set both of these values to None. Leave the DPMI (DOS protected mode interface) memory on Auto.
Notice that all games use one kind of extra memory or another, but not two at once. You can always set one and turn the other off. This will ease Win95's job of guessing what the game needs. Of course, if a game runs completely in conventional memory, turn off everything BUT conventional memory.
Oh yeah, that "Protected" switch is in here; turn it on if you think this program causes Win95 to crash. That switch can make LINKS 386 operate in a DOS session where it otherwise wouldn't, for example.
If a program doesn't claim to use XMS or EMS memory, chances are it's a protected mode program. DOOM by id and Descent (TM) by InterPlay are two such programs.
In this program's Memory tab, turn off EMS and XMS memory, and set DPMI to whatever the game requires, or leave it on Auto. Auto mode will make Win95 allocate more RAM to the game as needed, but it will cause extra disk swapping. Set this to the game's recommended value, no higher than your total memory actually installed in the computer.
If the game does its own disk swapping (like Descent does), fix the DPMI memory value to the game's recommended value and don't use Auto. There's no point in having Win95 and the game do swapping at the same time.
Some DPMI games do bizarre stuff and may crash Win95 the first time running. If so, turn on the "Protected" switch just below the conventional memory setting. This will virtualize most of the I/O space in that game's DOS session. Turning on "Prevent DOS programs from detecting Windows" might help too. If the game does hardware detection, try by-passing it and specifying your video and sound card properties in the game manually. Descent has troubles detecting sound cards in a DOS session, for example.
Breidavick Gistiheimili told me that Strike Commander wouldn't run in a DOS Session because it couldn't communicate with the "EMS Memory Manager". In reality, SC requires VCPI services. Win95 DOS sessions don't support VCPI unfortunately. EMM386 normally provides VCPI services in real mode.
If you run a game in a DOS session and get a mysterious message to the effect that it wants EMM386, it's most likely that it wants VCPI memory. You will have to resort to the Single mode DOS techniques below to make the game run.
The first time you try running a "standard" DOS game, it will try to run in a window on your desktop. Type ALT-ENTER to switch it to a full screen.
To fix that setting in place, bring up the program's properties, hit the Screen tab, and set the screen usage to Full Screen. There are other screen controls here:
"Fast ROM Emulation" works if the video driver emulates its BIOS in protected mode. Newest drivers from Cirrus Logic, for example, emulate their BIOSes in 32-bit DLLs. Try turning it off if you can't get VESA games working, though a properly written Win95 video driver should emulate VESA video modes in protected mode.
"Dynamic memory allocation" specifies that Win95 will grab system memory as needed to update the game's display. Try turning this off if the display jitters, or the hard drive goes crazy as the display updates itself.
DOOM will freeze on occasion, precisely four times, then continue on normally.
John Goulden enlightened me on this behaviour. I used to think it had something to do with the VGA BIOS emulation or such stuff, but when I saw games like System Shock still animating some parts while freezing during game play, I thought it had to be something else. John says:
This will also happen if network drivers are loaded but no network is connected. If the 'stutter' occurs four times in rapid succession, at intervals of precisely ten minutes, it is very likely Windows 95 polling for the nonexistent network. Remove the unneeded drivers and the problem goes away.
I wondered why this didn't happen on a non-networked machine.
Specifically, it seems to happen on systems that run Client for NetWare. The pausing might come from the client trying to reconnect to disconnected servers, or otherwise polling for a nonexistent network or server. Likewise, this pausing won't happen if you only have the Dial-up Adapter and TCP/IP protocol (No clients or services).
This problem only seems to happen with DPMI games; particularly those that use the DOS4GW extender.
A real mode memory manager will interfere with Win95's protected mode memory management. If you include NOEMS in CONFIG.SYS, for example, no program in a DOS session can access EMS memory. Delete or hide your CONFIG.SYS and let Win95 provide EMS memory in DOS sessions.
For those of you who paid money for Quarterdeck's QEMM 8.0: SUCKERS! Take it back and get your money back!
Most of the net games use IPX protocol to communicate between several game computers on the network. Microsoft's "IPX/SPX Compatible" protocol works with these games.
First, install your network card and load a Win95 driver for it. Then add IPX/SPX Protocol. If all you're doing is playing network games you can remove all other network components, such as Clients. If necessary, read up on How to set up a network card.
Then run the game in its DOS session and set it up to use the network. It should find the hooks needed to use IPX and play normally, as though you loaded an IPX.COM driver. If not, complain to the game maker.
A handful of old network games use NetBIOS to work with more networks. In this case you can use any network protocol, such as NetBEUI, to link the machines together. All the real mode NetBIOS hooks are there as well. To use both IPX and NetBIOS games, use the IPX/SPX protocol and turn on "I want to run NetBIOS over IPX" in IPX/SPX Properties.
Modem games work by using the COM devices from DOS, so you don't need to use Dial-up Networking just to play a game over the modem. If, however, the game doesn't support modeming but DOES support IPX networking, you could try using IPX over the dial-up adapter, and rig one computer as a dial-up server. This is a bit extreme, as IPX over PPP is quite slow.
I thought I answered this question at the top of this section! So you can save yourself the hassles of multi-config, loading crap high, running out of conventional memory, boot disks, whatever!
Win95 can do DOS's jobs a lot quicker and with a lot less overhead. Yes, everything works. Yes, CD-ROM drives work. Yes, network cards work. Yes, you can do EMS/XMS/DPMI. Yes, sound cards work. Get a sound card that has Win95 drivers for it. Yes, visit Advanced Gravis for a Win95 driver. Or just trade your hardware in for hardware with Win95 support.
OK ok ok ok... so you can't live without playing this game (Star Trek: A Final Unity (TM) by Spectrum Holobyte falls into this category) and you can't run it in a DOS session. Or maybe you can; bring up the program's properties, hit the Program tab, hit "Advanced", and hit "Prevent DOS programs from detecting Windows". This'll make the "smarty" programs run in a DOS session.
If that didn't work, read on.
With this setup, you can specify a DOS configuration just for this program without polluting your Win95 configuration. You will have to load all the real mode components necessary to make your hardware work, including real mode sound card and CD-ROM drivers. Net cards I'll cover later.
Some useful stuff to include in these files are:
Keep in mind, that "MS-DOS Mode", or "Single Mode MS-DOS" is MS-DOS through and through, except for the LOCK and the direct disk access inhibitor. You can use all the MS-DOS memory management techniques you learned back in DOS 5.0. You might also want to disable the DriveSpace Driver if you use disk compression, and you can't get enough conventional memory. You could also try running MEMMAKER, if you're really desperate, in this configuration; add the old DOS utilities from OTHER\OLDMSDOS, then while you're in a special DOS configuration, run MEMMAKER. As long as you keep Win95 booting in this mode (where it says "Win95 is now starting your MS-DOS based program..."); the changes that MEMMAKER makes will only affect this particular configuration; it won't affect your normal Win95 configuration.
This above technique replaces boot disks and Multi-Boot entirely! If you use PIF files that specify MS-DOS mode, you can throw away all your boot disks and your multi-boot CONFIG.SYS file. You can even set up multiple PIFs for the same program; re-name the PIF file that the Properties sheet made up, and bring up Properties for the program again; it will build a new PIF file.
Another cool trick is to look for an "Exit to DOS" file in your Win95 directory, bring up its properties, and set it up to use a new MS-DOS configuration. This way, whenever you "Restart computer in MS-DOS mode", you will run this configuration. Real handy for running a bunch of games without having to make a special configuration for each. In this mode, type EXIT or WIN to return to Win95. You can also edit the custom startup files within DOS mode; when Win95 finally re-starts, it will update the .PIF file with the changes you made.
Network Setup not only installs protected mode drivers for your card; it also installs NDIS 2.0 real mode components specifically for MS-DOS mode. You will need to install a Win95 net card driver and IPX/SPX Protocol for this to work.
In the special AUTOEXEC.BAT you make for MS-DOS mode games, include:
NET START NWLINK
This will load a real mode protocol manager, net card driver, and Microsoft's IPX compatible protocol. You can go a step further and type NET START NWREDIR to load a NETX compatible client for NetWare, if you need to get to your games stored on the NetWare server, and you installed Microsoft's Client for NetWare. These components will try to load high if you have upper memory available. Put this at the beginning of the special AUTOEXEC.BAT, to improve upper memory usage.
If you use a PnP sound card and you want to use Single Mode DOS to run those pesky games, you may need to add this line in your special config.sys:
This line performs the same PnP magic that Win95 does when it normally starts. You MUST include it BEFORE EMM386.EXE so it doesn't interfere with EMS memory and upper memory. Don't worry; it doesn't stay in memory so no need to load it high.
However, systems with PnP BIOSes may NOT need this. Depending on how well your PnP BIOS configures your cards, you can get away with just loading your normal sound card drivers (SB16.SYS and CTMMSYS.SYS for example) and it will use the I/O, IRQ, and DMA settings you chose in Win95's Device Manager. This works because the BIOS and Win95 store this config info in the NVRAM on your system board.
So, for PnP sound cards in Single mode DOS, you CAN use DWMCFG but load it BEFORE HIMEM.SYS and EMM386.EXE. Use it only if you HAVE to; Non-PnP systems will need it, but most PnP systems will not.