TMS9918

VDP TMS9918A
VDP TMS9918A
VDP TMS9928A

TMS9918 är en videodisplaykontroller (VDC) tillverkad av Texas Instruments , i manualer kallad "Video Display Processor" (VDP) och introducerades 1979. TMS9918 och dess varianter användes i ColecoVision , CreatiVision , Memotech MTX , MSX , NABU Personal Computer , SG-1000 / SC-3000 , Spectravideo SV-318 , Spectravideo SV-328 , Sord M5 , Tatung Einstein , Texas Instruments TI-99/4 , Casio PV-2000 , Coleco Adam , Hanimex Pencil II och Tomy Handledare .

TMS9918 genererar både rutnätsbaserad teckengrafik (används för att visa text eller bakgrundsbilder) och sprites som används för att flytta förgrundsobjekt.

De viktigaste egenskaperna hos detta chip är, som framhölls i en presentation från 1980 av Karl Guttag (en av formgivarna):

  • 256 gånger 192 fullfärgspixlar per skärm
  • 15 olika färger och/eller nyanser
  • Icke - interlaced färgkompositvideoutgång
  • dynamiska RAM-minnen av RAS/CAS-typ
  • Automatisk uppdatering av dynamiska RAMS
  • Allmänt 8-bitars minnesmappat CPU-gränssnitt
  • CPU kommer åt RAM via VDP (inget behov av DMA )
  • 32 dynamiska tecken per skärm
  • Trettiotvå 8X8-mönster per rad, 24 rader per skärm
  • Textläge med fyrtio 6X8-mönster per rad
  • Flerfärgsläge med 64 gånger 48 minneskartbara färgrutor
  • Extern videoingång och kontroll
  • Enkel matning +5 volt drift
  • Standard N-Channel silicon gate- teknik

Produktfamilj

Alla IC:er i denna familj hänvisas vanligtvis till med TMS9918-namnet, ibland med ett "A"-postfix. "A" indikerar en andra version av chipet som lagt till nya funktioner, mest framträdande tillägget av ett bitmappsläge (Graphic II).

Texas Instruments TMS9918 Produktfamilj Sammanfattning
Chipvariant Video ut Video in Videofrekvens Läge 2 Support
9918 Sammansatt Sammansatt 60 Hz Nej
9918A / 9118 Sammansatt Sammansatt 60 Hz Ja
9928A / 9128 Luminans och färgskillnad (Ingen) 60 Hz Ja
9929A ​​/ 9129 Luminans och färgskillnad (Ingen) 50 Hz Ja

TMS9918

Icke-A-versionen användes endast i TI-99/4; TI-99/4A och de andra datorerna hade A-versionen VDC.

TMS9918A och TMS9928A

TMS9918A och TMS9928A matar ut en 60 Hz videosignal , medan TMS9929A ​​matar ut 50 Hz. Skillnaden mellan '1' och '2' i 'TMS9918A' och 'TMS9928A' är att '1'-versionen matar ut sammansatt NTSC-video, medan ' 2'-versionerna (inklusive TMS9929A) matar ut analog YPbPr (Y- luminans och RY) (Pr) och BY (Pb) färgskillnadssignaler) . Behovet av det senare var övervägande i 50 Hz-världen, inklusive Europa, på grund av de olika videosignalstandarderna PAL och SECAM . Det var mer kostnadseffektivt att mata ut Y, RY och BY och koda dem till PAL eller SECAM i RF-modulatorn , än att försöka ha en annan konsol för varje färgstandard. '1'-versionen har också en extern kompositvideoingång som gjorde det till ett praktiskt chip att använda i video-"titlare" som kan lägga över text eller grafik på video, medan '2'-versionen inte gör det.

TMS9118, TMS9128 och TMS9129

En senare variant av chipsen i TMS9918-serien, TMS9118, TMS9128 och TMS9129, släpptes i mitten av slutet av 1980-talet, men var aldrig särskilt populära. Funktionen för ett stift ändras, och mappningen av videominnet gör att två 16Kx4-bitars chips kan användas istället för de åtta 16Kx1-bitarschips som TMS99xx behöver. Annars är chipsen helt identiska med TMS9918A, TMS9928A respektive TMS9929A.

Externa gränssnitt

Video RAM

VDP har 16K × 8 bitar externt videominne. Detta minne ligger utanför processorns adressutrymme . Att ha ett separat adressutrymme innebär att CPU:n måste göra mer arbete för att skriva eller läsa detta minne, men det betyder också att VDC inte saktar ner CPU:n när den periodvis läser detta minne för att generera displayen. Dessutom lämnar det mer adressutrymme tillgängligt för CPU:n för annat minne och minnesmappad hårdvara.

Beroende på vilket skärmläge som används kan det hända att inte allt videominne behövs för att generera skärmen. I dessa fall kan CPU:n använda det extra videominnet för andra ändamål. Till exempel är en användning som en scratch-pad för att komprimera grafik eller ljuddata lagrade i kassett ROM till. En annan populär användning är att skapa en andra kopia av vissa eller alla visningsdata för att eliminera flimmer och rivning, en teknik som kallas dubbelbuffring .

CPU

CPU:n kommunicerar med VDP:n via en 8-bitars buss . Ett stift som styrs av CPU:n separerar denna buss i två "portar", en kontrollport och en dataport. För att skriva eller läsa en byte av videominne måste CPU:n först skriva två byte på VDP:s kontrollport till VDC:s interna adressregister . Därefter utför CPU:n själva skrivningen eller läsningen på VDP:s dataport. När en databyte skrivs eller läses inkrementerar TMS9918 automatiskt det interna adressregistret. Denna automatiska ökningsfunktion accelererar skrivningar och läsningar av datablock. Kontrollporten används också för att komma åt olika interna register.

Grafik

TMS9918 har två separata och distinkta grafiktyper: tecken och sprites .

Tecken

Tecken används vanligtvis för att skapa text eller bakgrundsbilder. De dyker upp bakom sprites.

Skärmlägen

TMS9918 har ett antal skärmlägen som styr karaktärernas egenskaper.

Dokumenterad

Det finns fyra dokumenterade skärmlägen tillgängliga i TMS9918A (som nämnts tidigare saknar TMS9918 läge Graphic 2):

  • Läge 0 (text): 240×192 pixlar totalt, som 40×24 tecken, hämtade från 1 teckenuppsättning med 256 6×8 pixlar tecken. Hela teckenuppsättningen har en begränsning i två färger. Det här läget stöder inte sprites.
  • Läge 1 (grafik 1): 256×192 pixlar totalt, som 32×24 tecken, hämtade från 1 teckenuppsättning med 256 8×8 pixlar tecken. Varje grupp med 8 tecken i teckenuppsättningen har en begränsning i två färger. Till exempel kommer tecknen "0" till "7" alla att ha samma färgattribut .
  • Läge 2 (grafik 2): 256×192 pixlar totalt, som 32×24 tecken, hämtade från 3 teckenuppsättningar med 256 8×8 pixlar tecken. Varje 8-pixel bred rad av ett tecken i teckenuppsättningarna har en begränsning i två färger. Detta läge ger ett unikt tecken för varje teckenplats på skärmen, vilket möjliggör visning av bitmappsbilder.
  • Läge 3 (flerfärg): 256×192 pixlar totalt, 64×48 utbytbara virtuella pixlar, som 32×24 " semigrafiska " tecken. Dessa halvgrafik definieras i en speciell teckenuppsättning på 256 tecken definierade av 2×2 "fat-pixels". Det finns 4×4 pixlar i varje fat-pixel, men pixlarna inom en fat-pixel kan inte definieras individuellt, även om varje fat-pixel kan ha sin egen färg, därav namnet på detta läge (Multicolor). Det här läget är väldigt blockigt och används sällan.
Skärmläge 2 detaljer

Tekniskt sett är läge 2 ett teckenläge med en färgstark teckenuppsättning. Skärmen är horisontellt uppdelad i tre 256×64 pixelområden, som var och en får sin egen teckenuppsättning. Genom att sekventiellt skriva ut tecknen 0 till 255 i alla tre områden, kan programmet simulera ett grafikläge där varje pixel kan ställas in individuellt. Den resulterande rambufferten är emellertid icke-linjär.

Programmet kan också använda tre identiska teckenuppsättningar, och sedan hantera skärmen som ett textläge med en färgstark teckenuppsättning. Bakgrundsmönster och sprites består då av färgglada karaktärer. Detta användes ofta i spel, eftersom endast 32×24 byte skulle behöva flyttas för att fylla och rulla hela skärmen. Grafiken kan ritas så att gränserna på 8×8 pixlar inte är alltför tydliga, en konst där Konami var särskilt välkänd för sin förträfflighet [ citat behövs ] .

