Adaptér televizního rozhraní - Television Interface Adaptor

Television Interface Adapter ( TIA ) je zvykem počítačový čip , který spolu s variantou MOS Technology 6502 , je srdcem 1977 Atari Video počítačový systém herní konzole. TIA generuje displej, zvukové efekty a čte ovladače. V době, kdy byl Atari VCS navržen, bylo i malé množství paměti RAM drahé. Čip byl navržen tak, aby neměl vyrovnávací paměť rámců, místo toho vyžadoval podrobné programování, aby vytvořil i jednoduchý displej.

Vývoj TIA CO10444 / CO11903 vedl Jay Miner, který v Atari pokračoval v rozšiřování designu TIA pro počítače Atari 400/800 s čipy ANTIC a CTIA / GTIA . Jay Miner později vedl návrh vlastních čipů pro počítač Amiga .

Design

Základní deska původního Atari VCS se šesti přepínači. 40kolíkový čip TIA je vlevo. Středový 24kolíkový je MOS Technology 6507 a napravo 40kolíkový čip MOS Technology 6352 Ram-I / O-Timer (RIOT). Slot pro vložení kazety je vpravo od čipu RIOT.

Pozadí

Kolem roku 1975 uvažovali inženýři společnosti Atari ve společnosti Cyan Engineering pod vedením Steva Mayera a Rona Milnera o alternativách k vývojovému hardwaru, jako jsou integrované obvody specifické pro aplikaci (ASIC) pro arkádové videohry a domácí herní konzole. Programovatelné mikroprocesory se dostaly na trh, ale Atari je považoval za příliš drahé pro domácí aplikaci. Byly také omezeny náklady na možnosti zobrazení grafiky. V tomto okamžiku byla většina počítačové grafiky generována pomocí skřítků nakreslených na hřišti, které byly poté přeloženy do analogového signálu pro zobrazení na videomonitoru CRT . Skřítci by byli drženi jako bitmapa v framebufferu vyžadujícím paměť s náhodným přístupem (RAM). RAM byla stále drahá, stála desítky tisíc dolarů za megabajt. A zobrazení dvoubarevného hřiště na displeji 80 × 48 by stálo tisíce dolarů v paměti. Na konvenční barevné televizi NTSC maximální rozlišení obecně kleslo mezi 256 a 320 pixelů na řádek a 192 až 240 řádků na obrazovku.

V září 1975 představila společnost MOS Technology mikroprocesor 6502 , jeden z prvních nízkonákladových mikroprocesorů na trhu. Mayer a Milner se dohodli, že si promluví s designérem čipu Chuckem Peddleem , že použijí 6502 jako základ pro jejich programovatelnou videoherní konzoli. V průběhu několika dní byl stanoven základní design Atari VCS, kdy společnost Peddle nabídla společnosti Atari použití levnějšího procesoru MOS Technology 6507 a MOS Technology 6532 RAM-I / O-Timer (RIOT) jako jádro designu. Použitím prkénko prototyp grafického adaptéru na vrcholu testbedu systému 6502, Milner byl schopen prokázat schopnost programovat jednoduché verzi svého Tank hry. Joe Decuir byl najat, aby pomohl převést Milnerův důkaz koncepce na funkční prototyp, který je dostatečný pro Atari, aby dal pokračování vývoje.

Zatímco Decuir pracoval na designu zbytku systému, Jay Miner se zaměřil na výrobu ASIC pro grafický adaptér. Zpočátku byl grafický adaptér ASIC pojmenován Adaptér televizního rozhraní (TIA). Cena týmu RAM zůstávala na vysoké úrovni, když tým zahájil svůj návrh, a proto byla z návrhu TIA upuštěna možnost používat paměťové framebuffery.

Design bez RAM

Kvůli nedostatku RAM se TIA liší od konvenčního přístupu framebuffer v tom, že obraz na obrazovce je tvořen manipulací s pěti pohyblivými grafickými objekty (2 hráči, 2 rakety a 1 míč) a statickým objektem hřiště. Všechny jsou generovány na každém řádku skenování z jejich příslušných registrů, na rozdíl od techniky používané v modelu mapovaném framebufferem, který vyžaduje, aby je program aktualizoval na každém řádku skenování. Horizontální rozlišení není jednotné, protože jeho velikost závisí na konkrétním grafickém objektu. Nejmenší jednotka pixelu odpovídá 1 barevnému hodinovému cyklu čipu, z nichž na řádku je 160 viditelných.

Objekt Playfield se skládá z dva a půl bajtového registru (20 bitů široký), který lze symetricky odrážet nebo kopírovat tak, jak je, do pravé poloviny obrazovky, celkem 40 bitů (každý bit má 4 barevné cykly široký). Barva, která byla nakreslena, pokud bit byl 1 nebo 0, byla vybrána z předdefinované palety až 128 barev (viz níže) a udržována v jiných registrech.

