Programming Super-VGA Graphics Devices Introduction to VESA graphics modes and to organization of the linear frame-buffer memory Motivation • The impetus for high-quality PC graphics was an early incentive for developing the 32-bit Intel x86 processor, since graphics images with realistic color and animation requires efficient access to a much larger memory-segment than can be addressed with the original 20-bit real-mode scheme Raster Display Technology The graphics screen is a two-dimensional array of picture elements (‘pixels’) These pixels are redrawn sequentially, left-to-right, by rows from top to bottom Special “dual-ported” memory VRAM CRT CPU 128-MB of VRAM RAM 4096-MB of RAM Screen-resolution 640 640 480 480 640-by-480 = 307200 pixels (i.e., picture-elements) Early ‘planar’ memory 7 6 5 4 3 2 1 0 Each cpu byte-address controlled 8 adjacent pixels in 4 parallel color-planes 640-by-480 times 4-planes, divided by 8 bits-per-byte = 38400 byte-addresses Greater picture fidelity 640 1280 960 480 1280-by-960 = 1228800 pixels (i.e., picture-elements) times 4 bytes-per-pixel = 614400 bytes of vram Typical Chipset Layout CPU Central Processing Unit Graphics Controller AC Audio Controller Multimedia Controller MCH Memory Controller Hub (Northbridge) NIC Network Interface Controller ICH I/O Controller Hub (Southbridge) Firmware Hub Timer DRAM Dynamic Random Access Memory HDC Hard Disk Controller Keyboard Mouse Clock PCI Configuration Space A non-volatile parameter-storage area for each PCI device-function PCI Configuration Space Header (16 doublewords – fixed format) 64 doublewords PCI Configuration Space Body (48 doublewords – variable format) PCI Configuration Header 16 doublewords 31 0 Status Register BIST Header Type Command Register Latency Timer Cache Line Size 31 0 Device ID Vendor ID Class Code Class/SubClass/ProgIF Revision ID Dwords 1- 0 3- 2 Base Address 1 Base Address 0 5- 4 Base Address 3 Base Address 2 7- 6 Base Address 5 Base Address 4 9- 8 CardBus CIS Pointer 11 - 10 Subsystem Device ID Subsystem Vendor ID reserved capabilities pointer Expansion ROM Base Address 13 - 12 Maximum Minimum Interrupt Latency Grant Pin Interrupt Line reserved 15 - 14 Interface to PCI Configuration Space PCI Configuration Space Address Port (32-bits) 31 CONFADD ( 0x0CF8) E N 23 reserved 16 15 bus (8-bits) 11 10 device (5-bits) 8 7 function (3-bits) 2 doubleword (6-bits) 0 00 Enable Configuration Space Mapping (1=yes, 0=no) PCI Configuration Space Data Port (32-bits) 31 CONFDAT ( 0x0CFC) 0 Reading PCI Configuration Data • Step one: Output the desired longword’s address (bus, device, function, and dword) with bit 31 set to 1 (to enable access) to the Configuration-Space Address-Port • Step two: Read the designated data from the Configuration-Space Data-Port: # read the PCI Header-Type field (byte 2 of dword 3) for bus=0, device=0, function=0 movl $0x8000000C, %eax # setup address in EAX movw $0x0CF8, %dx # setup port-number in DX outl %eax, %dx # output address to port mov inl shr movb $0x0CFC, %dx %dx, %eax $16, %eax %al, header_type # setup port-number in DX # input configuration longword # shift word 2 into AL register # store Header Type in variable Graphics programs • What a graphics program must do is put appropriate bit-patterns into the correct locations in the VRAM, so that the CRT will show an array of colored dots which in some way is meaningful to the human eye • So the programmer must understand what the CRT will do with the contents of VRAM How ‘truecolor’ works 24 longword alpha 16 8 red green R G 0 blue B pixel The intensity of each color-component within a pixel is an 8-bit value Intel uses “little-endian” order VRAM 0 1 2 B G R 3 4 5 6 B G R Video Screen 7 8 9 10 B G R Vendor incompatibilities • Several competing vendors manufacture graphics controllers for the PC market • They’re based in various parts of the world (e.g., United States, Canada, Taiwan, etc.) • Their hardware designs are not identical • The VESA (Video Electronics Standards Association) organization was created to create a standardized firmware interface VBE 3.0 • The VESA BIOS Extensions document is accessible on our CS 630 course website • It implements services in a manner similar to the ROM-BIOS routines we’ve used in our previous boot-time applications (e.g., via software interrupt-0x10) • We’ve created a demo-program (named ‘vesademo.s’) illustrating VESA’s use Typical ‘program-structure’ Usual steps within a graphics application: – – – – Initialize video system hardware Display some graphical imagery Wait for a termination condition Restore original hardware state Hardware Initialization • The SVGA system has over 300 registers which must be individually reprogrammed • It would take us many months to learn how they all work to support a graphics mode • For now, we just ‘reuse’ vendor-supplied routines, built into the SVGA firmware • They usually support quite a few different screen-resolutions and color-depths Physical Memory Layout Graphics frame-buffer Base-Address is dynamically assigned by firmware at power-on CPU address space (4GB) our code/data 0x0001000 VESA function 1 • Obtains a block of parameter-values for the desired graphics display-mode: – Scanline-width (in bytes) – Horizontal resolution (in pixels) – Vertical resolution (in pixels) – Pixel-size (in bits-per-pixel) – Frame-buffer’s physical address VESA function 2 • Reprograms all the graphics controller’s internal device registers for the selected VESA-standard display-mode In-class exercise #1 • Can you reprogram the colors used in our ‘vesademo.s’ application to use another border-color and another annulus-color? 31……...24 23……16 15…..….. 8 7 ……… 0 ALPHA RED GREEN BLUE In-class exercise #2 • Can you modify our demo-program so as to use a standard VESA graphics mode that has a higher screen-resolution? – Mode 0x0115 was for 800-by-600, 32bpp – Mode 0x0118 is for 1024-by-768, 32bpp