Color Graphics Adapter

80-kolumners text med RGB (vänster) vs. kompositmonitor (höger)

Color Graphics Adapter (CGA), introducerades 1981 och var IBM:s första grafikkort för färgvisning och den första bildskärmsstandarden som kunde visa färger på en IBM PC.

CGA-standardkortet från IBM var utrustat med 16 kB videominne. Kortet tillhandahöll ett flertal grafiska och textlägen, med en upplösning av 640×200 (monokromt) och upp till 16 färger (dock inte vid den upplösningen). CGA kunde visa maximalt fyra färger vid en upplösning av 320×200. Det fanns dock flera olika sätt (vissa "officiella", andra inte) att visa fler färger även för färggrafikläget.

CGA:s färgpalett

CGA:s 16-färgerspalett
(hexadecimala värden anpassade från MC6845-specifikationen)
0 — black
#000000
8 — (dark) gray
#545454
1 — blue
#0000A8
9 — bright blue
#5454FE
2 — green
#00A800
10 — bright green
#54FE54
3 — cyan
#00A8A8
11 — bright cyan
#54FEFE
4 — red
#A80000
12 — bright red
#FE5454
5 — magenta
#A800A8
13 — bright magenta
#FE54FE
6 — brown (orange)
#A85400
14 — yellow
#FEFE54
7 — white (light gray)
#A8A8A8
15 — bright white
#FEFEFE

CGA-grafikkort arbetade med CRT RGBI-färgmonitorer. De baserades på Motorolas kontrollkrets MC6845 och hade en palett bestående av 16 färger. Röd, grön och blå motsvarade de tre elektronkanonerna i bildröret och svart färg betydde att signalen till dem nästan var avstängd. Färgen cyan var en blandning av blå och gröna strålar, magenta mellan blå och röda. Orangebrun var en blandning av grönt och rött. Den vita färgen innehöll alla tre strålar.

De andra åtta färgerna skapades genom att slå på en ”intensifieringsbit", som gav ljusare versioner av varje färg. CGA:s variant av RGB plus ”intensifieringsbiten” kallades även för RGBI.

Datorn Commodore 128 använde samma metod för att sända färger till monitorn på sin RGBI-utgång och kunde därför använda samma monitorer och visa upp samma färger som datorer med CGA.

Standardtextlägen

CGA erbjöd två textlägen

  • 40×25 tecken med upp till 16 färger. Varje tecken bestod av en matris av 8 × 8 ljuspunkter. Den effektiva upplösningen i detta läge var 320 × 200 pixel (pixelaspektrelation var 1:1,2 men enskilda pixlar kunde inte adresseras oberoende av varandra i detta läge). Valet av mönster för varje läge på skärmen var därför begränsat till ett av de 256 tillgängliga tecknen. I detta läge kunde man välja förgrunds- och bakgrundsfärg för varje enskilt tecken som kunde nyttjas från hela CGA-färgpaletten (se exemplet) – exempelvis röd bakgrund och gul text för ett tecken och vit bakgrund och svart text för nästa tecken. Kortet hade tillräckligt mycket ramminne för åtta textsidor.
  • 80×25 tecken med upp till 16 färger. Varje tecken var även i detta läge ett mönster av 8 × 8 punkter, med bildformatet 1:2,4. Den effektiva upplösningen i detta läge var 640 × 200 pixlar. Även här var man begränsad till de redan definierade tecknen. Kortet hade tillräckligt mycket videominne för att erbjuda fyra olika sidor.

Standardgrafiklägen

CGA 4-färgers palett #1
default5 — magenta
3 — cyan7 — white (light gray)
CGA 4-färgers palett #2
default4 — red
2 — green6 — brown (orange)

CGA erbjöd två vanligen använda grafiklägen:

  • 320 × 200 pixlar, som i 40 × 25-textläge. Men i grafikläge kunde varje enskild pixel adresseras var för sig. Nackdelen var att bara 4 färger kunde visas samtidigt. Dessa fyra färger kunde inte väljas fritt utan det fanns bara två officiella paletter för detta läge.
    1. Magenta, cyan, vitt och bakgrundsfärg (svart som standard).
    2. Röd, grön, brun och bakgrundsfärg (svart som standard).
  • 640 × 200 pixlar, som i 80 × 25-textläge. Alla pixlar kunde adresseras oberoende av varandra. Detta läge var monokromt och erbjöd endast svart och vit färg (dock kunde detta ändras), och hade bildformatet 1:2,4.