TIA také podporovala pět samostatných grafických objektů skládajících se z:

  • Dvě 8pixelové vodorovné čáry, které tvoří „ skřítky “ Player 1 a Player 2. Jsou jednobarevné, lze je natáhnout o faktor 2 nebo 4 a lze je duplikovat nebo ztrojnásobit.
  • „Míč“ - vodorovná čára, která má stejnou barvu jako hřiště. Může mít šířku jeden, dva, čtyři nebo osm pixelů.
  • Dvě „střely“ - další vodorovná čára, která má stejnou barvu jako její příslušný hráč. Může mít šířku jeden, dva, čtyři nebo osm pixelů.

Bez framebufferů založených na RAM je detekce kolizí také komplikovaná. TIA má detekci kolize hardwaru pro všechny tyto objekty pomocí 15 klopných obvodů nastavení / resetování a ukládá bitmapu kolizí, které se obvykle čte během období VBLANK. Registry v TIA umožňují programátorovi řídit umístění grafických objektů a jejich barvu.

TIA také poskytuje dva kanály jednobitového zvuku. Každý kanál poskytuje 32 hodnot výšky tónu a 16 možných bitových sekvencí. K dispozici je 4bitové ovládání hlasitosti.

A konečně, TIA má vstupy pro čtení až čtyř analogových řadičů pomocí potenciometrů a pro dva spouštěče joysticku.

Kreslení displeje

Jelikož registry obsahují data pouze pro jeden řádek displeje, vytvoření celé obrazovky vyžaduje, aby program hry aktualizoval registry za běhu, což je proces známý jako „ proběhnutí paprsku “.

Pro spuštění procesu načte herní program spuštěný na procesoru založeném na MOS Technology 6502 registry TIA s daty potřebnými k nakreslení prvního řádku displeje. TIA pak čeká, až je televizor připraven nakreslit linku (pod velením přidruženého analogového hardwaru TIA) a přečíst registry, aby vytvořil signál pro tuto linku. Během období horizontálního zatemňování mezi řádky 6502 rychle mění registry TIA podle potřeby pro další řádek. Tento proces pokračuje dolů po obrazovce.

To je ještě obtížnější, protože MOS Technology 6507 v 2600 je pin-zmenšená verze 6502 bez podpory hardwarových přerušení . Analogová strana zobrazovacího systému obecně generuje přerušení, když dokončí kreslení rastrové čáry a připravuje se na další. Přerušení spustí kód potřebný k aktualizaci obrazovky a poté se vrátí do „hlavního“ programu. 6507 nechal tyto piny mimo CPU, aby ušetřil peníze, ale má pin „RDY“ pro vložení stavů čekání do cyklů sběrnice CPU. TIA byl speciálně navržen tak, aby používal pin RDY k synchronizaci CPU s časováním rastrových řádků videa generovaného TIA: když CPU zapisuje na určitou adresu registru TIA, TIA snižuje svůj výstupní signál RDY až do začátku dalšího řádku příkaz „počkat na synchronizaci“. Tím se pozastaví provoz CPU až do začátku (barevný taktovací cyklus 0) dalšího řádku, což poskytuje míru automatické synchronizace. Zamýšleným použitím tohoto mechanismu je, aby CPU nastavila registry TIA pro následující řádek dříve, než TIA dosáhne konce aktuálního řádku, poté zapíše do registru, který spustí synchronizační zpoždění přes RDY, čímž vyhodí proměnné množství Čas procesoru ve prospěch snazší synchronizace časování videa.

Kromě toho TIA pouze poloautomaticky generuje vertikální synchronizační časovací signály (pro označení konce každého videozáznamu a začátku dalšího). TIA je schopna vložit vertikální synchronizační signál do analogového výstupního video signálu, ale nemá čítač řádků snímků, a tak nedokáže určit, kdy by měl rámec skončit. Místo toho je ponecháno na program CPU, aby spouštěl vertikální synchronizační signály a počítal řádky v každém rámci, aby určil, kdy má být generován vertikální synchronizační signál. Stejně jako u hardwaru RDY-wait je vertikální synchronizační signál spouštěn zápisem CPU na konkrétní adresu registru TIA. Pokud by se na tuto adresu nikdy neprovedl žádný zápis a TIA se mohla volně provozovat, vygenerovala by jeden nekonečný rámec aktivních rastrových řádků, který by se v televizi obvykle zobrazoval jako klouzavý obraz. Většina publikovaných her pro Atari 2600 generovala vertikální synchronizaci buď po každých 262 nebo každých 263 řádcích (ale nic o TIA nebrání tomu, aby generoval snímky libovolné délky, kratší nebo delší, ačkoli výsledné video displeje by se na normálních televizorech svisle rolovaly).

Tyto a další podrobnosti programování TIA znamenají, že programátoři musí pečlivě načasovat své programy, aby běhali v přesném počtu cyklů potřebných pro různé události související s obrazovkou. Pokud to uděláte špatně, obrazovka nebude nakreslena správně. Část programu, která to dělá, je známá jako „jádro“ tohoto programu.

