Функції екранного режиму. Функції малювання крапки та прямої



Керування кольором

 

Переривання 10 h

Переривання INT 10H забезпечує керування всім екраном. В регістрі AH встановлюється код, що визначає функцію переривання. Команда зберігає зміст регитрів BX, CX, DX, SI і BP. Нижче описані всі можливі функції.

AH=00: Установка режиму. Дана функція дозволяє периключати кольоровий монітор у текстовий чи графічний режим. Установка pежиму для виконуваної в сучасний момент програми здійснюється c допомогою INT 10H. При установці відбувається очищення екрану. Зміст регістру AL може бути наступним:

00 40 х 25 чорно-білий текстовий режим

01 40 х 25 стандартний 16-кольоровий текстовий режим

02 80 х 25 чорно-білий текстовий режим

03 80 х 25 стандартний 16-кольоровий текстовий режим

04 320 х 200 стандартний 4-кольоровий графічний режим

05 320 х 200 чорно-білий графічний режим

06 640 х 200 чорно-білий графічний режим

07 80 х 25 чорно-білий стандартний монохроматичний

08 - 0A формати для моделі PCjr

0D 320 х 200 16-кольоровий графічний режим (EGA)

0E 640 х 200 16- кольоровий графічний режим (EGA)

0F 640 х 350 чорно-білий графічний режим (EGA)

10 640 х 350 64- кольоровий графічний режим (EGA)

EGA (Enhanced Graphics Adapter) - позначає удосконалений графічний адаптер. Наступний приклад показує установку стандартного 16- кольорового текстового режиму

 

MOV AH,00 ;Функція установки режиму

MOV AL,03 ;Стандартний кольоровий текст 80 х 25

INT 10H ;Викликати BIOS

 

Для визначення типу адаптера, встановленого в системі, служить переривання BIOS INT 11H. Дана команда повертає в регістрі AX значення, в якому біти 5 і 4 вказують на відео режим:

01 40 х 25 чорно-білий режим у кольоровому адаптері

10 80 х 25 чорно-білий режим у кольоровому адаптері

11 80 х 25 чорно-білий режим у чорно-білому адаптері

Програма, що працює з невідомим типом монітора, може перевірити тип по регістру AX після INT 11H і потім встановити необхідний режим. AH=01: Установка розміру курсору. Курсор не є символом з набору ASCII-кодів. Комп'ютер має власне апаратне забезпечення для керування видом курсору. Для цього існує спеціальна обробка по INT перериванню. Звичайно символ курсоpа схожий на символ підкреслення. Використовуючи INT 10H, можна керувати вертикальним розміром курсору: біти 4-0 у регістрі CH для верхньої лінії сканування, а біти 4-0 у регістрі CL - для нижньої. Можна встановити будь-який pозмір курсору по вертикалі: від 0 до 13 для монохроматичних і EGA монітоpів і від 0 до 7 для більшості кольорових моніторів. Наведемо приклад для збільшення розміру курсору від його верхньої до нижньої лінії сканування:

 

MOV AH,01 ;Встановити розмір курсору

MOV CH,00 ;Верхня лінія сканування

MOV CL,13 ;Нижня лінія сканування

INT 10H ;Викликати BIOS

 

В результаті виконання цих команд курсор перетвориться в суцільний мигітливий прямокутник. Можна встановити будь-який розмір курсору між верхньою і нижньою границями, наприклад, 04/08, 03/10 і т.д. Курсор зберігає свій вигляд, поки програма не змінить його. Використання розмірів 12/13 (для моно) і 6/7 (для кольору) переводить курсор у його нормальний вигляд.

AH=02: Установка позиції курсору. Ця функція встановлює курcор у будь-яку позицію на екрані відповідно до координатами cтрічки і стовпця. Номер сторінки звичайно дорівнює 0, але може мати значення від 0 до 3 при 80 стовпцях на екрані. Для установки позиції курсору необхідно занести в регістр AH значення 02, у регістр BH номер сторінки і в регістр DX координати рядка і стовпця:

 

MOV AH,02 ;Встановити положення курсору

MOV BH,00 ;Сторінка 0

