On Sun, 7 Mar 2021, Noel Chiappa via cctalk wrote: > > The 286 can exit protected mode with the LOADALL instruction. > > Really? So why all the hullabaloo about Triple Faults: > > http://www.rcollins.org/Productivity/TripleFault.html > > back in the day; and why did IBM set up the keyboard controller so it could > send a RESET signal (so people could get out of protected mode)? Or is it > that LOADALL (which was also undocumented early on, so maybe that's why the > IBM thing) could be used to cause a triple fault?
The existence of LOADALL (used for in-circuit emulation, a predecessor technique to modern JTAG debugging and the instruction the modern x86 RSM instruction grew from) in the 80286 wasn't public information for a very long time, and you won't find it in public Intel 80286 CPU documentation even today. Even if IBM engineers knew of its existence at the time the PC/AT was being designed, surely they have decided not to rely in their design on something not guaranteed by the CPU manufacturer to exist. As to why they choose to add the keyboard controller hack I think the article referred gives a hypothesis that is as good as you can get: they were not clever enough. Back in the day this wasn't the only fault they made and it was a harmless one anyway, because you didn't have to use the hack in your software if you knew the proper way. Much worse was the mess around the incorrect wiring of the FPU exception line (to IRQ #13 via additional glue logic rather than its dedicated CPU input), which could have been easily avoided while retaining PC/XT compatibility in a manner similar to how it was implemented in the BIOS for IRQ #13. Consequently functionality of the exception was lost (the exception was supposed to be precise unlike obviously the external IRQ) and also if you were not careful enough in handling it, the machine would lock up hard and you'd have to hit the reset button. The mess with the FPU exception was actually one of the two reasons to drop 32-bit x86 Linux support for the original 80386 CPU several years ago (the other one was the lack of write protection in the kernel mode for user pages). Support now starts from the 80486: $ uname -mrsv Linux 5.11.0+ #13 Mon Mar 8 00:14:59 CET 2021 i486 $ Maciej
