Tuesday, October 21, 2025

Building a late 90s retro PC


Last year I went to the cinemas and enjoyed watching Dune: Part Two, a movie adaptation of the first Dune novel written by Frank Herbert. I still have fond memories reading the novel for my English literature classes at secondary school -- the book is very detailed and it took me quite a bit of effort to read it. Fortunately, I already knew many parts of the storyline thanks to a computer game: Dune 2000, that I enjoyed very much playing in the late 90s.

After seeing the movie I wanted to play Dune 2000 again. The game is quite old -- it was released in 1998 by Westwood Studios. Originally, I ran the game on my parents' PC, a Pentium 166 with 32 MiB RAM running the first edition of Windows 98.

Running the game on a modern PC turns out to be quite challenging. Although some hardware in PCs should be fairly backwards compatible with even the earliest PC models (for example, modern CPUs can still run real mode instructions that were commonly used in the MS-DOS era in the 80s and early 90s), compatibility on a modern machine with an old PC software product is all but guaranteed.

On Windows 11, Dune 2000 will not work out of the box. Windows 11 requires a 64-bit CPU and runs in 64-mode. 64-bit versions of Windows have dropped compatibility for 16-bit Windows and MS-DOS applications. Although the Dune 2000 game is a 32-bit executable, the installer turns out to be 16-bit.

Fortunately, I found an alternative installer on the PC Gaming Wiki developed by the retro computing community allowing me to install and play Dune 2000 on Windows 11. Although this installer made it possible to play Dune 2000 for a while, I have noticed that Windows 11 updates can also break the playability of the game again.

I also tried a few other games from the late 90s and for many of them I learned that it is quite hard to make them run properly on Windows 11. As a result, I was not happy with the current state of affairs when it comes to backwards compatibility.

Some time later, because of the lack of good application compatibility in Windows 11, I got motivated to install Windows 98 Second Edition (SE) in PCem, a PC emulator allowing me to set up an emulated machine that was comparable to the first PC that I bought myself in the late 90s. A bare bones Windows 98 installation is somewhat impractical to use so I also started to collect useful drivers and utilities that I used at that time.

After my experiences setting up an old PC software configuration (Windows 98 SE) and working with retro computers (various Commodore models), I became motivated to build a retro PC that is comparable to the first PC I first bought from my own money as a teenager in 1999.

Before 1999 I only owned obsolete computers, such as the Commodore 64 and Amiga 500, which explains why I have quite a bit of experience with them. I had to share my access to a modern PC with other family members. Saving the money to buy a modern computer of my own took me quite a bit of time and effort.

In this blog post, I will report about my experiences building my retro PC and describe my experiences using it.

Finding a good base machine


All of my desktop PCs that I used to own were custom built. Building your own PC from parts is an interesting process -- I always used to enjoy looking at the specifications of various hardware components and see how they can be combined to assemble a reasonably priced machine. In the Netherlands, there are quite a few shops that you can buy computer parts from.

Contrary to modern PCs, finding the right parts for old machines is extra challenging, because most of them cannot be found in conventional shops. Fortunately, there are web sites such as eBay and Marktplaats (a Dutch e-commerce web site for trading second hand goods) that offer many kinds of used goods, including computer parts and peripherals.

In 1999 I used to have an Abit BE6 motherboard. Back then I was in doubt between this motherboard and an ASUS P2B. I have picked the Abit BE6 motherboard, because it had an Ultra ATA 66 controller that is supposed to be faster than a conventional IDE controller.

After doing a search on Marktplaats, I found a second hand custom built PC containing an ASUS P2B-F motherboard and a number of parts that are close to my desired system configuration:

  • Motherboard: ASUS P2B-F. This is a motherboard model I specifically looked for.
  • CPU: Intel Pentium III 450 MHz. This CPU is slightly slower than I used to have. My first PC had a 500 MHz model.
  • 192 MiB RAM. My first PC used to have 128 MiB of RAM. It is fine to have a little bit more.
  • Graphics card: ATI Rage 128. This card was comparable in features and performance to a NVIDIA RIVA TNT card using true-color 3D graphics.
  • Sound card: SoundBlaster PCI 128. A basic sound card with decent DOS compatibility.
  • Network card: RealTek 8139
  • Floppy drive: A 1.44 MB 3.5-inch
  • CD-ROM drive: A Lite-On (52x speed)
  • Hard drive: A 8 GiB Maxtor N256 IDE

Finding additional parts


I made the following adjustments to the machine's composition so it that becomes closer to the machine I used to own in the late 90s:

  • I replaced the ATI Rage 128 video card with a Diamond Viper V770 (containing a NVIDIA RIVA TNT2 chipset) that I found on eBay. This is the same kind of video card I used to own in the late 90s and is more powerful than the ATI card.
  • My 90s machine used to contain a more fancy sound card: a Sound Blaster Live! I have replaced the Sound Blaster PCI 128 with a Sound Blaster Audigy 2 card that I have removed from one of my previous computers. The Audigy 2 is an improved version of the Sound Blaster Live!
  • My 90s machine was also upgraded with a DVD-ROM player. As a result, I was able to watch DVD movies on it. On Marktplaats I found a very cheap LG DVD-ROM player that is also capable of burning writable CDs.
  • I used to have a Microsoft Sidewinder USB joypad to play games with. I found the exact same model on Marktplaats.

