Piero V.

Retrocomputing a bit with Windows 2000

Many years ago, I had some old machines, and I wanted to play with them to test Skolelinux’s capabilities in a small network. I decided to install Linux on some and Windows on others.

I must have thought that one of them was particularly old, and I decided to install Windows 2000 on it. But the real reason might have been that it was one of the few Windows versions I had never played with 😜️.

Then the whole project stopped because I did not have enough peripherals. Moreover, it would have continued for a few days, and I did not have room to occupy for a long time.

But as you may know, sometimes I get a desire to experiment with antique software. And a while ago, I remembered I still had never played with Windows 2000.

Testing it in a virtual machine

Virtual machines and emulators are a great tool to experience old software again. They can even add some isolation for improved security.

A pair of years ago, I tried to install Windows 98 into a VM, but it gave me some trouble, especially with the display drivers. I have tried again with DOSBox-X, and it was a much simpler experience.

But 2000 is based on NT, so it does not work in DOSBox. But on the other hand, it has a much more solid kernel. Therefore, it can work with a standard hypervisor, even with hardware acceleration.

Tips for QEMU

I have been a Linux user for almost 15 years, so VM means QEMU/KVM for me 🙂️. I do not even know why I think of old Windows versions when thinking about retro computing instead of playing with old distributions 😅️. Some things would be much easier.

Currently, my QEMU command line is the following:

kvm -cpu pentium3 -m 3G \
	-nodefaults -vga vmware \
	-hda win2000.qcow2 \
	-nic user,model=e1000 \
	-device AC97 \
	-rtc base=localtime \
	-usb \
	-device usb-ehci,id=ehci \
	-device usb-kbd \
	-device usb-tablet,bus=usb-bus.0

For the installation I have also passed the -win2k-hack argument.

You may have already noticed that I do not specify any virtualization-specific devices, such as VirtIO peripherals or QXL graphics: they need Windows XP or later. But let me proceed with a comment on all the parameters.

-nodefaults is the flag that helped me the most. Without it, the installer refused to start. However, it really disables everything, including any display output.

The graphics card

This is a sore spot when dealing with old Windows versions. If they do not have a driver, they fall back to 640×480 at 16 colors. If I remember correctly, only XP started to always use 24/32-bit colors, and only more recent versions use higher resolutions by default.

So, I have tried all QEMU’s options, and eventually, I found that vmware is the one that has official Windows 2000 drivers and offers the most advanced features. Sadly, the official way to get them is to be a VMware customer. But if you look for something like “VMware SVGA II windows 2000 drivers”, you can find them on a drivers-collection website. I am not comfortable linking them here because I am not sure they have the right to distribute them, and I cannot verify their authenticity.

However, I preferred using the cirrus VGA for the installation phase. Changing the models after the first boot worked without problems, at least after installing the drivers manually.

Other basic devices

I have manually specified a Pentium 3 as a CPU. I thought that it was one of the most recent CPUs when Windows 2000 was released and that it might have reduced the chances of issues.

As for the RAM, I specified 3GB because I have plenty of memory in my host system, and it is close to the maximum of 32-bit systems. I chose a smaller amount for the installation process, then increased it, but it could have probably worked anyway.

I specified the storage using the old hda parameter for plain IDE disks, which is what Windows 2000 supports without additional drivers.

Finally, the RTC clock must be set to local time because that is what all Windows expect.

Input peripherals and USB

Tablets are the best pointing inputs for virtual machines because they provide the correct absolute position of the pointer to the guest. I often have problems with regular mice: for example, the guest’s cursor is not aligned to the host, or they move at a different speed. Therefore, I switch to a tablet as soon as possible.

However, even though 2000 SP4 supports USB 2.0, I had some problems with the EHCI host, so I plugged it into the 1.1 hub, and, again, only after the installation.

I configured the VM to use a USB keyboard, but only because it seemed more consistent to me rather than for a real need.

In other circumstances, I would have used the VirtIO PCI inputs, but with Windows they require at least XP.

Network and audio

The remaining devices in my command line are for network and audio. For sound, I chose AC’97 because I was sure Windows already had drivers. But I am not interested in having good quality audio from the VM.

Finally, the network: first, let me remind you that you should not use Windows 2000 to surf the Internet. However, having a working network interface can help transfer drivers and other files from some servers you control or absolutely trust.

QEMU supports several NICs. It can emulate the Realtek rtl8139, a 10/100Mbps card whose drivers are bundled in the OS.

