В първата част се спряхме на стандартните възможности на CGA. Нека сега да разгледаме какви са разширените възможности на този графичен адаптер, който по принцип е в основата на почти всички съвременни решения.
Неочакваните възможности на CGA
… В графичните режими
Както обяснихме преди, част от реда, който има един и същ цвят, в композитния сигнал изглежда като меандър с период от 8 субпиксела. Но е вярно и обратното: всеки композитен сигнал, който се повтаря с период от 8 субпиксела, ще се покаже като част от ред с един и същ цвят. Причината е, че отделяната от филтрите подносеща хармоника има едно и също фазово изместване и постоянна амплитуда.
В показаното по-горе изображение редът Nybble показва поредица от четири пиксела в режим 640x200x1bpp – тоест 8 субпиксела. Двете от тези поредици (0101 и 1010) очевидно съответстват на меандър с период от 4 субпиксела: в този сигнал няма подносеща хармоника и това ще бъде сив цвят. Другите четири поредици (0011, 0110, 1001, 1100) съвсем точно съответстват на чист сигнал с подносеща с фазово изместване съответно 135°, 225°, 45° и 315°. Две от тези измествания задават стандартните пурпурен и зелен цвят, а двете останали – син и оранжев, които са недостижими със стандартните възможности на CGA. При запълване на сигнала от 75% (поредиците 0011, 0110, 1001, 1100) съответстват на изместване фазата на подносещата с половин пиксел – тоест, на един субпиксел.
Но резултатът не съвпада съвсем точно с фазата на стандартните цветове. Причината се дължи на корекциите, вградени в NTSC устройствата. По този начин се получават отенъци с малко изместване – зеленикав тюркоаз, червеникавокафяв, леко пурпурен червен. Запълване от 75% означава средно ниво на сигнала, което всъщност задава нивото на яркостта, но не влияе на наситеността, понеже по-широките краища на меандъра създават високочестотни хармоници, които се игнорират от филтрите на телевизионните приемници. И накрая, сигнал с 25% запълване съответства на същите отенъци, както е и при 75%, но с по-ниска яркост.
Малко по-сложни са нещата, когато се повтаря поредица не от черно-бели пиксели, а от цветни. В режим 640x200x1bpp цветът на фона винаги е черен, но вторият цвят може да бъде избран да е всеки един от палитрата със 16-те стандартни. В режим 320x200x2bpp е обратното – цветът на фона може да бъде всеки от 16-те стандартни, а останалите три цвята могат да се определят от палитра с четири варианта.
Тук извън оригинала ще вмъкне информацията на reenigne, който е проектирал видеоизхода на 8088 MPH. Този човек е реализирал и CGA емулацията в DOSBox и автономния CGA емулатор. Към този емулатор не е сложно да се напише малка програма на Python, която показва всички възможни 16-цветови комплекти от „артефактни“ цветове:
Кодът на всеки комплект се състои от номера на графичния режим (1A за 640x200x1bpp, 0A за 320x200x2bpp), номера на палитрата (0-2) и номера на цвета, който програмистът може да избере (0-F). Всеки ред на тази таблица се състои от 16 квадратчета, съответстващи на една повтаряща се поредица от пиксели. И още, всяко квадратче е съставено от 5 ленти – цифров изход, ниво на композитния сигнал и изходния сигнал за композитния сигнал при първия модел на CGA адаптера, сигналът за композитен монитор и композитния сигнал с новия модел на CGA. Нивото на композитния сигнал е средното за два субпиксела – точността на cgaart емулатора е до тук.
Да разгледаме по-подробно два от тези 1024 цвята, които се образуват от поредиците 1A0C и 0A01. Но преди това ще трябва да се спрем на по-опростения вариант 1A04:
Поредицата 1A04 показва червени пиксели на черен фон и съответства на сигнал със запълване 50% и изместване на фазата с 270°, който се получава от модулацията на поредица от 4 пиксела. Високото ниво на сигнала се получава от първите три пиксела на тази поредица, като по този начин четвъртият бит изобщо не оказва влияние на получавания цвят. И така 000x и 001x се превръщат в чисто черен, а 111x в чисто червен цвят. Поредицата, нулираща първия пиксел (010x и 011x) съответства на изместване на фазата на един субпиксел – тоест, на -45°, а това за NTSC е пурпурен цвят. Вторият нулиращ пиксел (100x и 101x) дава 45° фазово изместване и това е оранжев цвят.
Групата 1A0C показва светлочервени пиксели на черен фон. Това е сигнал с непериодична добавка и неговото най-ниско ниво е под прага на черното. В резултат от това поредиците 0001, 0010, 0011 се превръщат в същите отенъци (зеленикава тюркоаз, тюркоазен-син цвят и син цвят), но с ниска яркост, понеже ниското ниво на подадения сигнал играе роля.
И накрая групата 0A01 показва син фон върху който се изобразява зелено-червена-кафява палитра – четири субпиксела на всеки пиксел. Двата пиксела в тази повтаряща се последователност 00, 11, 22, 33 – не образуват артефакти при смесване: ако се сумират два меандъра, то фазовото изместване ще бъде средното от зададеното в тези два пиксела. От това зависи яркостта и наситеността на крайния резултат.
В крайна сметка имаме 80 групи по 16 едновременно достъпни цветове. Но каква е фактическата резолюция? Цветът може да се променя само между блоковете от 8 субпиксела, което означава 160 пъти в рамките на един ред, като яркостта за всеки пиксел се задава независимо. Тоест, наистина можем да покажем доста цветове при максимална резолюция 160х200.
Текстовите режими
Както казахме още в самото начало, CGA поддържа 16-цветен текстов режим 80х25 със символна матрица от 8х8 пиксела. В този режим се използва само една четвърт от графичната памет. Но бързо бе открит недокументиран начин за превключване към извеждане на само горните две линии на символната матрица. В получаващият се по този начин 10-редов „полутекстов“ режим се използват всичките 16 KB на графичната памет, а изображението има 16 цвята при резолюция 640х200 пиксела. Но в сравнение с графичния режим тук има редица редица твърди ограничения. Първо, във всяка група от по 8х2 пиксела могат да се използват само два различни цвята. Второ, поредицата от основни и фонови пиксели на това полутекстово изображение се взема от двете най-горни линии на един от 256-те символа, записани в CGA ROM-а. Но дори с тези неудобства и ограничения на текстовата псевдографика, истинските майстори създаваха и създават невероятни 16-цветни изображения:
Без използването на недокументираната възможност същото изображение изглежда по следния начин:
Отдясно е показана записаната в ROM паметта таблица на символите, които могат да се използват в този специфичен полутекстов режим.
Първи се досетиха да използват този трик специалистите на компанията Macrocom, коятто през 1984 година представи играта ICON: The Quest for the Ring с невероятната за CGA резолюция от 320x200x4bpp. Разбира се, графиката от това време няма как да не изглежда примитивна.
Парадоксалното тук е, че въпреки че това си е текстов режим, текстът трябва да се сглобява от различните парченца записани в ROM.
Друго съществено ограничение на този режим е, че при композитния монитор изображението се получава твърде грозно. Ето как изглежда същия кадър:
Но и от това може да има полза – за генериране на артефактни цветове при полутекстовия режим! Както обяснихме в предишната част, непрекъснат артефактен цвят се образува от всяка поредица от пиксели с период от 8 субпиксела – тоест, половината от широчината на един текстови символ в 80-колонен режим. А това означава, че че в полутесктовия режим и основния, и фоновият цвят за всеки символ могат да бъдат произволно избрани от 16-те стандартни цвята, като за създаването на артефактни цветове ще ни трябват символи, при които:
- В двете горни линии пикселите съвпадат
- Лявата и дясната половина на тези два реда също съвпадат
В CGA ROM бързо бяха намерени символи, които са подходящи за образуването на подобни поредици – това са 1100 и 0110. Получава се резолюция от 80х100 пиксела и в тази област могат да бъдат зададени цвят и фон за всяка част от две линии на ROM матрицата.
И така, колко артефактни цветове можем едновременно да покажем в този режим? Доступни са всички комбинации от 16 основни, 16 фонови цвята за едновременно два от символите на ROM таблицата.
На пръв поглед това са 512 цвята, но те са по-малко, понеже има дубли и отенъци, които почти не се различават. Така например, когато фоновият и основният цвят съвпадат, очевидно е, че резултатът ще бъде един и същ – оттук цветовете намаляха на 496. Но тяхното преобразуване в композитен сигнал води до това, че някои от тези последователности се превръщат в един и същ видеосигнал. Например комбинацията 0110 ще има един и същ отенък при показване на сиво върху черно, сиво върху пурпурно и светлозелено върху пурпурно.
В изображението по-горе квадратчетата са увеличени двойно и това е дало възможност да се добавят и надписи. Вижда се, че поредицата 0110 изцяло срязва високото ниво на пурпурния фон и той става неразличим от черния. Зеленият цвят се различава по фаза от пурпурния със 180°, така че тази поредица по същия начин реже и високото ниво на зелените символи. А в таблицата на цветовете можем да видим, че цветовете поставени на черен и пурпурен фон са на практика неразличими.
Освен това, първата версия на CGA еднакво показва и поредицата 0110 – черен цвят на светло-пурпурен фон дава стандартен сив цвят, а сиво върху светлочервено показва същия почти стандартен сив цвят.
В крайна сметка първият вариант на CGA може да покаже 490 различни цвята, а втората версия правилно изобразява всичките 496.
И накрая, да се върнем към въпросните 1024 цвята. Това е измисленият от reenigne начин за показване на само най-горния ред на символа при полутекстовия режим. Това явно не е точно нов графичен режим, понеже се налага непрекъснато – в началото на всеки ред на хоризонталната развивка да се променят настройките на CGA. Това отнема целия ресурс на процесора 8088 и няма възможност паралелно с 1024-цветовото изображение да се прави още нещо – например анимация. Но благодарение на този трик става възможно да се използват и поредиците 0010 и 0101. С използването на четири символа от ROM на цифровия изход могат да бъдат получени 976 различни периодични поредици от осем пиксела. А колко цветове ще се получат след получаването на композитния сигнал? Авторите на статията посочват, че при първата версия на CGA цветовете ще бъдат 950, а при втората – 973.
Последно, по-горе е показана таблицата с цветовете, които могат да бъдат получени в полутекстов режим. Таблиците от подобен род са удобни както за дизайнера, който работи с конкретно устройство, така и за теоретика, който иска да вникне в същността на нещата.
Всичко важно от света на технологиите, директно в пощата ти.
С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.
Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!









