Масштабування екранних координат. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Масштабування екранних координат.



Для більшості графічних режимів потрібно враховувати ще й ту обставину, що лінійна щільність на фізичному екрані по горизонталі і вертикалі різноманітна. Наприклад, в режимі 640x200 на екрані монітору з діагоналлю 13 дюймів (біля 34 см) щільність складає приблизно 70 пікселей на дюйм по горизонталі і 30 пікселей на дюйм по вертикалі, тому для отримання неспотворених зображень на екрані вони повинні масштабуватися з урахуванням графічного режиму.

Масштабувати координати (x, y) потрібно для всіх пікселей всіх геометричних зображень в тих режимах, коли масштабний коефіцієнт не рівний 1.00 В іншому випадку квадрати будуть мати вигляд прямокутників, а кола еліпсів. Більш того, необхідно корегувати масштабний коефіцієнт з урахуванням характеристик кожного графічного режиму. В табл.8.2 наведені значення масштабних коефіцієнтів для графічних режимів персональних комп'ютерів фірми IBM. В цій таблиці припускається, що коефіцієнт форми (aspect ratio), тобто відношення ширини екрану до висоти, складає 1.33 для кольорових моніторів і 1.45 для монохромних. Відзначимо, що для режиму 640x480 масштабний коефіцієнт точно рівний 1.00, що спрощує графічне програмування.

Таблиця 8.2 – Значення масштабних коефіцієнтів

номер режиму опис режиму масштабний коефіцієнт
4,5 4 кольори, 320x200 1.20
  2 кольори, 640x200 2.40
0Dh 16 кольорів, 320x200 1.20
0Eh 16 кольорів, 640x200 2.40
0Fh моно, 640x350 1.26
10h 16 кольорів, 640x350 1.37
11h 2 кольори, 640x480 1.00
12h 16 кольорів, 640x480 1.00
13h 256 кольорів, 320x200 2.40

 

Основні компоненти.

Блок керування електронно-променевою трубкою (CRT Controller) керує сигналами горизонтальної і вертикальної синхронізації, початковою адресою виводу в відеобуфері, положенням і формою курсору та ін. Блок синхронізації (Sequencer) генерує тактові сигнали і сигнали для синхронізації доступу до відеопам’яті. Даним засобом забезпечується можливість доступу до відеопам’яті з боку процесора в спеціально виділені моменти часу в проміжку між інтервалами часу, необхідними для доступу до відеопам’яті в процесі регенерації зображення на екрані дісплею. В цьому ж блоку містяться регістри керування записом даних в бітові площині.

Графічний контролер (Graphics Controller) спрямовує дані з пам'яті в контролер атрибутів і в процесор. В графічних режимах дані з відеопам’яті пересилаються в мікросхему контролера атрибутів послідовно. В текстових режимах дані пересилаються в паралельній формі в обхід графічного контролера. Для швидкої зміни зображення на екрані дісплею апаратурою забезпечується можливість запису 32 біт даних за один цикл пам'яті (8 біт для кожної площини), а додаткова логіка дозволяє процесору записувати дані в дисплейную пам'ять не дотримуючись кордонів байтів.

Контролер атрибутів (Attribute controller) встановлює кольоріву палітру з 16 кольорів, кожний з яких може бути визначений незалежно від інших кольорів. На вхід монітору подається 6-ти бітовий код кольору. Цією ж мікросхемою виконуються дії по керуванню блиманням і підкреслюванням. Контролер одержує дані з відеобуфера і перетворює їх в керуючі сигнали, що подаються на вхід монітору.

