80286 Protected Mode Test
Maciej W. Rozycki
macro at orcam.me.uk
Sun Mar 14 10:32:20 CDT 2021
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
More information about the cctalk
mailing list