Utmaningen med att använda TMS9918 läge 2 var att varje 8×1 pixelarea bara kunde ha två färger, förgrund och bakgrund. De kunde väljas fritt från paletten med 16 färger, men för varje 8×1-område kunde bara två färger existera. När man manipulerar skärmen i BASIC med kommandot LINE kan man lätt överskrida de maximala 2 färgerna per 8×1 område och sluta med " färgspill ".

Odokumenterad

Texas Instruments dokumenterade ursprungligen bara de fyra lägen som anges ovan. Biten som aktiverar läge 2 är dock mer intressant än vad som ursprungligen släpptes. Den beskrivs bäst som en modifieringsbit för de andra lägena. Att aktivera det gör tre saker:

  1. Utökar färgbordets storlek.
  2. Delar upp skärmen horisontellt i tredjedelar.
  3. Ändrar två adressbitar av mönster- och färgtabellerna till maskbitar, som styr om varje tredjedel av skärmen har sitt eget mönster och färgtabell eller inte.

Med detta i åtanke är ytterligare tre lägen möjliga. Observera att även om äkta TMS9918A-chips stöder dessa lägen, kanske inte kloner och emulatorer.

  • Läge 0 (text) + Läge 2 (grafik 2) : Känd som bitmappstextläge . Detta läge tillåter tvåfärgsbitmappsbilder, utan färgtabell. Detta sparar minne, på bekostnad av en något reducerad horisontell upplösning (textläget har en horisontell upplösning på 240 pixlar istället för 256 pixlar som grafiklägena gör).
  • Läge 1 (grafik 1) + läge 2 (grafik 2): Känt som halvbitmappsläge . Texas Instruments dokumenterade faktiskt detta "odokumenterade" skärmläge i sin manual med titeln "Video Display Processors Programmers Guide SPPU004" . I avsnitt 8.4.2, " Spela spel med VRAM-adressering" diskuterar de hur det här läget kombinerar minnesbesparingarna i läge 1 med färgdetaljen i läge 2. Men när de fortsätter med att säga att detta läge begränsar antalet sprites som kan visas till 8 istället för 32. Därför är termen "odokumenterad" som används för att beskriva detta läge en felaktig benämning. Men eftersom denna handbok inte var allmänt känd anses detta läge generellt vara ett av de odokumenterade lägena. I allmänhet är det enda skälet till att använda detta läge över läge 2 för att minska minnesförbrukningen.
  • Läge 3 (Multicolor) + Läge 2 (Grafik 2) : Känd som Bitmap Multicolor Mode. Det här läget är mer av en nyhet, eftersom det inte erbjuder något utöver vad det vanliga flerfärgsläget redan kan göra.

Scrollar

TMS9918 har inga rullningsregister , så rullning måste göras med programvara. Dessutom kan rullning endast göras på teckengränser, inte pixel för pixel. [ citat behövs ]

Sprites

Sprites används vanligtvis för att skapa rörliga förgrundsobjekt. De visas framför tecken (brickor).

Lägen 1, 2 och 3 kan rendera sprites. Det kan finnas upp till 32 monokroma sprites på antingen 8×8 eller 16×16 pixlar på skärmen, varje sprite med sin egen enfärgade. Illusionen av flerfärgade sprites kan skapas genom att stapla flera sprites ovanpå varandra.

Det kan inte finnas fler än 4 sprites på en enda skanningslinje; alla ytterligare sprites horisontella pixlar tas bort. Sprites med högre prioritet dras först. VDP:n rapporterar i ett statusregister numret på den först tappade spriten. CPU:n kan komma runt denna begränsning genom att rotera spriteprioriteter så att en annan uppsättning sprites ritas på varje bildruta; istället för att försvinna helt, kommer sprites att flimra. Denna teknik är känd som sprite-multiplexering.

Automatisk sprite-rörelse hanteras inte av VDP. I stället, i praktiken, kommer CPU:n att plocka upp VDP:s vertikala avbrott - en standard VDP-utgång, som utlöses automatiskt en gång var 50:e eller 60:e sekund (beroende på chipvariant), i början av VBI ( vertikalt släckintervall ). CPU:n hoppar sedan till en sprite-hanteringsrutin i programvaran, som i sin tur talar om för VDP:n var de ska flytta sprites.