In addition to replacing traditional parts, I have also decided to buy some additional parts to make retro-computing more convenient:

  • A GoTek floppy emulator device. Similar to my old 8-bit Commodore and Amiga computers I am also running into the issue that floppy drives have become an inconvenient medium. Modern PCs no longer have it included by default. Although I still have an external USB floppy drive that I can use, it still remains inconvenient, because floppy disks are slow and have limited storage capability.

    Similar to my old Commodore computers, it is also possible to use a GoTek floppy emulator device as a substitute for a physical floppy drive in a PC. Rather than floppy disks, a GoTek allows me to use a USB memory stick with disk images. I can use the rotator to select the disk image I want to use.

    My motherboard only has one floppy drive socket, but it is possible to connect both the physical floppy drive and the GoTek floppy emulator at the same time with a single cable with two connectors.

    I have made the GoTek floppy emulator the primary disk drive, but I can also still use the original floppy drive as a secondary disk drive if I want to. The fact that the traditional floppy drive can still be used is convenient for backing up content from old physical floppy disks.

    I have followed the configuration instructions on this documentation page to configure my GoTek -- I have created a directory named: FF on my USB stick and added a configuration file named FF.CFG with the following settings:

    interface = ibmpc
    display-type = oled-128x64-rotate
    

    The above settings specify that I have an IBM type disk drive and I have rotated the display text so that it no longer appears upside down.
  • A CF2IDE device. Hard drives will not last forever. Similar to my Amiga 500's hard drive, the Maxtor hard drive in my retro PC is showing age related problems. For example, it makes a weird continuous buzzing sound.

    I have decided to replace the hard drive with an CF2IDE device, similar to my Amiga 4000. This device allows me to use Compact Flash cards as a replacement for physical hard drives.

    Another advantage (similar to my Amiga's SD2SCSI and CF2IDE devices) is that I can conveniently switch memory cards at the back of the machine allowing me to easily work with many kinds of software installations.

Software configurations


As already explained, a CF2IDE device allows me conveniently switch memory cards at the back of the machine. As a result, I have been able to produce a number of interesting software configurations that I can easily experiment with.

Windows 98 SE


The first configuration I produced is a working Windows 98 Second Edition (SE) installation. At the time I bought my own PC in 1999, this was the mainstream operating system commonly used on consumer PCs. I still had a copy lying around.

Back in 1999 there were two concurrent Windows product lines: the most commonly used versions were DOS/Windows hybrids starting with Windows 95, followed by 98, 98 second edition, and Millennium Edition (ME). I will call this product-line the Windows 9x product-line.

Although these Windows versions appear to be "modern" graphical operating systems, they still carry much of Microsoft's MS-DOS legacy -- you could still clearly observe that they consist of a DOS and Windows part: first, the system boots into the text-based MS-DOS mode, optionally loading DOS device drivers and DOS programs, such as TSRs, and then the Windows desktop environment is started. By using the boot menu (that can be reached by pressing F8 on startup), it is also possible to boot into MS-DOS mode, if desired.

There was also the NT-product line starting with Windows NT 3.1, that from a visual perspective looked very similar to Windows 3.1, but was developed from the ground up to be more powerful, portable and robust.

In mid 1999, Windows NT 4.0 was the latest version in the NT-product line having a graphical shell that looked similar to Windows 95.

Although the Windows NT product-line was more promising and gained some adoption for business use, it was not yet used on a wide scale by consumers because it requires much more system resources and its backwards compatibility with MS-DOS applications and games was not as good as the DOS/Windows hybrids. Moreover, Windows NT also lacked popular multimedia features such as hardware accelerated Direct3D graphics.

At the end of 1999, Windows 2000 was released as the successor to Windows NT 4.0, improving various features including multimedia support.

I consider Windows 98 SE to be the best option in the Windows 9x product-line for playing games and running commonly used Windows software from the late 90s. 98 SE has more features than previous versions, but not the mistakes of its successor: Windows Millennium Edition.

Windows Millennium Edition has added a few nice features, such as support for more modern hardware, but it removed the option to boot into MS-DOS mode, preventing me from playing a number of interesting MS-DOS games. Moreover, Windows Millennium Edition also had quite a few stability problems.

Installing Windows 98 SE and most of the software packages was generally straight forward. For example, I can install Windows 98 SE relatively straight forward by booting from a Windows 98 boot disk and running SETUP.EXE from the CD-ROM.

Configuration challenges


There are a number of configuration challenges that I ran into while setting up a Windows 98 SE installation:

Intel chipset driver


By default, the Intel 440BX chipset is not detected by Windows 98 SE. I had to install a driver for it. I installed this version that I found one online.

Realtek network card driver


My network card was also not recognized -- I installed this driver that I found online.

Video card driver


Windows 98 SE does not automatically detect my graphics card. To use my card, I need to install an external driver provided by NVIDIA. There are a variety of driver versions available for my chipset (RIVA TNT2).

The last driver version that still supports Windows 98 is version: 71.84, but I learned that it has all kinds of issues. For example, running the 3DMark 2000 demo does not seem to work at all.

After some searching I learned that it is better to use an older driver version for older NVIDIA cards. After experimenting with a variety of versions, I had pretty good results with version 28.32 -- all the 3D applications that I want to run on my computer seem to work with it.

Old MS-DOS tools


One of the objectives of my Windows 98 SE configuration is to run MS-DOS applications and games. As explained earlier, the Windows 9x product-line is basically a DOS/Windows hybrid. As a result, it has pretty good compatibility with many MS-DOS applications.

Windows 95, 98 and 98 SE include a number of MS-DOS utilities in the default installation, but compared to MS-DOS 6.22 (the last independent MS-DOS release) its features have been trimmed down considerably.

Fortunately, some of the missing MS-DOS tools can be found on the Windows installation disc: the D:\TOOLS\OLDMSDOS. For example, when I was younger I typically wanted to use MS-DOS QBASIC, which was not included in the default installation of Windows 95 and 98. I could still get access to it by copying it from the old MS-DOS tools directory to C:\DOS and adding this directory to the PATH environment variable in AUTOEXEC.BAT:.

PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\DOS

I have also learned that in each new Windows version in 9x product-line the amount of old MS-DOS facilities shrinks somewhat. I also still have a copy of Windows 95 OSR1 lying around that contains more classic MS-DOS utilities than the Windows 98 SE disc, including MEMMAKER which turns out to be quite handy.

Instead of using the MS-DOS supplement utilities for Windows 98 SE, I prefer to use the utilities from the Windows 95 OSR1 CD-ROM.

Using USB memory sticks


Earlier in this blog post I have explained that floppy disks are quite an inconvenient medium to use nowadays. A modern means to exchange data physically is to use USB memory sticks.

My retro PC has two USB ports available, so I also wanted to use USB memory sticks for data exchange. Unfortunately, back in 1999 USB storage devices were not yet standardized -- each vendor provided their own driver. For modern USB storage devices, Windows 98 drivers are no longer provided. As a result, Windows 98 SE fails to detect USB memory sticks.

Fortunately, I learned that somebody has created a general USB storage driver package for Windows 98 that should work with any USB storage device. I used version 3.6 and it is straight forward to install.

Although the driver works great, I learned that it was created by integrating a number of components from Windows Millenium Edition, the successor of Windows 98 SE.

The negative side effect of installing the driver is that some elements of my Windows installation have lost their locality settings -- I am using a Dutch version and some Windows Explorer elements have changed to English.

After some searching, I learned that I can extract the original versions of the affected files from the Windows 98 SE CD-ROM by running the following commands in an MS-DOS prompt (D: corresponds to the CD-ROM device):

C:
MD \TEMP
CD \TEMP

EXTRACT D:\WIN98\WIN98_25.CAB SYSDM.CPL
EXTRACT D:\WIN98\WIN98_41.CAB USER32.DLL
EXTRACT D:\WIN98\WIN98_43.CAB EXPLORER.EXE
EXTRACT D:\WIN98\WIN98_44.CAB SYSTRAY.EXE
EXTRACT D:\WIN98\WIN98_45.CAB USER.EXE

I can restore the files by booting the machine into MS-DOS mode (e.g. by pressing F8 on bootup or using the shutdown function) and running the following commands:

C:
CD \TEMP

MOVE SYSDM.CPL C:\WINDOWS\SYSTEM
MOVE USER32.DLL C:\WINDOWS\SYSTEM
MOVE EXPLORER.EXE C:\WINDOWS
MOVE SYSTRAY.EXE C:\WINDOWS\SYSTEM
MOVE USER.EXE C:\WINDOWS\SYSTEM

The only disadvantage of restoring the original files is that the systray icon (that can be used to inspect the status of the USB storage device) can no longer be used. However, I can still reliably unmount a USB drive by opening "My Computer", right clicking on the device and selecting the: "Eject" function.

Mouse driver for MS-DOS


In Windows mode, my PS/2 mouse works out of the box, because it includes a driver. Unfortunately, in MS-DOS mode I need to obtain a driver myself.

To get the mouse working I have downloaded cutemouse -- it is originally developed for FreeDOS, but it also works decently in Windows 98's DOS mode. Its only disadvantage is that requires a bit of conventional or upper memory, so I only load it when I need it.

CD-ROM driver for MS-DOS


Similar to my mouse, in Windows mode my DVD-ROM works out of the box, because Windows has a driver for it. In MS-DOS mode, I also need to install a driver myself.

I found this OAK CDROM driver on VOGONS that seems to be compatible.

By adding the following line to CONFIG.SYS I can load the driver:

DEVICE=C:\DRIVERS\VIDE-CDD.SYS /D:MSCD001

By adding the following line to the AUTOEXEC.BAT file I can mount the CD-ROM drive on startup:

MSCDEX /D:MSCD001

Sound card driver


Another challenge was to make the sound working properly. Although I still have the original driver CD-ROM that includes a convenient installer, I ran into some challenges.

At first, I simply just used the CD-ROM to install the driver by following the recommended steps. I did not install Creative MediaSource, because I do not need it -- it is an application to turn your Windows installation into an entertainment system. I prefer to use my own selected applications to accomplish the same goals.

There are two driver variants on the CD-ROM, a Windows Driver Model (WDM) and a VxD variant. By default, the Audigy 2 installation disc installs the WDM driver on Windows 98. WDM is a new driver model introduced with Windows 98, but it was not yet successfully used until Windows 2000.

I have noticed two major limitations of using the WDM driver in my Windows 98 SE setup:

  • When running some games, things get silent after playing for a while.
  • When running MS-DOS games in an MS-DOS box in Windows, I only have SoundBlaster Pro compatibility. Moreover, I do not have any sound when I try to run MS-DOS applications in MS-DOS mode.

After some searching, I learned that the VxD driver is more robust on Windows 98 SE (and other Windows versions in the Windows 9x product-line).

I can switch to the VxD driver by starting the following program in the start menu: Programs -> Creative -> Utility -> Driver Utility Program. In the utility program, I can give the instruction to install the VxD driver.

Then you must reboot your computer. At the next boot up, Windows 98 SE sees some new hardware for which no driver can be found. This message should be ignored. Once the system has booted, the VxD drivers will be installed. After another reboot, the sound card is detected and can be used again.

I also knew that the first generation card of this product-line: the SoundBlaster Live! had SoundBlaster 16 compatibility. I learned that it is also possible to have MS-DOS SoundBlaster 16 compatibility with my Audigy 2 card, but it is not supported by official means -- there is an unofficial DOS driver pack that can be obtained from the VOGONS forums.

Enabling Sound Blaster 16 compatibility is quite tricky. First, I must make sure that there is a free IRQ channel. By default, IRQ 7 is taken by the LPT1: port. Disabling it in the BIOS frees it up so that the sound card uses IRQ 7.

We can use IRQ 5 for Sound Blaster 16 emulation. I learned the hard way that it is best to change the BIOS setting before the installation of the sound driver -- doing so afterwards bricked my Windows installation. Windows was refusing to boot due to an IRQ conflict.

Then, I must open the registry editor (regedit.exe) and change the following setting:

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Creative Tech\Emu10kx\Emulation]
"EnableSB16Emulation"=dword:00000001

