Generic x86 multiprocessing, Summer 1994 edition. There’s not much to say:
And later, after bootup:
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.