När två icke-transparenta pixlar i ett par sprites kolliderar, sätts spritekollisionsflaggan. Detta är användbart för att utlösa mer avancerade kollisionsdetekteringsrutiner inuti programvaran som sedan kan fastställa den exakta platsen för kollisionen och agera på den, eftersom VDP själv inte kan rapportera vilka två sprites som har kolliderat.

Färger

TMS9918-familjens chips använde en kompositvideopalett . Färger genererades baserat på en kombination av luminans- och krominansvärden för TMS9918A och Y- , RY- och BY -värdena för TMS9928A/9929A.

Databladsvärden

TMS9918 har en fast palett med 16 färger , som består av 15 visade färger och en "transparent" färg.

  • När "transparent" används för sprites kommer det att visa bakgrundstecken.
  • När "transparent" används för tecken kommer den att visa den externa videosignalen.

Enligt "Tabell 2.3 - Färgtilldelningar" på databladets utdatanivåer är följande:

Färg kod Färg Luminans Krominans Y RY (Pr) AV (Pb)
0 transparent - - - - -
1 svart 0 % - 0 % 47 % 47 %
2 mellangrönt 53 % 53 % 53 % 7 % 20 %
3 ljusgrön 67 % 40 % 67 % 17 % 27 %
4 mörkblå 40 % 60 % 40 % 40 % 100 %
5 ljusblå 53 % 53 % 53 % 43 % 93 %
6 mörkröd 47 % 47 % 47 % 83 % 30 %
7 cyan 67 % 60 % 73 % 0 % 70 %
8 medelröd 53 % 60 % 53 % 93 % 27 %
9 ljusröd 67 % 60 % 67 % 93 % 27 %
10 mörk gul 73 % 47 % 73 % 57 % 7 %
11 ljusgul 80 % 33 % 80 % 57 % 17 %
12 mörkgrön 46 % 47 % 47 % 13 % 23 %
13 magenta 53 % 40 % 53 % 73 % 67 %
14 grå 80 % - 80 % 47 % 47 %
15 vit 100 % - 100 % 47 % 47 %

Anmärkningar: Färger konverterades från Y-, RY- och BY-värdena till sRGB , med hjälp av formeln här . Luminans- och krominansvärden är för TMS9918A. Y-, RY- och BY-värdena är för TMS9928A/9929A. Gammakorrigering och SMPTE C -kolorimetri togs inte med i beräkningen - se nästa avsnitt.

CRT-skärm

[ originalforskning? ]

För att konvertera Y, RY och BY till RGB måste du överväga hur Y uppstod, nämligen:

Y = R * 0,30 + G * 0,59 + B * 0,11

Därför måste du använda följande formler:

R = RY + Y B = BY + Y G = (Y - 0,30 * R - 0,11 * B) / 0,59

Men först måste du lägga märke till det faktum att för alla färger som inte har någon krominans - alltså svart, grått och vitt - är RY och BY inte 0% utan alla har en offset på 47%. Så du måste först subtrahera denna offset från alla RY- och BY-värden. På grund av det faktum att detta ena steg i praktiken aldrig kommer att göras ensamt, är det inga problem att vissa resultat blir negativa:

Färg kod Färg Y RY FÖRBI
1 svart 0 % 0 % 0 %
2 mellangrönt 53 % -40 % -27 %
3 ljusgrön 67 % -30 % -20 %
4 mörkblå 40 % -7 % 53 %
5 ljusblå 53 % -4 % 46 %
6 mörkröd 47 % 36 % -17 %
7 cyan 73 % -47 % 23 %
8 medelröd 53 % 46 % -20 %
9 ljusröd 67 % 46 % -20 %
10 mörk gul 73 % 10 % -40 %
11 ljusgul 80 % 10 % -30 %
12 mörkgrön 47 % -34 % -24 %
13 magenta 53 % 26 % 20 %
14 grå 80 % 0 % 0 %
15 vit 100 % 0 % 0 %

Nu kan du göra omvandlingen till RGB. Alla resultat måste ligga i intervallet från 0 % till 100 %:

