Для одержання будь-якого зображення в графічному режимі необхідно змусити світиться потрібним кольором групу пикселов. Сказане відноситься і до висновку контуру букви, формованого з телевізійних крапок на екрані. Така робота може бути виконана самою програмою, але при цьому обсяг програмування стає зайво великим. Наприклад, якщо звичайно буква зображується матрицею з 8 рядків по 8 крапок у кожнім рядку, потрібно “зафарбувати” одночасно 64 пиксела, розташованих у різних телевізійних рядках. При цьому буде потрібно врахувати ряд особливостей відеоадаптера, що тече режим і т.д. На щастя, для висновку пиксельных представлень символів у графічних режимах може бути використана функція АН=9h переривання 10h BIOS (опис функції див.у 9.2). Символ виводиться в поточній позиції курсору. У графічних режимах курсор не відображається апаратно, але BIOS “пам'ятає” його поточну позицію і може неї змінювати, виконуючи функцію АН=2 переривання 10h. Поточну позицію курсору зберігають 2 байти області даних BIOS (див.табл.8.2) і, змінюючи ці байти, можна швидко “позиционировать” курсор.

Число рядків і стовпців текстової інформації для кожного з графічних режимів по-різному(див.табл.8.1). При висновку текстової інформації в графічному режимі з використанням ВіоSа істотні три особливості.

            Перша з них полягає в тому, що у всіх графічних режимах молодше 13h при висновку символу на екран функцією AH=09h додатково враховується значення біта 7 коду кольору. Якщо старший біт коду кольору (біт 7 у регістрі BL) дорівнює 0 пикселы, що утворять контур символу будуть мати код кольору, заданий бітами 0-6BL. Інші пикселы в межах знакоместа (пикселы тла символу) будуть мати код кольору 0 (колір тла). Якщо старший біт коду кольору (біт 7 BL) дорівнює 1, колір пикселов символу визначаться операцією що виключає АБО (додавання по модулі 2) поточні коди кольору пиксела на екрані зі значенням у бітах 0-6 регістра BL. Код кольору пикселов тла не изменется. Це порозумівається тим, що при висновку пикселы тла мають код кольору 0 (відповідає кольору тла). Операція що виключає АБО нуля і поточного кольору пиксела на екрані не змінює код кольору пиксела тла. Висновок символів з кодом кольору, у якому біт 7 дорівнює 1, має два корисних наслідки:

1)               гарантується, що символ буде видимим на будь-якім тлі (біти 0-6) не дорівнює 00; при висновку символу не буде відбуватися зміна тла, на якому виводиться символ;

2)                 для стирання символу з екрана в графічному режимі випливає, не змінюючи позиції курсору, вивести той же самий символ з тим же самим кольором (сказане припускає, що біт 7 BL дорівнює 1). У результаті повторної операції що виключає АБО код кольору всіх пикселов символу стає рівним тому значенню, що було до першої операції висновку символу. Таким чином, удається швидко відновлювати вміст екрана, наприклад при організації віконного інтерфейсу.

Зокрема, для висновку і відновлення текстового вікна в графічному режимі засобами Turbo C надходять

так:

1)уміст виведеного вікна зарание розміщають в окремому буфері, наприклад у масиві char buf[1000]; на кожне знакоместо екрана в буфері відводять 2 байти – один для символу (молодший байт) і один для “атрибута” (старший байт); всі атрибути мають встановлений в одиницю старший біт; два перших слова задають відповідно число стовпців і число рядків вікна;

2)переменую directvideo установлюють рівної нулю;

3)вікно “відкривається” функцією puttext(); як буфер використовується масив buf;

4)відновлення екрана, перевизначеного виведеним вікном, виконується повторним висновком того ж вікна на тім же місці функцією puttext().

Подібний прийом висновку текстового вікна в графічному режимі і відновлення екрана використаний у приведеному далі прикладі програми L9.18. C.

            Друга осообенность висновку тексту в графічному режимі через BIOS зв'язана з таблицею знакогенератора. По ній BIOS у межах знакоместа з “малює” пикселы. Логіка роботи відеоадаптера з таблицею знакогенератора залежить від номера графічного режиму: у CGA – графічних режимах використовується одна таблиця, у EGA – режимах застосовуються зовсім інші прийоми. Ці питання докладно розглядаються в 9.8 і 9.9.

            Третя особливість відноситься до виконання BIOSом скролінга в графічних CGA – режимах. BIOS підтримує скролінг, але код атрибута для “заливання” вивільнюваних ліній (значення в регістрі BH) задає колір пикселов. Якщо, наприклад у графічному режимі 5, у якому один байт кодує відразу черыре поруч розташованих пиксела на екрані, задати при виконанні скролінга BH=ffh, а AL=00 (скролінг усього вікна), то усе вікно заповниться пикселами з кодом кольору 11. Завдання BH=Aah приведе до “заливання” екрана пикселами з кодом кольору 10, BH=55h – пикселами з кодом кольору 01, а ВН=00 – пикселами з кодом кольору 00 (колір тла). Будь-яке інше значення приводить до появи смуг на екрані. Наприклад, значення у ВН, рівне 77h (двоичный код 01110111) породжує на екрані наступну картину: самий лівий з чотирьох пикселов рядка екрана буде мати код кольору 01, що випливає за ним – код кольору 11, потім знову пиксел з кодом 01 і останнім йде пиксел з кодом 11. Ці четвірки пикселов повторюються на кожнім рядку, і на екрані після скролінга утвориться послідовність вертикальних смуг двох квітів. Якщо виконати скролінг вікна з BH=f4h двоичный код 11100100), вікно заповнюється четырехцветным спектром вертикальних ліній. Виконання скролінга вікна екрана в EGA – і VGA – режимах приводить до “заливання” вікна пикселами, код кольору яких записаний у ВН без яких-небудь складностей.

            Таким чином, варіанти функцій, приведених у 9.2, що використовують для висновку на екран функції BIOS, будуть працювати коректно і у всіх графічних режимах. Правда, при їхньому використанні прийдеться скорегувати значення атрибутів з урахуванням зроблених зауважень про особливості скролінга і кольору виведених символів. На жаль, у графічних режимах не можливо виконати читання символу з екрана. У цьому зв'язку функції з 9.6 не придатні для графічних режимів.