VGA Color Registers - PowerPoint PPT Presentation

About This Presentation
Title:

VGA Color Registers

Description:

The VGA introduced display-mode 19. Allowed showing 256 simultaneous colors. Used one byte of VRAM for every pixel. Convenient addressing for programming ... – PowerPoint PPT presentation

Number of Views:68
Avg rating:3.0/5.0
Slides: 13
Provided by: ProfessorA2
Learn more at: https://www.cs.usfca.edu
Category:
Tags: vga | color | registers | thewe

less

Transcript and Presenter's Notes

Title: VGA Color Registers


1
VGA Color Registers
  • How we can reprogram the
  • Digital-to-Analog Converters
  • 256 color-table registers

2
VGAs color-innovation
  • The VGA introduced display-mode 19
  • Allowed showing 256 simultaneous colors
  • Used one byte of VRAM for every pixel
  • Convenient addressing for programming
  • Screen-resolution was only 320-by-200
  • But SVGA offers improved resolutions
  • VESA mode 0x101 640-by-480
  • VESA mode 0x103 800-by-600

3
digital versus analog
  • MDA and CGA used digital cable-signals
  • VGA introduced analog cable-signals
  • Special hardware needed DAC controller
  • Implements a table of 256 color-registers
  • Supports primary colors red, green, blue
  • Supports 64 different intensities per color
  • So each color-register implements 18-bits

4
Format of a color-register
17 12 11
6 5 0
I/O port-addresses (for DAC programming) 0x03C8
index-register 0x03C9 data-register for
writes 0x03C7 data-register for reads
5
Data-structure for colors
  • typedef struct char r, g, b rgb_t
  • rgb_t red 63, 0, 0
  • rgb_t green 0, 63, 0
  • rgb_t blue 0, 0, 63
  • rgb_t white 63, 63, 63

6
Writing to a color-register
  • rgb_t color 32, 48, 16 )
  • int index 15
  • // example reprogramming a DAC register
  • outb( index, 0x03C8 ) // select register
  • outb( color.r, 0x3C9 ) // set r-component
  • outb( color.g, 0x3C9 ) // set g-component
  • outb( color.b, 0x3C9 ) // set b-component

7
Reading a color register
  • rgb_t color
  • int index 14
  • // example reading a DAC color-register
  • outb( index, 0x3C8 ) // select register
  • color.r inb( 0x3C7 ) // get r-component
  • color.g inb( 0x3C7 ) // get g-component
  • color.b inb( 0x03C7 )// get b-component

8
Demo studydac.cpp
  • This is a testbed for color experiments
  • It uses VESA display-mode 0x4101 (i.e.,
    640-by-480, in 256 simultaneous colors)
  • It draws a 16-by-16 grid of color-boxes
  • Each box shows a color-registers value
  • Initially we see the default color-values
  • Then the 256 registers are reprogrammed
  • But you can try out different color schemes

9
An array of color intensities
  • Each color-component is a 6-bit number
  • So there are 26 64 possible intensities
  • (This applies to each color-component)
  • So heres how to build all the cyan-values
  • rgb_t table 64
  • for (int i 0 i lt 64 i)
  • tablei.b i tablei.g i tablei.r
    0

10
Why do we need to do this?
  • We will soon study lighting and shadows, in order
    to create photorealistic images
  • It requires showing varied color-intensity
  • Well want to be sure our hardware can display
    all intensities a given image needs
  • Well want to arrange needed colors in an array,
    for conveniently accessing a given
    color-intensity in terms of its array-index

11
In-class exercise 1
  • Modify the studydac.cpp demo-program so that it
    will simultaneously display
  • 32 intensities of blue
  • 32 intensities of cyan
  • 32 intensities of green
  • 32 intensities of magenta
  • 32 intensities of red
  • 32 intensities of yellow
  • 64 intensities of white

12
In-class exercise 2
  • Modify the studydac.cpp demo-program so it will
    simultaneously display intensity-arrays for
    several pastel colors.
  • You can build these colors by mixing a pure
    color with the color white
  • For example pink ½ red ½ white
Write a Comment
User Comments (0)
About PowerShow.com