Screen Attributes

 The text-mode screen is laid out as a series of byte-pairs, where the
 first byte is any of 256 ASCII characters and the second byte is a video
 attribute; see Color Table for a complete list.  For color/graphics
 adapters in text mode, the attribute is defined as:

 ScrnAttrRec -- blink enabled (default BIOS setting)
 ║ │bkgndfrgnd ║
 ╙─┴─┴─┴─┴─┴─┴─┴─╜ bits  mask
  ║ ╚═╦═╝ ╚═════╩═► 0-3:  0fH  foreground color
  ║   ╚═══════════► 4-6:  70H  background color
  ╚═══════════════►   7:  80H  1=foreground flashes

 ScrnAttrRec -- blink disabled
 ║ bkgndfrgnd ║
 ╙─┴─┴─┴─┴─┴─┴─┴─╜ bits  mask
  ╚══╦══╝ ╚═════╩═► 0-3:  0fH  foreground color
     ╚════════════► 4-6:  f0H  background color

    bits 0-3  the foreground color (the color of the character itself).  It
              may have one of the values:
                00H black     08H gray
                01H blue      09H bright blue
                02H green     0aH bright green
                03H cyan      0bH bright cyan
                04H red       0cH bright red
                05H magenta   0dH bright magenta
                06H brown     0eH yellow
                07H white     0fH bright white

    bits 4-6  the background color.  When blink is enabled (the default BIOS
              setting), this may have only values 0xH-7xH; that is, dark
              colors.  When blink is disabled, the background may be any of
              the 16 colors (0xH-fxH).

       bit 7  foreground blinks.  When blink is enabled (the default), this
              bit may be 1 (values 8xH-FxH) to make the foreground color
              flash.  When blinks is disabled, this bit is part of the
              background color.

█▌Blink Enabled/Disabled▐█
  By default, the video hardware is set to interpret attribute bit 7 as the
  "foreground blinks" flag.  This makes it possible to use only 8 background
  colors.  Many modern programs enable all 16 background colors (256
  combinations) by disabling character blink.  All standard monitor types
  (MDA, CGA, EGA, and VGA) are capable of disabling blink.

  On EGA and VGA, just use INT 10H 1003H to enable or disable blinking.
  On MDA and CGA, you can turn off blinking by clearing bit 5 of the Mode
  Select Register.  For instance:

          mov ax,40H
          mov es,ax
          mov dx,es:[063H]  ;get port address of the card
          add dx,4

          mov al,es:[065H]  ;get current value of Mode Select Register
          and al,0dfH       ;mask value by 1101 1111 (to clear bit 5)
          out dx,al         ;disable blink
          mov es:[065H],al  ;save the new setting

  When DOS 4.0+ ANSI.SYS is installed, you may use DOS fn 440cH 5fH to
  change the blink/bold status; see the IoctlDisplayModeRec.wFlags field.

█▌EGA and VGA Colors▐█
  On EGA and VGA adapters, the color attributes can be redefined.  An
  attribute byte stored in video memory actually specifies one of 64
  different color combinations (plus blink).

  For instance, you can use fn INT 10H 1000H to set the color attribute
  that normally displays as "black-on-white" to show as "yellow-on-blue" or
  any other combination.

  On VGAs, you can have very fine control over the colors displayed.  You
  can use INT 10H 1010H (et. al) to reprogram the DAC color registers to
  select any of 262,144 possible colors for any attribute.

█▌EGA and VGA 512-character Fonts▐█
  EGAs and VGAs can be set in a rarely-seen mode in which bit 3 of the
  attribute selects a different screen font.  For instance, this provides a
  way to display both italics and upright text simultaneously (though you
  end up with only 8 foreground colors).

  ScrnAttrRec -- 512-character set enabled
  ║ │bkgndsfrgnd║
  ╙─┴─┴─┴─┴─┴─┴─┴─╜  bits mask
   ║ ╚═╦═╝ ║ ╚═══╩═► 0-2:  07H  foreground color (0-7)
   ║   ║   ╚═══════►   3:  08H  character set (font) number (0-1)
   ║   ╚═══════════► 4-6:  70H  background color
   ╚═══════════════►   7:  80H  foreground flashes (or bold background)

  See INT 10H 1103H (enable/select 512-character font) for details.

█▌MDA Limitations▐█
  Although any attribute can be used on any monitor, some monitors aren't
  capable of displaying the full range of colors.  Use this chart for
  selecting pleasing and readable combinations for your target monitor:

      TTL Monochrome Monitors     █     Black-and-White Monitors
  01H underline07H normal (white on black)
  07H normal (white on black)      █ 08H grey on black
  09H bright underline0fH bold (bright white on black)
  0fH bold (bright white on black) █ 70H reverse (black on white)
  70H reverse (black on white)     █ 78H grey on white
  81H blinking underline7fH bright white on white
  87H blinking normal              █ 87H blinking normal
  89H blinking bright underline8fH blinking bold
  8fH blinking bold                █

 The IBM Monochrome monitor is able to display only the combinations
 listed above.  Other attributes are displayed as "normal" white on black.

See Also: CGA  MDA  EGA  VGA
          Color Table
          Video Modes
          Video Memory Layouts
          BIOS Data Area
          INT 10H
          CGA I/O Ports