INT 10H (INT 10H)
INT 10h, INT 10H или INT 16 — инструкция на языке ассемблера для процессора архитектуры x86, генерирующая программное прерывание BIOS 10hex, 17-й вектор прерывания в архитектуре x86. BIOS, как правило, связывает с этим вектором обработчик прерывания в реальном режиме, предоставляющий видеосервис. Он включает установку видеорежима видеоадаптера, вывод символов и строк, графические примитивы (чтение и запись пикселей в графическом режиме).
Вызов INT 10h довольно медленный, поэтому многие программы получают доступ к видеоадаптеру напрямую, без BIOS. Установка видеорежима, производимая как правило единожды, может быть выполнена при помощи BIOS. Однако, отрисовка должна выполняться быстро, поэтому для этого лучше подходит прямой доступ к видеопамяти, чем вызов прерываний BIOS для каждого пикселя.
Список функций видеосервиса
[править | править код]Функция | Код функции | Параметры | Возвращаемое значение |
---|---|---|---|
Установка видеорежима | AH=00h | AL = номер режима | AL = флаг видеорежима / байт режима CRT контроллера |
Установить форму курсора текстового режима | AH=01h | CH = начальная строка, CL = конечная строка
Обычно знакоместо имеет 8 строк, 0-7. Тогда CX=0607h — обычный курсор-подчеркивание, CX=0007h — всё знакоместо. Если задан 5-й бит CH, то это обычно означает «Скрыть курсор». Поэтому CX=2607h — невидимый курсор. Некоторые видеокарты имеют 16 строк на знакоместо, 00h-0Fh. Некоторые видеокарты не используют 5-й бит CH. В таком случае, для скрытия следует задать CH > CL (например CX=0706h) |
|
Установить позицию курсора | AH=02h | BH = страница, DH = строка, DL = столбец | |
Получить позицию и форму курсора | AH=03h | BH = страница | AX = 0, CH = начальная строка формы курсора, CL = конечная строка формы курсора, DH = строка, DL = столбец |
Получить позицию светового пера (Не работает на VGA системах) | AH=04h | AH = Статус (0=не активно, 1=активно), BX = пиксель X, CH = пиксель Y, CX = номер строки пикселя для режимов 0Fh-10h, DH = символ Y, DL = символ X | |
Задать активную страницу | AH=05h | AL = номер страницы | |
Прокрутка вверх | AH=06h | AL = число строк для прокрутки (0 = очистка, CH, CL, DH, DL используются), BH = атрибут цвета.
CH = номер верхней строки, CL = номер левого столбца, DH = номер нижней строки, DL = номер правого столбца |
|
Прокрутка вниз | AH=07h | см. выше | |
Считать символ и атрибуты на позиции курсора | AH=08h | BH = страница | AH = цвет, AL = символ |
Записать символ и атрибуты на позиции курсора | AH=09h | AL = символ, BH = страница, BL = цвет, CX = сколько раз записать символ | |
Записать символ на позиции курсора | AH=0Ah | AL = символ, BH = страница, CX = сколько раз записать символ | |
Задать цвет фона/границы | AH=0Bh, BH = 00h | BL = Цвет фона/границы (граница только в текстовых режимах) | |
Задать палитру | AH=0Bh, BH = 01h | BL = ID палитры (имело смысл в CGA адаптерах, но более новые видеокарты поддерживают это во многих или всех графических режимах) | |
Задать пиксель | AH=0Ch | AL = цвет, BH = страница, CX = x, DX = y | |
Прочитать цвет пикселя | AH=0Dh | BH = страница, CX = x, DX = y | AL = цвет |
Консольный вывод символа | AH=0Eh | AL = символ, BH = страница, BL = цвет (только в графическом режиме) | |
Получить текущий видеорежим | AH=0Fh | AL = видеорежим, AH = число знаковых столбцов, BH = текущая страница | |
Вывести строку (EGA и выше) | AH=13h | AL = режим вывода, BH = страница, BL = цвет, CX = длина строки, DH = строка (на экране), DL = столбец, ES:BP = адрес |