Overview
        
        If you've read the article on the VGA display principles,
        you have a flavor for what the VGA needs to do.  It's job
        is mainly to get those three color values out rapidly, one
        after another, fast enough that the monitor can keep on
        going without missing a step.  Meanwhile, the VGA hardware
        also needs to provide appropriate suggestions (control
        signals) to the VGA monitor about the horizontal and vertical
        blanking and retrace times.  All this is happening at a very
        fast pace, sometimes at rates over 50 million pixels a second.
        Meanwhile, the VGA hardware also needs to accept commands and
        information from the PC.
        
        
        The VGA provides a series of registers that allow you to specify
        the number of horizontal pixels on the screen, the number of 
        vertical lines, and the horizontal and vertical timing signals.
        This allows the VGA to support many different resolutions,
        limited mostly by imagination and the monitors you can use.
        
        Memory Layout
        
        One issue in designing the memory was the fact that the VGA
        needed to support the older EGA, which supported 16 colors,
        selected from a palette of 64.  This earlier EGA design
        organized the memory into four parallel planes of memory and
        extracted one bit from each of them, once for each pixel being
        sent to the monitor.  Using four parallel planes meant that
        each one could be read at the same time, using the same address.
        This meant only one address register was needed since it was
        used for all four memory sections and, because each memory plane
        was a separate memory block on it's own, they could ask all four
        to be read at the same time.  Together, this means fast speed
        with less hardware -- a useful goal in designing hardware.
        
        
        The EGA actually read four bytes at a time, one from each plane,
        and placed the result in four, 8-bit registers (latches.)  They
        would then shift out one bit at a time from these until they were
        empty, then load another byte from each plane from the next
        address.  This process repeated until the whole image was displayed.
        
        
        Now the VGA designers were faced with maintaining this method
        while providing some new capability, like offering 256 colors 
        from a much larger palette.  So they kept the part that read up
        the four bytes, one from each plane, but they added a new mode
        that would simply use the entire latch value as the color, rather
        than taking one bit from each latch.  But the EGA used one
        bit from each plane to form a pixel color and had eight pixels
        per address used (to read one byte each from four planes), so that
        each plane carried a part of each pixel color.  This new VGA mode
        used the entire latch from each plane as the color value, so now
        plane 0 held the entire color for pixel 0, 4, 8, etc., and
        plane 1 held the entire color for pixel 1, 5, 9, etc., and so on.
        
        
        Being the tricky sort, the VGA designers came up with another idea.
        The decided to add a  "chain-4" mode, which would cause successive
        addresses from the PC (from A000:0000 to A000:FFFF), to access 
        alternating planes automatically, so the programmer would not have
        to worry about which plane a pixel was on.  So, offset 0000 would
        access address 0000 of plane 0 and offset 0001 would access address
        0000 of plane 1, and so on, until offset 0004 would access address
        0001 of plane 0, and so the cycle repeats.  Every four adjacent
        addresses access the four different planes, but at the same address
        on the planes.
        
        
        Although this greatly simplified accessing the pixels from the PC
        software, it meant that only the first 16k byte of each plane could
        be accessed.  Even though each plane could hold up to 64k byte, you
        can't get at the memory that way.
        
        
        So two basic methods exist for accessing the VGA memory.  The chain-4
        method makes the access simple, but limits you to the first 16k byte
        of each of the four planes.  The unchained method allows you to access
        all 64k of each plane, but requires you to go through an extra step of
        notifying the VGA hardware which plane you want to be talking to,
        before using an address to access it.  This allows all 64k of the memory
        region at A000 to be used for one plane or another plane, just not all
        at the same time.
        
        
        In any case, the VGA memory organization in 256-color modes is a new addition and
        manages its feat by setting it up so that every fourth pixel, horizontally,
        resides on the same plane.  You can imagine this easily by imagining 
        putting a blue color on plane 0, red on plane 1, green on plane 2, and
        yellow on plane 3.  The resulting VGA display would be a series of
        vertical lines that run from top to bottom, alternating between these
        four colors as you move from left to right across the screen.
        
        256 Colors
        
        Once the design was finished about how to specify 256 colors, the next
        problem was that the EGA palette registers just couldn't hack it.  So
        the VGA designers added a whole new section for the purpose, providing
        a separate group of 256 18-bit color registers, each with 6 bits for
        each of red, green, and blue.  The older EGA palette registers are
        still retained, for those graphics modes still requiring them, but
        the designers added an odd mapping that translates these older palette
        register color values and tranlates the results over for use against
        the newer 256 color registers.  This maintains some compatibility with
        older 16-color EGA software, while allowing more sophisticated software
        using these older 16-color graphics modes to perform more tricks than
        before.
        
        Miscellaneous
        
        The VGA hardware supports some extra features, like built-in XOR, AND,
        and OR modes that operate when writing the VGA memory from the PC.  There
        is also a special bit mask that allows you to specify which bits of the
        color values are changed, protecting the rest of the bits from writing to
        them.  Finally, because the VGA actually reads all four planes any and
        every time the PC reads from any address, four pixels can be copied at
        once.  Better, because the VGA also has a simple 4-bit mask to say which
        planes are affected by a write, you can mask out certain pixels while
        copying four at a time.
        
        
        The VGA, like the EGA, supports split screens and smooth panning, too.
        But I'll cover the technical details of this, elsewhere.