After changing the setting, I must reboot the machine. At first startup, Windows should detect a new device that is recognized as a "Creative SB16 Emulation" device. Although Windows manages to install a driver, it shows that there is a problem when I open the device manager. I should ignore this error for now.

Then I must install an unofficial Audigy 2 DOS pack from VOGONS. This package includes a number of files from the Sound Blaster Live! installation disc to enable Sound Blaster 16 emulation.

I must perform the following steps:

  • Unpack dospack RAR file
  • Run the installer: AUDIGY DOS DRIVER\Setup.exe
  • Do NOT reboot
  • Copy AUDIGY12.EXE from the AUDIGY12 PATCH/ directory to C:\Program Files\Creative\DOSDrv
  • Edit AUTOEXEC.BAT, add following line right after SBEINIT.COM:

        C:\PROGRA~1\CREATIVE\DOSDRV\AUDIGY12.EXE
        
  • Reboot the machine

Finally, after rebooting there is still the broken "Creative SB16 Emulation" device. We must manually reinstall it to get a working device, by executing the following steps:

  • Control Panel -> Add New Hardware
  • Select: "No, the device isn't in the list"
  • Then select: "No, I want to select the hardware from a list"
  • Type of hardware: "Sound, video and game controllers"
  • Manufacturer: Creative Technology, Ltd.
  • Model: Creative SB16 Emulation

After installing the device by following the above procedure, there is a second "Creative SB16 emulation" device that is not reported as broken.

As a sidenote: the previously installed device that is also called: "Creative SB16 Emulation" still remains visible in the device manager and remains reported as broken -- ignore it. It is a weird situation, but the outcome is that we have working SB16 emulation.

Mounting CD-ROM images


In addition to floppy disks, my retro PC can also work with another kind of physical media: CD-ROM and DVD-ROM discs. For games, for which I have original copies, this is a fine medium.

However, I consider working with writable CD-ROM / DVD-ROM discs a bit inconvenient -- for example, I have downloaded a DirectX update ISO CD-ROM image that I need to access somehow. Writable CD-ROM and DVD-ROMs are a bit impractical, because it takes time to produce them and they are not very reliable in the long run -- I had quite a few writable discs in the past that became inaccessible after a few years.

Fortunately, it is also possible to put CD-ROM and DVD-ROM images on a USB memory stick and get access to their content by using a Virtual CD-ROM / DVD-ROM drive.

I have installed Daemon Tools version 3.47 to make this possible -- it is not the latest version for Windows 98 SE, but this version is still small / light-weight and works decently.

Optimizing memory for MS-DOS applications


Another challenge of running MS-DOS applications (that has not changed much since the MS-DOS days) is dealing with memory -- some MS-DOS games require a substantial amount of free conventional memory to run.

After installing all required MS-DOS drivers, e.g. the CD-ROM driver and Soundcard, I can optimize the amount of free conventional memory by running MEMMAKER. I need to reboot the machine into MS-DOS mode (by pressing F8 on startup) and run the following command on the command-line prompt:

MEMMAKER

I have used the following settings:

  • Use Express or Custom Setup? Express Setup
  • Do you use any programs that need expanded memory (EMS)? No
  • Specify which drivers and TSRs to include in optimization? No
  • Scan the upper memory area aggressively? Yes
  • Optimize upper memory for use with Windows? No
  • Use monochrome region (B000-B7FFF) for running programs? No
  • Keep current EMM386 memory exclusions and inclusions? No
  • Move Extended BIOS Data Area from conventional to upper memory? Yes

Finally, after MEMMAKER has made its changes, I typically check the CONFIG.SYS file to see if DOS is loaded as follows:

DOS=HIGH,UMB

By using these settings I have managed to increase the amount of free conventional memory from 530K to 616K in my default boot configuration.

Although using MEMMAKER increases the amount of free conventional memory, this configuration is not perfect. I have picked this configuration because it works with most of my applications.

Unfortunately, not all my MS-DOS applications will work with this setup -- I have disabled expanded memory (EMS) emulation, but enabled access to the Upper Memory Block (UMB) by loading the EMM386 with the NOEMS parameter. A few of my MS-DOS applications require EMS memory, such as a DOS game called: Zorro. On the other hand, I also have some MS-DOS applications that cannot work at all with an EMM driver, such as the PC port of Turrican 2.

For the applications that will not work with my main setup, I can configure the PIF files in Windows in such a way that the Windows boots into a different MS-DOS configuration, with or without an EMM driver enabled.

The only unfortunate side effect of booting into a configuration without an EMM driver is that I have no sound -- the SoundBlaster 16 emulation DOS TSR requires it.

Experience


I am happy with my Windows 98 SE setup. I can play many of the classic Windows games that I liked in the late 90s, such as Dune 2000, Quake 2, Half-Life and Unreal:


I can also use my Sidewinder joypad to play games, such as Mega Man X3:


Moreover, having decent MS-DOS application compatibility also makes it possible to play games such as Duke Nukem 3D and Jazz Jackrabbit:


To play Jazz Jackrabbit, I have followed this suggestion on the Jazz 2 online forums to get it fixed -- my retro PC is running too fast causing a division by zero error (Runtime error 200 at 0009:37F2). This is error happens frequently with running applications written in Turbo Pascal on fast computers. Jazz Jackrabbit was also written in Turbo Pascal. By downloading the TPPATCH program and patching the FILE0001.EXE executable the problem was solved.

Furthermore, I got many interesting applications working, such as WinAmp, Encarta 2005, Encore (that I used to typeset sheet music) and the classic Visual Basic 6.0 (that I used to program frequently with):


Slackware 8.0


The second configuration I have produced is Linux based: a Slackware 8.0 installation

Learning about Linux


I have an interesting history with Linux. From computer magazines and the documentation of DOS UAE (a port of the UAE Amiga emulator to MS-DOS), I already knew about Linux's existence and how to use some of the frequently command-line utilities early 1997.

At first I did not see it as something serious/valuable -- in 1997 I was not convinced that a student from Helsinki University could compete with Microsoft Windows and develop an operating system that could do certain things better.

Late 1999, my cousin demonstrated how Linux worked and gave me some background information. As a result, I got some hands on experience with Linux. I tried various distributions, such as SuSE, RedHat and Corel Linux.

I also learned much more about Linux, free software, and how it is developed -- it was developed with the purpose of providing a free (as in freedom) version of UNIX, which was already a well established concept.

Linux is only an operating system kernel -- to produce a usable system, it is typically combined with packages from other free and open-source software projects (most notably the GNU project, but also many others, such as KDE, GNOME and the X Window System) to become a functional UNIX-like system. All these projects are developed in a community-driven fashion by all kinds people all over the world.

There are many kinds of projects that produce usable Linux-based systems by combining various kinds of software packages. These systems are called Linux distributions.

From this background information and my hands on experience, I recognized its potential.

My early installation experiences


Somewhere in 2000, I tried installing a Linux distribution on my own machine. I believe the first distribution that I tried to install is SuSE 6.2. The installation was a failure -- the installer failed to detect my hard-drive because it was attached to the Ultra ATA 66 controller, which was not recognized.

I left my failed Linux installation experience alone for a while and some time later I gave RedHat Linux 7 a try -- initially, I ran into the same problem as SuSE 6.2 (not recognizing my Ultra ATA 66 controller). Eventually, I detached the hard drive from the Ultra ATA 66 controller and attached it to the original Ultra ATA 33 controller, making it for me possible to get a working Linux experience on my own machine.

After a search on the Internet, I discovered that a driver for my Ultra ATA 66 controller was developed and released as a separate kernel patch. I had to download the Linux kernel source code, apply the patch to the source code tree and compile the kernel from source code.

I followed the Linux kernel documentation closely, but no matter what I tried, I ran into compilation errors. At some point, I learned that my version of RedHat Linux was using a weird version of GCC (version 2.96 to be precise) that was never officially released by the GNU project. Back then, the recommended compiler to use for the Linux kernel was GCC 2.95.2. Apparently, this unofficial 2.96 compiler had issues the compiling the Linux kernel.

Then some more time passed and somebody suggested Slackware to me. This was the first Linux distribution I was happy with -- not because the distribution is perfect, but because it was not as heavily customized as the major distributions (preventing me from running into in weird, poorly documented problems) and easy to make modifications to.

Its user experience was not better than SuSE or Red Hat. For example, Red Hat already had a graphical installer, and Slackware was text based. Moreover, the KDE desktop experience in Slackware was a bit unpolished -- some desktop applications were not visible in the program launcher menu. I had to manually add them or start them from the command-line.

I was happy to see that compiling things from source code works as predicted. On Slackware 7.1, I have managed to successfully compile a modified kernel for my Ultra ATA 66 controller allowing me to use the full potential of the hardware in my computer.

Some time later in 2001, I installed the successor version: Slackware 8.0, which included KDE 2.1 and a driver for my Ultra ATA 66 controller. In RedHat Linux 7 I found the GNOME desktop appearance somewhat more appealing than KDE 1.1, but KDE 2.0 was a huge leap forward for me. It gave me a comparable desktop experience to Windows 98/2000. I have been using KDE as my primary Linux desktop environment ever since.

Interesting applications


The late 90s and early 00s were also interesting to me from an application perspective for Linux -- at the time Windows 98 was launched, Microsoft was in the news quite a lot because of Antitrust issues. For example, Microsoft had some huge competitive advantages by bundling Internet Explorer with Windows to compete with Netscape.

Some software vendors, most notably competitors of Microsoft, were actively looking at Linux as an alternative. As a consequence, a number of interesting commercial applications became available for Linux, such as Netscape, Real Player, and Adobe Acrobat reader. As a "serious rival" to Microsoft Office, there was StarOffice (its code base was eventually open sourced. As of today it is still actively developed as LibreOffice).

Moreover, in the gaming area many interesting things happened. Already in the mid 90s, some prestigious commercial games became available for Linux, most notably games from Id software.

There was a company called Loki Games that developed Linux versions of many popular Windows games, such as Quake 3 arena, Unreal Tournament, Sim City 3000, and Soldier of Fortune. From a commercial perspective Loki games did not do well and went out of business in 2002.

Although its commercial business was a failure, its legacy lives on: the company has demonstrated that Linux is a viable platform for games. Moreover, it developed free and open-source technology to make developing games on Linux easier, most notably SDL and OpenAL. As of today, these libraries are still frequently used by many games and multimedia applications.

Configuration challenges


I have decided produce an old Slackware 8.0 configuration, because this is the latest Slackware version I used on my first computer. It provides a decent KDE 2.1 desktop experience -- in my opinion this version of KDE provides a comparable desktop experience to Windows 98 and 2000.

Another objective is to run interesting applications and games from the late 90s, early 2000s. Most notably running some games from Loki games was high on my list of objectives.

I ran into a number of configuration challenges that I will explain in the next sections.

Upgrading the Linux kernel


Slackware 8.0 uses relatively old versions of the Linux kernel even for late 2001, early 2002 standards. By default, it recommends version 2.2.19, because it is considered more stable. Version 2.4.5 is provided as an alternative.

Linux 2.4.5 is missing quite a bit of functionality to optimally use my hardware. For example, it uses an old version the Open Sound System (OSS) that does not include a driver for my Audigy 2 card. Moreover, USB support is also limited -- I cannot, for example, use my Microsoft Sidewinder USB gamepad.

To improve the situation, I have upgraded the Linux kernel to version 2.4.23. I can still download the source tarballs of old 2.4 versions from kernel.org.

After downloading the tarball, I can unpack it as follows:

cd /usr/src
bzip2 -dc linux-2.4.23.tar.bz2 | tar xfv -

After unpacking the source tarball, it is recommended to clean the source code tree first:

cd linux-2.4.23
make mrproper

With the following command-line instruction, I can copy of Slackware's Linux 2.4.5 kernel configuration into the kernel source code tree and configure it in such a way that it works with version 2.4.23:

cp /boot/config .config
yes "" | make oldconfig

Then I need to make some adjustments to the imported kernel configuration. One way to do this is by using the menu-based configuration tool, by running:

make menuconfig

One of the adjustments that I need to make is to enable USB Human Interface Device support so that I can use my joypad:

USB support ->
<M> USB Human Interface Device (full HID) support
[*]   HID input layer support
[*]   /dev/hiddev raw HID device support

After enabling the extra kernel settings, I can run the following instructions to build the kernel image and corresponding kernel modules:

make dep
make bzImage
make modules

I can install the kernel modules as follows:

make modules_install

We must also make some modifications so that we can boot our new kernel. I can copy the kernel image and related artifacts (the config and system map) to the boot directory as follows:

cp -v arch/i386/boot/bzImage /boot/vmlinuz-2.4.23
cp -v System.map /boot/System.map-2.4.23
cp -v .config /boot/config-2.4.23

To make it possible to boot into our new kernel configuration, I must add the following entry to LILO: the bootloader's configuration (/etc/lilo.conf):

image = /boot/vmlinuz-2.4.23
  root = /dev/hda6
  label = Linux-2.4.23
  read-only

And instruct LILO to update the MBR, by running:

lilo

After rebooting the machine, I can boot my new kernel by selecting the entry: "Linux-2.4.23" in the LILO boot menu.

Sound support: installing ALSA


As explained earlier, one of the drivers that the Linux kernel is lacking is a sound card driver for my Audigy 2. It turns out that even the Open Sound System (OSS) in kernel version 2.4.23 does not include one.

In 2002 a new Linux sound sub system was still in heavy development: the Advanced Linux Sound Architecture (ALSA). In Linux 2.6, ALSA replaced the Open Sound System (OSS). At first, it was released as a separate package. ALSA seems to have a driver for my sound card.

I can complement my 2.4.23 kernel with ALSA and the corresponding driver for my card, by downloading the ALSA driver 0.9.8 tarball and running the following commands to build and install it:

./configure \
  --with-moddir=/lib/modules/2.4.23/kernel/drivers/sound \
  --with-kernel=/lib/modules/2.4.23/build \
  --with-sequencer=yes \
  --with-oss=yes \
  --with-isapnp=no \
  --with-cards=dummy,emu10k1
make
make install
./snddevices

In addition to the ALSA driver package, I also had to compile and install the ALSA library, ALSA OSS compatibility and ALSA Utilities packages. Installing them was straight forward by running the standard GNU Autotools build procedure: ./configure; make; make install.

Finally, after installing the packages, I need to do some configuration steps so that the kernel modules are loaded on startup and that the sound settings are restored. I can do that by adding the following lines to /etc/rc.d/rc.local:

# Load kernel sound modules
modprobe snd-emu10k1
modprobe snd-mixer-oss
modprobe snd-seq-oss
modprobe snd-pcm-oss
modprobe snd-seq-midi

# Restore volume settings
alsactl restore

By default, the sound is muted. We can adjust the volume by using the alsamixer:

$ alsamixer

I typically set the volume levels of the master and PCM channels to 74.

I can save my mixer settings by running:

$ alsactl store

Installing the NVIDIA Linux driver for my graphics card


2D graphics work decently out of the box in Slackware 8.0. XFree86, the X Window System distribution commonly used on Linux systems at that time, includes a driver for NVIDIA cards named: nv.

If you want hardware accelerated 3D graphics, you need to install an external driver package from NVIDIA. I have downloaded the 53.28 version of the NVIDIA Linux driver that seems to work decently.

Installing it is straight forward. First, you need to give the installer file executable permissions:

chmod 755 NVIDIA-Linux-x86-1.0-5328-pkg1.run

then you can run the installer as follows:

./NVIDIA-Linux-x86-1.0-5328-pkg1.run

When the installer asks to download a precompiled kernel module, simply deny and let the installer compile it.

After the installation is complete, we must make sure that the kernel module loads on startup, by adding the following line to /etc/rc.d/rc.local:

# Load video driver module
modprobe nvidia

We must also update the configuration XFree86 to use the new NVIDIA driver. We should open its configuration: /etc/X11/XF86Config in a text editor and change the following line:

Driver    "nv"

into:

Driver    "nvidia"

and enable OpenGL integration by uncommenting the following line:

# Load "glx"

USB peripheral support


In order to use USB peripherals, we must load a number of kernel modules at startup. I have added a number additional lines to /etc/rc.d/rc.local to do this.

Loading the following module enables support for my UHCI-based USB host controller:

modprobe usb-uhci

The following module enables USB storage support so that I can my USB memory sticks:

modprobe usb-storage

Adding the following lines allow me to use my Sidewinder USB joypad:

modprobe hid
modprobe joydev

To allow SDL applications to use my joypad I need to configure the SDL_JOYSTICK_DEVICE environment variable to refer to the joypad's device file. I have created the following file (/etc/profile.d/joystick.sh) to make sure that it happens at boot time:

SDL_JOYSTICK_DEVICE=/dev/input/js0
export SDL_JOYSTICK_DEVICE

APM support


Another subtle annoyance is that my system does not power itself off when I give the shutdown instruction. This problem can be fixed by loading the APM module at startup by adding the following line to /etc/rc.d/rc.local:

# Load APM module
modprobe apm

Configuring storage devices


My retro PC has support for quite a few storage devices: it has a GoTek floppy emulator, a traditional floppy drive, a DVD-ROM and two USB connectors that can work with all kinds of USB storage devices.

To use them on Slackware, I need to update my /etc/fstab so that I can easily mount them:

/dev/fd0     /mnt/floppy0    auto      rw,user,noauto
/dev/fd1     /mnt/floppy1    auto      rw,user,noauto
/dev/cdrom   /cdrom          iso9660   ro,user,noauto
/dev/sda     /mnt/usb        auto      rw,user,noauto

I must also create the missing mount point directories:

mkdir -p /mnt/floppy0 /mnt/floppy1 /mnt/usb

Experience


My Slackware installation works as expected. I can conveniently run the KDE 2.1 desktop and many applications, such as classic versions of the GIMP, Mozilla Suite, and Star Office:


I can also play a number of interesting free/open-source games, such as Tuxracer and Supertux 0.1.3:


What was challenging is that I had to compile all these games, including many of their dependencies (e.g. libxml2, SDL, smpeg, SDL_mixer, SDL_image etc.), from source code.

In the late 90s, early 00s, many software projects did not provide prebuilt packages for Linux distributions. Especially if you were using a non-mainstream Linux distribution, such as Slackware, it was a common habit that you had to build things yourself.

And of course, I was able to run a number of commercial games, such as those released by Loki Games: Unreal Tournament and Quake 3:


Windows XP


The third software configuration I looked into was Windows XP.

Windows XP was an interesting milestone for Microsoft. It was the first Windows version in the Windows NT-product line that was considered suitable for consumer use in addition to business use. With the release of Windows XP, the Windows 9x product-line came to an end. It became available on the market late 2001.

A couple of months earlier, I started my computer science studies and I had quite a few classmates that were enthusiastic about it.

By then I was already using Linux as my primary operating system on my home computer for a while. I could still dual boot Windows Millennium Edition -- I made the unfortunate decision to upgrade my 98 SE installation, which I regretted.

At first, I was not very motivated to try Windows XP. When Windows XP was released, I already knew that it had some huge advantages over the Windows versions in the Windows 9x product-line, thanks to its NT-heritage:

  • It is much more robust. For example, a misbehaving program in Windows 9x could easily render your entire system unstable even after terminating it. With Windows XP, the impact of misbehaving programs is more limited.
  • Other operating system components are more efficient and reliable. In Windows 98 SE, I frequently used a program called MemTurbo to optimize memory usage. In Windows 98 SE, I often lose quite a bit of allocatable RAM due to memory fragmentation. In Windows XP, memory management is much more efficient.
  • Its MS-DOS compatibility has improved over its predecessors in the Windows NT-product line. The Windows NT product-line also offers some degree of MS-DOS compatibility, but it is not as good as its Windows 9x counter parts. For example, in Windows 2000 and older, it was not possible to have any sound in MS-DOS applications. In Windows XP, Sound Blaster 2.0 emulation was added.

Although Windows XP had a number of improvements over the products in the Windows 9x product-line and previous editions of Windows in the NT-product line, I also noticed that it had a number of drawbacks for me:

  • It requires much more system resources. Windows 98 SE roughly requires 300 MiB of free disk space, but the requirements of Windows XP are much more substantial: you need at least 1.5 GiB of free disk space (even more if you want to upgrade to Service Pack 1 and 3).
  • Windows XP also requires much more RAM. Windows 98 SE already works with 16 MiB of RAM. In 2002, I read that the minimum requirement for Windows XP is 128 MiB, which was the total amount of RAM in my machine early 2002 (by 1999 standards this was considered to be a substantial amount of RAM). Later I learned that the minimum amount was downgraded to 64 MiB, but I believe you need to tune down certain visual effects to have a usable system.
  • Although MS-DOS compatibility is better that its predecessors in the Windows NT product-line, it is considerably worse than the Windows 9x product-line counterparts.

    For example, some DOS games I used to play run considerably slower, such as DOOM. Moreover, in some MS-DOS applications the sound is not optimal (or non-working) and some applications will not work at all (for example, those that will not work with an EMM driver).
  • Windows XP requires product activation. In order to use it, you had to activate your installation over the Internet or make a phone call to Microsoft to request a new activation key by providing your serial number and hardware key.

Although I was not too happy with the drawbacks of Windows XP, I eventually decided to install it anyway (as a dual boot option next to my Linux installation), because I considered it to be a huge improvement over Windows Millennium Edition.

Because Windows XP is an important development milestone and it allowed me to use some newer applications that are not supported on Windows 98 SE, I have also decided to create a Windows XP configuration for my retro PC.

Configuration challenges


Compared to my Windows 98 SE installation, in my Windows XP installation much more of my hardware was supported out of the box, such as my network card and USB storage support. Nonetheless, I ran into a number of configuration challenges.

Virtual memory / swap file issues


After successfully installing Windows XP, the first issue I ran into is that I was frequently seeing an error reporting that there is "not enough virtual memory". This error has quite an impact on the stability of the system and applications. Eventually, after some searching I discovered that no swapfile.sys file was created on my C: drive, explaining the lack of virtual memory.

After doing a search on the Internet, I discovered the root cause -- Windows XP considers my CF2IDE device a removable disk drive. Although Windows XP allows itself to be installed on a removable device, it does not allow such devices to be used to store swap files on.

I found a driver package, named: diskmod to work around this problem. I can install this driver by right clicking on the diskmod.inf file and selecting the option: Install. Then I can run the UFDasHDD.bat script to change all removable disk devices into hard drives.

After rebooting the system, my problem was solved -- my CF2IDE device is treated as an ordinary hard disk device and the missing swapfile is created.

Graphics card driver


Windows XP includes a driver for my Diamond Viper V770 card (containing a RIVA TNT2 chipset) supporting 2D graphics out of the box.

To use 3D graphics, I need to install an external driver package from NVIDIA. As with the previous operating systems, I did not use the latest version -- installing version 67.66 gives me no problems running the 3D applications and games that I want.

Sound card driver


For my sound card, I followed almost the same procedure as in Windows 98 SE. The only difference is that in Windows XP it is recommended to use the WDM driver.

Furthermore, because Windows XP is based on Windows NT (that was developed from scratch, rather than using Microsoft's MS-DOS legacy), it makes no sense to install the DOS drivers.

Using CD-ROM and DVD-ROM images


Similar to my Windows 98 SE installation, I can use Daemon Tools to mount CD-ROM and DVD-ROM images. I am using the exact same version (3.47) because it is still small / light weight.

Tools to fix DOS compatibility issues


Earlier, I explained that compatibility with MS-DOS is not optimal. There are some tools that can be used to fix certain kinds of compatibility problems.

To get sound support in some applications (e.g. Prince of Persia) or better sound card support (e.g. Sound Blaster 16), I have installed VDMSound. You can run the following TSR to get improved sound support:

DOSDRV

Although VDMSound may improve the sound experience for some DOS applications, I have also learned that its emulation performance is worse than the Sound Blaster 2.0 emulation that Windows XP provides.

Some games that use VESA graphics modes (most notably BUILD-engine games, such as Duke3D and Shadow Warrior) may refuse to start. By running NOLFB in advance, these games may work again.

Experience


Windows XP does not offer much advantages over Windows 98 SE for playing games -- most of my Windows games still work, but there are no games that perform significantly better. Furthermore, there are some DOS games that will no longer work.

I consider the biggest advantage of using Windows XP (beyond better stability) that I can run newer applications. Some of my prominent examples are Paint.NET version 2.72 (which I find interesting: it was a .NET application released as free and open-source software at a time that Microsoft was still very much opposed to the whole idea) and Sibelius 4.0:


MS-DOS 6.22 with Windows 3.1


Because using Compact Flash cards is so convenient to try out many kinds of configurations, I have also decided to create an MS-DOS 6.22 installation.

Although I have used MS-DOS 6.22 (and a number of older versions) on various kinds of machines including other people's PC as well as the emulated PC environment on my Amiga 500, I have never installed it on my first PC because there was no reason to.

However, since Compact Flash cards are cheap and I can conveniently switch them, I have also decided to set up an MS-DOS configuration.

DOS configuration challenges


Doing a clean MS-DOS installation is straight forward by following the steps in the installer. In addition, I had to perform the same kinds of DOS-related configuration steps as in my Windows 98 SE installation:

  • Installing the cutemouse driver
  • Loading the CD-ROM driver and mounting the CD-ROM drive.
  • Optimizing free conventional memory with MEMMAKER.

There were a couple of additional challenges:

Creating partitions


MS-DOS 6.22 does not support FAT32 filesystem partitions. The best it can do is FAT16, which has a maximum storage limit of 2 GiB. The smallest Compact Flash card I could buy is 4 GiB. Fortunately, it is possible to create two partitions of 2 GiB each, still allowing me to use all of the card's storage capacity.

Sound card support


My Sound Blaster Audigy 2 CD-ROM does not include an installer for MS-DOS. However, I discovered that somebody in the retro computing community has developed an DOS specific configuration pack (by extracting the DOS portions from the Windows 9x installer) and released it on VOGONS.

Installing this DOS pack is easy -- I simply need to unpack it into the root directory of my C: partition.

I had to make a number of subtle changes. First, I need to edit the batch script that initializes my soundcard (C:\AUDIGY2\LIVEINIT.BAT) and make the following modifications:

  • Change the paths from: c:\sblive to C:\AUDIGY2.
  • Uncomment the line that loads audigy12.exe executable
  • The SET BLASTER instruction must match my settings. For me it is: SET BLASTER=A220 I5 D1 H5 P330 T6.

I also had to update the configuration file (C:\AUDIGY2\CTSYN.INI) with the correct IRQ:

SBIRQ=5

As explained earlier in this blog post, the Sound Blaster 16 emulation TSR requires an EMM driver to get access to the Upper Memory Block (UMB). If you have not yet configured it, you can add the following line to C:\CONFIG.SYS:

DEVICE=C:\DOS\EMM386.EXE NOEMS

To allow the sound card to be initialized on startup, I have added to following line to the early stages of AUTOEXEC.BAT:

CALL C:\AUDIGY2\LIVEINIT

If your AUTOEXEC.BAT loads TSRs, such as SMARTDRV.EXE or MSCDEX.EXE, then move them so that they are invoked after the initialization of the sound card. According to the documentation, certain processes may conflict with the soundcard initialization.

Windows 3.1 configuration challenges


In addition to MS-DOS 6.22, I have installed Windows 3.1, which was still a separate product from MS-DOS back in the early 90s. Moreover, Windows 3.1 was not an operating system, but a graphical shell running on top of MS-DOS.

Installing it was straight forward, but there were a number of things I could do to improve the configuration.

Installing my graphics card driver


By default, Windows 3.1 uses a 640x480 resolution with 16 colors for displaying graphics. If you want to use better screen modes (such as higher resolutions and more colors), it is recommended to install a driver for your graphics card.

Fortunately, there is a Windows 3.1x driver for NVIDIA RIVA TNT2 video cards.

Installing it was straight forward by unzipping the driver package into a temp directory (e.g. C:\TEMP\NV) and running the following steps:

  • Main -> Windows Setup
  • Options -> Change System Settings...
  • Display: Other display (Requires disk from OEM)...
  • Pick: NVidia TNT (640x480x256, small font)

When it asks for the driver disk location, provide the location of the temp directory (C:\TEMP\NV). It may also ask you to insert a disk named: ".". In this case answering: C:\WINDOWS\SYSTEM did the job for me.

Sound support


Dealing with sound support in Windows 3.1 was the most tricky configuration aspect. Similar to MS-DOS, there is no Windows 3.1 driver for my sound card. I thought this would not be a big issue, because I have DOS TSR that emulates a Sound Blaster 16.

Unfortunately, installing the Windows 3.1 Sound Blaster 16 driver did not work. I also tried the Sound Blaster 1.5 or 2.0 drivers, but none of them worked. As far as I can see, none of these drivers are compatible with my emulated SB16 device.

Moreover, I also believe it is difficult to support integration with the emulated DOS driver because Windows 3.1 runs in 386 enhanced mode by default, in which virtual memory is used. It may not be able to communicate with the emulate DOS device at all.

I gave up searching for a solution and decided to install the PC speaker driver.

I can install it by executing the following steps:

  • Main -> Control Panel -> Drivers
  • Click on: Add
  • Select: Unlisted or Updated driver
  • Insert PC speaker driver disk
  • Provide location: A:\
  • Select driver: Sound Driver for PC-speaker
  • Enable: Enable interrupts during playback

The PC speaker driver at least gives me some sound, but I cannot, for example, play any MIDI files.

Experience


I can run many DOS applications and games, such as QuickBASIC, Lotus 1-2-3, Historic and Duke Nukem 2:



Although many applications work, my sound experience is not optimal -- some applications crash if I enable sound effects, such as DOOM (Sound Blaster or General MIDI music works fine though). If you want to have an optimal pure MS-DOS experience, I recommend using an ISA soundcard.

Windows 3.1 works -- I can run all kinds of applications and games, such as Minesweeper and Visual Basic 3.0:


Due to not having a proper sound card driver, I cannot use most multimedia applications, such as Windows Media Player to play MIDI files.

Conclusion


In this blog post, I have described how I have built a retro PC allowing me to run the same kinds of applications and games that I frequently used in the late 90s, early 00s.

I have produced four kinds of software configurations (running four different kinds of operating systems) to demonstrate how the applications that I find interesting can be used. In addition, it is a nice machine to run some future projects on.

Some readers that know me well would probably ask me why I have only produced one Linux configuration (Slackware 8.0) and why I have not tried any of the other Linux distributions that I have mentioned, such as SuSE and Red Hat.

Although I appreciated Linux and Slackware was initially working out for me, I was never fully satisfied with any Linux distribution. Moreover, I also did a substantial amount of customization work on all kinds of Linux systems. To make that kind of work doable, I also worked on a custom developed automated solution. This is an interesting story for a future blog post.

Acknowledgments


I am very thankful to the efforts of all kinds of people in retro computing community. Without their efforts, it would be very difficult to do all this stuff.