Färg kod Färg R G B
1 svart 0 % 0,0000 % 0 %
2 mellangrönt 13 % 78,3729 % 26 %
3 ljusgrön 37 % 85,9831 % 47 %
4 mörkblå 33 % 33,6780 % 93 %
5 ljusblå 49 % 46,4576 % 99 %
6 mörkröd 83 % 31,8644 % 30 %
7 cyan 26 % 92,6102 % 96 %
8 medelröd 99 % 33,3390 % 33 %
9 ljusröd 113 % 53,9492 % 47 %
10 mörk gul 83 % 75,3729 % 33 %
11 ljusgul 90 % 80,5085 % 50 %
12 mörkgrön 13 % 68,7627 % 23 %
13 magenta 79 % 36,0508 % 73 %
14 grå 80 % 80 0000 % 80 %
15 vit 100 % 100 0000 % 100 %

Du kanske kommer till slutsatsen att det felaktiga värdet på 113% för R av färgen "ljusröd" beror på ett stavfel i databladet och där får RY inte vara större än 80%. Men om du mäter utsignalerna från chippet med ett oscilloskop , kommer du att upptäcka att alla värden i tabellen är korrekta. Så felet är inne i chipet och driver den röda signalen till mättnad. Av denna anledning ska detta värde korrigeras till 100 %.

Dessutom måste du tänka på att fram till den tiden har endast katodstrålerör varit tillgängliga för datorskärmar såväl som för tv-apparater, och att dessa CRT-apparater hade ett gamma . TMS9918-seriens kretsar hade designats för att fungera med tv-apparater och deras CRT hade ett gamma på 1,6 (anmärkning: CRT på Macintosh -skärmar hade 1,8 och CRT på PC-skärmar hade 2,2). Platta skärmar har inte gamma . Av denna anledning ser färgerna på TMS9918 något bleka ut här som du kan se i den första tabellen ovan. Tabellen nedan använder de gammakorrigerade värdena, som är (skrivna i hexadecimal eftersom detta behövs av Wikipedias kodning):

Färg kod Färg R G B
1 svart 00 00 00
2 mellangrönt 0A AD 1E
3 ljusgrön 34 C8 4C
4 mörkblå 2B 2D E3
5 ljusblå 51 4B FB
6 mörkröd BD 29 25
7 cyan 1E E2 EF
8 medelröd FB 2C 2B
9 ljusröd FF 5F 4C
10 mörk gul BD A2 2B
11 ljusgul D7 B4 54
12 mörkgrön 0A 8C 18
13 magenta AF 32 9A
14 grå B2 B2 B2
15 vit FF FF FF

Notera: De använda stegen är: Avrunda alla värden till två decimaler, höj sedan till potensen 1,6 för gammakorrigering och transformera slutligen värdeintervallet från 0...100 till 0...255.

Specifikationer

  • Video RAM: 16 KB
  • Textlägen: 40 × 24 och 32 × 24
  • Upplösning: 256 × 192
  • Färger: 15 färger + transparent
  • Sprites: 32, 1 färg, max 4 per horisontell linje

Arv

Texas Instruments TMS9918A efterträddes av Yamahas V9938 , som lade till ytterligare bitmappslägen, mer färgglada sprites , ett vertikalt rullningsregister i helskärmsläge, vertikala och horisontella offsetregister, en hårdvaru- blitter och en anpassningsbar palett . V9938 designades för MSX2- standarden för datorer och användes senare i en tredjepartsuppgradering till TI-99/4A - Geneve 9640 'dator-på-ett-kort'. V9938, i sin tur, efterträddes av V9958 , som lade till några extra högfärgslägen och ett horisontellt tvåsidigt rullningsregister, dessa chips användes i MSX2+/turboR-systemen.

Toshiba skapade en klon som heter T6950 och stöder inte maskeringsfunktionen för odokumenterad mönster/färgtabell i grafik 2-läge. [ bättre källa behövs ] Senare släppte Toshiba T7937A MSX-motorn med en inbyggd VDP och fixade maskeringsfunktionerna. Båda VDP:erna från Toshiba har en något annorlunda palett än Texas VDP:erna, med mer levande färger.

TMS9918 var grunden för VDP -chippen i Segas Master System , Game Gear och Mega Drive . [ citat behövs ] De använde ytterligare visningslägen och register, och lade till hårdvarurullningsmöjligheter och andra avancerade funktioner.

Se även

externa länkar