Прерывание int 10h. Видеофункции BIOS
¨ Функция 00h. Установка видеорежима (табл. 3.2) текущей видеостраницы с очисткой экрана (быстрая очистка экрана реализуется функцией 06h и 07h). Вызов: AH = 00h, Al = видеорежим (код режима задаётся в младших 7 битах, установка в 1 старшего бита запрещает очистку экрана). Вызов разрушает регистры AX, BP, SI, и DI. Таблица 3.2 Текстовые видеорежимы и страницы в стандарте VGA, поддерживаемые
По умолчанию в DOS используется режим 3 (впрочем, корректно оформленная программа должна выполнять проверку или установку требуемого текстового режима с последующим восстановлением прежнего). ¨ Функция 02h. Установка позиции курсора. Задаёт положение курсора на экране в текстовых координатах, с которых в дальнейшем будет выводиться текст. Отсчёт номера строки и столбца ведётся от верхнего левого угла. Курсор можно установить как в текстовом, так и в графическом режиме, однако, в графическом режиме курсор не виден. BIOS поддерживает до восьми независимых курсоров – по одному на каждую страницу (см. табл. 3.2) независимо от того, какая страница является активной. Функцию 02h BIOS можно использовать в комбинации с функциями DOS для организации вывода на экран. Вызов: AH = 02h; BH = номер страницы (0, 1,...7), обычно 0; DH = строка; DL = столбец. Вызов разрушает регистры AX, BP, SI и DI. ¨ Функция 03h. Считывание позиции и размера курсора. Возвращает текущие координаты состояния курсора на выбранной странице. Это даёт возможность временно перейти для работы на другое место экрана, а затем вернуться на старое место. Функцию 03h BIOS можно использовать в комбинации с функциями DOS для организации вывода на экран. Вызов: AH = 03h, BH = номер страницы (0, 1,...7), обычно 0. Возврат: DH, DL = строка и столбец текущей позиции курсора, CH, CL = первая и последняя строки развёртки курсора. Вызов разрушает регистры AX, BP, SI и DI.
¨ Функция 05h. Установка видеостраницы. Устанавливает активную видеостраницу (как текстовую, так и графическую). Вызов: AH= 05h, AL= номер страницы (0,..., 7). Вызов разрушает регистры AX, BP, SI и DI. Программа, устанавливающая страницу, отличную от текущей, обязана по окончании работы восстанавливать исходную. ¨ Функция 06h (07h). Инициализация или прокрутка окна вверх (вниз). Инициализирует окно с указанными координатами, пробелами ASCII с заданным атрибутом (AL = 0), или прокручивает содержимое окна вверх (вниз) на заданное число строк (AL = число строк). При прокрутке появляющиеся снизу (сверху) строки заполняются пробелами ASCII с заданным атрибутом. Функцию удобно использовать для быстрой очистки экрана или некоторого прямоугольного окна. Вызов: AH = 06h(07h); AL = 0 – очистка, AL = N (N > 0) – прокрутка на N строк; BH = атрибут символов в окне; CH, CL = координаты строки и столбца (Y, X) левого верхнего угла; DH, DL = координаты строки и столбца (Y, X) правого нижнего угла. Вызов разрушает регистры AX, BP, SI, и DI. ¨ Функция 08h. Чтение символа и атрибута в текущей позиции курсора на выбранной странице. Вызов: AH = 08h, BH = номер страницы (0,..., 7), обычно 0. Возврат: AH = атрибут символа, AL = ASCII- код символа. Вызов разрушает регистры BP, SI и DI. ¨ Функция 09h. Запись символа с заданным атрибутом на экран в позицию курсора. Действует как в графическом, так и в текстовом режимах. В графическом режиме символы не должны переходить на следующую строку. Все коды в AL рассматриваются как символьные и не управляют положением курсора. После вывода символа курсор смещается к следующей позиции функцией 02h. Коэффициент повторения позволяет выводить строки одинаковых символов. В текстовом режиме символ выводится с указанным в BL атрибутом. В графическом – содержимое BL влияет только на цвет символа, но не на фон под ним. Графическое изображение под знакоместом затирается. Вызов: AH =09h, AL = ASCII -код символа, BL = атрибут символа (текстовый режим) или только цвет символа (графический режим), BH = номер страницы (0, 1,...7), CX = коэффициент повторения. Вызов разрушает регистры AX, BP, SI и DI. ¨ Функция 0Ah. Запись символа с текущим атрибутом на экран в позицию курсора. Функция действует как в графическом, так и в текстовом режимах. Символ принимает атрибут, установленный ранее для этой позиции. Все ASCII-коды в AL рассматриваются как символьные и не управляют положением курсора (также как и в функции 09h). После вывода символа курсор смещается к следующей позиции функцией 02h. Вызов: AH = 0Ah, AL = ASCII -код символа, BH = номер страницы (0, 1,...7), CX = коэффициент повторения. Вызов разрушает регистры AX, BP, SI и DI. ¨ Функция 0Eh. Запись символа с текущим атрибутом в режиме телетайпа. Записывает символ ASCII в позицию курсора (предварительно установленную функцией 02h) на активной странице и смещает курсор к следующей позиции. Коды ASCII: 07h – звонок (BEL), 08h – шаг назад (BS), 0Dh – возврат каретки (CR), 0Ah – перевод строки (LF), рассматриваются как управляющие и выполняются соответствующие им действия. Остальные управляющие коды рассматриваются как символы и выводятся на экран. Действует автоматический перевод курсора на следующую строку после завершения предыдущей, а также прокрутка экрана вверх на 1 строку после заполнения самой нижней. Вызов: AH = 0Eh, AL = ASCII -код символа, BL = цвет символа (только для графического режима), BH = номер страницы (0, 1,...7), по умолчанию действует активная страница. ¨ Функция 0Fh. Получить режим дисплея и номер текущей страницы. Вызов: AH = 0Fh. Возврат: AL = режим дисплея, AH = ширина экрана в текстовом формате BH = номер активной страницы. Вызов разрушает регистры BP, SI и DI. Пример. Процедура установки позиции курсора на текущей странице. Вход: dh = строка (0 – 25), dl = столбец (0 – 79) Proc SetCursor .......; Сохранить регистры (по необходимости) Mov ah, 0Fh Int 10h Mov ah, 02h Int 10h ..........; Восстановить регистры Endp SetCursor ¨ Функция 10h. Подфункция 03h. Переключение бита " мерцание/яркость". Определяет назначение старшего бита 7 атрибута символа: мерцание символа или повышенная яркость фона. Вызов: AX = 1003h, BL = назначение 7-го бита атрибута: 0 – повышенная яркость, 1 – мерцание (устанавливается по умолчанию). Функция воздействует сразу на все символы экрана, у которых установлен старший бит атрибута фона. ¨ Функция 13h. Запись строки символов с заданными атрибутами. Записывает строку в текущую страницу видеобуфера, начиная с указанной позиции. Коды ASCII: 07h – звонок, 08h – шаг назад, 0Ah – перевод строки, Вызов: AH = 13h, AL = режим записи: 0 – атрибут символа в BL, строка содержит только коды символов, после записи курсор принимает исходное положение (т.е. вывод следующей строки, если не изменить позицию курсора, начинается с изначально установленной позиции); 1 – отличается от режима 0 тем, что после записи курсор остаётся в конце строки; 2 – строка содержит попеременно коды символов и атрибутов (т.е. каждый символ описывается 2 байтами – ASCII -кодом и атрибутом), после записи курсор принимает исходное положение; 3 – отличается от режима 2 тем, что по окончании вывода курсор остаётся в конце строки. BH = номер страницы (0, 1,...7), BL = атрибут для режимов 0 и 1, CX = длина символьной строки (в длину входят только коды символов, но не байты атрибутов), DX = DH.DL = координаты курсора (строка, столбец) в исходной точке вывода строки на экране, ES: BP = адрес начала строки в памяти. Обратите внимание на особенность задания адреса!
|