Creating a DOS Gaming PC - Part 2
In Part 1 I put the hardware for my new DOS gaming PC together. In part 2 I will review the system's performance range, install the OS and a few test games, and prepare the startup process to make it a doddle to just boot and be gaming in seconds. This last bit will involve setting up the system speed perfect for each game as well as audio and optical drive speed to make a harmonious gaming session possible.
Setting up the System's Performance Range
The Gigabyte GA-5AX uses the excellent ALI (Acer Labs) Aladdin V chipset, which is known for its overclocking options as well as overall performance. In this case, we're doing to opposite - tweaking things here and there to make this a middle-of-the-road PC according to the games I want to play. I definitely want to be able to play Wing Commander 1, meaning the system has to be able to run as slow as a 386DX-33, since this title is very speed-sensitive. At the other end of the scale we have Half-Life which is demanding for a box like this.
Again, I take the advice of Phil @ PhilsComputerLab, who did a video on his 136-in-1 DOS Gaming PC. This uses a utility called SetMul, which is designed for AMD K6-2/+ and K6-III/+ processors but also works with Intel Pentium MMX CPUs. For both AMD and Intel chips it can be used to enable and disable the entire L1 cache (both data and code). On the AMD chips it can also change the clock multiplier. For Intel Pentium MMX chips it can't do that, but it can enable or disable some of the internal MMX flags - Data Cache, Code Cache, Branch Prediction, and V-Pipeline. This, according to Phil gives you more control over a range of speeds than you get with an AMD K6-2 or K6-III (and + variants).
Using Phil's benchmark sheet on my Retro Gaming PC, I got the following range of performance values:
Motherboard Cache ON
SetMul | Speed | Batch File |
---|---|---|
Full Speed | 170.6 | fastest.bat |
BPD VPD | 138.1 | fast.bat |
DCD | 65.3 | medhigh.bat |
CCD | 61.9 | medium.bat |
CCD BPD VPD | 50.9 | medslow.bat |
CCD DCD | 38.1 | slow.bat |
CCD DCD BPD VPD | 33.3 | slowest.bat |
Motherboard Cache OFF
SetMul | Speed | Batch File |
---|---|---|
Full Speed | 164.2 | fastest.bat |
BPD VPD | 134.0 | fast.bat |
DCD | 33.7 | medhigh.bat |
CCD | 32.3 | medium.bat |
CCD BPD VPD | 26.6 | medslow.bat |
CCD DCD | 15.6 | slow.bat |
CCD DCD BPD VPD | 13.7 | slowest.bat |
Judging by these numbers, with the L2 cache enabled, we have a hole in the Retro Gaming PC's capabilities where it won't be able to run anywhere between a Pentium 100 up to a Pentium 166 MMX (so impacts games that came out mid '96 to mid '97).
With the L2 cache disabled this hole is even bigger - I cannot set the system to behave anywhere from a 486DX4/120 up to a Pentium 166 MMX (so impacts games that came out late '94 to mid '97). Just something to bear in mind - most games are not speed-sensitive, so having it run too fast is usually not a problem.
Running a series of synthetic benchmark programs, slowest.bat gives us these results:
NSSI 0.60.45 = L2 Cache On: 18736 Dhrystones (about the same as an i486DX-40)
L2 Cache Off: 8882 Dhrystones (about a 30 MHz 386DX)
Norton SI 8.0 =
L2 Cache On: 56.7 (slightly faster than an i486SX-25)
L2 Cache Off: 24.4 (a slow 386)
SpeedSys v4.78 =
L2 Cache On: 30.17 (about an 80 MHz 486DX)
L2 Cache Off: 12.83 (i486DX-33)
TopBench 0.38a = L2 Cache On: 200 (Cyrix Dx486DX2-80)
L2 Cache Off: 104 (AMD Am386DX-40)
So some benchmarks appear to have this computer running at 386 speeds while others put it at middle-486 territory. I guess the acid test is to play the games and see if it's slow enough. If not, there's always two more things I can do: (1) swap out the 'fast' STB Velocity 128 graphics card for something older and slower, and (2) play with the BIOS memory timings to try to give the system a bottleneck.
Installing the Operating Systems
I configure the BIOS so it can detect my hard disks (I've added an 8 GB CF card as a second drive):
As always, Award's "Auto-Detect Hard Disk" option worked a treat. For these large drives, *always* choose the LBA option if you're shown more than one, e.g. LBA, CHS or LARGE.
Once this was setup I booted from the A: drive (MS-DOS floppy disk image 1) again, and ran FDISK.EXE to configure the partitions.
Of the maximum that DOS can 'see', which is 8 GB, I setup 4 partitions of roughly 2 GB each. The first needs to be the 'Primary' DOS partition, and the other three must live as 'Logical Drives' in the 'Extended' DOS partition.
Once this was setup and I rebooted once more using the DOS boot floppy, I formatted all the drives using FORMAT.EXE, ensuring the C: drive was bootable using FORMAT C: /s
I then installed MS-DOS 6.22 from the floppy disk images - so far so good.
The Boot Menu
For the past year or so, I've been using Phil's [you guessed it] "DOS Startup Pack" which conveniently configures your CONFIG.SYS and AUTOEXEC.BAT files to give an array of memory, mouse driver and CD-ROM options to make life easier when wishing to play a specific game. While this is great, I'm going to pare it down to just a few, where the first ones set me up for running DOS games, and the last one will simply run Windows 98 SE (once I've installed it):
The top one that came out badly in the image is DOS - Expanded memory + Mouse + CD-ROM
Note that my startup options also include 'DOS - USB'. This uses the AHCI driver to allow USB mass storage devices in DOS. See my page here for details on setting that up.
I then moved to installing Windows 98 which I did from the original CD-ROM I have. This detects that you have a previous operating system installed, and since Win98 automatically comes with a "boot loader" it adds an extra boot option to include 'Boot Previous Operating System'.
After Windows 98 SE installation has been completed, I install the Windows driver for the Gigabyte motherboard, STB Velocity 128 driver, and USB driver.
My ideal scenario is to have DOS as the default and primary operating system, with Windows 98 as the secondary option where if I need it I'll simply run "win" to go into Windows. Unfortunately, you cannot have DOS 6.22 as the 'primary' boot option because it uses the older FAT16 format, whereas Windows 98 uses FAT32 - if you were somehow to boot into DOS 6.22 and try to access the D: drive that Windows is installed on, you'd get a "Drive not Ready" error, since DOS doesn't know how to interpret the D: drive's FAT32 partition.
So when you install Windows, it either formats your DOS 6.22 partition to be FAT32 (overwriting it at your request), or you install to a second drive letter, e.g. D:, and it formats that as FAT32, keeping your C: drive as FAT16. Note that installing Windows 98 on a drive that has an existing operating system overwrites the MBR (Master Boot Record) on the primary partition (in my case, C:) in order to give you a 'multi-boot' capability with Windows 98 as the default option, but also that 'Boot Previous Operating System' choice as well.
Anyway, I will do what I can to make DOS the default boot option (with all my nice boot menu choices for XMS, EMS, etc...
I first run the attrib command to be able to edit the file, MSDOS.SYS - this is a system file, it's flagged and hidden and read-only, so this is necessary to be able to edit it:
attrib -s -h -r c:\msdos.sys
I then run edit c:\msdos.sys, and set "BootGUI" to 0 to ensure Windows will not start automatically. I also add the line "Logo=0" in the [Options] section, as I don't want the Windows 98 logo to appear when I boot the computer.
The Games
OK, I'm at the point where it's time to get some games on this box to test out and see what else needs to be done....
I have started with a bunch of older titles I love which for the most part require a very slow PC to run. These include:
- Space Quest 1: The Sarien Encounter
- King's Quest III
- 4D Sports Boxing
- Wing Commander
- Jones in the Fast Lane
I'm looking at the original box to determine what the minimum system requirements are, and then making a judgment call as to what a 'recommended system' would look like. For some of these they simply may not run well even on the slowest setting - Sierra games especially have issues initialising the audio hardware if the game is run on a machine that is too fast, though in my experience disabling L1 and L2 caches on anything below a 400 MHz CPU tends to do the trick. Another not-infrequent issue is too much RAM. If a game was written in a time when 4 MB total memory was considered huge, having 64 MB in the system can confuse the software to the point it thinks you have a negative amount of memory! This is because variables in code are stored with a certain number of bits - when an int or a small float reach their limit, say, 65535, it rolls around to -65535, resulting in 'Not enough memory' errors. One title in which I've seen this occur is Centurion: Defender of Rome.
Anyway, to make my DOS gaming as easy as possible, I write a simple batch file for each game that will do 3 things:
1) Set the system speed using Phil's batch files (slowest.bat, slow.bat, medslow.bat, medium.bat, medhigh.bat, fast.bat and fastest.bat).
2) Configure the AudioTrix sound card's MIDI interace to either go out to the MT-32 (for MT-32 games) or be directed to its onboard
wavetable synthesizer (for General MIDI games).
3) Go to the game's directory and run the game.
In all cases, I have run whatever SETUP.EXE or INSTALL.EXE program to tell the game what hardware I have and what I want it to run with.
Here are two typical batch files for games:
One thing to note is that all of Phil's system speed batch files run SetMul first to reset all CPU flags and the L1 cache to enabled, thus ensuring the system is running at 100% full speed before changing it again to run at the lower speed - this is necessary as the flags you set with SetMul are incremental - you can choose to just change one flag and the other flags you might have previously set will remain in effect until they're told otherwise, or the machine is rebooted.
The SETMPU and SETMPUGM batch files are specific to the AudioTrix Pro - they simply tell the card "When I receive a MIDI message where should I send it? To my onboard GM synth (SETMPUGM) or out to the Game/MIDI port (SETMPU)?".
Wing Commander
So as many of you retro DOS gamers know, Origin's Wing Commander is one of those games that is very speed-sensitive - there's a sweet spot around 386DX-20 or 386SX-25 as a minimum up to 386DX-33 where the game runs perfectly. Try running on an 80286-12 and it's far too slow to be enjoyable (despite the box's minimum system requirements). Likewise, running on a 486SX-25 and it's too fast.
The Origin intro sequence gives you a good idea of whether you're on the money - if the composer animation, Origin logo and fireworks are all over in about 25 seconds you need to slow down your PC!
As I suspected, it's running far too quickly even with the external L2 cache disabled and running slowest.bat. I went in to the BIOS and change DRAM Timing from "Normal" to "Slow". This changed my benchmark number to 13.2 (with it set to "Normal" it was getting 13.7).
The Wing Commander intro sequence now takes 28 seconds instead of 25 seconds, so it's a step in the right direction. I also tried changing SDRAM CAS Latency from "Auto" to "3" and a bunch of other settings in the BIOS but this made no difference to the system's speed.
Next up was to try some DOS slowdown utilities combined with running slowest.bat. After testing several, I came across one that works well: Slow v3.0 by Vincent Penquerc'h.
I initially ran this:
slow -f1 5000
which had some impact (better than any of the other slowdown tools I tried). The -f1 sets a loop factor from 1 to 65535 where the larger the number the more loops it puts in, resulting in slower performance. It was still too fast for Wing Commander, so next I tried:
slow -f1 50000
OK, this seriously impacted performance to the point where WC's music and animations were too slow. To give you an idea of what this did, the synthetic benchmark SpeedSys returned 5.38, which puts it a bit slower than an AMD Am386DX-40, yet in the real world the game runs too slowly.
I then found the right value with -f1 20000
Running WC is now nicely playable, with animations, music, etc all running at what I consider to be 'normal' back in the day. I will need to do a load of missions in WC to confirm there's no adverse effects when running this artificial slowdown utility, but an initial test run seemed ok.
Optical Drive Speed (and Noise)
I mentioned in part 1 that ideally you should choose the oldest, must sluggish CD or DVD drive you can get your hands on. Well against my better judgment I opted to ignore my own advice and put my 48x NEC DVD writer in there! It is black though, so it looks nice in the case.
So how to slow this thing down to avoid my Blade Runner CD-ROM sounding like I'm in a wind tunnel? The answer comes from a neat little utility called CDBQ (CD Be Quiet!), written by ChrisR3tro. This sends a simple ATAPI command to the drive to tell it to run slower than normal.
I tested my NEC drive using SpeedSys before running CDBQ, and got these results:
So without CDBQ its average read speed on my Blade Runner CD-ROM Disc 1 was about 24x and it maxed out at about 30x. Given that a 1x CD-ROM is 150 KB/sec, I ran CDBQ with these arguments in order to aim for a 4x eventual max speed:
CDBQ -p1 -ds -s600
This means Port=1 (Primary), Device=s (Slave), Speed=600 (KB/sec). The readme file for CDBQ does caution that you will need to play with the -s option to get the desired speed, as these things aren't usually that accurate. Anyway, re-running SpeedSys gave me this:
Pretty good! We're down to an average read speed of about 4x. For games that don't need higher speeds and/or read from the disc continuously while playing music, I will add CDBQ to run in the game's startup batch file. For those games that just load in a new level without continutiy of gameplay as it loads it makes sense to just keep it at full speed. The optical drive's setting that CDBQ changes is reset whenever the system is rebooted, so there's no concern about clearing out any changes you make. Note however, that this is a DOS utility - it will not work if run in Windows or even in a DOS Command window. For Windows games, use DriveSpeed 2000 - the most up-to-date version was released in 2002, but runs happily on Windows 98SE. Install it, then reboot (yes, you must). Once rebooted it will detect your optical drive and prompt you to go and change the read speed. Once you do this DriveSpeed 2000 runs automatically every time you boot into Windows (it sits in the System Tray) and will use the same speed setting you chose until you decide to change it. I set my NEC drive to 4x and tested it on Blade Runner again. It worked a treat! I can now easily hear the excellent Vangelis-style soundtrack over the optical drive, rather than the other way around!
In Part 3 I will see if I can get some of the early 3D games running well on this flexible system.