On May 24, 2016, at 2:32 PM, Swift Griggs
<swiftgriggs at gmail.com> wrote:
On Tue, 24 May 2016, Fred Cisin wrote:
(OB_Picky: Due to the overlap of segment and
offset, on machines that had 21
address bits, real mode actually had a maximum of 1114096 (10FFF0h) bytes,
instead of 1048576 (100000h).
This was always the biggest pustule on the facade of x86 to me. Gate A20
and other chicanery was nasty business. It always struck me as a hardware
hack to work around earlier bad design. Sure, you can eschew segmentation
and try to use multiple instructions to delivery some flat addressing, and
then your code was snail-slow. Real mode in 16 bit on x86 was/is some
fairly vulgar stuff due to segmentation (hate hate hate). Then it was made
"all better now" by protected mode and segment descriptors later *pat
pat*. Yeah. Ugh. Pleah. Ick.
As someone who was there and participated in the whole A20 gate issue,
I can tell you why it was there (and Intel in it?s most recent chipsets finally
eliminated it). It was for SW compatibility.
There was a well know piece of software (at the time?who?s name escapes
me) that make use of the fact that on the 8088, addresses wrapped around
at 1MB. They took great advantage of it. Unfortunately when IBM was
working on the PC AT with a 80286 (with 24-bit physical addresses) the
clever hack no longer worked. So we had to put in a way to emulate the
wrap-around at 1MB?that was the A20 gate.
The initial implementation of the A20 gate was implemented by the
keyboard controller(!) because it was discovered late in the PC AT
development cycle and we couldn?t add more logic to the board (but we
could add some wires).
TTFN - Guy