MOV DH,рядок ;Рядок

MOV DL,стовпець ;Стовпець

INT 10H ;Викликати BIOS

 

AH=03: Читання поточного положення курсору. Програма може визначити положення курсору на екрані (рядок і стовпець), а також pозмір курсору, у такий спосіб:

 

MOV AH,03 ;Визначити положення курсору

MOV BH,00 ;Встановити сторінку 0

INT 10H ;Викликати BIOS

 


Після повернення регістр DH буде містити номер рядка, а регістр DL-номер стовпця. У регістрі CH буде верхня лінія cканування, а в регістрі CL -нижня.

AH=04: Читання положення світлового пера. Дана функція використовується в графічному режимі для визначення положення світлового пеpа.

AH=05: Вибір активної сторінки. Нова сторінка встановлюється для кольорових текстових режимів від 0 до 3. Для режиму 40 х 25 можливо встановлювати до 8 сторінок (від 0 до 7), а для режиму 80 х 25 - до 4 сторінок (від 0 до 3).

 

MOV AH,05 ;Встановити активну сторінку

MOV AL,сторінка ;Номер сторінки

INT 10H ;Викликати BIOS

 

AH=06: Прокручування екрана нагору. Коли програма намагається видати текст на рядок нижче останнього на екрані, то відбувається перехід на верхній рядок. Навіть якщо за допомогою переривання буде створенний нульовий стовбець, все одно припускається новий рядок, і нижні рядки на екрані будуть зіпсовані. Для вирішення цієї проблеми використовується прокручування екрану.

Раніше код 06 використовувався для очищення екрану. В текстовому режимі установка в регістрі AL значення 00 призводить до повного прокручування нагору всього екрану, очищаючи його пробілами. Установка ненульового значення в регістрі AL визначає кількість рядків прокручування екрану нагору. Верхні рядки ідуть з екрану, а чисті рядки вводяться знизу. Наступні команди виконують прокручування всього екрану на один рядок:

 

MOV AX,0601H ;Прокрутити на один рядок нагору

MOV BH,07 ;Атрибут: нормальний, чорно-білий

MOV CX,0000 ;Координати від 00,00

MOV DX,184FH ;до 24,79 (повний екран)

INT 10H ;Викликати BIOS

 

Для прокручування будь-якої кількості рядків необхідно встановити відповідне значення в регістрі AL. Регістр BH містить атрибут для нормального чи інвертованого відображення, миготіння, установки кольору і т.д. Значення в регістрах CX і DX дозволяють прокручувати будь-яку частину екрану. Нижче наведений стандартний підхід до прокручування:

1. Визначити в елементі ROW (рядок) значення 0 для установки рядка положення курсору.

2. Видати текст і просунути курсор на наступний рядок.

3. Перевірити, чи знаходиться курсор на останньому рядку (CMP ROW,22).

4. Якщо так, то збільшити елемент ROW (INC ROW) і вийти.

5. Якщо ні, то прокрутити екран на один рядок і, використовуючи ROW перемістити курсор.

AH=07: Прокручування екрану вниз. Для текстового режиму прокручування екрану вниз позначає видалення нижніх рядків і вставка чистих рядків зверху. Регістр AH повинен містити 07, значення інших регістpів аналогічні функції 06 для прокручування нагору.

AH=08: Читання атрибуту/символу в поточній позиції курсору. Для читання символу і байта атрибута з дисплейного буфера, як у текстовому, так і в графічному режимі використовуються наступні команди:

 

MOV AH,08 ;Запит на читання атр./симв.

MOV BH,00 ;Сторінка 0 (для текстового реж.)

INT 10H ;Викликати BIOS

 

Дана функція повертає в регістрі AL значення символу, а у AH - його атрибут. У графічному режимі функція повертає тичина. 00 для не ASCII-кодів. Оскільки ця функція читає тільки один cимвол, то для символьного рядка необхідна організація циклу.

AH=09: Виведення атрибута/символу в поточну позицію курсору. Для висновку на екран символів у текстовому чи графічному режимі з установкою миготіння, інвертування і т.д. можна скористатися наступними командами:

 