Composite-videolägen

Tämligen okänt var ytterligare ett grafikläge, 160 × 200 (pixelaspektrelation 1,67:1), som kunde utnyttja 16 olika färger. Färgerna i detta läge använde inte samma palett som CGA-färgpaletten utan liknade mer Apple II:s ”double-hi-res”-läge. Detta då de utnyttjade samma teknik (composite signal color artifacting). Kompositfärg användes sällan av programvaran. Eftersom funktionen inte stöddes i BIOS utnyttjades det inte av programmerarna i någon högre grad. Kostnaden för ett IBM-system var hög nog, så de flesta hade inte råd med den dyrare RGB-monitorn som IBM vid denna tid erbjöd. Endast en handfull program använde 160 × 200-grafikläget och de flesta av dem var spel.

Ett vanligt missförstånd är att kompositfärg hade stöd på vissa RGB-utrustade maskiner, men detta är en direkt motsägelse av hur kompositfärger tekniskt fungerade. En mer trolig förklaring är att folk blandade samman 160 × 200-läget på maskiner som PCjr/Tandy 1000 och Amstrad CPC och trodde att det var samma sak. (De är identiska i upplösning, men skiljer sig i färg och minnesorganisation.) Skulle man försöka slå på Composite-färg på vilket kort som helst med en RGB-monitor ansluten så skulle det se identiskt ut som 640 × 200-grafikläget.

Fler grafiklägen och hack

Ett flertal inofficiella och officiella sätt existerade för att erhålla bättre grafik på bildskärmen.

  • I 320×200 grafikläge kunde bakgrundsfärgen som var svart vanligen ändras till vilken som helst av de övriga 15 färgerna på CGA-paletten. Detta erbjöd viss variation men även vissa blixtliknande effekter då bakgrundsfärgen kunde ändras utan att man behövde uppdatera skärmbilden.
  • I 640×200 grafikläge kunde förgrundsfärgen ändras från den vanliga vita till någon av de övriga 15 färgerna.
  • I textläge kunde kantfärgen ändras (området utanför den vanliga visningsytan) från den vanliga svarta färgen till de 15 övriga färgerna.
  • Ett tredje 320×200 grafikläge med fyra färgers palett kunde uppnås genom att slå på den monokroma biten medan man var i grafikläge. Detta ändrade paletten till att använda färgerna röd, cyan, vit och bakgrundsfärgen.
  • Genom precisionstiming var det möjligt att byta till en annan palett medan skärmen fortfarande uppdaterades. Det erbjöd möjligheten att använda vilken som helst av de tre paletterna per bildlinje. Det bästa exemplet för hur detta användes var i spelet California Games när det kördes på en vanlig 4.77 MHz 8088 (körde man spelet på en snabbare dator, fick man inte samma effekt, då timingen var kritisk när man bytte mellan olika paletter)
  • Andra färger kunde också approximeras genom dithering, även om de låga upplösningarna gjorde tekniken väldigt uppenbar.
  • Vissa av dessa hack kunde även kombineras, exempel på det finns i flera spel. De flesta mjukvarutitlar använde dock inte dessa möjligheter, men det fanns en del imponerande undantag.

160×100 16 färgläge

Rent tekniskt var detta inte ett grafikläge, men ett hack på 80×25 textläge. Textlägets texthöjdcell ändrades till att endast visa två linjer per textcell istället för de normalt åtta. Detta fyrdubblade numret av textrader som visades från 25 till 100. Dessa ”sammanpressade” tecken var inte fulla tecken, utan systemet visade endast de två övre linjerna innan det fortsatte till nästa rad.

   Tecken 221. 
   221 Med blå text och röd bakgrund. 
   221 med röd text och blå bakgrundsfärg 
   Tecken 222. 

Tecken 221 i den utökade ASCII-teckentabellen bestod av en rektangel som tog upp hela den vänstra halvan av teckencellen (tecken 222 bestod av en rektangel som upptog den högra halvan)

I och med att varje tecken kunde få en skild bakgrunds- och förgrundsfärg, som ett exempel kunde den bli blå till vänster (förgrundsfärg) och ljusröd till höger (bakgrundsfärg). Detta kunde reverseras genom att byta ut bakgrundsfärgen mot förgrundsfärgen.