Відеобуфер (Display Buffer). Розмір відеобуфера (що називається також відеопам’яттю або пам'яттю адаптера) рівний 64 Кб. Відеобуфер доступний з боку процесора як на читання так і на запис і складається з 4 бітових площин по 16 Кб. Існує можливість розширення відеобуфера до 128 Кб. На платі розширення встановлені роз’єми для підключення ще 128 Кб пам'яті, що дозволяє довести розмір відеобуфера до 256 Кб. При цьому в кожну бітову площину додається два додаткових банка пам'яті по 16 Кб.

З метою сумісності з більш ранніми моделями відеоадаптерів, адреси відеобуфера можуть змінюватися. Можливі 4 варіанти. Відеобуфер може бути встановлений довжиною 128 Кб і починатися з сегментної адреси A0000, довжиною 64 Кб і починатися з адреси A0000, довжиною 32 Кб і починатися з адреси B0000 або довжиною 32 Кб з початком за адресою B8000.

Базова система введення/виведення відеоадаптера (BIOSV) знаходиться в пам'яті спеціального ПЗП встановленого на платі адаптеру BIOSV об'єднується з системною базовою системою введення/виведення. Тут містяться шрифти, що використовуються для генерації символів і керуючі програми відеоадаптера. Розмір ПЗП - 16 Кб, початкова адреси C0000.

 

Робота в графічному режимі 16/64 (10H)

Для режимів екрану EGA від DH до 10Н пам'ять організована зовсім по-іншому. Вона поділяється на одну, дві або чотири бітові площини, кожна з яких організована так же, як для чорно-білого режиму високого дозволу, описаного вище: коли байт даних посилається в певну адресу відеобуфера, кожний біт відповідає крапці на екрані, причому вони описують горизонтальний сегмент рядка і біт 7 відповідає самій лівій крапці. Записуються чотири такі бітові площини, відповідні однім і тим же адресом, в відеобуфері. Це відводить кожній крапці 4 біти, що дозволяє описувати 16 кольорів.

PCjr і EGA працюють з кольором зовсім по-іншому, ніж кольоровий адаптер. Вони використовують регістри палітри, що дозволяють в будь-який момент змінити колір, відповідний даному коду.

Обидві системи використовують один і той же основний набір кодів кольору, що в точності співпадає з тими, що застосовуються в текстових режимах. EGA може використати 6 біт регістру палітри, а не 4, коли до нього приєднаний покращений кольоровий графічний дисплей фірми IBM.

При цьому стають доступними 64 кольори, кодіровка для яких R'G'B'RGB. R, G і B відповідають темним кольорам, а R', G' і B' - світлим. Різноманітні комбінації створюють 64 відтінки. Як завжди, 111111 відповідає білому кольору, а 000000 - чорному. Відзначимо, що через регістри палітри для EGA завжди доступні 64 кольори незалежно від того, в якому режимі він працює. При роботі в режимі 4-кольорової графіки (як у кольорового адаптеру) активні тільки молодші 4 регістри палітри, але вони можуть містити будь-які кольори.

Функція ВН переривання 10Н встановлює як фоновий колір, так і кольори палітри, але не водночас. Для встановлення фонового кольору треба помістити в ВН 0, а після цього код кольору від 0 до 15 - в BL. Для встановлення палітри треба помістити в ВН 1, а в BL 0 або 1.

 

Призначення регістрів

 

Таблиця 8.3 – Призначення регістрів блоку синхронізації

Найменування   Порт Індекс
Адресний (Address) 3C4
Ініціалізації (Reset) 3C5  
Тактового режиму (Clocking mode) 3C5  
Маски бітової площини (Map mask) 3C5  
Вибору набору символів (Character map select) 3C5  
Режиму використовування пам’яті (Memory mode) 3C5  

 

Таблиця 8.4 – Призначення регістрів блоку керування ЕПТ

Найменування Порт Індекс
Адресний (Address) 3?4
Загальної довжини рядка (horisontal total) 3?5 00h
Довжини ділянки відображення в рядку (Horizontal display enable end) 3?5 01h
Початку горизонтального гасіння (Start horisontal blank) 3?5 02h
Кінця горизонтального гасіння променя (End horisontal blank) 3?5 03h
Початку горизонтального зворотного хода променя (Start horisontal retrace) 3?5 04h
Кінця горизонтального зворотного хода проміня(End horisontal retrace) 3?5 05h
Загальної кількості рядків растра в кадрі (vertical total) 3?5 06h
Переповнення (Overflow) 3?5 07h
Встановлення рядка растра (Preset row scan) 3?5 08h
Вертикального розміру символу (Max scan line) 3?5 09h
Початку курсору (Cursor start) 3?5 0Ah
Кінця курсору (Cursor end) 3?5 0Bh
Старшої складникової початкової адреси (Start address high) 3?5 0Ch
Молодшої складникової початкової адреси (Start address low) 3?5 0Dh
Старшої складникової позиції курсору (Cursor location high) 3?5 0Eh
Молодшої складникової позиції курсору (Cursor location low) 3?5 0Fh
Початку вертикального зворотного хода променя(Vertical retrace start) 3?5 10h
Старшої складникової адреси світлового пера (Light pen high) 3?5 10h
Кінця зворотного хода променя (Vertical retrace end) 3?5 11h
Молодшої складникової адреси світлового пера (Light pen low) 3?5 11h
Довжини ділянки зображення в кадрі (Vertical display end) 3?5 12h
Зміщення (Offset) 3?5 13h
Положення символа підкреслювання (Underline location) 3?5 14h
Початку вертикального гасіння проміня (Start vertical blank) 3?5 15h
Кінця вертикального гасіння проміня (End vertical blank) 3?5 16h
Керування режимом (Mode control) 3?5 17h
Порівнювання рядків (Line compare) 3?5 18h
? = B в монохромних режимах і D в кольорових

 

Експерименти з регістрами блоку керування ЕПТ, що формують зображення кадру, можуть призвести до поломки відеотермінала.

 

Таблиця 8.5 – Призначення регістрів графічного контролера

Найменування Порт Індекс
Регістр позиції графіки 1 (Graphics 1 Position) 3СС -
Регістр позиції графіки 2 (Graphics 2 Position) 3СA -
Адресний регістр графічного контролера (Graphics 1 & 2 Address) 3CE -
Кольори (Set/Reset) 3CF  
Дозволу кольору (Enable Set/Reset) 3CF  
Порівнювання кольору (Color Compare) 3CF  
Обертання даних (Data rotate) 3CF  
Вибору площини для читання (Read Map Select) 3CF  
Вибору режиму (Mode) 3CF  
Багатоцелевий (Miscellaneous) 3CF  
Регістр незалежності від значення площини при читанні (Color Don't Care) 3CF  
Маски (Bit Mask) 3CF  

 

Таблиця 8.6 – Призначення регістрів контролера атрибутів

Найменування Порт Індекс
Адресний регістр (Address Register) 3C0 -
Регістри палітри (Palette Registers) 3C0 00 - 0F
Регістр керування режимом (Mode Control Register) 3C0  
Регістр керування кольором бордюра (Overscan Color Register) 3C0  
Регістр дозволу зображення бітової площини (Color Plane Enable Register) 3C0  
Горизонтального зсуву пік селів (Horisontal Pel Panning Register) 3C0  

 

Малювання крапок

Внаслідок організації графічної інформації в відеобуфері вивід однієї крапки має на увазі зміну окремих бітів пам'яті. Режими двох, чотирьох і шістнадцяти кольорів вимагають, щоб для встановлення характеристик однієї крапки були змінені один, два і чотири біти відповідно. Для цих операцій необхідні величезні витрати процесорного часу, тому графічне програмне забезпечення, як правило, працює дуже поволі. Ретельне осмислювання часто дозволяє відразу встановити всі біти одного байта, а не звертатися до одного і того же байту 4 або 8 раз.

Функція СН переривання 10Н встановлює крапку. DX містить рядок, а CX - стовпець. Вони відраховуються від 0. Код кольору розміщується в AL. Відзначимо, що вміст AX буде зруйнований при виконанні переривання.

В той час як колір палітри розміщується в молодші біти AL, старший біт також має значення. Якщо він рівний 1, то над кольором виконується операція ВИКЛЮЧНЕ АБО з поточним кольором.

Нагадаємо, що операція ВИКЛЮЧНЕ АБО встановлює біт тільки в тому випадку, якщо з двох порівнювальних бітів встановлений тільки один. Якщо обидва порівнювальні біти рівні 1 або обидва рівні 0, то результат буде 0. Для двохкольорового режиму це означає, що така операція звертає встановлення біту. Якщо цю операцію застосувати до всіх крапок екрану, то буде звернутий весь екран. В 4 - і 16-кольоровому режимах, з іншого боку, області екрану можуть міняти свої кольори.

На низькому рівні ми маємо можливість прямого доступу до відеобуферу (відображення в пам'ять). Спочатку ви повинні обчислити зміщення крапки (а) всередині буферу і (б) всередині байта, що містить біт, стосовні даної крапки. Після цього бітові операції забезпечать відповідне встановлення.

У EGA - адаптеру графіка більш складна. З точки зору процесора режими екрану 0-7 діють так же, як відповідні режими для кольорового адаптеру або PCjr, але режими від DH до 10Н цілком інші. Організація пам'яті для цих режимів змінюється в залежності від числа кольорів і кількості пам'яті, наявної на платі дисплею.

В режимах D, E і 10Н пам'ять розбита на 4 бітові площини. Кожна площина організована таким же чином, як для чорно-білого режиму високого дозволу кольорового адаптеру, коли байт даних посилається в певну адресу відеобуфера, кожний біт відповідає горизонтальному сегменту лінії, а біт 7 - самій лівій крапці. Виводяться чотири такі бітові площини, стосовні до одних і тих же адрес в відеобуфері. Це призводить до того, що кожна крапка описується чотирма бітами (даючи 16 кольорів), причому кожний біт знаходиться в окремому байті окремої бітової площини.

Але як ви можете записати 4 різноманітних байта даних, розташованих по одній і тій же адресі? Відповідь на це питання полягає в тому, що ви не посилаєте послідовно чотири байта по цій адресі. Замість цього один з трьох режимів запису дозволяє змінити всі 4 байта на підставі одного байта даних, отриманого від процесора. Вплив даних, посланих процесором, залежить від встановлення декількох регістрів, включаючи два регістру маски, що визначають, на які біти і в яких бітових площинах будуть змінюватися біти. Для розуміння цих регістрів ми повинні спочатку розібратися з чотирма регістрами запирання (latch register). Вони містять дані для чотирьох бітових площин в тій позиції, до якої було останнє звернення. (Помітимо, що термін" бітова площина" використовується як для цілої області відеобуфера, так і для і однобайтового буферу, що тимчасово зберігається в регістрі запирання).

Коли процесор посилає дані по певній адресі, ці дані можуть змінити або повністю замінити дані регістру запирання, а згодом саме дані з регістру запирання записуються в відеобуфер. Яким чином дані процесора впливають на регістр запирання, залежить від режиму запису, а також встановлення деяких інших регістрів. При читанні адреси з відеобуфера регістри запирання заповнюються чотирма байтами з чотирьох бітових площин по даній адресі. Регістрами запирання легко маніпулювати, виконуючи з їхнім вмістом різноманітні логічні операції, що дозволяє виконувати різноманітні графічні трюки.

Регістр маски бітів і регістр маски карти діють на регістри запирання, захищаючи певні біт або бітові площини від зміни під чинністю даних, що надходять від процесора. Встановлення біту регістру маски бітів в 0 маскує цей біт в усіх чотирьох бітових площинах, роблячи відповідну крапку недосяжною для зміни. Однак оскільки обладнання працює в байтових термінах, реально "незмінюємі" біти перезаписуються в чотири бітові площини. Дані для цих бітів зберігаються в регістрах запирання, тому програма повинна бути впевнена, що поточний вміст регістрів запирання відноситься до правильної адреси. Тому перед записом в відеобуфер треба спочатку зчитувати з нього. Біти 0-3 регістру маски карти відповідають бітовим площинам 0-3. Старші 4 біти регістру не використовуються. Коли біти 0-3 рівні 0, відповідні бітові площини не міняються при операціях запису. Дані, що посилаються в відеобуфер можуть бути модифіковані і логічно оброблені разом з даними, що зберігаються в регістрах запирання з допомогою регістру обертання даних біти 0-2 регістру обертання визначають число розрядів, на які припадає циклічне зміщення даних процесора ліворуч при запису даних в відеобуфер. Для запису даних без зміщення цей біт повинен бути встановлений в 0. При запису задають логічну функцію даних процесора з даними регістрів запирання.

Значення бітів:

00-дані не міняються

01-логічне "І"

10-логічне "або"

11 що - виключне "або"

Операція зміщення виконується раніше логічної операції. Ця властивість використовується по різному в різноманітних режимах запису. Три режиму запису і два режиму читання встановлюються регістром встановлення режиму. Режим запису встановлюється в бітах 0 і 1, як число від 0 до 2. біт 2 повинен бути рівним 0, також як і біт 4-7. біт 3 встановлює один з двох режимів читання з відеобуфера. Цей біт може бути 0 або 1. BIOS EGA встановлює режим запису в 00, режим читання в 0.

 

Режим запису 0

В найпростішому випадку режим запису 0 копіює дані процесора в кожну з чотирьох бітових площин. Нехай, наприклад, по певній адресі відеобуфера послано 11111111В і розв'язані всі біти і всі бітові площини (тобто ніщо не масковано описаними вище регістрами масок). Тоді кожний біт в усіх чотирьох площинах буде встановлений в 1, так що ланцюжок бітів для кожної з відповідних крапок буде 1111В. Це означає, що вісім крапок будуть виведені в кольорі 15, що спочатку відповідає білому кольору, хоча регістри палітри дозволяють, щоб насправді був будь-який з допустимих кольорів.

Тепер розглянемо ту же ситуацію, коли посилається значення 00001000В. Ланцюжок бітів для крапки 3 буде 1111, а для інших 0000, що відповідає чорному (спочатку). Тому в даному випадку тільки крапка 3 з'явиться на екрані, інші 7 крапок будуть вимкнуті.

Якщо ви відправите код палітри бажаного кольору в регістр маски карти, то регістр буде маскувати певні бітові площини таким чином, що буде відтворений необхідний колір.

Наведене вище обговорення стосувалося одночасного виведення вісьмох крапок. Ну а як вивести меншу кількість крапок? В цьому випадку, звичайно, необхідно зберегти існуючі дані для деяких крапок, а щоб це було можливо, поточний вміст даної адреси зберігається в регістрах запирання. Після цього використовується регістр маски бітів для маскування тих крапок, що не повинні змінюватися. Якщо біт цього регістру скинутий в 0, то дані, одержувані від процесора для цього біту, ігноруються і замість них використовуються дані, що зберігаються в регістрах запирання. Заповнення регістрів запирання змінюється при ненульовому значенні регістру дозволу кольору (регістр 01H блоку графічного адаптеру), розряди 0-3 якого дозволяють заповнення байта вибраних бітових площин значеннями з відповідних розрядів регістру кольору (регістр 00H блоку графічного адаптеру). В цьому випадку значення даних процесора (маски карти ігноруються).

 

Режим запису 1

Режим запису 1 визначений для спеціальних додатків. В цьому режимі поточний вміст регістру запирання записується по означеній адресі. Нагадуємо, що регістри запирання заповнюються операцією читання. Цей режим дуже корисний для швидкого переносу даних при операціях зміщення екрану. Регістр маски бітів і регістр маски карти не впливають на цю операцію. Не мають значення також дані, що посилає процесор - вміст регістрів запирання записується в пам'ять без змін.

 

Режим запису 2

Режим запису 2 представляє альтернативний засіб встановлення окремих крапок. Процесор посилає дані, у яких мають значення тільки 4 молодших біти, розглядувані як колір (індекс регістру палітри). Можна сказати, що цей ланцюжок бітів вставляється поперек площин. Ланцюжок дублюється на всі вісім крапок, стосовних до даної адреси, до тих пор, доки регістр маски бітів не застерігає певні крапки від зміни. Регістр маски карти активний, як і в режимі запису 0. Звичайно, процесор повинен послати повний байт, але тільки молодші 4 біти істотні.

 

Режим читання 0

Процесор здійснює читання даних (8 крапок) з регістру запирання тієї площини, що дозволена регістром вибору площини для читання (розряди 0-2 регістру 04H блоку графічного контролера). Для читання кольорів (кодів регістру палітри) всіх 4 бітових площин необхідно послідовно дозволити читання і прочитати всі площини по одній адресі.

 

Режим читання 1

В результаті виконання операції читання в 1 будуть встановлені тільки ті біти в байті, для яких колір співпадає з кольором, заданим в бітах 0-3 регістру порівняння кольору (регістр 02H блоку графічного адаптеру).

 

Програмування регістрів

Кожна з мікросхем адаптеру володіє адресним регістром і декількома регістрами даних. Адресний регістр використовується в якості покажчика на той або інший регістр даних. Адресний регістр є регістром типу "тільки запис" в який за допомогою команди OUT може бути поміщений індекс вибраного регістру даних.

Регістри даних кожної мікросхеми адаптеру доступні через відповідний порт введення/виведення. Доступ до різноманітних регістрів даних здійснюється шляхом попереднього занесення в адресний регістр індексу необхідного регістру даних з наступним видаванням команди OUT з боку процесора для занесення в нього необхідного значення. Відміну мають регістри контролера атрибутів, де адресний регістр і регістр даних мають один порт з адресою 3C0H.

Всередині контролера адресація організована таким чином, що кожний раз після запису в порт 3COH, виконується переключення: адресний регістр -> регістр даних, відповідний значенню адресного регістру і навпаки. Для ініціалізації процесу переключення адресний регістр - регістр даних (спочатку доступ до адресному регістру, а потім до регістру даних і т. д.) необхідно виконати операцію читання з порту з адресою 3BAH або 3DAH. Після виконання операції читання, перший доступ до порту 3C0H буде зверненням до адресного регістра контролера атрибутів. Після завантаження адресного регістру, наступна команда виведення в порт 3C0H призведе до записів необхідного значення в відповідний регістр даних контролера атрибутів. Виконання цієї команди знову робить адресний регістр доступним для запису і процес може бути продовжений.

Після запису даних в регістри контролера атрибутів необхідно встановити 5 біт адресного регістру контролера в 1 (дозвіл виведення), тобто послати в порт 3C0H значення 20H.

EGA підтримує стандартні графічні функції BIOS. Можна вивести крапку з допомогою функції CH переривання 10H, так же як для кольорового дисплею або PCjr. При вході DX повинен містити номер рядка, а CX номер стовпця, і те і інше відраховується від 0. Код кольору розміщується в AL. Вміст AX змінюється при виконанні переривання.

 



Поделиться:


Последнее изменение этой страницы: 2016-06-23; просмотров: 261; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.150.89 (0.035 с.)