Once the partnership with IBM faltered with the development of OS/2, Microsoft went alone and Windows NT was born back in 1993. Microsoft’s first true 32-bit operating system, it generally was to be seen only on high-end desktop workstations and servers. The first version was 3.1, to match the versioning of the more consumer orientated Windows 3.1 that was released a year prior. There was two editions – one named simply Windows NT 3.1 for workstation use, and the other named Windows NT 3.1 Advanced Server which obviously suggests for servers on a network. A relative lack of 32-bit software and higher system requirements meant success was limited and most of the attention was towards MS-DOS and Windows 3.1.
Installing Windows NT 3.1 is certainly not the easiest Windows to install into VirtualBox due to a few limitations. It’s very easy for the VM to crash or for NT 3.1 to complain about the hardware due to what was available at the time. Back then, Intel had been beta testing their new Pentium processors to supersede the 486, and introduced the CPUID instruction set which allows software to identify the CPU’s features.
When the Pentium Pro processor was introduced this began to cause issues installing NT 3.1, and subsequently Pentium II and faster processors experienced the same problem. Setup would believe the processor was just not supported due to the changed value in the CPUID.
Once you jump that hurdle during Setup, you think great it’s actually working once greeted with the login dialog box. Upon typing your password, you’re greeted with a kernel crash no second sooner than Program Manager was to load.
Other caveats included a lack of support for IDE CD-ROM drives or the PCI bus. This didn’t mean you couldn’t install on a computer with PCI slots, it just meant that if the PCI card plugged in had drivers available it would run in ISA/EISA compatibility mode. It was the first Windows version to include TCP/IP, however with no DHCP support it meant that you had to manually configure an IP address for the network connection.
In 1993 a PC having 64 MB RAM wasn’t really heard of, though not impossible. Even the minimum requirements of 16 MB RAM was rather steep for that period so the following caveat wasn’t particularly concerning at the time. Depending on how the BIOS reports back the amount of memory available, NT 3.1 may only see no greater than 64 MB RAM. Using VirtualBox this is definitely the case. However putting aside the technicality of this, it can support and utilise the same amount of RAM as any other 32-bit operating system. It’s been documented elsewhere that by replacing NTLDR and NTDETECT.COM from NT 3.51’s Service Pack 5, you may then overcome this limitation. Microsoft had documented how this happens, though lacking in some historical context.
KB117373 – Windows NT Recognises Only Up to 64 MB RAM on Some Computers
With all of this taken into account, normally I’d just use NT 3.51 as these issues no longer existed and generally better supported by software, hardware drivers, and emulators. This had been a learning curve for me virtualising NT 3.1.
For this walkthrough, I was originally using Oracle VirtualBox 5.1.10 on a Windows 10 machine. However I was experiencing NTOSKRNL.EXE crashes like the one just shown no matter what. When I downloaded Oracle VirtualBox 5.0.30 however, miraculously those crashes just disappeared. It’s a separate topic, but it does beg the question as to what changed with VirtualBox to cause this.
For this guide you’ll need to have:
- Oracle VirtualBox installed (5.0.30 works, 5.1 – 5.1.14 didn’t work for me, 5.1.18 works)
- CD or ISO image of Windows NT 3.1 (you also could use the floppy disk version)
- Floppy disk or image of the “Setup Disk for CD-ROM installation” disk
- Boot floppy disk or image with a text editor
- VirtualBox video driver Download
- AMD PCNET network driver Download
Setting Up The Virtual Machine
In VirtualBox I created a VM (virtual machine) using Other Windows (32-bit) as the OS choice. In the wizard I adjusted the RAM size to 32 MB and created a 1 GB hard disk. Once the VM has been created I go into Settings to make these further adjustments:
- System > Acceleration tab > Deactivate the VT-x/AMD-V and Nested Paging
- Display > Scale Factor > Default is 100%, useful for enlarging low resolution output on our modern resolution displays if desired
- Storage > Add SCSI controller with BusLogic as the type, then attach an optical drive
- Storage > Add floppy controller, then attach a floppy drive
- Storage > Remove the optical drive under the IDE controller
- Audio > Audio Controller > Use SoundBlaster 16
- Network > Adapter 1 > Use Bridged Adapter and ensure it’s a PCNET-Fast III
- USB > Deactivate the USB controller
Installing Windows NT 3.1
Start the VM with the NT 3.1’s boot Setup disk, and the NT 3.1 CD mounted via SCSI and you should see the following. Press Enter, then choose Express for installation type by pressing Enter.
Setup detects the SCSI drive and asks whether you wish to install any additional SCSI adapters. There isn’t anything else, so press Enter. If Setup says it cannot detect the optical drive, double-check your VM settings under Storage.
If okay, Setup proceeds to advise that the hard disk has either a non-standard operating system or hasn’t been used. Press C to continue. It then shows the unpartitioned disk space on the virtual hard disk. Although you may set up multiple partitions we’ll continue by pressing Enter to use the entire disk. The following choice is whether you wish to use the NTFS or FAT file system. For this exercise I’ll leave it up to you, but I chose Format to NTFS here. Setup gives a warning about losing everything on the drive, press F to continue formatting the drive.
Once formatted Setup asks where you wish to install NT 3.1, and will begin copying the files from the CD once confirmed. This shouldn’t take long to complete and at the end you will see the following that installation was successful.
At this point, remove the NT 3.1’s Setup floppy disk and mount a DOS boot disk that has a text editor such as EDIT.COM. Then press Ctrl and Del together to give the Ctrl+Alt+Delete command to the VM to restart.
Once your VM starts up off the boot disk into DOS, open your text editor. I just used a MS-DOS 6.22 boot disk with MS-DOS Editor. From the A:\ drive type edit and press Enter. You likely won’t have the mouse driver loaded so it will be a matter of navigating with the keyboard.
Open the file named INITIAL.INF founded under the C:\WINNT\SYSTEM32 directory. As shown below, the variable under ProcessorVar needs to be changed to force NT 3.1 to believe the processor is plain old original Pentium.
Where it says:
[ProcessorVar] STF_PROCESSOR = "" ? $(!LIBHANDLE) GetProcessor
[ProcessorVar] STF_PROCESSOR = "" ? $(ProcessorID_I586)
Save the file, and open SETUP.INF in the same location. SETUP.INF also has this variable and needs to match as well. Once again do the same with NCPASHEL.INF. With all files updated, restart the VM without any floppy disks.
If all goes well, you should now see the graphical part of Setup asking for your name.
Follow the next few prompts regarding the computer name, and locality settings. When asked to select a printer, select Cancel where it will advise you that you can install one later using Print Manager.
The next step is Setup will attempt to detect the network adapter and fails. Select Continue twice as another dialog box comes up regarding remote access. Select No Network for the time being. Additional files are copies across and Program Manager appears creating icons and program groups. You’ll be prompted to provide an Administrator password followed by a user account and corresponding password.
Pick your time zone, and create an Emergency Repair Disk if desired. Setup comes to a close and will ask to restart your computer.
Up until this point I was using VirtualBox 5.1.10, so I’ll continue with VirtualBox 5.0.30.
After confirming your user account credentials, you’ll likely run into an error about a service not starting up though you’ll still be able to continue and Program Manager now appears.
Service Pack 3
Now that NT 3.1 is installed, it’s time to install the last major service pack for it. As with other versions of NT, you don’t need to install the earlier service packs beforehand. Originally the service pack was provided via CD, 9 floppy disks, or online via BBS or FTP.
I’ve also rearranged the service pack files for easy installation from CD as an ISO image that you can download also.
Once complete, you’ll need to restart and voila all the major updates have been installed.
Improving Video Quality
Thanks to a clever person Michal Necasek who runs the OS/2 Museum blog (which I recommend having a look), a VirtualBox video driver was developed compatible with Windows NT 3.1 through to Windows 7.
To upgrade from the primitive VGA mode, install this driver via Windows NT Setup under the Main program group in Program Manager. Select Options on the menu, then Change System Settings.
Under the drop-down menu for Display, select Other at the very bottom of the list and point to where you’ve stored the video driver such as your floppy drive.
From the INF file you should see a new list of video modes available beginning with VirtualBox. I went for the 1152 x 864 resolution in 24-bit colour. After restarting the VM, the VirtualBox window should noticeably be bigger.
Getting wavetable sound to work is quite easy with NT 3.1 and doesn’t require additional drivers. Heading into Control Panel from the Main program group, and double-click on Drivers. Select Add in the Drivers dialog box Creative Labs Sound Blaster 1.x in the list. Highlight it and select OK. With the drivers installed, a dialog box will show to confirm the port and interrupt to use. Use 220 for the port, and 5 for the interrupt. You will need to restart Windows for the sounds to take effect.
If you hadn’t configured networking during the installation of NT 3.1, you may install the network drivers via Control Panel. Double-click on Network to bring up the Network Settings dialog box. Select Add Adapter, choose Other from the bottom of the list of adapters, and then select Continue.
An additional dialog box appears to install the driver from a floppy disk. Using the AMD PCNET driver disk image, you need to change the path to A:\winnt to successfully retrieve it. A Select OEM Option dialog box should appear with the only optioned named AMD PCNET Family Ethernet Adapter as the choice. Select OK.
When the driver is installed, a configuration dialog box appears however you may continue but selecting OK with the default settings. With the adapter installed, it’s time to change the network protocols installed.
Back in the Network Settings dialog box, choose Add Software. Similar to adding the adapter, a dialog box appears with a list of various protocols and services. Choose TCP/IP Protocol from this list and select Continue. You’ll need to have your NT 3.1 CD or floppy handy to install. Once the files are copied across, the protocol will appear under the Installed Network Software box. You may also from here remove NetBIOS and NetBEUI protocols as they won’t be of any use these days.
When you select OK on the Network Settings dialog box, as the TCP/IP protocol was just installed it will request information about which IP address and gateway to use for your network.
As the VM has the network settings to be a bridged adapter, I used the IP address from my home router as the gateway, and used an IP address in the same range as my own physical computers on the network that I know isn’t being used by anything.
Once a static IP address that is appropriate for your network, you should be able to ping to other computers by their IP address. However to resolve by the computer’s name which is much easier to remember, you need to configure DNS which is typically done by either your server or home’s gateway.
Back in the TCP/IP Configuration dialog box, select Connectivity to bring up the TCP/IP Connectivity Configuration dialog box. Here you can change your VM’s host (computer) name and choose whether to look up for using the DNS settings here and/or using a host file. For this I selected DNS Only as I won’t be using a host file. Directly below it I enter the same IP address as used for the Default Gateway where you click on Add resulting in the IP address to move across to the right hand side as below.
With the IP address entered, click OK three times to complete and close the network settings. Your NT 3.1 VM should now be useable over your network, although personally I had mixed results with this.
The good part was that I could successfully download a copy of Netscape Navigator (a popular web browser from the 1990s) off my own FTP server, and that I could connect to shares via File Manager on my Windows Server 2012 home server.
The bad part was I wasn’t getting much love from the Windows Server 2003 R2 Hyper-V virtual machine (that’s running on the home server) to connect to despite downgrading the NTLM authentication. I would have expected this to have been the other way around if this was to be a problem, although I have NT running on old IBM ThinkPads and it’s generally been fine.
I managed to connect to Australia’s Google site as it crashed. As a guess it may relate to the VirtualBox video drivers, or simply using VirtualBox. Either way, I think NT 3.51 is just a bit more up to the task with network connectivity and reliability.