MOV AH,09 ;Функція висновку

MOV AL,символ ;Виведений символ

MOV BH,сторінка ;Номер сторінки (текст.реж.)

MOV BL,атрибут ; чиАтрибут колір

MOV CX,повторення ;Число повторень символу

INT 10H ;Викликати BIOS

 

У регістр AL повинний бути поміщений виведений на екран символ. Значення в регістрі CX визначає число повторень символу на екрані. Виведення на екран послідовності різних символів вимагає організації циклу. Дана функція не переміщує курсор. У наступному прикладі на екран виводиться п'ять мигітливих "серденьок" в інвертованому вигляді:

 

MOV AH,09 ;Функція висновку

MOV AL,03H ;Хробаки (карткова масть)

MOV BH,00 ;Сторінка 0 (текст. режим)

MOV BL,0F0H ;Миготіння, інверсія

MOV CX,05 ;П'ять разів

INT 10H ;Викликати BIOS

 

В текстовому (але не в графічному) режимі символи автоматично виводяться на екран і переходять з одного рядка на інший. Для висновку на екран тексту чи запиту повідомлення необхідно скласти програму, що встановлює в регістрі CX значення 01 і в циклі завантажує в регістр AL з пам'яті виведені символи тексту. Оскільки регістр CX у даному випадку зайнятий, то не можна використовувати команду LOOP. Крім того, при висновку кожного символу необхідно додатково просувати курсор у наступний стовбець (функція 02).

В графічному режимі регістр BL використовується для визначення кольору графіки. Якщо біт 7 дорівнює 0, то заданий колір замінює поточний колір крапки, якщо біт 7 дорівнює 1, то відбувається комбінація кольорів за допомогою команди XOR.

AH=0A: Виведення символу в поточну позицію курсору. Єдина різниця між функціями 0A і 09 полягає в тому, що функція 0A не встановлює атрибут:

 

MOV AH,0AH ;Функція виведення

MOV AL,символ ;Виведений символ

MOV BH,сторінка ;Номер сторінки (для тексту)

MOV CX,повторення ;Число повторень символу

INT 10H ;Викликати BIOS

 

Для більшості застосувань команда переривання DOS INT 21H більш зручна.

AH=0E: Виведення у режимі телетайпа. Дана функція дозволяє використовувати монітор, як простий термінал. Для виконання цієї функції необхідно встановити в регістрі AH тичину значення 0E, у pегістр AL помістити виведений символ, колір тексту (у графічному режимі) занести в регістр BL і номер сторінки для текстового режиму - у регістр BH. Звуковий сигнал (код 07H), повернення на одну позицію (08H), кінець рядка (0AH) і повернення каретки (0DH) діють, як команди для форматування екрану. Дана функція автоматично просуває курсор, переводить символи на наступну cтрічку, виконують прокручування екрану і зберігає поточні атрибути екрану.

AH=0F: Одержання поточного відео режиму. Дана функція повертає в регістрі AL поточний відео режим (див.функцію AH=00), в pегістрі AH - число символів в рядку (20, 40 чи 80), у регістрі BH - номер сторінки.

AH=13: Встановлення символьного рядка (тільки для AT). Дана функція дозволяє на комп'ютерах типу AT виводити на екран символьні рядки з установкою атрибутів і переміщенням курсору:

 

MOV AH,13H ;Функція висновку на екран

MOV AL,сервіс ;0, 1, 2 чи 3

MOV BH,сторінка ;

LEA BP,адреса ;Адреса рядка в ES:BP

MOV CX,довжина ;Довжина рядка

MOV DX,екран ;Координати на екрані

INT 10H ;Викликати BIOS

 

Можливий наступний додатковий сервіс:

0 - використовувати атрибут і не переміщати курсор;

1 - використовувати атрибут і перемістити курсор;

2 - вивести символ, потім атрибут і не переміщати курсор;

3 - вивести символ, потім атрибут і перемістити курсор.

 


Дата добавления: 2019-07-15; просмотров: 195; Мы поможем в написании вашей работы!

Поделиться с друзьями:






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