ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Приклад програми прямого доступу до відеопам’яті

 

Код програми, наведеної нижче, демонструє роботу дисплея у текстовому режимі у випадку безпосереднього доступу до сторінок відеопам’яті. У програмі екран диплея спочатку очищається символами “пропуск” на малиновому фоні, а потім за допомогою символів псевдографіки формується зображення рамки яскраво-блакитного кольору.

 

NAME PROG

STACKSG SEGMENT STACK

DB 128 DUP(?)

STACKSG ENDS

DATE SEGMENT

DATE ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATE, SS:STACKSG

START PROC FAR

PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DATE

MOV DS,AX

CALL MAIN

RET

START ENDP

MAIN PROC

MOV AH,0

mov al,03h

INT 10h

MOV AX, 0B800h ; початкова адреса текстової сторінки

MOV ES,AX

MOV DI,0

MOV AL, ' ' ; задаємо символ для відображення

MOV AH,059h ; задаємо колір: 01011001b

MOV CX,2000 ; задаємо кількість повторень символу

CLD ; скидаємо прапорець напрямку (iнкремент)

REP STOSW ; повторюємо ланцюжок символів (слово АХ)

; рисуємо лівий верхній кут

MOV DI,660

MOV AL,213

MOV AH,059h

MOV ES:[DI],AX ; розміщуємо АХ за адресою DI

; відносно початку ES сторінки

; рисуємо верх рамки (40 символів в рядок зліва направо)

MOV CX,40

MOV AL,205

M1: ADD DI,2

MOV ES:[DI],AX

LOOP M1

; рисуємо правий верхній кут

ADD DI,2

MOV AL,184

MOV ES:[DI],AX

; рисуємо праву сторону рамки (6 символів у стовпчик згори донизу)

MOV AL,179

MOV CX,6

M2: ADD DI,160

MOV ES:[DI],AX

LOOP M2

; рисуємо правий нижній кут

ADD DI,160

MOV AL,217

MOV ES:[DI],AX

; рисуємо низ рамки (40 символів справа наліво)

MOV AL,196

MOV CX,40

M3: SUB DI,2

MOV ES:[DI],AX

LOOP M3

; рисуємо нижній лівий кут

SUB DI,2

MOV AL,192

MOV ES:[DI],AX

; рисуємо ліву сторону рамки (6 символів знизу вгору)

MOV AL,179

MOV CX,6

M4: SUB DI,160

MOV ES:[DI],AX

LOOP M4

ret

MAIN ENDP

CODE ends

end start

 

Графічний режим роботи дисплеїв

 

Як відомо, в ЕОМ прийнято растровий спосіб формування зображень, тобто, будь-яка інформація на екрані дисплея являє собою сукупність точок - пікселів, що світяться. Кожний піксел визначається своїми координатами – розташуванням відносно лівого верхнього кута екрана, який має координати (0,0). Програміст може керувати яскравістю та/або кольором будь-якого піксела, що дозволяє формувати на екрані будь-які зображення, у тому числі рисунки, графіки, креслення, символи.

Як і в текстовому режимі, в графічному режимі використовується буферна відеопам’ять, вміст якої являє собою “карту” екрана. Розмір пам’яті адаптера CGA (16 Кб) достатній для відображення 640×200 пікселів, якщо з кожним пікселем зв’язувати лише один розряд (біт) відеопам’яті. Зрозуміло, що інформаційна цінність одного біта, а отже, і можливості керування пікселем в цьому випадку надзвичайно обмежені: адже один розряд може мати або нульове, або одиничне значення. В комп’ютері прийнято вважати, що нульовий стан будь-якого розряду відеопам’яті означає сигнал про відсутність світіння відповідного піксела, і, навпаки, одиничний стан – сигнал висвітлити відповідний піксел.

Таким чином, об’єм 16 Кб відеопам’яті дозволяє отримати на екрані розміром 640×200 пікселів тільки двоколірне зображення – чорний колір відповідає стану 0 біта відеопам’яті, а стан 1 – виведенню піксела будь-яким заздалегідь вибраним кольором. В рамках CGA-адаптера такий режим називається режимом високої роздільної здатності.

В іншому режимі адаптера CGA – режимі середньої роздільної здатності – на кожний піксел виділяється 2 біти відеопам’яті, але досягається це ціною подвійного погіршення роздільної здатності екрана: 320×200 пікселів.

Вказані два біти відеопам’яті використовуються для вибору кольору піксела.

На перший погляд, за допомогою двох бітів можна вказати лише 2 кольори. Але розробники дисплеїв прийняли інше рішення.

