K PC/XT patří MDA nebo CGA grafika. Ta má ovšem obvykle TTL RGBI video výstup na D-sub 9 konektor, což bohužel výrobci TV a monitorů už pěkných pár let nehodlají podporovat. Proto mně hned nadchnul projekt Tube Time Graphics Gremlin – Retro ISA Video Card, sotva jsem ho asi přes měsícem zahlédnul na Twitteru. Jedná se o kartu emulující v FPGA karty MDA a CGA, které jsou volitelné jako různá jádra a přepínatelné prostřednictvím DIP přepínače. Výstup má karta klasický, tj. D-sub 9 a kompozitní, ale kromě nich obsahuje i VGA D-sub 15, na který příslušný obraz přepočítává tak, aby byl VGA kompatibilní. Jak si ukážeme dále, není to tak ideální, jak by se na první pohled zdálo.
MDA (Monochrome Display Adapter) je černobílá karta pracující výhradně v textovém režimu 80×25 znaků. Každý znak má 9×14 pixelů, což představuje celkové rozlišení 720×350 bodů. Bohužel graficky jej umí využít až karta Hercules. U MDA se musíme obejít jen s ASCII znaky, které můžou být ve dvou úrovních jasu, podtržené nebo blikající, ale žádné barvičky. Díky rozlišení 720 bodů na řádek má karta i poměrně “hnusnou” a nekompatibilní horizontální frekvenci 18.43 kHz.
CGA (Color Display Adapter), jak sám název napovídá, přichází s barvičkami a také pixelově adresovatelnou grafikou. Textové režimy podporují 40×24 nebo 80×25 znaků v 16 barvách. Grafika umožňuje zobrazit 320×200 pixelů ve 4 barvách nebo 640×200 pixelů monochromaticky. Barvy se dají vybírat omezeně. V režimu 320×200 pixelů jsou k dispozici v podstatě dva režimy – červeno-zeleno-žlutý nebo azurovo-purpurově-bílý. Už se vám vybavují staré PC hry , jako třeba známý Alley Cat?
Trochu extra je u CGA režim 160×100 pixelů, který je vlastně textový režim, kde se chytře využívá půlený znak 0xDE, barva popředí a pozadí a z každého znaku se kreslí jen dvě scanline. Tím vznikne plně adresovatelných 160×100 pixelů v 16 barvách.
Pro zajímavost, obě originální karty jsou původně postavené na známém obrazovém řadiči Motorola 6845, který najdeme třeba v Amstrad CPC, BBC Micro a dalších 8-bitových počítačích, a třeba i v SAPI .
Celý projekt Graphics Gremlin je open source a kompletně zveřejněný na GitHub, takže karta hned putovala do košíku v JLC. Trochu horší to bylo se součástkami. Dnešní totální nedostatek čipů se projevil i na použitém FPGA iCE40HX4K, takže jsem je, ač nerad, objednal u tří různých Čínských dodavatelů, kteří nedostatek na trhu samozřejmě zaznamenali a nezapomněli navýšit ceny, nemluvě o ceně dopravy. Ale dočkal jsem se, FPGA dorazily, ostatní součástky z Mouser už mezitím byly doma a tak osazení a otestování nic nebránilo.
Na té černé nepájivé masce to není až tak vidět, ale karta má celkem dost součástek, takže osazení chvilku zabralo. Kromě FPGA na kartě najdete SRAM 512kB, oddělovače 5V sběrnice, konfigurační flash, hromádku odporových sítí s OZ tvořící DA převodník, reset obvod, stabíky pro 3.3V a 1.2V, oscilátory 10 MHz a 14.318 MHz a asi 60 drobných pasiv.
K dispozici jsou zdrojáky pro FPGA, ale binárka chybí. Přeložit si je můžete Open Source nástroji Project IceStorm, který bohužel příliš nemyslí na nás, uživatel Windows . Celý toolchain už mám rozchozený pod WSL2, ovšem WSL2 nepodporuje USB, takže se z něj tak nějak nedostanu k programátoru, kterým je v tomto případě jednoduchý FTDI FT2232H modul. Naštěstí VMWare Workstation USB podporuje, tak jsem si celý toolchain nainstaloval do virtuálního Ubuntu a pak už jsem se dočkal. Překlad i naprogramování šlo celkem hladce, jen mně trochu zarazilo, že programování trvá celkem dlouho, řekl bych určitě přes minutu, což mi na 405 kB přišlo docela dost, nicméně programováni i verifikace proběhly OK a karta se v režimu MDA rozjela na první dobrou.
Je celkem milé, že monochromatické MDA se na VGA zobrazuje jantarovou barvou. Výše uvedené fotky monitoru to neukazují tak hezky, ale fakt to vypadá dobře. Trochu horší je, že se MDA 720×350 resampluje na 640×350 pixelů VGA, čímž některé svislé linky prostě vezmou za své a je to trochu vidět. Myslím, že vhodnější VGA režim by byl 720×400 pixelů. Tento režim mi navíc nebral ani grabber, tak jsou to jen fotky monitoru.
Tube Time vytvořil i FPGA jádro (bitstream), který používá originální rozlišení 720×350 pixelů na původní frekvenci a dá se navolit prostřednictvím DIP přepínačů, ale toto dnes atypické rozlišení s horizontální frekvencí 18.43 kHz se mi nepodařilo na žádném moderním zobrazovadle zobrazit.
Horší bylo, že při navolení CGA režimu (FPGA jádro, bitstream, prostřednictvím DIP přepínačů) se mi nezobrazovalo vůbec nic. Rychlá kontrola osciloskopem ukázala, že mi nekmitá oscilátor 14.318 MHz, resp. bylo na něm 4,77 MHz s asi 100 mV úrovní, prostě jen nabrumené z taktu procesoru. Proměřil jsem piny oscilátoru a na EN jsem měl 0, přestože je přes odpor 10k připojený na +3.3V. Ještě, že tam ten odpor, byl, asi se mi povedlo udělat zkrat někde pod oscilátorem. Tady ty potvůrky 3.2 × 2.5 mm s ploškami vespod se nepájí úplně nejlépe. Odpájel jsem ho, očistil a znovu opatrně připájel a jupí, máme CGA obraz. Vyzkoušel jsem i odpor R25 přehodit na pozici R11 a tím přivést 14.318 MHz ze sběrnice. Chodilo to také bez problému na všech testovaných počítačích. Dle autora nemusí být na všech PC hodiny 14,318 MHz ze sběrnice stabilní a proto dal na desku i možnost osazení extra oscilátoru a doporučuje ho použít.
Trochu jsem už zapomněl, jak tyhle karty fungovaly. Na grafické kartě není žádný BIOS a režimy MDA, GGA (40×25, 80×25) se volí v BIOSu. Docela dobře mi vše fungovalo na 286 s AMI BIOSem i na Wildcard 88 PC XT s BIOSem z The Leading Edge Model D, kde se nastavuje režim přes hardwarové jumpery. CGA jsem ale nerozchodil na mém oblíbeném Micro 8088 (koukám, že o něm nemám příspěvek, to budu muset napravit). Pokud kartu přepnu do CGA režimu, Micro 8088 mi nic nezobrazuje. Problém asi bude někde v 8088 BIOSu, na DIP switche na desce to nereaguje, zkusím se zeptat Sergeye.
Další věc, na kterou jsem narazil, je poměrně časté sněžení v obraze. Autor o tom ví, tak snad se mu to podaří pořešit. Dělá to skoro vždy, když se intenzivně pracuje s grafikou.
Při testování mně docela překvapil Leisure Suit Larry, kde jsem měl na VGA výstupu zobrazený černobílý CGA obraz, ale 640×200 místo 320×200 a zvláštně svisle linkovaný podobně jako na Apple II, když je problém s color burst. LSL si totiž dělá barvičky sám a spoléhá na barevný kompozitní NTSC výstup. Tak jsem přepnul DIP switch na kompozit, připojil na něj telku a voilá, obraz byl krásně barevný a i celkem ostrý. Paráda.
Podobné chytristiky dělá i pár dalších her, často právě od Sierra Online. Bylo by fajn, kdyby se tohle dalo překlopit i na VGA výstup, ale to by asi chtělo více chytristik.
Nemohl jsem nevyzkoušet již zmiňované rozlišení 160×100 pixelů v 16 barvách a dle očekávání na VGA výstupu funguje perfektně. Tady až na to časté sněžení.
Nezmínil jsem ještě jeden DIP přepínač, který přepíná font na tenčí. Mně se ale líbí ten klasický silnější, takže tohle asi moc nevyužiju. Jo a ještě jsem se moc pobavil u popisků na desce. Fakt se autorovi povedly, logo Gremlina je super a popisky doporučuju přečíst .
Nutno říct, že karta Graphics Gremlin je super počin a v dnešní době určitě cesta správným směrem. Autorovi obrovský dík za jeho práci a za kompletní zveřejnění na GitHub pod Creative Commons Attribution-ShareAlike 4.0 licencí. Ještě to bude chtít pár softwarových úprav a zdokonalení, a jsem zvědavý, jestli si Tube Time najde čas alespoň na některá vylepšení, které zmiňuje na konci hlavní stránky projektu na GitHub. Zní to lákavě. Já osobně bych ocenil rozšíření o Hercules, Tandy, PCjr a EGA grafiku. Nemělo by to být až tak moc práce, no ta EGA asi trochu jo, ale hardware je poměrně výkonný, na FPGA místa dost. DA převodník je 19-bitový (6-7-6), takže barviček je také k dispozici dost. Jediné z čeho mám trochu strach je použitá 8-bitová paměť, která je sice velká dost, ale těch 8 bitů může být úzké místo z hlediska rychlosti zápisu a čtení dat v některých vyšších grafických režimech. Naštěstí je paměť SRAM alespoň poměrně rychlá.
A obligátní větička nakonec, kdyby někdo chtěl destičku, tak mám pár k dispozici. A možná se najde i nedostatkové FPGA (pro prvních pár šťastlivců, netestováno, zapájel jsem ten od prvního Číňana, který přišel, je ještě s logem SiliconBlue, tj. než je Lattice koupili a funguje ok, ale ty další neotestuju bez zapájení a naprogramování, takže bez záruky).
Těch 16 barev v kompozitním CGA umí na VGA překlopit převodník od tandycocoloco.
(Dva odkazy mi neprojdou, ale google poradí:-)
Ale jednak to vyžaduje skutečnou CGA kartu a druhak to stejně není ono, reálnému výstupu se to jen trochu přibližuje.
Taky mě napadá poznámka k té monochromatičnosti MDA, není to tak úplně pravda. Existuje několik revizí MDA a některé barvy umějí, v tomhle videu to Roman Ondrejka předvádí:
https://www.youtube.com/watch?v=UP-ZhyJ3T3k
Ty jsi rychlík, Martine! Mně teprve zítra bude FedEx doručovat PCB a ty už to máš nejen osazené a otestované, ale i článek napsaný!
Díky moc, hezké čtení. Aspoň vím, na co se připravit. Náhodou ty FPGA nemáš přebytečné?
Pingback: midiori – MIDI interface pro SHARP X68000 – lepší zvuk pro hry | Martinův 8-bitový blog