But 100Mbps is slow, so I preferred switching to an Intel gigabit card. The drivers are not included in the OS, but they are easy enough to find. I saw download speeds up to 30-40MB/s (and about 250Mbps on iperf2).

The updates

For whatever you want to use your installation for, having some updates could help you both in a VM or in a physical machine.

The offline updates

The updates are available not on the Windows Update servers anymore, but it is possible to find a collection of all the updates, just search for a file called wsusoffline-w2k-enu.iso.

It can be downloaded from Archive.org, but I cannot tell whether it is legit or if it contains some malware in these updates.

The extended kernel

As an alternative, a user called blackwingcat developed an unofficial update that backports some Windows API to run software on Windows 2000 even though it requires Windows XP or higher. It is called Windows 2000 Extended Kernel.

I have tried to install version 3.0e three or four times, but it always broke my installation, and I could not log into my system anymore. The solution was formatting again.

By reading on the forums, I have understood I am not the only user with these problems. And at the time of writing, I could not download a more updated copy because of some server problems.

Running on the real thing

The VM is enough for many scopes. However, it does not have graphics hardware acceleration. Sometimes, I play with computer graphics and 3D graphics development.

So, I wondered: could I run OpenGL 3.3 applications on Windows 2000 if I had a compatible card? And possibly, in the “most official” way, i.e., without an extended kernel?

My hardware

I had already had a computer that I could use: an old desktop with a dual-core Pentium E5300, installed on an ASRock G31M-GS with 4GB of memory. However, it had an Nvidia GeForce GT610, a card for which Windows 2000 drivers do not exist, and I did not want to format the hard disk the PC already had. So, the project took a while to start.

The occasion came last Saturday when I went to the electronic fair in Pordenone, and I remembered this crazy project. I bought a new disk and a Radeon HD 2400 Pro for 10€, and I started working with them.

The installation

As expected, the installation from USB did not work. I do not know whether the drive was not detected or Rufus screwed something up. But using a CD was not a big deal for me. Apart from this, everything then worked flawlessly.

Just be advised that the installer recognizes only 128GB of storage, but in any case, creating a small partition (< 10GB) and then extending it with Gparted is a good idea because the quick formatting has been introduced with Windows XP.

You can create a partition with a custom size by pressing the C key in the unpartitioned space. If you press enter, the installer will use all the free space it sees instead.

The easy part

The USB drive and mouse worked immediately in the system, and this was a great result because it allowed me to install programs and drivers without having to burn them or inject them by some other OS like a Linux live.

Many drivers came in .zip files, but the latest 7-Zip version is still compatible with Windows 2000!

I have installed the chipset, network, and audio drivers without problems.

For curiosity, I have tried to run iperf there: it was about 100Mbps faster than the VM, but still much slower than the full gigabit Ethernet. I wonder if Cygwin is a culprit, at least in part.

Graphics: the elephant in the room

As I wrote, the graphics drivers are the real issue with old Windows versions. Especially since they are the primary reason to do all of this in a physical machine.

Just for contextualization: the HD 2400 Pro came out in June 2007, some months later than Windows Vista. Windows 2000 was released in December 1999, its mainstream support ended in 2005, and the extended support ended in 2010. OpenGL 3.0 was released in 2008, and OpenGL 3.3 was released in 2010.

In other words, I would need a driver that was released around the time Windows 2000 was becoming completely unsupported. Yikes.

Sadly, it makes sense that this Radeon never supported 2000. Forcing the drivers lead to a BSOD because the drivers use some APIs introduced with Windows XP.

So, the extended kernel is the only way to achieve this… A failure for me since I could not get it to work.

The last chance

My choices at this point were:

  1. an Nvidia GPU;
  2. an older Radeon;
  3. the integrated GPU (GMA3100).

Number 1 would have been okay in other times, but with all the scalpers, even very old GPUs are too expensive for what they offer.

I have tried with number 2 because I still had an ancient Radeon X300 SE. Even though I have kept it in a box since the publication of that article, it did not work. I do not have a clue about the reason; the PC did not output anything at the boot.

So, I went for the Intel one, which worked without any issue. It also runs Call of Duty: United Offensive (but not Call of Duty 2). Like the X300, it supports only up to OpenGL 2.0, but old Intel cards are known for not always producing correct renderings.

Conclusions

The backward-forward compatibility between Windows versions and hardware is impressive and allows you to get some fun.

But does it make sense to run Windows 2000? Not at all, in almost all cases. Basically, any Windows 2000 compatible hardware should be able to run on XP, but not the opposite. And, in 2022, you should not use any of them for any serious intent.

But it is more than okay for some nostalgic moment or some challenge 😉️.