Одне зі значень, що запам’ятовується у парі бітів (значення 00), виділено окремо: воно вказує на те, що піксел має той самий колір, що і фон. Така точка сприймається як така, що не світиться.

Як раніше згадувалось, вісім основних кольорів отримуються в результаті накладання променів червоного, синього та зеленого кольорів (решта вісім кольорів – це ті ж самі основні, але підвищеної яскравості). Таким чином, кольори можна розділити на дві групи, які відрізняються наявністю або відсутністю, наприклад, синьої складової.

У першій групі (параметр “палітра” дорівнює 0) синій промінь не присутній, і всі кольори утворюються сумішшю червоного і зеленого. Якщо пара бітів встановлена в стан 01, то точка загорається червоним кольором, 10 – зеленим, 11 – їх сумішшю, тобто жовтим (табл.8).

Таблиця 8 – Кольори зображення

Колір піксела Код кольору Суміш променів Параметр “палітра”
Червоний червоний
Зелений зелений
Жовтий червоний + зелений
Фіолетовий червоний + синій
Бірюзовий зелений + синій
Білий зелений + червоний + синій

 

У другій групі кольорів (параметр “палітра” дорівнює 1) синя складова обов’язково присутня. Тому стану 01 відповідає фіолетовий колір, стану 10 – бірюзовий і стану 11 – білий колір (табл.8).

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

В більш сучасних адаптерах EGA та VGA розмір відеопам’яті збільшено і він складає від 64 до 256 Кб. Це дозволяє отримати на екрані з роздільною здатністю 640×350 пікселів або й більше і до 16 кольорів одночасно.

До відеопам’яті мають можливість одночасного доступу як програма для переустановлення стану будь-якого піксела, так і електронні схеми розгортки зображення на екрані. Ці схеми розглядають відеопам’ять як один довгий рядок бітів, що зберігає команди щодо встановлення яскравості і кольору певного піксела. Електронні схеми опитують відеопам’ять послідовно біт за бітом у темпі електронного променя, що “оббігає” екран.

Зображення стандартного телевізійного кадру формується з двох півкадрів. У першому півкадрі промінь оббігає екран по всіх парних рядках екрана, у другому – по всіх непарних. Відповідним чином зберігається і інформація у відеопам’яті: в першій її половині (з меншими адресами) повинна міститися інформація про парні рядки, у другій половині (адреса початку цієї частини повинні бути кратною 1024) – про непарні. Вбудовані процедури і функції, що підтримують графіку, враховують цю особливість. При прямому зверненні до відеопам’яті ця функція покладається на програміста.

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

Інший підхід полягає в імітації засобів, реалізованих в текстовому режимі. Нагадаємо, що у текстовому режимі використовується розта­шована в ПЗП таблиця графічних образів усіх символів, яка керує роботою схем генерації тексту. У графічному режимі при виведенні символів також використовується таблиця знакогенератора, але розташована в ПЗП таблиця підключається лише при виведенні першої половини символів (з кодами від 0 по 127), при виведенні другої половини символів (з кодами від 128 по 256) використовується частина таблиці, що завантажується в оперативну пам’ять. Зроблено це не випадково, оскільки друга половина ASCII-кодів використовується для формування символів національного алфавіту, у тому числі кирилиці. Реалізація цієї частини кодів за допомогою завантажуваної в пам’ять таблиці знакогенератора дуже спрощує проблему “перенавчання” комп’ютера під будь-який національний алфавіт. На жаль, для текстового режиму можливість завантажування таблиці знакогенератора є лише на удосконалених відеоадаптерах EGA, VGA та більш сучасних. При роботі з адаптером CGA “перенавчання” комп’ютера в текстовому режимі роботи дисплея досягається лише методом пере­про­гра­мування мікросхеми ПЗП.

У графічному ж режимі роботи адаптера CGA “заставити” комп’ютер виводити текстові повідомлення українською мовою не складає проблеми. Для цього треба лише завантажити в оперативну пам’ять шрифт у вигляді таблиці з 128 матриць розміром 8×8 бітів і повідомити адресу початку цієї таблиці схемам розгортки. Кожна матриця 8×8 бітів (8 байтів) містить графічний образ символу, що виводиться, причому перші 8 байтів використовуються при виведенні символу з кодом 128, наступні 8 байтів – символу з кодом 129 і т.д. Кожний байт матриці кодує один рядок розгортки з 8 суміжних пікселів: якщо перший біт у байті має значення 1, перший піксель цього рядка буде світитися, якщо ж 0 – не буде. Стан другого піксела визначається вмістом другого біта і т.д.

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти