Short answer: Yes.
Before launching into the long answer, let’s recap what it even is. FasterModeSwitch is a SYSTEM.INI setting in Windows 3.1 which applies only to Standard (286) mode and can therefore be found in the [standard] section of the INI file. KB article Q83387 describes the setting accurately and explains everything… except what it actually does.
Here’s what Microsoft had to say on the subject: Enabling this setting causes Windows running in standard mode to use a faster method of switching from protected to real mode on many 80286-based computers. When this setting is enabled, Windows responds quicker to hardware interrupts, allowing better throughput for interrupt-intensive applications, such as communications applications. In addition, you should enable this setting if you are using a Zenith Z-248 system and are losing characters while typing, or if you are using an Olivetti M-250-E and lose control of the mouse.
Note: This setting has no affect [sic] on 80386-based computers. Some early IBM-AT and compatible computers do not have the BIOS support necessary to use this setting. Enabling this setting on these computers may cause them to hang when starting Windows.
The upshot then is that enabling FasterModeSwitch either speeds up Windows 3.1 or hangs it, depending on the machine’s BIOS implementation. Now, what does the setting really do, and why is the behavior system specific? Here’s the long answer…
Windows 3.1, like other 286-based protected-mode systems with DOS compatibility, must switch from protected to real mode by resetting the CPU, a capability which IBM designed into the PC/AT. The mode switch behavior described below was experimentally determined by running Standard mode Windows 3.1 under emulation.
Windows resets the CPU by causing a triple fault, which is a faster method than using the PC/AT keyboard controller to trigger a reset (the PC/AT BIOS uses the latter, slower method). After reset, it needs to regain control rather than letting the system go through POST.
Shutdown Code 09h
The default Windows 3.1 behavior is setting up CMOS shutdown status 09h (written into CMOS byte 0Fh). Status 09h was designed to handle the INT 15h/87h service (extended memory move) which also first enables protected mode and subsequently resets the CPU.
The downside of the shutdown code 09h “return path” (i.e. code executed very early in the BIOS POST sequence when shutdown code 09h is detected) is that it does more than Windows needs. Shutdown code 09h skips re-initializing interrupt controllers, which is a necessary pre-requisite. But it does other things that Windows really does not need.
Shutdown code 09h forcibly disables the A20h gate, which is a) slow, and b) undesirable. If Windows actually needs the A20 gate enabled (likely), it means the BIOS first disables it and Windows has to immediately re-enable the A20 gate again. That’s a problem because the A20 gate is controlled through the keyboard controller, which is not fast.
A minor annoyance is that shutdown code 09h enables interrupts, which the OS may need to immediately disable again. The POST code also accesses the manufacturing status port 80h more than Windows really cares about.
Shutdown Code 0Ah
With FasterModeSwitch enabled, Windows uses shutdown code 0Ah to come back from reset. The code path is considerably shorter, does not touch the A20 gate, and relatively quickly jumps to a far address stored in the BDA.
For the purposes of Windows 3.1, shutdown code 0Ah has clear benefits over code 09h and no drawbacks.
When it works. The trouble with shutdown code 0Ah is that it behaved differently in the first PC/AT BIOS (dated 01/10/84). The difference was that in the original PC/AT BIOS, only shutdown code 09h skipped the interrupt controller reset. Shutdown code 0Ah reset both interrupt controllers, which would mean lost interrupts. That is why Windows cannot use shutdown code 0Ah on early IBM PC/ATs and early AT compatibles which emulate the behavior of the original PC/AT BIOS.
Starting with the second PC/AT BIOS (dated 06/10/85), shutdown codes 09h and 0Ah both skip interrupt controller initialization. On such machines, shutdown code 0Ah is usable by Windows and preferable to shutdown code 09h.
Real World Usage
There are also reports that enabling FasterModeSwitch is necessary for Sound Blaster audio playback, at least on slower systems.
All of the above mentioned usages affect software which is to some extent real-time and must operate with relatively low latencies. Reprogramming the A20 gate at least once and likely twice might take many milliseconds, and it is thus not surprising that it would seriously interfere with software requiring fast interrupt response.
It is unfortunate that FasterModeSwitch could not be enabled by default, and detecting whether it is usable (or even available) on a given system would be difficult, likely causing a hang or uncontrolled reboot if not supported.
The reconstructed source code for all three PC/AT BIOS code can be found at pcdosretro. The relevant files are TEST1.ASM (the START_1 POST entry, early initialization and shutdown code handling) and BIOS1.ASM (SHUT9 label, return from INT 15h/87h).
It should be noted that the CMOS shutdown codes were never an official BIOS interface; a PC/AT compatible BIOS needed some mechanism to come back from reset in a controlled fashion, but the details were in theory implementation specific. However, several of the shutdown codes were used by software (HIMEM.SYS, OS/2, Windows) and thus clone BIOSes were forced to support at least some of them in a manner compatible with IBM’s BIOS.