Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter...

30
Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Transcript of Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter...

Page 1: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Early PC Graphics

Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced

Graphics Adapter (EGA)

Page 2: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

IBM product introductions

• MDA: introduced with IBM-PC in 1981

• CGA: introduced as an option in 1982

• EGA: introduced in 1984 (to replace CGA)

• VGA: introduced in 1987 (as PS/2 option)

Page 3: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

CGA

• Engineered to coexist with IBM’s Monochrome Display Adapter (MDA), used for text display

• Designed to operate with Intel’s 8086/8088 CPU– MDA: max 32K VRAM: 0xB0000-0xB7FFF– CGA: max 32K VRAM: 0xB8000-0xBFFFF

• Designed to operate with Motorola’s 6845 CRTC– MDA: uses cpu’s i/o ports 0x3B4-0x3B5– CGA: uses cpu’s i/o ports 0x3D4-0x3D5

Page 4: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

The IBM design imperatives

1-MB

1) CGA shall work with 8086 CPU8086 memory-addresses are 20-bits,

so memory is restricted to 1 megabyte employs ‘segmented’ architecture

that use 16-bit register-offsets

0xB0000MDA

2) CGA shall coexist with the MDAThe VRAM for IBM-PC’s

Monochrome Display Adapter resides in a ‘reserved’ address-range

starting from 0xB0000

Consequently: CGA’s VRAM starts at 0xB8000 and fits in a 32KB region

Page 5: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

The imperatives (continued)

3) CGA shall use 6845 CRTC Motorola 6845 Cathode Ray Tube controller implemented only 7-bits for addressing display scan lines so could not address 200 rows

in just one screen-refresh cycle

Consequently: CGA’s VRAM shall be accessed in alternating ‘banks’

upper bank

lower bank0x0000

0x2000

Data for even-numbered scan lines

Data for odd-numbered scan lines

CGA VRAM

Page 6: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

“Interlaced” VRAM addressing

• Even-numbered scanlines in lower bank:• scanline 0: starts at offset 0• scanline 2: starts at offset 80• scanline 4: starts at offset 160

• Odd-numbered scanlines in upper bank:• scanline 1: starts at offset 0x2000• scanline 3: starts at offset 0x2000 + 80 • Scanline 5: starts at offset 0x2000 + 160

Page 7: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

CGA graphics capabilities

• Two graphics modes (2-color or 4-color)

• Both use “packed-pixel” memory-model– 8 pixels-per-byte, or 4 pixels-per-byte

• Four 4-color palette choices: – black+cyan+red+white– black+cyan+violet+white– black+green+red+yellow – black+dark-gray+light-gray+white

Page 8: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

CGA screen resolutions

• color: 320x200 (4 packed pixels-per-byte)

memory: 320x200/4 = 16000 bytes

• mono: 640x200 (8 packed pixels-per-byte)

memory: 640x200/8 = 16000 bytes

7 6 5 4 3 2 1 0

7 6 5 4 3 2 1 0

Page 9: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Pixel-drawing Algorithm (mono)void draw_pixel_1( int x, int y, int color ){

int locn = 0x2000*(y%2) + 80*(y/2) + (x/8);int mask = (1<<7) >> (x%8);unsigned char temp = vram[ locn ];color &= 1; color <<= 7; color >> (x%8);temp &= ~mask; temp |= color;vram[ locn ] = temp;

}

Page 10: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

void draw_pixel_2( int x, int y, int color ){

int locn = 0x2000*(y%2) + 80*(y/2) + (2*x/8);int mask = (3<<6) >> (2*x%8);unsigned char temp = vram[ locn ];color &= 3; color <<= 6; color >> (2*x%8);temp &= ~mask; temp |= color;vram[ locn ] = temp;

}

Pixel-drawing Algorithm (color)

Page 11: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

CGA pixels aren’t square

• Physical screen has 4:3 aspect-ratio

• CGA visual screen-resolutions:– color screen is 320x200 (ratio is 8:5)– b&w screen is 640x200 (ratio is 16:5)

• Physical square would be:– 4-color mode: 240 wide by 200 high– 2-color mode: 480 wide by 200 high

• So logical pixels are “stretched” vertically

Page 12: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Enhanced Graphics Adapter (EGA)

• Backward compatibility with the CGA• Plus four additional display modes• Higher graphics resolutions• Greater color depths (16-colors)• Faster screen refresh rates• Needed to support more video memory• Simplify video memory-byte addressing• Needed additional “controller” hardware

Page 13: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

EGA display modes

• New display modes 13, 14, 15, 16

• 13: 320x200 with 16-colors

• 14: 640x200 with 16-colors

• 15: 640x350 2-colors (monochrome)

• 16: 640x350 4-colors w/64K vram or 16-colors w/128K vram

• But uses “planar” memory organization, so relies on “Graphics Controller” hardware

Page 14: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Four memory “planes”

• Each CPU byte-address controls 8 pixels

• CPU addresses bytes in 4 parallel planes

