Керування дисплеєм за допомогою функцій BIOS
Керувати дисплеєм можна також на основі загальних принципів керування периферійними пристроями.
На початку свого розвитку мікропроцесорні системи мали у своєму складі програму, що називається “монітор”. Ця програма зазвичай знаходилась в ПЗП і обслуговувала пристрої введення-виведення – клавіатуру, дисплей, касетний накопичувач на магнітній стрічці та ін. Діалогова частина монітора дозволяла виконувати деякі операторські функції – завантаження і запуск програми, відлагоджування в покроковому режимі, друк текстів, перегляд і редагування вмісту пам’яті і т.д. Але найголовніше – прикладні програми, що були складені для цих систем, могли користуватись модулями монітора для роботи з периферійною апаратурою і виконувати ці операторські функції. Програма вже не містила в собі всі необхідні для її роботи модулі, а користувалась “стандартними” послугами програми-монітора. Така організація програми не тільки зменшувала розмір її завантажувального модуля, а й дозволяла програмістам зосередити свої зусилля на розв’язанні основної задачі.
Механізм взаємодії програми користувача і монітора був реалізований по-різному у різних системах. У найгіршому випадку програма користувалась відомими абсолютними адресами модулів монітора, у найкращому – використовувала спеціальні таблиці адрес програмних модулів. На жаль, різні системи були несумісні за складом модулів монітора і механізмом їх виклику, що сильно утруднювало їх програмну сумісність, а іноді і цілком її виключало.
У першому масовому комп’ютері IBM PC модулі обслуговування стандартної периферії були записані в ПЗП. Сукупність цих модулів (плюс програма початкової ініціалізації і тестування) називається базовою системою введення-виведення – Basic Input/Output System (BIOS).
Комп’ютери, сумісні з IBM PC, що випускаються різними фірмами, можуть дещо відрізнятися за типом периферійного обладнання, але для досягнення сумісності з ІВМ РС модулі BIOS знімають ці відмінності, надаючи в розпорядження програми користувача стандартний набір модулів для роботи з пристроями введення-виведення.
Не буде перебільшенням сказати, що одна з причин такої популярності комп’ютера ІВМ РС на ринку персональних комп’ютерів – це наявність добре продуманого стандартного інтерфейсу модулів BIOS і прикладних програм. Саме завдяки цьому інтерфейсу досягається майже стовідсоткова сумісність персональних комп’ютерів даного типу, що випускаються різними фірмами, за їх програмним забезпеченням.
Для виклику відповідного модуля BIOS прикладна програма використовує команду переривання INT <n> з відповідним номером n. Програма передає параметри модулям BIOS через регістри процесора, результат роботи модуля повертається також в регістри.
Для роботи з дисплейним адаптером використовується команда переривання INT 10h. Під час виклику цього переривання, як і під час виклику багатьох інших переривань, регістр АН повинен містити номер функції, яку слід виконати. Для виконання більшості функцій необхідно мати деякі додаткові дані, які повинні бути розміщені в регістрах AL, BX, CX, DX. Надалі ми конкретно розглянемо всі функції, необхідні для керування CGA-дисплеєм. Варто зауважити, що, у порівнянні з безпосереднім доступом до відеопам’яті, використання звернень до BIOS є набагато простішим інструментом, але більшість функцій BIOS характеризуються невисокою швидкодією.
Основні функції BIOS для керування дисплеєм
Дисплей може працювати у декількох режимах. Перелік можливих режимів роботи дисплея наведено в табл.9.
Таблиця 9 – Режими роботи дисплеїв
Номер режиму
| Текстовий або графічний
| Колір є/немає і скільки
| Формат
| Тип адаптера
|
| текстовий
| немає
| 40 зн. х 80 ряд.
| MDA, CGA, EGA
|
| текстовий
| 8 кольорів
| 40 зн. х 80 ряд.
| CGA, EGA, VGA
|
| текстовий
| немає
| 80 зн. х 80 ряд.
| CGA, EGA, VGA
|
| текстовий
| 8 кольорів
| 80 зн. х 80 ряд.
| CGA, EGA, VGA
|
| графічний
| 6 кольорів
| 320 х 200 точ.
| CGA, EGA, VGA
|
| графічний
| немає
| 320 х 200 точ.
| CGA, EGA, VGA
|
| графічний
| немає
| 640 х 200 точ.
| CGA, EGA, VGA
|
| текстовий
| немає
| 80 зн. х 80 ряд.
| Hercules,EGA,VGA
| 0Dh
| графічний
| 16 кольорів
| 320 х 200 точ.
| EGA, VGA
| 0Eh
| графічний
| 16 кольорів
| 640 х 200 точ.
| EGA, VGA
| 0Fh
| графічний
| немає
| 640 х 350 точ.
| EGA, VGA
| 10h
| графічний
| 4 або 16 кольорів
| 640 х 350 точ.
| EGA, VGA
| 11h
| графічний
| немає
| 640 х 480 точ.
| VGA
| 12h
| графічний
| 16 кольорів
| 640 х 480 точ.
| VGA
| 13h
| графічний
| 256 кольорів
| 320 х 200 точ.
| VGA
| Для зручності зведемо всі функції BIOS для керування роботою дисплеїв у таблицю 10.
Таблиця 10 – Функції переривання INT 10h для керування роботою дисплеїв
Номер функції
| Призначення
| Вміст регістрів
| Пояснення
| | 00h
| Задання режиму дисплея
| На вході:
АН = 00h
AL = номер режиму (табл.9)
| Функція використовується для вибору режиму роботи дисплея.
| | 01h
| Задання типу курсора
| На вході:
АН = 01h
СН = номер початкової лінії
AL = номер кінцевої лінії.
На виході: немає
| Функція дозволяє встановити розмір курсора. Передбачено визначення першої та останньої лінії (лінії розгортки), що обмежують область розташування символу (установлення початкової лінії вгорі області, а установлення кінцевої лінії внизу області не обов’язкове, тобто курсор може бути встановлено посередині описаної області). Слід зауважити, що в графічному режимі курсор відсутній. Курсор може бути відключений шляхом установлення початкової і кінцевої лінії нижче рівня розташування курсора.
| | 02h
| Задання позиції курсора
| На вході:
АН = 02h
DH = номер рядка
DL = номер стовпчика
BH = номер сторінки
На виході: немає
| Функція видає координати для позиціонування курсора на екрані. Рядок 0 розташований вгорі, а стовпчик 0 – в лівій частині екрана.
| | 03h
| Зчитування позиції курсора
| На вході:
AH = 03h
BH = номер сторінки
На виході:
DH =поточний рядок
DL = поточний стовпчик
CH = початкова лінія курсора
CL = кінцева ліні
На виході: немає
| Функція дозволяє отримати координати позиції курсора на екрані та його тип.
| | 05h
| Задання активної сторінки екрана, тобто, який з екранів буде виведено на дисплей (за замовчуванням – 0)
| На вході:
AH = 05h
AL = номер сторінки, що виводиться на екран дисплея
На виході: немає
| Адаптер дозволяє використовувати декілька сторінок (екранів) інформації в пам’яті. Видимою в певний момент може бути лише одна – активна сторінка. Більшість функцій можуть модифікувати екран (запис символу, побудова точки і т.д.) і вибирати сторінку, а отже вносити зміни в невидиму сторінку. Тобто на екрані може бути одне зображення, в той час як ми модифікуємо іншу сторінку (зручно при мультиплікації і виведенні слайдів).
| | 06h
| Прокручування (скролінг) активної сторінки вгору
| На вході:
AH = 06h
AL = число рядків, на яке слід “прокрутити” (0 – для очистки екрана)
BH = символ атрибута нових рядків
CH = верхній рядок вікна
CL = лівий стовпчик вікна
DH = нижній рядок вікна
DL = правий стовпчик вікна
На виході: немає
| За допомогою цієї функції виконується прокручування тексту на екрані: рядки переміщуються знизу вгору, а внизу здійснюється вставка пустих рядків. Можуть бути визначені координати вікна, яке прокручується, оскільки лише частина екрана може підлягати прокручуванню.
| | | 07h
| Прокручування (скролінг) активної сторінки вниз
| На вході:
AH = 07h
AL = число рядків, на яке слід “прокрутити” (0 – для очистки екрана)
BH = символ атрибута нових рядків
CH = верхній рядок вікна
CL = лівий стовпчик вікна
DH = нижній рядок вікна
DL = правий стовпчик вікна
На виході: немає
| Виконується прокручування тексту на екрані: рядки переміщуються згори донизу, а вгорі здійснюється вставка пустих рядків. Функція працює таким самим чином, як і 05h.
| | | 08h
| Зчитування атрибута і сим-волу в поточній позиції курсора
| На вході:
AH = 08h
BH = номер сторінки
На виході:
AL = ASCII-код символу
AH = атрибут символу
| Функція може бути використана для зчитування символу з будь-якої сторінки. У результаті повертається символ, розташований в поточній позиції курсора вказаної сторінки і його атрибут. Атрибут являє собою один байт згідно з рис.8 і табл.6. Байт атрибута має сенс лише в текстових режимах.
| | | 09h
| Установлення атрибута символу і запис символу в поточну позицію курсора
| На вході:
AH = 09h
AL = ASCII-код символу
BH = номер сторінки
BL = атрибут символу
CX = кількість записуваних символів
На виході: немає
| В графічних режимах байт атрибуту використовується для установлення кольору символу. Установлення 7-го біта байта атрибуту приводить до того, що символ накладається на поточний вміст екрана. В текстових режимах виведення більшого, ніж може поміститися, числа копій символу призведе до перенесення на наступний рядок. У графічному режимі всі символи повинні розміщатися в одному рядку. Позиціонування символу повинно виконуватись засобами програми. Виведення керуючих символів виконується як виведення звичайних символів.
| | | 0Ah
| Запис символу у поточну позицію курсора
| На вході:
AH = 0Ah
AL = ASCII-код символу
BH = номер сторінки
CX = кількість символів, що записуються
На виході: немає
| Звернення до цієї функції ідентичне зверненню до функції 09h, за винятком того, що атрибут не може бути установлений (існуючі атрибути не змінюються).
| | 0Bh
| Задання палітри кольорів
| На вході:
AH = 0Bh
BH = ідентифікатор фону або палітри кольорів
BL = номер кольору
На виході: немає
| При ВН = 0 у графічному режимі регістр BL визначає колір фону (значення 0-15), а у текстових режимах – колір границі (значення 0-31).
| | 0Ch
| Запис точки
| На вході:
AH = 0Ch
AL = номер кольору
BH = номер сторінки (лише для EGA та VGA)
CX = номер стовпчика піксела (0-319 або 0-639)
DX = номер рядка (0-199, 0-349 або 0479)
На виході: немає
| Звернення до цієї функції застосовується для побудови точки на будь-якій сторінці в графічних режимах. Стовпчик 0 розташований зліва, а рядок 0 – вгорі екрана. Якщо в регістрі AL встановлений біт 7, то новий піксел накладається на поточний вміст екрана з використанням функції “виключне АБО”.
Регістр ВН (номер сторінки) CGA не підтримує.
| | 0Dh
| Зчитування точки
| На вході:
AH = 0Dh
BH = номер сторінки (лише для EGA та VGA)
CX = номер стовпчика піксела (0-319 або 0-639)
DX = номер рядка
(0-199, 0-349 або 0-479)
На виході:
AL = значення кольору точки
На виході: немає
| Звернення до цієї функції використовується для отримання кольору точки, розташованої на будь-якій сторінці у графічному режимі (для CGA лише одна сторінка). Стовпчик 0 розташований зліва, а рядок 0 – вгорі екрана.
| | | | | | | | |
|