X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=specs%2Ffreevga%2Fvga%2Fvgatext.htm;fp=specs%2Ffreevga%2Fvga%2Fvgatext.htm;h=a2e34a0bb7766e4fae3062f38b2c5589bdc17894;hb=8af06d1fd50343e17229618ef4d2693193b2b3d9;hp=0000000000000000000000000000000000000000;hpb=d0d14ca50fbac167253e1e1d8d806bfd749a5e8a;p=pintos-anon diff --git a/specs/freevga/vga/vgatext.htm b/specs/freevga/vga/vgatext.htm new file mode 100644 index 0000000..a2e34a0 --- /dev/null +++ b/specs/freevga/vga/vgatext.htm @@ -0,0 +1,185 @@ + +
+ + + + +Display Memory Organization
+
The four display memory
+planes are used for different purposes when the VGA is in text mode. Each
+byte in plane 0 is used to store an index into the character font map.
+The corresponding byte in plane 1 is used to specify the attributes of
+the character possibly including color, font select, blink, underline and
+reverse. For more details on attribute operation see the Attributes section
+below. Display plane 2 is used to store the bitmaps for the characters
+themselves. This is discussed in the Fonts section below. Normally, the
+odd/even read and write addressing mode is used to make planes 0 and 1
+accessible at interleaved host memory addresses.
+
+
Attributes
+
The attribute byte is divided
+into two four bit fields. The field from 7-4 is used as an index into the
+palette registers for the background color which used when a font bit is
+0. The field from 3-0 is used as an index into the palette registers for
+the foreground which is used when a font bit is 1. Also the attribute can
+control several other aspects which may modify the way the character is
+displayed.
+
If the Blink
+Enable field is set to 1, character blinking is enabled. When blinking
+is enabled, bit 3 of the background color is forced to 0 for attribute
+generation purposes, and if bit 7 of the attribute byte for a character
+is set to 1, the foreground color alternates between the foreground and
+background, causing the character to blink. The blink rate is determined
+by the vertical sync rate divided by 32.
+
If the bits 2-0 of the attribute
+byte is equal to 001b and bits 6-4 of the attribute byte is equal to 000b,
+then the line of the character specified by the Underline
+Location field is replaced with the foreground color. Note if the line
+specified by the Underline Location field
+is not normally displayed because it is greater than the maximum scan line
+of the characters displayed, then the underline capability is effectively
+disabled.
+
Bit 3 of the attribute byte,
+as well as selecting the foreground color for its corresponding character,
+also is used to select between the two possible character sets (see Fonts
+below.) If both character sets are the same, then the bit effectively functions
+only to select the foreground color.
+
+
Fonts
+
The VGA's text-mode hardware
+provides for a very fast text mode. While this mode is not used as often
+these days, it used to be the predominant mode of operation for applications.
+The reason that the text mode was fast, much faster than a graphics mode
+at the same resolution was that in text mode, the screen is partitioned
+into characters. A single character/attribute pair is written to screen,
+and the hardware uses a font table in video memory to map those character
+and attribute pairs into video output, as opposed to having to write all
+of the bits in a character, which could take over 16 operations to write
+to screen. As CPU display memory bandwidth is somewhat limited (particularly
+on on older cards), this made text mode the mode of choice for applications
+which did not require graphics.
+
+
For each character
+position, bit 3 of the attribute byte selects which character set is used,
+and the character byte selects which of the 256 characters in that font
+are used. Up to eight sets of font bitmaps can be stored simultaneously
+in display memory plane 2. The VGA's hardware provides for two banks of
+256 character bitmaps to displayed simultaneously. Two fields, Character
+Set A Select and Character Set B Select
+field are used to determine which of the eight font bitmaps are currently
+displayed. If bit 3 of a character's attribute byte is set to 1, then the
+character set selected by Character Set A Select
+field, otherwise the character set specified by Character
+Set B Select field is used. Ordinarily, both character sets use the
+same map in memory, as utilizing 2 different character sets causes character
+set A to be limited to colors 0-7, and character set B to be limited to
+colors 8-15.
+
Fonts are either 8 or 9
+pixels wide and can be from 1 to 32 pixels high. The width is determined
+by the 9/8 Dot Mode field. Characters normally
+have a line of blank pixels to the right and bottom of the character to
+separate the character from its neighbor. Normally this is included in
+the character's bitmap, leaving only 7 bit columns for the character. Characters
+such as the capital M have to be squished to fit this, and would look better
+if all 8 pixels in the bitmap could be used, as in 9 Dot mode where the
+characters have an extra ninth bit in width, which is displayed in the
+text background color, However, this causes the line drawing characters
+to be discontinuous due to the blank column. Fortunately, the Line
+Graphics Enable field can be set to allow character codes C0h-DFh to
+have their ninth column be identical to their eighth column, providing
+for continuity between line drawing characters. The height is determined
+by the Maximum Scan Line field which is set
+to one less than the number of scan lines in the character.
+
Display memory plane 2 is
+divided up into eight 8K banks of characters, each of which holds 256 character
+bitmaps. Each character is on a 32 byte boundary and is 32 bytes long.
+The offset in plane 2 of a character within a bank is determined by taking
+the character's value and multiplying it by 32. The first byte at this
+offset contains the 8 pixels of the top scan line of the characters. Each
+successive byte contains another scan line's worth of pixels. The best
+way to read and write fonts to display memory, assuming familiarity with
+the information from the Accessing the Display Memory
+page, is to use standard (not Odd/Even) addressing and Read Mode 0 and
+Write Mode 0 with plane 2 selected for read or write.
+
The following example shows
+three possible bitmap representations of text characters. In the left example
+an 8x8 character box is used. In this case, the Maximum
+Scan Line field is programmed to 7 and the 9/8
+Dot Mode field is programmed to 0. Note that the bottom row and right-most
+column is blank. This is used to provide inter-character spacing. The middle
+example shows an 8x16 character. In this case the Maximum
+Scan Line field is programmed to 15 and the 9/8
+Dot Mode field is programmed to 0. Note that the character has extra
+space at the bottom below the baseline of the character. This is used by
+characters with parts descending below the baseline, such as the lowercase
+letter "g". The right example shows a 9x16 character. In this case the
+Maximum Scan Line field is programmed to 15
+and the 9/8 Dot Mode field is programmed to
+1. Note that the rightmost column is used by the character, as the ninth
+column for 9-bit wide characters is assumed blank (excepting for the behavior
+of the the Line Graphics Enable field.) allowing
+all eight bits of width to be used to specify the character, instead of
+having to devote an entire column for inter-character spacing.
+
+
Cursor
+
The VGA has the hardware capability
+to display a cursor in the text modes. Further details on the text-mode
+cursor's operation can be found in the following section:
+