7 6 5 4 3 2 1 0

Page 15: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Graphics Controller registers

• 0: Set/Reset register• 1: Enable Set/Reset register• 2: Color Compare register• 3: Data-Rotate/Function-Select• 4: Read Map Select register• 5: Mode register• 6: Miscellaneous register• 7: Color Don’t Care register• 8: Bit Mask register

Page 16: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Addressing device-registers

• Nine Graphics Controller registers (8-bits)

• Two ‘read’ modes, and four ‘write’ modes

• Multiplexed i/o addressing scheme:

- register index is written to i/o port 0x3CE

- register value is accessed via port 0x3CF

• CPU allows a pair of bytes to be written to adjacent port-addresses in one instruction

Page 17: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Reading a byte from VRAM

• Select which memory-plane

• Perform CPU read-byte instruction

movb vram(%esi), %al

• Bytes from all four planes are copied to Graphics Controller’s Latches (32-bits)

• But only selected plane’s byte goes to AL

Page 18: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Read operation illustrated

Controller’s Latch register

plane 0plane 1plane 2plane 3

2 Controller’s Read Map Select register

CPU register AL

Page 19: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Writing a byte to VRAM

• Four distinct write modes (must choose)

• We illustrate Write Mode 0 (“Direct Write”)

• Four graphics controller registers involved:

index 0: Set/Reset register

index 1: Enable Set/Reset register

index 3: Data-Rotate/Function-Select

index 8: Bit Mask register

Page 20: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Steps for Write Mode 0

• The new “fill color” goes into Set/Reset

• Set Enable Set/Reset to enable all planes

• Zero goes in Data-Rotate/Function-Select

• Setup Bit Mask for the pixel(s) to modify

• After these setup steps:– CPU reads from VRAM (to load the latches)– CPU writes to VRAM (to modify the pixel(s))

Page 21: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Set/Reset (index 0)

The new fill-color Value (range is 0..15)

7 6 5 4 3 2 1 0

outb( 0, 0x3CE ); // select Set/Reset registeroutb( color, 0x3CF ); // output the color-value

Alternative programming (in one-step) outw( (color<<8)|0, 0x3CE );

Page 22: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Enable Set/Reset

0 = plane is write-protected1 = plane can be modified

7 6 5 4 3 2 1 0

outb( 1, 0x3CE ); // select Enable Set/Reset outb( 0x0F, 0x3CF ); // output selection bits

Alternative programming (in one-step) outw( 0x0F01, 0x3CE );

Page 23: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Data-Rotate (index 3)

Data-Rotation Count0 to 7 bits (to right)

FunctionSelect

7 6 5 4 3 2 1 0

outb( 3, 0x3CE ); // select Data-Rotate registeroutb( 0x00, 0x3CF ); // output the register value

Alternative programming (in one-step) outw( 0x0003, 0x3CE );

Functions: 00=copy, 01=AND, 10=OR, 11=XOR (with Latch contents)

Page 24: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Bit Mask (index 8) 7 6 5 4 3 2 1 0

The corresponding pixel will be modified (=1) or unmodified (=0)

outb( 8, 0x3CE ); // select the Bit Mask registeroutb( mask, 0x3CF ); // output the register value

Alternative programming (in one-step) outw( (mask<<8)|3, 0x3CE );

Page 25: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Write Mode 0 illustrated

VRAM:

Latch Register 00000111 Bit Mask

Fill-Color Set/Reset

VRAM:

Page 26: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

The EGA’s 16-color palette

“planar” vram

4-bits

Display screen

A 4-bit pixel-value from planar vram selects a color from the palette to draw onto the display screen

Color palette (16 colors)

Page 27: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Video Graphics Array (VGA)

• Offers both CGA and EGA emulation

• And supports three new display modes:

mode 17: improved monochrome graphics

mode 18: 16-colors using “square” pixels

mode 19: supports 256 colors (8 bits/pixel)

• Provides faster display-refresh rates

• Supports analog multisync monitors

Page 28: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

Class Demos

• ‘cgademo.cpp’ (4-color and b&w modes)

• ‘egademo.cpp’ (shows 16-color palette)

• ‘vgademo.cpp’ (square-pixels/256 colors)

Page 29: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

In-class exercise #1

• Use the ROM-BIOS ‘writestring’ service to add an explanatory title to our ‘egademo’ and ‘vgademo’ demonstration-programs (similar to code in our ‘cgademo’ program)

• Details on register-usage for the INT-0x10 firmware services are documented online on the ‘Ralf Brown Interrupt-List’ website

Page 30: Early PC Graphics Capabilities of the IBM Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA)

In-class exercise #2

• Our EGA and VGA demo-programs make use of graphics display-modes 16 and 19– Mode 16: 320-by-200 (4-bpp) – Mode 19: 320-by-200 (8-bpp)

• These modes do not have “square” pixels, so the circles look like ovals (“stretched”)

• Can you add an extra view that “corrects” for the distorted pixel-shape? (as in CGA)