NT 3.1 SMP

Generic x86 multiprocessing, Summer 1994 edition. There’s not much to say:

NT 3.1 SMP BootYep, that’s NT 3.1 running in a VM, and it sees two processors. Remember, you saw it here first!

And later, after bootup:

NT 3.1 Performance MonitorSadly, more than two CPUs aren’t recognized by this regular NT 3.x setup, although Advanced Server ought to support at least four (not yet tested).

It took some lucky Googling to find the MPS 1.1 HAL for Windows NT 3.1 in a very unexpected place (sometimes, the Internet giveth… even if other times it taketh away), as well as hacking up VirtualBox until the annoyingly picky MPS 1.1 HAL was happy with what it saw.

It’s not clear whether the HAL was provided by Intel or Microsoft. It was probably Microsoft with significant help from Intel. It’s from mid-June 1994, predating the release of NT 3.5 by a few months.

At about the same time, OS/2 2.11 SMP also appeared, and likewise supported MPS 1.1 in addition to vendor-specific hardware. Solaris 2.4 was another early adopter of Intel’s MPS, née PC+MP specification.

Relatively inexpensive dual-socket Pentium systems came to market at that time, aided by the fact that second generation P54C Pentiums included built-in local APIC and that Intel provided all the building blocks with the 430NX (Neptune) chipset. MPS was intended to support multiprocessing on such systems (as well as larger servers) and did the job well until it was eventually—much later—replaced by ACPI.

I had no luck with NT 3.5 and 3.51 SMP in a VM. Both crash the same way during bootup for some very non-obvious reason. It’s not clear if the crashes are directly related to SMP or some other features the MPS HAL/kernel might be supporting; likely the latter. There’s never been any trouble with NT 4.0 SMP on the other hand. For reference, NT 3.5 supports MPS 1.1 (but not 1.4) out of the box, NT 3.51 ought to support MPS 1.4 as well. NT 3.1 only supports vendor specific SMP hardware out of the box for the obvious reason that MPS was only finalized about a year after NT 3.1 came out.

If I’m sufficiently bored I might try patching the NT 3.1 HAL to work with MPS 1.4 and newer I/O APICs, but that’s not a promise.

This entry was posted in Intel, NT, SMP. Bookmark the permalink.

67 Responses to NT 3.1 SMP

  1. Ray says:

    I’am now the second man on earth with running nt3.1 smp in virtualbox. 🙂

  2. Michal Necasek says:


  3. Yuhong Bao says:

    I wonder what the MPS version setting in the BIOS actually does, BTW.

  4. Frank says:

    Congrats to all who’ve managed to achieve NT 3.1 SMP. 😀

    Having searched far and wide (including ftp’s) for the MPS 1.1 HAL file specifically for NT 3.1… I can say it’s unfortunately unobtainable.

    If anyone has a copy of the file handy could they please share a copy? Maybe by a temporary drop box location or something, that would be much appreciated.


  5. Frank says:

    Could I confirm that you are both running either installed hardware dual CPU systems or (virtual) software emulated dual CPU systems?

    Thanks again

  6. Michal Necasek says:

    Screenshots were taken in a VM. I could try on physical hardware as well, I think I should have some sufficiently old SMP system.

  7. Michal Necasek says:

    Search for ‘mpshal11.dll’. It’s on DriverGuide, very well hidden inside a ZIP archive that’s called PKUNZIP.EXE, inside a driver package for some TV tuner or something. Don’t ask me how it got there, it makes no sense to me 🙂

  8. Michal Necasek says:

    Changes the reported MPS version (1.1 vs. 1.4). On some fancier systems, it should also remove the version 1.4 specific sub-tables when 1.1 is chosen.

    And why is the setting there? Microsoft, of course 🙂

  9. Yuhong Bao says:

    I remember that for example Abit BP6 with one old BIOS version, USB would work with 1.1 but not with 1.4.

  10. I know it’s just going to show that you did need to tweek Virtual Box, but yeah, VMWare Player 12.5 with the BIOS set to SMP 1.1 didn’t work, neither did Qemu 2.7 … I can’t say I was really expecting anything but yeah… . No va.

    Now that I have my pointless Apache on NT server, I wanted to push it into SMP land for no apparent reason.

  11. Michal Necasek says:

    It’s not the BIOS, it’s the (emulated) hardware. The MPS HAL for NT 3.1 is unnecessarily picky and only designed to work with 486s or the (old?) Pentium CPUs. I think there’s a way to patch it, I’ll have to dig through my archives.

  12. Yuhong Bao says:

    Thinking about it, I wonder if part of the problem was that NT 3.1 lacked PCI support. But there was NT 3.1 drivers that tried to support PCI anyway. NT would not have been aware that PCI devices would have different IRQs in APIC mode.

  13. x says:

    Hi! Can you please upload this “MPS 1.1 HAL” somewhere? Aforementioned site wth “pkunzip.exe” isnt working now…

  14. shelby says:

    I installed the MPS 1.1 HAL in NT 3.1 and i got a blue screen. It said
    HAL: This HAL.DLL requires an MPS version 1.1 system.
    Replace HAL.DLL which the correct HAL for this system. The system is halting.
    Any idea how to solve it?

  15. Michal Necasek says:

    Run it on a system that has MPS 1.1 and an old APIC.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.