Retro PC adventures
My retro PC is a Compaq Deskpro EN SFF, which I bought for €5 at the 'HCC Dagen' in 2007 or something, I'm not sure. I used it as a M0n0wall for a couple of years, basically retired it, and at one point brought it back to life with a Voodoo 3 to investiate Unreal engine Glide rendering peculiarities. Now I've decided to use it as a retro gaming PC, and it's pretty good for that. It's small, and has the right hardware. My main focus is 90s first-person shooters, i.e. Doom 1/2 and Duke Nukem 3D.
Note: One thing that makes retro gaming so finicky is that in the 90s technology moved at a much faster pace than it does now. As I write this in 2020, playing a game from 2015 is no big deal and it'll be technologically similar to current games. Similarly, you can also run current games just fine on a PC from 2015. However a 1993 and 1998 game will be completely different. Doom, released in 1993, runs on DOS, uses a MIDI soundtrack and doesn't care what video card you have as long as it supports VGA. 1998 saw the release of Quake 2, which only runs on Windows, uses a CD audio soundtrack and uses OpenGL 3D acceleration. A 486 from 1993 could in no way run that game, while a PC built in 1998 could, depending on the hardware, be unable to run DOS games such as Doom perfectly. What this all means is that a lot of games will be particular about what hardware they run on, and a lot of hardware will be suitable for only a short period of games.
Another thing annoying about retro computing is that there's a lot misinformation and conflicting/subjective/anecdotal evidence out there. Take everything you read on Vogons with a grain of salt.
In its stock form the Deskpro is a decent retro PC already: it's an Intel 440BX chipset motherboard, which is compatible with handy tweaking tools such as Throttle. It includes an ISA slot, which means you can use sound cards with good DOS support. And the stock built-in ESS AudioDrive ES1869F works fine in DOS, offers good SoundBlaster compatibility and its Adlib (OPL) clone is not 100% but still good. It has a built-in NIC. The ATI Rage Pro Turbo graphics card is fine for DOS games, though not so much for games that require 3D acceleration. A 440BX board with a Pentium 3 can cover a large time span of retro games, basically all of the 90s, sometimes requiring the aid of slowdown tools.
This particular PC does have some disadvantages though. Although it's nice and small, the case is a pain to work with, opening and closing it takes some force. It lacks BIOS options, and some of the missing ones might have been helpful in fixing some issues I've run into. It only has two expansion slots: one PCI and one PCI or ISA. I can't get PC speaker (beeper) audio to work; in fact, I can't get the internal speaker (which should also play digital audio) to work at all.
If the clasps on the sides of the case are pressed in like this, it's impossible to snugly fit the top cover. Push them out and try to keep them that way while closing it.
The final specs are as follows:
- Tualatin Pentium 3-S 1400 @ 1050MHz CPU
- 512MB RAM @ CL2 - it only takes double-sided 256MB sticks.
- 128GB SSD
- Voodoo 3 3000 PCI
- ATI 3D Rage Pro upgraded to 8MB
- Aztech AZT2320 based sound card
- Roland Sound Canvas SC-55
- Dell 2007fp monitor
- Edifier R1100 speakers - great small speaker set that hax an aux input for the SC-55
I installed Windows 98 on the machine over netboot. I added a BootMenu=1 entry to MSDos.sys so I can boot straight to DOS. Some more info on various hardware items:
3DFX Voodoo 3
In general a Voodoo 3 is a great retro card. It supports VGA/Vesa modes and has all the power you'll need for games that are best played using Glide acceleration. An advantage over older Voodoo cards is that it's an integrated 2D/3D card. Disadvantages are that it won't run some early DOS Glide games meant for the Voodoo 1, and it'll still only do 16-bit color in 3D. Although I mostly use the card in DOS I did find it to have sharper 2D output than the built-in ATI card, though that might just be noisier as it's integrated on the motherboard.
3DFX Voodoo 3
One issue I've run into is horizontal lines of pixels flashing across the screen in Duke3D and Quake in 320x200 VGA modes. Setting Duke3D to 320x200 VESA mode results in really fuzzy graphics. 800x600 mode looks perfect but the computer struggles at that resolution. Some threads on Vogons suggested upgrading the Voodoo 3's BIOS or messing around with its clock speeds would help, but it didn't. I managed to fix the horizontal glitching using the mtrrlfbe tool. Setting VGA write combining to 'WP' or 'WT' fixes the issue, 'WB' crashes the game. On the other hand, with the settings that work for Duke/Quake, Doom has completely corrupted graphics.
Voodoo 3 graphics glitches in Duke Nukem 3D.
ATI Rage Pro Turbo
As the Voodoo 3 gets quite hot I decided to try the Rage again. However, at least there's no issues with VESA modes. With the stock Windows drivers, Unreal works fine (at least, the castle flyby does) in D3D mode, while GLQuake uses software rendering.
I've tried many (~15) other driver sets. Installing drivers allows one to activate negative horizontal sync, which on my monitor results in a much stabler image (can be seen especially in the dithering pattern when the Windows shutdown dialog is on screen).
Unfortunately almost all drivers exhibit issues to some extent, and ATI's version numbering scheme is confusing:
I've uploaded my collection of drivers. For me the set that worked best was w98_rpro_4_11_2628_en.exe
Roland Sound Canvas SC-55
Sound Canvases are a complex subject. These are the MIDI devices that Doom and Duke3D's music was composed on, and using one doesn't just sound way better than OPL music, it sounds the way the composer heard the tracks as well. In fact it's a shame that these games used the OPL as a general midi playback device instead of just composing directly for it; most people had an Adlib or Sound Blaster, and almost nobody had a Sound Canvas.
Now choosing a Sound Canvas is where it gets difficult. To some extent, your device needs to have the correct bugs, and the various devices' behavior is poorly documented, as is what kind of behavior games actually expect.
There are game patches that fix bugs that require a specific SC-55 version, see here. My findings:
- The SC-88 doesn't sound exactly the same as the 55.
- Early SC-55's have an incorrect instrument mapping, #122 is 'Key Click' instead of 'Breath Noise'. Some Duke3D tracks use Breath Noise. This is an issue on units with firmware < 1.20. Which is at least all units that say 'GS Standard' instead of just 'GS' or 'GS/GM', but also some 'GS' units. Unfortunately it seems Descent wants the incorrect mapping.
- Firmware 1.20/1.21 have the correct instrument mapping, and they run a GS reset instead of a GM reset (i.e. GM reset doesn't turn off GS features). Newer devices disable GS features on a GM reset, which can mess up some (Build Engine) games.
- Firmware 2.0x and SC-55Mk2 units fix the reset issue. It seems GS/GM units always have 2.0x firmware, and some GS units do.
- Mk2 units lose 'Capital Tone Fallback', which means an instrument's capital tone is used instead of a variation if that variation doesn't exist. Again, some games depend on this behavior.
- Firmware 2.0x and Mk2 units play silence where some drums have a duplicate program change number on the earlier versions.
- The SC-50 seems on par with the SC-55 Mk2.
When buying an SC-55, have the seller check the firmware version for you - mapping the face plate or serial number to a firmware version is vague. It seems 'GS' branded units can have all firmware versions. I found a post on Vogons that said "ROM version 1.20 or 1.21 provides the greatest degree of 'out-of-the-box' compatibility with DOS games. These units shipped with 'GS' logo faceplates, and with serial numbers greater than AC94800". However, my 1.20 unit has serial AC94400. To get the firmware version, put the SC-55 in standby mode and press both Instrument buttons followed by both MIDI CH buttons.
I ended up going with a 1.20 unit as my focus was Doom and Duke3D. It's possible to upgrade the firmware to 1.21 but there seems to be no point, although this is the only possible SC-55 firmware version upgrade.
Extra tip: open the unit up and check the battery, it'll probably be corroded. In time this might damage components on the unit's main board.
The SC-55 hooks up to a sound card's MPU-401 compatible game port. I managed to buy a game port to MIDI cable, but couldn't get it to work for the life of me. After swapping sound cards, trying another computer, etc., I opened up the cable and discovered it's just not right. A MIDI cable should use 220 Ohm resistors in the output stage (R1, R2 on the PCB) and a 270 Ohm resistor (R4) at the input. Instead, this cable used 1.2k everywhere. Instead of swapping out the resistors I soldered 270 Ohm resisors in parallel with R1, R2. This results in 220 Ohm for those. R4 would require 348 Ohm in parallel.
By the way, this type of cable doesn't use a buffer for the output side but that's not that big a deal. Also, with these cables the lead marked 'out' is the PC output (as opposed to the synth output) and should be connected to the synth. Later on I found other people have had issues with the same cable, in fact here somebody came to the some conclusion about the resistors.
The midi cable - basically avoid this type of cable...
The midi cable with replaced resistors.
Sound card attempt 1: ESS AudioDrive ES1869F
The Deskpro has a built-in ESS AudioDrive ES1869F sound card, which generally works fine. Although you can select what resources it should use in the BIOS, as it's a PNP device Windows ignores this and configures the card using its drivers. Depending on if you're booting into DOS from Windows, straight into DOS (will use BIOS settings), or into DOS and using esscfg.exe, the card can end up using different resources. ISA PNP is weird - at some point I was unable to enable the card in the BIOS while it worked fine in DOS after running esscfg.exe, and eventually I could re-enable it in the BIOS (though with different resource settings). It offers a good Adlib (OPL) clone, it's not exact but it sounds close, some people find it superior. Unfortunately the ESS1869 in its on-board form in the Deskpro doesn't come with a gameport or line-in port (though the cd-in could be used for that), which meant I couldn't use it with the SC-55.
To use another sound card I had to disable the ES1869F and free up resources. Unfortunately it seems that devices disabled in the Deskpro's BIOS will appear in broken form in Windows Device Manager and still take up resources. The solution is to disable them in the device manager. Update: They can be completely disabled by enabled 'Device Security' for the audio device in the BIOS. The same goes for other devices such as serial/parallel ports.
Device manager - I had to disable devices that had also been disabled in the BIOS.
Sound card attempt 2: Creative Sound Blaster 16 CT2770
Sound Blaster 16 CT2770 - MIDI hanging note bug and Build engine stuttering.
The second sound card I went with was a Creative Sound Blaster 16. Model CT2770 aka SB16 Value. The card was easily detected by Windows after running a scan for non-PNP hardware and of course DOS game support is sublime. However, there were two deal breakers when using this card to drive a MIDI device. The first is the hanging note bug. This card has the CT1747 chip, so it only has 'Type 2' hanging notes (a correct note is not turned off, as opposed to a completely wrong note being played). These occured often enough to be annoying. Additionally, these cards have an issue where Build engine games will stutter if they're playing back MIDI and also mixing audio (can be fixed by lowering audio quality). For a while I settled on using the ES1869F for digital audio playback and the SB16 for its gameport and genuine OPL. However as the ES1869F doens't have a line-in, this meant going ES1869F line-out → SC-55 line-in → SB16 line-in → SB16 line-out.
Sound card attempt 3: Opti 928
The next card I bought used an Opti 928 (aka) MAD16 chipset. This card wouldn't work properly under Windows 98 (seems it only had 3.1 drivers) and I couldn't get stereo sound to work under DOS. Worst of all, its gameport isn't MPU-401 compatible. I screwed up and bought the wrong card, apparently the Opti 929 is a fine chipset and Sound Blaster Pro 2/MPU-401 compatible, the 928 is not. It's more similar to an orignal Sound Blaster 2.0.
Opti 928 - lackluster all around. I molested the sticker to check the exact model of the chip underneath.
Sound card attempt 4: Aztech AZT2316
Finally I went for an AZT2316 based card. Mine has FCC ID I38-MMSN824 and was apparently a Packared Bell OEM card. It is recognized just fine by Windows as a Sound Galaxy Washington 16, but it needs its own set of DOS tools, the generic Aztech ones don't work. Here's my take on this card:
- Has a genuine Yamaha OPL3 and fine MPU-401 support.
- Although it works fine in Windows, sometimes sound gets a little distored, can be heard when clicking around in Windows Explorer. Update: Using the 'Aztech 2316 Compatible Legacy Audio (WDM)' instead of the 'Sound Galaxy Washington 16' drivers seems to fix this. This does seem to use the Microsoft Sound System functionality of the card and I can't get DOS games running under Windows to play sound anymore, which is no big deal to me. I made a .bat file for when I'm in DOS mode, it starts CuteMouse and runs hwset to reset the Aztech.
- The card's base address is configured using a jumper, the other settings using a software tool or the Windows drivers. The settings can be saved to EEPROM. Strangely, the setup utility allows you to also change the base address and this seems to work fine. There's a command-line config utilility and more of a wizard. The wizard adds SET entries to AutoExec.bat, but it also adds an 'EEPROM.SYS' file to config.sys, which doesn't seem necessary for the card to get its settings from EEPROM.
- To get to the DOS tools, you need to install the driver package, which tries to install Windows 3.1 drivers, which resulted in my Windows 98 install complaining about 16 bit drivers on startup. I've unpacked the DOS utilities here. The driver package also comes with extra Win95 drivers but they aren't needed on Windows 98.
- With no drivers or other settings the card initializes as 220h/IRQ5/DMA1, which is just fine for DOS games. I can boot straight into DOS and use the card.
- It supports ADPCM playback, which is needed for Duke Nukem 2 sound effects. However these still don't always work, I'm not sure what influences it.
- OPL music in Cosmo's Cosmic Adventure doesn't always work.
- Duke Nukem 3D's sound works fine in Windows 98, however Doom stays silent.
- In DOS mode, I need to start Doom twice for it to have sound. If I then start Duke3D, sound in Doom is broken until I start it twice again.
- These issues might be due to my particular motherboard and its lack of BIOS settings...
So in short this card does have its issues, to be honest I was disappointed. I might try an Opti 929 at some point. Or a Yamaha YMF718, although those have slighly different OPL playback and don't support ADPCM.
AZT2316 - works ok for now.
Sound card attempt 5: Avance Logic ALS100
I did end up trying an Avance Logic ALS100 card. This card has a 100% authentic OPL3 clone and SB16 compatibility. People report a lot of hiss/noise coming from these cards, but I was hopeful mine would be an exception, somehow the fact that mine wasn't a half-height PCB made me believe that to be more likely. Anyway, I had a lot of issues with this card. In Windows, a second of the startup sound would play and then no more wave audio could be heard anymore (line-in and OPL worked fine). This was the case with both the Windows 95 drivers and the Win98 WDM ones. In DOS configuring the card using the alsinit utility or Intel ICU worked fine, however most of the time I would get no sound or a missing channel; sometimes everything worked ok. When sound did work, in SB16 mode the left/right channel would be switched.
Running the alconfig tool would somehow fix audio, but sometimes this tool would hang. I figured that maybe the power draw from my Voodoo 3 and the ALS100 was too much, but removing the Voodoo but leaving the ALS100 actually things worse?! It would not be detected or half-detected (ICU hanging with an error message) and sometimes I wouldn't even go into the system's BIOS anymore, it would hang. Anyway I'm not sure if it's my specific card or if it's just due to my motherboard, but I had to give up on this card.
Note how off-center the jacks are - this means it's impossible to fully seat a 3.5mm plug.
Sound card attempt 6 →Current Winner←: Aztech AZT2320
AKA HP MM Pro 16V-A, FCC ID I38-SN96116
My reasoning for trying this card was that it was available, newer than the AZT2316 and that after playing with the ALS100 I found that ISA PnP isn't that big a deal. In fact, since playing with the ALS100 a great new tool called UniSound has been released which auto-configures all sorts of cards based on the BLASTER environment variable - it's awesome! For Windows 98 the stock drivers work fine. However (after a lot of hair pulling) I discovered the card won't work in DOS if Windows has been started first. I need to completely turn off and on the machine (and boot straight to DOS) to fix this; restarting with CTRL+ALT+DEL doesn't help.
Later I discovered that by using a set of Windows 95 drivers the issue doesn't occur; before I had been using the built-in Win98 WDM drivers.
This card does not exhibit the issue where Doom needs to be started twice before it plays digital audio. Also, Duke Nukem 2 seems to work fine all of the time.
This monitor is great for retro gaming. It uses a 1200x1600 resolution at a 4:3 aspect ratio, which means that 320x200 VGA games can be shown in the correct aspect ratio using integer scaling. Doom looks great! For newer games, running them at 800x600 will also use integer scaling, obviously. Only issue is that, even with a high quality VGA cable, sometimes you need to manually use the auto-adjust option to prevent flickering. For example, if you go to Windows 98's shutdown screen, the background uses a dithered pattern that causes the creen to flicker until you re-adjust.
Eventually I decided to add an SSD. I went with a 128GB M.2 SATA SSD, as these are cheap. I used an M.2 to SATA adapter; some are just a bare PCB, I splurged on one that comes with a casing. Next in the chain is a SATA to IDE adapter. There's various makes and models of these; I wanted one that plugs into the drive (not into the motherboard) as the Deskpro has pretty much zero space above the motherboard IDE connectors. There's mixed reports on which converter chip to go with. I've seen JMicron, Marvell and unbranded chips. I went with one of the unbranded adapters as I'd seen reports that these work well in DMA mode with the 440BX, and I can confirm that it does work fine. It's anecdotal, but I've seen talk of JMicron not working well with 440BX, while others have said it works well with other motherboard chipsets.
Try to avoid Samsung PM851 drives though. These drives suffer from performance degradation and as these are OEM drives, firmware updates are OEM specific. I was unable to find an update for my HP drive, and I couldn't manage to flash it with Dell or Lenovo firmware.
M.2 SATA to standard SATA adapter
Generic SATA to IDE adapter.
I used Windows 10 to create FAT32 partitions on the SSD so they would be properly aligned. I created a 4GB partition for Windows, and a 32GB partition for games. Unfortunately Windows 10 won't let you create FAT32 partitions larger than 32GB (while Win98 fdisk does), but I don't mind the wasted space on the SSD. In fact, although the DOS trim tool works with my hardware, I'd rather keep the SSD over-provisioned.
To get Windows 98 on the SSD I first copied over the Windows 98 installation directory I had on my hard drive, then disconnected the hard drive and netbooted a Windows 98 startup disk to kick off the installation. I couldn't manage to get a bootable Win98 install on the SSD by first booting from the hard disk, but that might be due to my system refusing to boot off a slave drive (so I had to make the SSD, i.e. the Windows install target, slave).
To mount the SSD I tried first tried two types of downloaded 3D printable 3.5" to 2.5" adapters. However they both wouldn't work as due to the sata converter the SSD needs to be mounted off-center, and due to the limited space in the case I can't have the converter hanging out of the drive bay. Instead of designing a bracket myself, in the end I opted to just drill four holes in the drive holder. Later on I replaced the whole drive mounting assembly with a custom 3D-printed unit so I could mount a socket 370 CPU.
Tip: use the bare M.2 to SATA converter PCB as a template to drill holes. In the end I couldn't use the bottom-right hole as the screw head there would foul with the case.
PSU Fan Upgrade
The old power supply fan was rather rumbly, so I replaced it with a 80MM Noctua fan. I expected this job to involve soldering a normal fan connector to the PSU's circuit board, but the new fan actually just plugged into the old (2 pin) header. The problem was getting to the bottom screws of the fan; that involved taking everything completely apart. The difference in fan noise is huge, though!
Getting to the bottom screws involves taking out the PCB. Here you can also see that I unclipped the fan's cable holder so the wires run directly into the PSU casing.
PSU installed again.
Issues and fixes
Floppy drive cable
For some reason my machine doesn't play nice with single-connector floppy drive cables, no idea why. I generally don't use the floppy drive but when I do, I need to cram a long cable in there.
The easiest way I've found to share files between a Windows 98 and Windows 10 computer over the network is to share a directory on the Win98 machine and access it from Windows 10. Support for SMB 1.0 must be installed on the Windows 10 machine under 'Turn Windows Features On or Off'. Using the Windows 10 machine as a client means that on that computer you can leave security settings such as 128-bit encryption enabled.
SMB 1.0 client.
Website. Throttle is a great tool that, at least on my machine, works perfectly to slow down the CPU for games that require it. I recommend using the command-line option -c to not disable the CPU's L1 cache, it will result in really slow performance.
Website. Great DOS mouse driver.
Windows 98 USB mass storage driver
These can be found under the name 'nusb33e.exe'; they're in my archive at the bottom of the page. Using an USB stick is generally easier than trying to get Win98 networking to play nice with Win10; you do need a way to get these drivers on your retro machine though, such as a floppy disk.
My archives of all my used tools and drivers
- Compaq DeskPro EN series Maintenance & Service Guide (talks about Pentium 2 models but the motherboard is identical). Download
- Technical Reference Guide For the Compaq Deskpro EN Series of Personal Computers Net PC and Small Form Factor Models. Download
- Aztech I38-MMSN824 drivers, installer. Download.
- Aztech I38-MMSN824 drivers, archive of installed drivers/utilities. Download.
- ES1869 DOS drivers (I think I used the built-in Win98 ones). Download.
- CuteMouse. Download.
- MTRRLFBE, including CWSDPI. Download.
- Throttle.exe. Download.
- SoundBlaster 16 DOS and Win95/98 drivers. Download.
- 3DFX Voodoo 3 driver kit 1.07.00-WHQL. Download.
- The most recent Avance Logic ALS100 drivers I could find (DOS, 3.1, 95, 98, 2000). Download.
- Intel ICU (configure ISA PNP devices). Download.
- UniSound 6.5c. Download.
- AZT2320 DOS drivers Download.
- HP MM Pro 16V-A Windows 95 drivers 4.05.1200 Download.
- SSD TRIM tool for DOS Download.
- ATI Rage drivers Download