Vzhledem k této složitosti měly rané hry využívající systém sklon k jednoduchému rozložení a pomocí TIA vytvářely symetrická hřiště s hráči nahoře. To byl původní záměr systému: spustit několik arkádových her, které Atari již produkovaly jako Tank a Pong . V těchto případech byla data hracího pole obvykle uložena v paměti 2 kB ROM v kazetě hry . Protože každý řádek používal 20 bitů dat a na displeji NTSC bylo 192 řádků, displej s jiným rozložením na každém řádku potřeboval pouze 480 bajtů (192 x 20/8) 4 kB kazety, aby držel jeden pevný kódovaný displej. V tomto případě jádro jednoduše postupovalo 20 bitů přes ROM pro každý řádek, jak TIA postupovala dolů po obrazovce, což byla úloha, která trvala jen několik cyklů času CPU. To lze dále omezit použitím stejných dat pro více řádků, a to buď jejich zdvojnásobením ve svislém směru, nebo čtením jedním směrem v seznamu nahoře a potom zpět na druhou stranu ve spodní části, čímž se vytvoří vertikálně zrcadlené zobrazení pouze 240 bajtů.

Klíčovým pokrokem bylo licencování Space Invaders pro platformu, což vyžadovalo mnohem více hráčské grafiky, aby přilákalo nepřátelské mimozemšťany. Řešením bylo změnit data hráče pro každý řádek, když se kreslil obraz, čímž se vytvořil zjevně velký počet hráčů. Dalšího pokroku bylo dosaženo (částečně) kódováním displeje jako instrukcí CPU namísto jeho ukládání jako pevných dat do ROM. Adventure používá tento koncept k výrobě široké škály map kombinováním různých částí dat v ROM, skákáním tam a zpět během kreslení obrazovky. To umožnilo hře mít 30 místností, což by jinak vyžadovalo 14 kB ROM.

Jak si programátoři zvykli na zvláštní časování potřebné k tomu, aby věci fungovaly správně na obrazovce, začali využívat vlastní flexibilitu v TIA k výraznému vylepšení displejů. Jednou běžnou technikou byla změna barevných registrů, které byly použity k nakreslení stavů 1 a 0 hřiště, což mělo za následek zobrazení s duhovými efekty. Pozdější hry mohly upravit střed hřiště na hřiště tak, aby generovaly asymetrické vzory, přemisťování a změna hráčských skřítků na střední obrazovce za účelem generování dalších skřítků.

Možnosti barev TIA

TIA používá různé barevné palety v závislosti na použitém formátu televizního signálu. Pro formát NTSC (číslo dílu CO10444) je k dispozici paleta 128 barev, zatímco pro PAL je k dispozici pouze 104 barev (číslo dílu CO11903). Navíc, SECAM paleta se skládá z pouhých 8 barev.

Paleta NTSC

jas
odstín
0 2 4 6 8 10 12 14
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Paleta PAL

jas
odstín
0 2 4 6 8 10 12 14
0,1,14,15
2
3
4
5
6
7
8
9
10
11
12
13

Paleta SECAM

0 2 4 6 8 10 12 14

Generátor šumu / tónu (AUD0 / 1)

TIA je schopna generovat různé typy pulzního a šumového výstupu do svých dvou oscilátorů (nebo kanálů) AUD0 a AUD1. Každý oscilátor má 5bitový dělič kmitočtu a 4bitový řídicí registr zvuku, který manipuluje s průběhem. K dispozici je také 4bitový registr ovládání hlasitosti na kanál.

Frekvenční dělič (AUDF0 / 1)

Kmitočty jsou generovány odebíráním 30 kHz a dělením dodanou 5bitovou hodnotou. Výsledkem je levný dělič kmitočtů schopný rozladit noty a lichě vyladěnou frekvenci. TIA není hudební čip, pokud skladatel nepracuje v rámci frekvenčních limitů nebo moduluje mezi dvěma rozladěnými frekvencemi, aby vytvořil notu naladěnou na vibrato.

Ovládání zvuku (AUDC0 / 1)

Registr ovládání zvuku generuje a manipuluje s pulzní vlnou, aby vytvořil složité pulsy nebo šum. Následující tabulka (s navrženými duplikáty) vysvětluje, jak jsou generovány její tóny:

ŠEST D7 D6 D5 D4 D3 D2 D1 D0 Typ hluku nebo rozdělení
0   0 0 0 0 Nastaveno na 1 (pouze hlasitost)
1 0 0 0 1 4 bit poly
2 0 0 1 0 ÷ 15 → 4 bit poly
3 0 0 1 1 5 bit poly → 4 bit poly
4 0 1 0 0 ÷ 2
5 0 1 0 1 ÷ 2
6 0 1 1 0 ÷ 31
7 0 1 1 1 5 bit poly → ÷ 2
8 1 0 0 0 9bitový poly (bílý šum)
9 1 0 0 1 5bitový poly
A 1 0 1 0 ÷ 31
B 1 0 1 1 Nastavte poslední 4 bity na 1
C 1 1 0 0 ÷ 6
D 1 1 0 1 ÷ 6
E 1 1 1 0 ÷ 93
F 1 1 1 1 5bitový poly ÷ 6

Reference

Zdroje

externí odkazy