Texas Instruments TMS9918 je elektronická součástka, čip řadiče videa (VDP, Video Display Processor). Byl vyvinut společností Texas Instruments v letech 1977 - 1979 a byl uveden na trh v roce 1979. Byl použit ve vlastním domácím počítači společnosti TI-99/4A . To bylo následně použito v řadě počítačů a herních konzolí na počátku 80. let 20. století . TMS9918 také podporuje řadu dalších, pozdějších video řadičů.
Na vývoji se podílelo šest lidí. Jeden z nich, Karl M. Guttag, se podílel na vývoji subsystému sprite, rozhraní DRAM a testování logiky v několika verzích čipu [1] .
Čip TMS9918 byl použit v následujících systémech:
Počítače:
Herní konzole:
Existuje několik verzí čipu - TMS9918, TMS9918A, TMS9928, TMS9928A, TMS9929A, TMS9118 a TMS9128. Písmeno A v názvu označuje druhou verzi čipu, která přidala nový režim rastrového videa (Graphic II) a některé další funkce. První verze mikroobvodu, která neměla v označení písmeno A, byla použita pouze v počítači TI-99/4. Počítač TI-99/4A a všechny ostatní počítače využívající tento čip používají jeho druhou verzi.
Verze TMS9918A a TMS9928A generují obraz se snímkovou frekvencí 60 Hz , verze TMS9929A má snímkovou frekvenci 50 Hz.
Čip TMS9918A generuje plně barevný kompozitní video signál se systémem barevného kódování NTSC , zatímco verze TMS9928A generuje signály ve formátu YPbPr - výstup jasu Y a výstupy barevných rozdílových kanálů RY, BY. Takový výstup byl vyžadován kvůli použití v různých zemích, například v Evropě, televizních standardů se snímkovou frekvencí 50 Hz a různých systémů barevného kódování - PAL , SECAM . Použití externího kodéru barev bylo v tomto případě nákladově efektivnější.
Všechny verze této řady jsou běžně označovány jako TMS9918, někdy včetně písmene A.
Pro použití v počítačích standardu MSX2 vyvinula Yamaha čip V9938 založený na TMS9918A . Je softwarově kompatibilní s TMS9918A, ale má další režimy rastrového videa, menší omezení pro použití barev pro skřítky, registr vertikálního rolování obrazu, schopnost provádět různé příkazy (přesouvání nebo malování bloků ve video paměti) a přizpůsobitelnou paletu. V9938 byl také použit v rozšiřující kartě Geneve 9640 pro počítače TI-99/4A.
Na druhé straně, na základě V9938, Yamaha vyvinula čip V9958 , určený pro použití v počítačích standardů MSX2 + a MSX Turbo R. Rozdíly mezi těmito čipy nebyly tak výrazné - bylo přidáno několik grafických režimů s možností použití více barvy a také registrovat horizontální rolování obrazu.
Yamaha také vedla vývoj dalšího čipu v řadě, V9978 , který měl být původně použit v počítačích standardu MSX Turbo R. Jeho vývoj ale z nějakého důvodu nebyl dokončen. Čip byl následně vydán pod názvem V9990 . Měl funkce oznámené pro V9978, ale nebyl zpětně kompatibilní se sériovými čipy. V9990 byl použit na počítačích MSX, nicméně jako součást rozšiřující karty Graphics9000 třetí strany ( Sunrise Swiss ).
Čip TMS9918A byl také používán v raných herních systémech Sega . Následně byl použit v základu specializovaného video ovladače pro herní konzole Sega Master System a Sega Game Gear (označené 315-5124, 315-5246, 315-5378). Tyto mikroobvody kromě vlastních možností obsahují všechny původní video režimy TMS9918A. Videoherní konzole Sega Mega Drive (čip 315-5313) je zpětně kompatibilní s video ovladači Master System a Game Gear, ale nemá režimy TMS9918A.
TMS9918 má rozhraní pro práci s 16K 8bitovou videopamětí. Tato paměť je umístěna na vlastní adresové sběrnici grafického ovladače, mimo adresní prostor hlavního procesoru systému a není pro něj přímo přístupná. Aby bylo možné vložit data do video paměti, musí je hlavní procesor systému přenést přes řídicí porty grafického ovladače. Toto řešení má jak nevýhodu - nemožnost přímo pracovat s grafickými daty, tak výhodu - provoz grafického řadiče nezpomaluje hlavní procesor (což se stává v systémech s videopamětí umístěnou v hlavní paměti, když zařízení přistupují paměť zároveň) a nezabírá její adresní prostor .
Procesor komunikuje s grafickým řadičem prostřednictvím dvou osmibitových portů. Prostřednictvím těchto portů může procesor posílat příkazy do videořadiče a data, která mají být umístěna do videopaměti, stejně jako dotazovat se na aktuální stav videořadiče. Chcete-li přenést data do videopaměti, musíte nastavit aktuální adresu ve videopaměti, poté můžete přenášet data. Důležitou vlastností TMS9918 je přítomnost automatického zvýšení adresy videopaměti během každého přenosu bajtů, což umožňuje vyhnout se ruční opravě adresy pro každý bajt během blokových datových přenosů.
Čip TMS9918A implementuje čtyři video režimy. Jak je uvedeno výše, TMS9918 nemá režim Graphic II:
Režim 0 (Text): Monochromatický textový režim 40×24 znaků. Protože horizontální rozlišení obrazovky je 256 bodů, každý znak je široký 6 bodů. V tomto režimu není dostupné hardwarové zobrazení sprajtů a změna barvy rámu.
Režim 1 (Grafika 1): 32 x 24 znaků (256 × 192 bodů). Je možné použít 256 různých znaků, jejichž obrázek je nastaven programově. Symboly jsou rozděleny do 32 skupin po 8 symbolech, každé z těchto skupin jsou přiřazeny dvě barvy – pozadí a obrázek. Tak například znaky 0..7 budou mít vždy stejnou barvu.
Režim 2 (Grafika 2): 32 x 24 znaků (256 × 192 bodů). Je možné použít tři sady po 256 znacích, jejichž obrázek je nastaven programově. Každý znak v každé sadě může používat až 16 různých barev, avšak každá tečková řada znaků (čára s 8 tečkami) může mít pouze dvě barvy.
Režim 3 (vícebarevný): bitmapový režim 64×48 bodů. Má velmi nízké rozlišení, proto se používal jen zřídka. Každý bod může mít svou vlastní barvu, kteroukoli ze 16 dostupných. Sprity zůstávají ve vysokém rozlišení, stejně jako v grafických režimech 1 a 2.
V režimu 1, 2 a 3 může grafický ovladač zobrazovat hardwarové sprity. Celkem je možné na obrazovce zobrazit až 32 monochromatických sprajtů o velikosti 8 × 8 nebo 16 × 16 pixelů. Všichni skřítci musí mít stejnou velikost. Každý sprite může mít svou vlastní barvu. Na jednom vodorovném řádku obrazovky lze zobrazit až 4 sprajty, při překročení této hodnoty se zbývající sprajty na tomto řádku nezobrazí. Zároveň funguje nejjednodušší prioritní systém - jako první se zobrazují sprity s nižším sériovým číslem. Omezení počtu spritů zobrazených na řádku lze částečně programově obejít změnou jejich sériových čísel v každém snímku. V tomto případě místo úplného zmizení sprajtů, na které se omezení vztahuje, se zobrazí všechny, ale s blikáním (nejsou přítomny v každém snímku). Tato technika se nazývá sprite multiplexování .
Video ovladač nemá schopnost automaticky pohybovat sprajty, tento úkol je nutné řešit programově. Video ovladač má schopnost generovat přerušení na začátku vertikálního zpětného rozmítání rozmítaného paprsku - dochází k němu každý snímek, tj. každých 1/50 nebo 1/60 sekund, v závislosti na verzi mikroobvodu a standard barevného kódování. Procesor musí podle potřeby změnit pozici spritů v handleru tohoto přerušení.
Když se dva neprůhledné body libovolné dvojice spritů překrývají, nastaví se příznak kolize spritu. To může být použito k určení, zda by se měly spustit složitější rutiny detekce kolize implementované v programu, aby se zjistilo přesné místo kolize a požadovaná reakce na ni. V tomto případě grafický ovladač neposkytuje informace o tom, kteří skřítci jsou zapojeni do kolize.
Technicky je režim Graphic 2 textový režim se sadou 256 uživatelsky definovaných barevných znaků. Obrazovka je vertikálně rozdělena na tři oblasti 256×64 bodů, každá z těchto oblastí má vlastní sadu 256 znaků, počet znaků v sadě se tedy rovná počtu zobrazených znaků (768). Při přiřazování každé pozice znaku vlastnímu znaku ze sady je možné simulovat grafický režim, ve kterém lze změnit každý bod obrázku. Takto získaná rámcová vyrovnávací paměť má však nelineární organizaci.
Program může také používat tři stejné znakové sady a zacházet s obrazovkou jako s textovým režimem s barevnými znaky. V tomto případě se obrázek na pozadí a skřítci skládají ze znaků. Tato technika se často používá ve hrách, protože k vyplnění nebo posunutí celé obrazovky trvá zpracování pouze 32x24 bajtů. Grafika pro takové režimy videa by měla být vykreslena tak, aby přechody mezi hranicemi bloků 8×8 pixelů nebyly příliš patrné.
Obtížnost při vytváření barevné grafiky v režimu Graphic 2 spočívá v omezených možnostech zobrazení barev. Na obrazovce lze použít všech 16 barev palety, ale každý řádek o 8 bodech může obsahovat pouze dva z nich. Tyto barvy lze libovolně vybírat z palety 16 barev. Při použití příkazu LINE v překladači BASIC je toto omezení snadno patrné - když se protínající nebo blízko umístěné čáry různých barev vybarví barvou jedné z čar. Tento grafický artefakt se nazývá barevný únik . Povaha tohoto artefaktu je zcela podobná atributu clash artefakt (překrytí atributů) na počítačích ZX Spectrum , rozdíl je pouze ve velikosti oblastí, na které se vztahuje omezení zobrazování barev.
Řadič videa TMS9918 nemá hardwarové možnosti posouvání. V případě potřeby by měla být implementována zcela softwarově.