Genom att nyttja tecken 221 och 222 (varje tecken bestod av en halv "sammanpressad" teckencell och kunde därför nyttjas som individuella pixlar —.) Detta gav då 160 pixlar horisontellt per scannlinje. Och därmed var 160×100 pixlar med 16 färger med bildformatet 1:1,2 möjligt.

 
 

En ensam stor pixel i 160×100 mode.
Detta är de övre två raderna av halva tecken 221.
Notera de närliggande 8 pixlarna och
1:1,2 aspekt ration.

Visserligen ett krångligt sätt att erhålla 16 färger i grafikläge, men detta fungerade hyfsat bra. Detta läge nämndes även av (men blev inte förklarat) i IBM:s officiella dokumentation.

Högre upplösning kunde erhållas, genom att nyttja andra tecken (kombinerad ASCII-konst ) med den ovan nämnda tekniken.

Samma teknik där man begränsade visningsytan på varje teckencell kunde även nyttjas i 40×24 textläge. Detta var endast förnuftigt när man använde ASCII konst, då utan den tekniken så skulle den erhållna upplösningen endast ha varit 80×100.

Buggar och detaljer

CGA:s mest sedda hårdvarubugg var snöeffekter i 80×25 textläge. Ramminnet på original IBM CGA-kortet var inte av dubbelportstyp. Läs- och skrivaccess var inte möjligt samtidigt. På grund av det visades slumpmässiga pixlar medan bildminnet skrevs till av CPU:n. Denna bugg fixades i de flesta tredjepartskloner men existerade i vissa varianter som exempel AT&T PC 6300 Display adapter.

Rivaliserande adaptrar

CGA hade två stycken konkurrerande teknologier.

  • För affärsbruk och ordbehandling släppte IBM sin ”Monochrome Display Adapter” MDA vid samma tidpunkt som CGA. MDA hade högre upplösning i textläget 80×25 och varje teckenruta bestod av 9×14 punkter där 7×11 punkter utgjorde själva tecknet. Detta var mycket bättre än CGA:s 8×8 punkter. På grund av detta och CGA:s högre pris vid denna tidpunkt så var MDA att föredra för affärsbruk.
  • Under 1982 introducerades Hercules Graphics Card från en tredjepartsleverantör. Det kortet erbjöd MDA-kompatibelt textläge i högupplösning och ett monokromt grafikläge. Det svartvita grafikläget hade en upplösning om 720×348 pixlar som var bättre än den högsta upplösningen CGA kunde erbjuda. Trots att kortet saknade möjligheter att visa färger, så erbjöd det bättre monokrom grafik samt möjligheterna att ansluta kortet till de billigare monokroma monitorerna gjorde att kortet var ett åtråvärt val för många. Så tidigt som 1985 erbjöds minnesresidenta program som ett exempel SIMCGA var tillgängligt som möjliggjorde visandet av CGA-grafiklägesdata i Hercules grafikläge. (slutresultatet såg ut som en grov variant av dithering)

En mindre använd konkurrent till CGA var Colorplus, från Plantronics ett CGA-kompatibelt kort som erbjöd dubbelt så mycket videominne (32k) vilket möjliggjorde 16 färger vid upplösningen 320×200 och fyra färger vid upplösningen 640×200.

CGA kortet ersattes senare på konsumentmarknaden av IBM:s ”Enhanced Graphics Adapter” (EGA) som hade stöd för de flesta av CGA:s lägen och utöver detta erbjöd upplösningen 640×350 tillsammans med mjukvarukontrollerad palett av 16 färger (som kunde väljas utifrån 64 färger allt som allt) i både text- och grafikläge.

Se även

Referenser

Media som används på denna webbplats

Single pixel in CGA 160x100 mode.svg
Single pixel in CGA 160x100 mode
ASCII.221.character.svg
IBM PC code page 437 character 221 (left half of box). Not actually an ASCII character.
Half-block.character.red.blue.svg
50% red; 50% blue block. SVG Recreation of gif image existing in commons.
ASCII.222.character.svg
IBM PC code page 437 character 222 (right half of box). Not actually an ASCII character.
Half-block.character.blue.red.svg
Half-block character blue-red
CGA CompVsRGB Text.png
CGA 80-column text display on RGB vs. Composite monitors.