David Riley wrote:
I suspect the 286's A20 "oopsie" was due
to someone writing "0-20" in
a highlevel spec somewhere instead of "0-19".
How did you reach that conclusion?
The 8086 and 8080 have 20 address lines, numbered from A0 (LSB) to A19
(MSB).
The 80286 added more address lines, and in "real mode", its address
arithmetic was such that the resulting address could be greater than
0xffff, and thus have A20=1.
Are you arguing that the 80286 should have internally masked addresses
to 20 bits (presumably only in "real mode")? If so, I'd have to
disagree. I think Intel made the right choice.
Caused no end of grief,
I disagree here also.
and IBM's workaround was a pretty gross hack at
best. - Dave
Providing a means to mask A20 seems like a perfectly reasonable thing to
do. Putting it on the keyboard controller is admittedly a little
strange, but then, it isn't expected that you're going to be turning the
A20 mask on and off at high frequency.
The big problem with the AT design had nothing to do with A20, but
rather with having the only way for software to force a reset (e.g., to
get from protected mode to real mode) be via the keyboard controller,
which was very slow. If Intel had provided a *documented* way of
getting from protected mode to real mode without a hardware reset, that
wouldn't have been an issue.
The processor architects at Intel assumed that once you entered
protected mode, you wouldn't want to go back. Arguably that was a little
short-sighted of them, but then, back when the 286 was being designed
(starting around 1980) the IBM PC wasn't even on the market, so it
clearly wasn't obvious that the IBM PC and its descendants were going to
become the most popular general-purpose computing platform on the planet.