Character Attributes on Video Boards for the IBM PC 1. Introduction This document describes the result of some testing of character attributes on various video adaptor boards for the IBM PC. These boards may vary in their handling of the attribute byte, especially when emulating the IBM Monochrome Display and Adaptor; thus text which is readable on one board may not be visible on another, or its characteristics may be different. Currently, only the IBM Monochrome Display and Printer Adaptor, the Tecmar Graphics Master and the IBM Enhanced Graphics Adaptor are described. Information on other boards is solicited. 2. Terminology The following diagram shows the attribute byte layout (the byte which follows each character byte in the regen memory of the video adaptor boards). The bit fields "B", "bg", and "fg" will be referred to in the following discussion. +---+---+---+---+---+---+---+---+ | B | bg | fg | +---+---+---+---+---+---+---+---+ bit: 7 6 5 4 3 2 1 0 (msb) (lsb) Abbreviations for video boards: CGMA = IBM Color/Graphics Monitor Adaptor MDPA = IBM Monochrome Display and Printer Adaptor EGA = IBM Enhanced Graphics Adaptor TGM = Tecmar Graphics Master 3. Blink/Bright bit ("B") First, port 3D8 bit 5 of the IBM Color/Graphics adaptor is supposed to control the function of the "B" bit: port 3D8 bit 5 = 0 ==> B bit = 0, dim background colors B bit = 1, bright background colors port 3D8 bit 5 = 1 ==> B bit = 0, char not blinking B bit = 1, char blinking On the IBM CGMA, this works as described. On the MDPA, bit 5 of 3B8 disables blinking, essentially making bit "B" of the attribute byte a "don't care". (My IBM Tech Ref Manual indicates the the IBM Mono Adaptor has "CRT Control Port 1" at 3B8 but does not detail the function of that port). On the Tecmar Graphics Master (TGM) when configured to emulate the IBM CGMA, this works as advertised. In addition, when the TGM is configured to emulate the IBM Monochrome/Printer Adaptor, bit 5 of port 3B8 has an analogous effect (ie: makes bit "B" cause bright background). On the EGA this bit seems to have no effect in either mode (ie: port 3D8 in CGMA emulation, or port 3B8 in MDPA emulation). 4. Attributes in CGMA mode Both the TGM and EGA seem to behave just as the CGMA does. 5. Attributes in MDPA mode IBM Monochrome Adaptor bg background fg foreground 0-6 black 0 black IF bg = 0 or 7 7 dim IF fg = 0 0 dim otherwise 7 black IF fg not 0 1-7 dim 8 black IF bg = 0 or 7 8 bright otherwise 9-F bright When fg is 1 or 9, the character is underlined, with the underline being the same brightness as the character. The underline is scan line 12 (of 0..13). The underline blinks with the character (if enabled). The "B" bit causes the char to blink if bit 5 of port 3B8 is 1, otherwise has no effect. Tecmar Graphics Master bg background fg forground 0 black 0 black 1 dim 1 dim 2 black 2 black 3-7 dim 3-7 dim 8 black * 0 black 9 bright * 1 bright A black * 2 black B-F bright * 3-7 bright (* = when port 3B8 bit 5 is 0, and attribute bit "B" is 1) When fg is 1 or 9, the character is underlined, with the underline being the same brightness as the char (1 = dim, 9 = bright). The underline is on the next to bottom scan line of the char (ie: line 12 of 0..13). The underline is steady, ie: does not blink when the character blinks. IBM Enhanced Graphics Adaptor bg background fg foreground 0 black 0 black 1-7 dim 1-7 dim 8 black 9-F bright When fg is 1 or 9, the character is underlined, ONLY if bg is 0. The underline is the same brightness as the char, and is on the bottom scan line if the char (ie: 13 of 0..13). The underline blinks when the char blinks. Bit 5 of port 3B8 does not affect the blinking versus bright. 6. Summary of Monochrome Attribute Modes The following modes are the only ones supported by the IBM MDPA: B bg fg notes ? 0 0 (-/-) black on black (little use) ? 7 0 (-/D) black on dim (reverse video) ? 0 1 (D/-) dim on black underlined ? 0 7 (D/-) dim on black ? 0 9 (B/-) bright on black underlined ? 0 F (B/-) bright on black Note: the B bit controls blinking, unless disabled by port 3B8 bit 5 = 0. The IBM EGA can support all those and the following modes in addition: B bg fg notes ? 7 F (B/D) bright on dim ? 7 7 (D/D) dim on dim (little use) Note: the B bit always controls blinking. The Tecmar GM supports all of the above, and in addition: B bg fg notes ? 7 9 (B/D) bright on dim underlined Note: the B bit controls blinking, if port 3B8 bit 5 = 1. If port 3B8 bit 5 = 0, the following modes are also supported: B bg fg (?/?) notes 1 7 0 (-/B) black on bright 1 7 1 (D/B) dim on bright underlined 1 7 7 (D/B) dim on bright 1 7 F (B/B) bright on bright (little use) 7. More Information More information about character attributes on other IBM compatible boards and IBM compatible machines is needed. The program "attrib.bas" will display a matrix of 16 x 16 examples, one for each combination of foreground, background, and "B" bit values. The text displayed at each place is the hexadecimal value of the corresponding attribute byte. By using this program others can test their machines/adaptors and report back about the results. Try it both in "blink" and "bright" modes. See the tables at the end of this document and record your results there. If you will send your results to me I will incorporate them in future versions of this document. Zhahai Stewart Compuserve address 74076,252 (EMAIL) HiSystems 6521 Old Stage Rd. Boulder, CO 80302 (303) 449-8180 8. Reference Diagrams (see attrib.bas) In the following, the foreground "color" is represented by the columns 0 to F across the page, while the background "color" is represented by rows 0 to 7 down the page. An additional "bottom half" is included for attributes with the "B" bit set, if needed. The entries are of the form: f/b, foreground intensity (over) background intensity where the codes are: B = Bright D = Dim - = Black Thus a dim character on a black background is D/-, while a black character in a bright background would be -/B. Characters with the same foreground and background brightness are of course unreadable and must be inferred. >>>>>>>>>>>> IBM MDPA <<<<<<<<<<<<< ------------------------------ fg ----------------------------- B bg 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 0 / D/ D/ D/ D/ D/ D/ D/ / B/ B/ B/ B/ B/ B/ B/ 0 1 D/ D/ D/ D/ D/ D/ D/ D/ B/ B/ B/ B/ B/ B/ B/ B/ 0 2 D/ D/ D/ D/ D/ D/ D/ D/ B/ B/ B/ B/ B/ B/ B/ B/ 0 3 D/ D/ D/ D/ D/ D/ D/ D/ B/ B/ B/ B/ B/ B/ B/ B/ 0 4 D/ D/ D/ D/ D/ D/ D/ D/ B/ B/ B/ B/ B/ B/ B/ B/ 0 5 D/ D/ D/ D/ D/ D/ D/ D/ B/ B/ B/ B/ B/ B/ B/ B/ 0 6 D/ D/ D/ D/ D/ D/ D/ D/ B/ B/ B/ B/ B/ B/ B/ B/ 0 7 /D D/ D/ D/ D/ D/ D/ D/ /D B/ B/ B/ B/ B/ B/ B/ The bottom matrix with B = 1 looks the same except that the characters blink IF port 3B8 bit 5 is 1. Columns 1 and 9 are underlined. The underline blinks when the char does. >>>>>>>>>>> Tecmar Graphics Master <<<<<<<<<< ------------------------------ fg ----------------------------- B bg 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 0 -/- D/- -/- D/- D/- D/- D/- D/- -/- B/- -/- B/- B/- B/- B/- B/- 0 1 -/D D/D -/D D/D D/D D/D D/D D/D -/D B/D -/D B/D B/D B/D B/D B/D 0 2 -/- D/- -/- D/- D/- D/- D/- D/- -/- B/- -/- B/- B/- B/- B/- B/- 0 3 -/D D/D -/D D/D D/D D/D D/D D/D -/D B/D -/D B/D B/D B/D B/D B/D 0 4 -/D D/D -/D D/D D/D D/D D/D D/D -/D B/D -/D B/D B/D B/D B/D B/D 0 5 -/D D/D -/D D/D D/D D/D D/D D/D -/D B/D -/D B/D B/D B/D B/D B/D 0 6 -/D D/D -/D D/D D/D D/D D/D D/D -/D B/D -/D B/D B/D B/D B/D B/D 0 7 -/D D/D -/D D/D D/D D/D D/D D/D -/D B/D -/D B/D B/D B/D B/D B/D If bit 5 of port 3B8 is 1, the bottom part of the matrix is the same as the top expect the chars are blinking. If it is 0, the dim backgrounds are replaced by bright ones, thus: 1 0 -/- D/- -/- D/- D/- D/- D/- D/- -/- B/- -/- B/- B/- B/- B/- B/- 1 1 -/B D/B -/B D/B D/B D/B D/B D/B -/B B/B -/B B/B B/B B/B B/B B/B 1 2 -/- D/- -/- D/- D/- D/- D/- D/- -/- B/- -/- B/- B/- B/- B/- B/- 1 3 -/B D/B -/B D/B D/B D/B D/B D/B -/B B/B -/B B/B B/B B/B B/B B/B 1 4 -/B D/B -/B D/B D/B D/B D/B D/B -/B B/B -/B B/B B/B B/B B/B B/B 1 5 -/B D/B -/B D/B D/B D/B D/B D/B -/B B/B -/B B/B B/B B/B B/B B/B 1 6 -/B D/B -/B D/B D/B D/B D/B D/B -/B B/B -/B B/B B/B B/B B/B B/B 1 7 -/B D/B -/B D/B D/B D/B D/B D/B -/B B/B -/B B/B B/B B/B B/B B/B Columns 1 and 9 are underlined. The underline does NOT blink. >>>>>>>>> IBM ENHANCED GRAPHICS ADAPTOR <<<<<<<<<<< ------------------------------ fg ----------------------------- B bg 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 0 -/- D/- D/- D/- D/- D/- D/- D/- -/- D/- D/- D/- D/- D/- D/- D/- 0 1 -/D D/D D/D D/D D/D D/D D/D D/D -/D D/D D/D D/D D/D D/D D/D D/D 0 2 -/D D/D D/D D/D D/D D/D D/D D/D -/D D/D D/D D/D D/D D/D D/D D/D 0 3 -/D D/D D/D D/D D/D D/D D/D D/D -/D D/D D/D D/D D/D D/D D/D D/D 0 4 -/D D/D D/D D/D D/D D/D D/D D/D -/D D/D D/D D/D D/D D/D D/D D/D 0 5 -/D D/D D/D D/D D/D D/D D/D D/D -/D D/D D/D D/D D/D D/D D/D D/D 0 6 -/D D/D D/D D/D D/D D/D D/D D/D -/D D/D D/D D/D D/D D/D D/D D/D 0 7 -/D D/D D/D D/D D/D D/D D/D D/D -/D D/D D/D D/D D/D D/D D/D D/D The bottom half of the matric is identical except that it blinks. This is unaffedted by port 3B8 bit 5. The entries under columns 1 and 9 IN ROW 0 ONLY are underlined. The underline blinks when the character does. 9. History of this document 1/10/85 Original draft (Tecmar & EGA) by Zhahai Stewart 1/15/85 Updated to include IBM MDPA by Zhahai Stewart