Jde mu nastavit barva. (Zkousel sem kdysi i na stare vga) Pouzivalo se to treba na ZX spectru, kde "rychlym" prepinanim barvy okraju dochazelo k zajimavym efektum - pokud zmenite barvu borderu behem vykreslovani, muzete vytvorit vodorovne prouzky, ktere muzou budit dojem usporadaneho pohybu, pokud se trefite do synchronizace :-)
No prave ze Spectra to znam, proto se ptam. Na Spectru bylo mozno synchronizovat do te miry, ze slo do borderu i kreslit / psat. Ale na PC jsem se s tim nikdy nesetkal.
No, synchronizaci na jednotlive pixely jsem na PC nevidel a na VGA to nikdy nemuze byt tak presne, jako na Spectru. Jde o to, ze na Spectru (Commodore, Atari...) se barvy pixelu ctou primo z operacni pameti a existuje tam tedy presna synchronizace CPU a grafickeho cipu. VGA pracuje samostatne, tam se da jednoduse synchronizovat pouze na cele skenovaci radky (klidne i pres preruseni) - vsechna ostatni preruseni (mys, disk apod.) ,se vsak musi povypinat, jinak je generovani pozadi trhane.
Nojo, ty proužky se mění po cca 24 skenovacích řádcích (jestli dobře vidím), to si někdo ulehčil práci. Speccy by to mělo v pohodě ustíhat na každém řádku...
Na Didaktiku Gama to šlo, protože v sobě měl obvod ULA stejně jako ZX Spectrum, zatímco pozdější Didaktiky (M, Compact) pouze jaho jakousi ne moc povedenou náhradu
Na Didaktiku Gama to sice islo, lebo ULA bola sice rovnaka, ale spomalenie CPU pri pristupe do dolnych 32KB pamate bolo ine (uz si nepamatam ci tu uz ziadne spomalenie nebolo alebo len bolo ine ako v originalnom spectre). To malo za nasledok, ze synchronizacia borderu bola *malicko* odlisna od spectra - napriklad pri nahravani (LOAD) sa nezobrazovali krasne staticke pruhu, ale mihajuce prekryvajuce sa pasy. Tie rozdiely boli v ramci mikrosekund ale stacilo to.
Na Atarku s Turbem to bylo podobne. Dokonce se dalo podle prubehu pruhu pri nahravani hlavicky programu motorek kalibrovat (Atari magnetofon mel primo na motorku "brzdicku"). V idealnim pripade se totiz pruhy pri hlavicce, coz byl konstantni ton, nepohybovaly.
Meni barvu borderu je mozne, minimalne pro kazdy skenovaci radek (pri presnejsim casovani i vicekrat na radku, ale to nektere karty neumoznuji). Takze se treba muze prubezne menit pozadi i v textovych rezimech.
Dá se měnit tak, že se nastaví paletový registr pro barvu
s číslem 0 (mě se to povedlo ve VESA režimech, jestli to
funguje i v textovém, nevím, ale asi by mělo).
Jinak pomocí registrů CRTC se ten okraj dá
zvětšovat/zmenšovat nebo úplně zakázat, ale když ho člověk
nastaví moc velký, tak některé monitory přestanou
zobrazovat.
Samozrejmne jde :-) Dost casto sem to pouzival na profilaci/timing. Pokud jsem mel nejakou delsi/pomalejsi rutinu, zmenil jsem si barvu borderu pred zavolanim a po zavolani. Z vysledne "tlousky" poruzku v borderu se dala urcit rychlost a porovnat, jak dopadla optimalizace. A navic to vypadalo celkem pekne, kdyz kazda funkce pouzila jinou barvu :-)
Myslím, že by bylo vhodné uvést, proč se pro 320x200x256 používá tak „podivná“ organizace paměti, aby to nevypadalo, že IBM jsou úplní pitomci, co jen tak bez důvodu zahodí 3/4 kapacity paměti. :-)
Uplni pitomci v IBM urcite nejsou, jsou jen trosku zahledeni sami do sebe (ostatne je to predevsim jejich problem, jine firmy z toho profituji).
U VGA totiz chybi krome cca sedmi existujicich ctecich/zapisovych rezimu jeste rezim jeden (ci jejich doplnek), kdy by se pomoci jednoho dvoubitoveho registru specifikoval offset zapisu do bitovych rovin. Z obrazku uvedeneho v clanku je patrne, ze v rezimu 320x200x256 jsou vsechny bitove roviny zretezeny tak, ze se z kazde vyuzije pouze ctvrtina pixelu - dalsi tri ctvrtiny nejsou dostupne.
Zapis a cteni pixelu je potom sice jednoduche, ale diky zretezeni rovin (posledni dva bity adresy ve skutecnosti specifikuji bitovou rovinu, nikoli adresu v rovine) jsme prisli o moznost ADRESACE zbylych pixelu, ty tam samozrejme jsou ulozeny, jak se da dokazat prepinanim chained/unchained mode. Stacily by tedy ctyri dalsi bity, kterymi by se specifikoval offset v ramci jedne bitove roviny. To u IBM neudelali, proto je z tohoto hlediska VGA docela slozite programovatelna, zejmena v porovnani s dalsimi grafickymi subsystemy te doby - Amiga, Atari ST atd.
Toto se da "decentne" obejit zapnutim mapovanim celych 128KB pameti najednou 0xa000-0xbfff (celkem neznama "ficura" :-). Tak mame i s touto organizaci pameti trosku mista (2 obrazovky) na scrolling. Problemem je pak jeste prace v RealModu, kde muzeme pres segment adresovat pouze 64 KB (takze si musime dynamicky nadstavovat i segment:-{
Ano, tato fíčura se kupodivu příliš často nepoužívala (pár dem), i když byla vcelku jasně popsaná i v manuálech od IBM. Snad to bylo tím, že se měla zachovat kompatibilita s dvoumonitorovými systémy - ve své podstatě by se ale nemělo nic stát, kdyby se při zápisu do segmentu 0xb000 tato data zapisovala současne do paměti VGA i MDA/Herculesu. Akorát by jeden z těchto adaptérů zobrazoval bordel :-)
Ale adresace 128kB pořád nenahrazuje ztrátu 3/4 paměti v chained režimu.
A nepouziva se nahodou ten chained rezim kvuli rychlosti pametovych cipu?
Tech 25MHz by totiz vyzadovalo minimalne 40ns nebo rychlejsi pameti, ale na
VGA sou typ. 60-80ns chipy (vecinou 8: 64k x 4bit). Pokud bude kazda bitova
rovina v samostatnem chipu a pri cteni se postupne vystridaji 1. az 4. tak se
snizi naroky na casovani a zvladne to i ten 80ns chip.
Přesně tohle jsem taky původně měl na mysli. Ale pořád zůstává faktem, že i tak se dala adresace udělat tak, aby se neztratily 3/4 kapacity. Jenže, po pravdě řečeno, jsem rád, že to takhle udělali – programovat cokoli pro třeba 640x480x16 byl porod, 320x200x256 byla vždycky nádhera. :-)
Ano, s rychlostí pamětí mohou být problémy, ale ono ani tak nejde o vlastní čtení z paměti (vždyť se pořád zobrazuje pouze 64000 pixelů), ale o přístup do zbylé paměti, tedy "posun" uvnitř bitových rovin.
Vlastnosti, ze se da soucasne zobrazovat 512 znaku jsme vyuzili k zobrazovani znaku s dvojitou sirkou. V normalnich 256 znacich byly normalni fonty i se vsemi rameckovymi a jinymi znaky. Ve druhe sade byly jenom znaky 0-127 ale zato s dvojitou sirkou, takze zabiraly vsech 256 znaku ve fontu. Vypadalo to velmi efektne, kombinace sirokych a uzkych pismen v textovem mode. Jediny problem byl v tom, ze se nedal vyuzit standardni VGA mode 720/400 (9 bitu na sirku znaku), ale muselo se jit do EGA mode, kde maji znaky sirku 8 bitu, tak se daly spojovat do dvojitych znaku.
bohuzel nemam lepsi fotku nez tohle, neni to z toho moc videt :-(. http://spintec.dnsalias.com/images/eurobase.gif
Diky za odkaz, konecne je videt prakticke uplatneni nejake malo zname ficurky VGA. U znaku zobrazovanych v sirce deviti bodu karta VGA pracovala tak, ze u nekterych znaku se posledni definovany (tj. osmy) pixel "natahoval" do pixelu devateho, ostatni znaky mely devaly sloupec prazdny, tj. barvu pozadi. Znaky, ktere se "protahovaly", odpovidaly pozici ramecku, odhadem je to ASCII 176-206. Je ale pravda, ze do tak maleho rozsahu se nedaji vsechna pismena vecpat.