Dos7book
.pdf
Глава 8: Вызовы обработчиков прерываний
выборка знаков, у которых бит 3 в байте цвета сброшен в нуль, будет производиться из того блока, номер которого вписан в первое поле (биты 4, 1, 0), а выборка знаков, у которых бит 3 в байте цвета установлен в единицу, будет производиться из того блока, номер которого вписан во второе поле (биты 5, 3, 2).
8.01-29 INT 10\AX=1104h – загрузка стандартного шрифта 8x16
Обработчик прерывания INT 10\AX=1104h загружает из постоянной памяти BIOS тот самый шрифт, который принимается по умолчанию и отображает американскую кодовую страницу CP437. При загрузке устанавливается текстовый видеорежим 3, формат которого (80x25) соответствует данному шрифту.
При вызове: |
|
AX |
= 1104h |
BL |
– идентификатор загружаемого блока (примечание 1 к 8.01-28) |
Примечание 1: обработчик прерывания INT 10\AX=1114h принимает те же исходные данные и делает то же самое, но при этом переопределяет состояние видеоконтроллера. Вызывать INT 10\AX=1114h следует сразу после установки видеорежима и экранной страницы 0.
Примечание 2: если предстоит загружать несколько блоков шрифта, для них надо заранее, при загрузке DOS, выделить участки памяти с помощью драйвера DISPLAY.SYS (5.02-02), иначе можно будет пользоваться только выделяемым по умолчанию блоком с идентификатором 00h.
Примечание 3: в постоянной памяти BIOS также имеются шрифты форматов 8x8 и 8x14. Шрифт 8x8 загружается аналогичным образом посредством
INT 10\AX=1102h (и AX=1112h), а монохромный шрифт 8x14 – посредством INT 10\AX=1101h (и AX=1111h). Вызовы с AX=1111h
и AX=1112h переопределяют состояние видеоконтроллера.
8.01-30 |
INT 10\AX=1121h – загрузка шрифта для графического видеорежима |
|
При вызове: |
|
|
|
AX |
= 1121h |
|
BL |
– число рядов: 01h – 14 рядов, 02h – 25 рядов, 03h – 43 ряда, а |
|
|
00h означает, что число рядов указано в регистре DL. |
|
CX |
– число байтов на один знак |
|
DL |
– число рядов, если BL = 00h, иначе DL игнорируется |
ES:BP – указатель на первый байт загружаемого шрифта
Примечание 1: непосредственно перед вызовом INT 10\AX=1121h необходимо заново провести установку графического видеорежима.
– 349 –
Глава 8: Вызовы обработчиков прерываний
Примечание 2: шрифты для графических видеорежимов не требуют подготовки блоков знакогенератора. Вместо этого указатель на загруженный шрифт записывается в таблицу прерываний по адресу 0000:010Ch (иногда этот указатель называют вектором INT 43).
Примечание 3: определяемые пользователем конфигурации знаков 80h – FFh для шрифтов формата 8x8 графического видеорежима могут быть загружены с помощью INT 10\AX=1120h. Поскольку формат шрифта фиксирован, содержимое регистров BL, CX и DL игнорируется, таблица шрифта имеет фиксированную длину 400h, а указатель на нее (называемый иногда вектором INT 1F) записывается в таблицу прерываний по адресу 0000:007Ch.
8.01-31 INT 10\AX=1124h – стандартный шрифт графического видеорежима
Обработчик прерывания INT 10\AX=1124h предназначен для загрузки стандартного шрифта 8x16, отображающего американскую кодовую страницу CP437, при работе в графических видеорежимах. Используется таблица шрифта, содержащаяся в постоянной памяти BIOS. Указатель на первый байт таблицы шрифта заносится в таблицу прерываний по адресу 0000:010Ch.
При вызове:
AX = 1124h
Примечание 1: непосредственно перед вызовом INT 10\AX=1124h необходимо заново произвести установку графического видеорежима.
Примечание 2: точно так же INT 10\AX=1122h загружает шрифт формата 8x14. Примечание 3: точно так же INT 10\AX=1123h загружает шрифт формата 8x8.
8.01-32 |
INT 10\AX=1130h – запрос сведений о шрифте |
|
При вызове: |
|
|
|
AX |
= 1130h |
|
BH |
– вид запрашиваемых данных: |
= 00h – указатель из адреса 0000:007Ch таблицы прерываний = 01h – указатель из адреса 0000:010Ch таблицы прерываний
= 02h – шрифт 8x14 из области BIOS (CP437)
= 03h – шрифт 8x8 из области BIOS, знаки 00h – 7Fh (CP437) = 04h – шрифт 8x8 из области BIOS, знаки 80h – FFh (CP437) = 05h – шрифт 9x14 из области BIOS (CP437)
= 06h – стандартный шрифт 8x16 из области BIOS (CP437) = 07h – шрифт 9x16 из области BIOS (CP437)
При возврате:
ES:BP – указатель на первый байт таблицы запрошенного шрифта
– 350 –
Глава 8: Вызовы обработчиков прерываний
CX |
– число байтов на знак в используемом шрифте |
DL |
– номер последнего ряда знаков в используемом шрифте |
Примечание 1: данные в регистрах CX и DL относятся к шрифту, используемому для индикации в данный момент (а не к запрашиваемому шрифту).
8.01-33 INT 10\AH=13h – запись строки знаков
Обработчик прерывания INT 10\AH=13h выводит на экран строку знаков,
которая может быть представлена либо просто последовательностью байтов кода ASCII, либо так, как заполняется экранная память в текстовых режимах, то есть последовательностью с перемежением, в которой за каждым байтом знака следует байт цвета (A.10-5). В последнем случае содержимое BL игнорируется.
При вызове: |
|
|
|
AH |
= 13h |
|
AL |
– биты 7 – 2 сбросить в нуль |
|
|
– бит 1 – строка с перемежением байтов знака и байтов цвета |
|
|
– бит 0 – перемещать курсор по ходу записи строки. |
|
BH |
– номер экранной страницы (примечания 1 и 2 к 8.01-14) |
|
BL |
– байт цвета (A.10-5), если строка содержит только знаки |
|
CX |
– число знаков в строке, которую надо записать |
|
DH |
– ряд знаков, в котором надо начать запись |
|
DL |
– колонка, с которой надо начать запись |
|
ES:BP – указатель на первый байт строки, которую надо записать |
|
Примечание 1: служебные коды ASCII, перечисленные в разделе A.02-08, не |
||
|
индицируются, а исполняются как команды. |
|
Примечание 2: в |
некоторых моделях старых видеокарт возврат (Backspace) и |
|
|
перевод строки (CR) правильно исполняются только при записи на |
|
|
ту экранную страницу, которая индицируется в данный момент. |
|
8.01-34 |
INT 10\AX=1B00h – информация о статусе видеосистемы |
|
При вызове: |
|
|
|
AX |
= 1B00h |
|
BX |
= 0000h |
|
ES:DI – указатель на место для записи 64-байтового блока данных |
|
При возврате: |
|
|
|
AL |
= 1Bh, если BIOS поддерживает данную функцию |
|
ES:DI – указатель на первый байт записанного блока данных, |
|
|
|
содержание которого показано в приложении A.10-2. |
– 351 –
Глава 8: Вызовы обработчиков прерываний
8.01-35 INT 10\AX=4F00h – информация о VBE-расширениях BIOS
Обработчик прерывания INT 10\AX=4F00h вызывают для того, чтобы выяснить, имеются ли в данном компьютере VBE-расширения BIOS, и какие видеорежимы SVGA этими расширениями поддерживаются. Если VBE-расширения отсутствуют, то все функции INT 10\AX=4Fxxh на данном компьютере не поддерживаются.
При вызове: |
|
AX |
= 4F00h |
ES:DI – указатель на место для записи таблицы длиной 512 байт |
|
При возврате: |
|
AL |
= 4Fh – если значение другое, то VBE-расширения отсутствуют |
AH |
= 00h – успешное завершение, таблица записана |
=01h – таблицу не удалось записать
=02h – функция не поддерживается аппаратурой компьютера
=03h – в установленном видеорежиме функция не работает ES:DI – указатель на первый байт таблицы SVGA BIOS (A.10-4).
8.01-36 |
INT 10\AX=4F01h – информация о видеорежиме SVGA |
|
При вызове: |
|
|
|
AX |
= 4F01h |
|
CX |
– номер видеорежима SVGA |
|
ES:DI – указатель на место для записи таблицы длиной 256 байт |
|
При возврате: |
|
|
|
AL |
= 4Fh – если значение другое, то функция не поддерживается |
|
AH |
= 00h – успешное завершение, таблица записана |
|
|
= 01h – миссия не исполнена, таблицу не удалось записать |
|
ES:DI – указатель на первый байт записанной таблицы (A.10-7). |
|
8.01-37 |
INT 10\AX=4F02h-4F03h – задать или выяснить SVGA-видеорежим |
|
При вызове: |
|
|
|
AX |
– цель вызова: |
|
|
= 4F02h – установить новый видеорежим |
|
|
= 4F03h – получить сведения о видеорежиме |
|
BX |
– только для AX = 4F02h: SVGA-видеорежим (A.10-1), включая |
|
|
бит 14: – задействовать линейный кадровый буфер |
При возврате: |
бит 15: – не обнулять видеопамять |
|
|
||
|
AL |
= 4Fh – если значение другое, то функция не поддерживается |
|
AH |
– код завершения, как для 8.01-36 |
– 352 –
Глава 8: Вызовы обработчиков прерываний
BX – номер установленного видеорежима (A.10-1), включая бит 14: – линейный кадровый буфер задействован бит 15: – содержимое видеопамяти сохранено
Примечание 1: координированное переключение видеорежима вместе со сменой параметров управления манипулятором "мышь" обеспечивается вызовом драйвера "мыши" через прерывание INT 33\AX=0028h.
Примечание 2: для некоторых дисплеев приемлемы не все видеорежимы SVGA. Необходимо заранее знать, будет ли Ваш дисплей работать в том режиме, который Вы собираетесь установить.
Примечание 3: переключение видеорежимов сопровождается гашением экрана дисплея на 1 – 2 секунды, дискомфортным для зрительного восприятия. Потому лишних переключений желательно избегать.
8.01-38 |
INT 10\AX=4F04h – сохранить или восстановить SVGA-видеорежим |
||
При вызове: |
|
|
|
|
AX |
= 4F04h |
|
|
CX |
– записываемая часть конфигурации: |
|
|
|
= 0001h – состояние аппаратуры: установлен бит 0 |
|
|
|
= 0002h |
– видеоданные BIOS: установлен бит 1 |
|
|
= 0004h |
– цветностные регистры: установлен бит 2 |
|
|
= 0008h |
– состояние SVGA: установлен бит 3 |
|
|
= 000Fh – полная конфигурация: установлены биты 0 – 3 |
|
|
DL |
– подфункция: |
|
=00h – определить размер буфера для записи состояния
=01h – сохранить состояние SVGA-видеоконтроллера
=02h – восстановить состояние SVGA-видеоконтроллера ES:BX – указатель на начало буфера в памяти (только для подфункций
01h и 02h, причем для 02h он должен быть заполнен данными)
При возврате из подфункции DL = 00h:
BX – требуемое число 64-байтовых блоков памяти При возврате из подфункции DL = 01h:
ES:BX – указатель на начало буфера с данными видеорежима
8.01-39 INT 10\AX=4F05h – управление окнами видеопамяти
В старых компьютерах для видеопамяти была предоставлена часть адресного пространства в пределах A000:0000h – B000:FFFFh. Расположения задействованных адресных зон в этой области для EGA-совместимых и VGA-совместимых видеорежимов приведены в таблице A.10-1. Однако встроенная
видеопамять современных видеокарт рассчитана на обеспечение видеорежимов
– 353 –
Глава 8: Вызовы обработчиков прерываний
SVGA и потому имеет гораздо больший объем, для которого выделенная часть адресного пространства слишком узка. Чтобы преодолеть проблему ограниченности адресного пространства, SVGA BIOS видеокарт организует в предоставленном диапазоне адресов скользящие "окна", через которые открывается доступ к запрашиваемым участкам обширной видеопамяти.
Количество, размер и расположение "окон" в адресуемой процессором памяти зависят и от видеокарты, и от избранного видеорежима. Конкретные данные надо выяснять по таблице A.10-7, получаемой посредством вызова INT 10\AX=4F01h (8.01-36), но обычно организованы одно или два 64-килобайтных "окна": "окно A" A000:0000h – A000:FFFFh и "окно B" B000:0000h – B000:FFFFh. Обработчик прерывания INT 10\AX=4F05h сообщает расположение участка видеопамяти, открытого в запрашиваемом "окне", и позволяет это расположение изменять.
При вызове: |
|
|
AX |
= 4F05h |
|
BH |
= 00h – задать положение участка доступа в видеопамяти |
|
|
= 01h |
– выяснить положение участка доступа в видеопамяти |
BL |
= 00h |
– запрос по отношению к окну A |
|
= 01h |
– запрос по отношению к окну B |
DX |
– положение участка доступа (только при BH = 00h) |
|
При возврате: |
|
|
AL |
= 4Fh – если значение другое, то функция не поддерживается |
|
AH |
– код завершения, как для 8.01-36 |
|
DX |
– положение участка доступа (только после BH = 01h) |
|
Примечание 1: положение участка доступа в видеопамяти выражается числом шагов адресации, причем размер шага не фиксирован, он дается в слове со смещением 04h в таблице A.10-7, получаемой посредством вызова INT 10\AX=4F01h (8.01-36).
Примечание 2: вызвать обработчик прерывания INT 10\AX=4F05h можно также командой CALL FAR (7.03-08) с адресом, приведенным в двойном слове со смещением 0Ch в таблице A.10-7.
Примечание 3: интерпретация данных, посылаемых в адрес отображаемого "окна", зависит от типа модели, выражаемого байтом 1Bh в таблице A.10-7,
причем некоторые модели организации видеопамяти допускают несколько вариантов. В частности, графическая EGA-модель предоставляет 3 варианта интерпретации посылаемого байта:
–режим 00h стирания или записи с учетом битовой маски и маски цвета (байт представляет состояния 8 пикселов);
–режим 01h копирования из одного места видеопамяти в другое (в командах учитываются только адреса);
–режим 02h "заливки" 8 последовательных пикселов (4 младших бита посылаемого байта выражают цвет).
–354 –
Глава 8: Вызовы обработчиков прерываний
Способы задания режима интерпретации и посылки байтов масок перечислены в примечаниях 3 и 4 к таблице A.14-1.
8.01-40 INT 10\AX=4F06h – логическая длина строки
Обработчик прерывания INT 10\AX=4F06h позволяет установить длину строки кратной степени двойки, что существенно упрощает и ускоряет пересчет координат ценой приемлемого сокращения используемой емкости видеопамяти. Данная функция действует как в графических, так и в текстовых видеорежимах.
При вызове: |
|
|
AX |
= 4F06h |
|
BL |
= 00h – задать фактическую длину строк в пикселах |
|
|
= 01h |
– выяснить фактическую длину строк |
|
= 02h |
– задать фактическую длину строк в байтах |
|
= 03h |
– выяснить максимальную длину строк |
CX |
– задаваемая длина строк (только при BL = 00h и BL = 02h) |
|
При возврате: |
|
|
AL |
= 4Fh – если значение другое, то функция не поддерживается |
|
AH |
– код завершения, как для 8.01-36 |
|
BX |
– запрошенная длина строк в байтах |
|
CX |
– запрошенная длина строк в пикселах |
|
DX |
– максимальное число строк при запрошенной длине строки |
|
Примечание 1: длина сроки может превышать номинальное значение для данного видеорежима, но не может превышать максимального значения. Если задаваемая длина меньше номинальной, то будет установлено ближайшее приемлемое значение.
8.01-41 INT 10\AX=4F07h – начало отображаемого участка видеопамяти
Обработчик прерывания INT 10\AX=4F07h позволяет осуществлять прокрутку изображения на экране, а также переход на другую экранную страницу в пределах имеющейся видеопамяти. Данная функция действует как в графических, так и в текстовых видеорежимах.
При вызове: |
|
|
AX |
= 4F07h |
|
BX |
= 0000h – сместить положение начала в момент вызова |
|
|
= 0001h |
– выяснить положение начала отображаемого участка |
|
= 0080h |
– сместить положение начала в обратном ходе по кадру |
CX |
– номер левого пиксела в строке (при BX = 0000h и 0080h) |
|
DX |
– номер первой строки (при BX = 0000h и 0080h) |
|
– 355 –
Глава 8: Вызовы обработчиков прерываний
При возврате: |
|
|
|
AL |
= 4Fh – если значение другое, то функция не поддерживается |
|
AH |
– код завершения, как для 8.01-36 |
|
CX |
– номер левого пиксела в строке (только после BX = 0001h) |
|
DX |
– номер первой строки (только после BX = 0001h) |
8.01-42 |
INT 11 – получить перечень имеющихся устройств |
|
При вызове ничего готовить не нужно |
||
При возврате: |
|
|
|
AX |
– слово-перечень, расшифровка в приложении A.11-1 |
Примечание 1: при работе на третьем (низшем) уровне привилегий в защищенном режиме и в режиме V86 процессоры могут вызывать INT 11 в случае размещения операндов по адресам, не кратным числу байтов
вформате этих операндов. Такой контроль осуществляется при условии установления бита 12h в регистре флагов, а также бита 12h
вуправляющем регистре CR0 (примечание 6 к A.11-4). Программы, пользующиеся таким контролем, должны перехватывать вызовы INT 11 в таблице прерываний защищенного режима.
8.01-43 INT 12 –объем обыкновенной памяти до 1 Мб
При вызове ничего готовить не нужно При возврате:
AX – объем обыкновенной памяти в килобайтах (примечания 2 и 3)
Примечание 1: объем обыкновенной памяти считывается из слова по адресу 0040:0013h в области данных BIOS (приложение A.01-1). Помимо того, объем записан в ячейки 15h и 16h CMOS RAM (примечание 1
к A.14-1).
Примечание 2: для выяснения наличия оперативной памяти сверх 1 Мб следует пользоваться функциями INT 15\AH=88h, INT 15\AX=E801h или INT 15\AX=E820h.
Примечание 3: для выяснения наличия свободной памяти, которая может быть предоставлена в пользование программе по запросу, следует обратиться к INT 21\AH=48h (примечание 1 к 8.02-50).
8.01-44 INT 13\AH=00h\0Dh – сброс контроллера дисковода
При сбросе в начальное состояние контроллер заново заполняет свои регистры данными из таблицы параметров соответствующего дисковода (A.08-2, A.13-1).
– 356 –
Глава 8: Вызовы обработчиков прерываний
Сброс контроллера в начальное состояние необходим после каждого неудачного обращения к дисководу на гибких или жестких магнитных дисках, и только потом попытка обращения может быть повторена.
При вызове: |
|
AH |
= 00h – обращение к флоппи-дисководу (на гибких дисках) |
|
= 0Dh – обращение к HDD (на жестких магнитных дисках) |
DL |
– номер дисковода (примечание 1) |
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). Сброс флага CF означает успешное завершение
Примечание 1: нумерация дисководов на гибких магнитных дисках начинается с нуля: 00h – первый, 01h – второй и так далее, а нумерация дисководов на жестких магнитных дисках – с 80h: 80h – первый, 81h – второй, и так далее. Нумерация дисководов (физических дисков) не связана с буквенными обозначениями логических дисков, которых может быть несколько на каждом дисководе.
Примечание 2: если к одному контроллеру подключены два дисковода, то при
сбросе контроллера в начальное состояние происходит перевод головок на нулевую дорожку в обоих дисководах. Когда нужна
только рекалибровка дисковода переводом головок на нулевую дорожку без сброса контроллера, тогда нужно вызывать INT 13\AH=11h (все прочие спецификации вызова такие же).
8.01-45 |
INT 13\AH=01h – статус предыдущего обращения к дисководу |
|
При вызове: |
|
|
|
AX |
= 0100h |
|
DL |
– номер дисковода (примечание 1 к 8.01-44) |
При возврате: |
|
|
|
AH |
– байт статуса, расшифровываемый по таблице A.06-1 |
Примечание 1: некоторые BIOS возвращают статус предыдущего обращения в AL. |
||
8.01-46 |
INT 13\AH=02h – считывание секторов в память |
|
При вызове: |
|
|
|
AH |
= 02h |
|
AL |
– число считываемых секторов (примечание 1) |
|
CH |
– младшие 8 бит от номера цилиндра (дорожки) |
|
CL |
– биты 0-5: номер начального сектора от 1 до 63, |
|
|
– биты 6-7: старшие 2 бита от номера цилиндра (дорожки) |
|
DH |
– номер головки (примечание 2) |
– 357 –
Глава 8: Вызовы обработчиков прерываний
DL |
– номер дисковода (примечание 1 к 8.01-44) |
ES:BX – указатель на буфер для данных |
|
При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1). |
|
Сброс флага CF означает успешное завершение, и тогда |
|
AL |
– число считанных секторов (примечание 5) |
ES:BX – указатель на буфер со считанными с диска данными.
Примечание 1: задаваемое в AL число секторов не должно быть нулем. Некоторые старые BIOS требуют, чтобы число в AL не превосходило бы числа оставшихся секторов на заказанной дорожке (еще об этом в 4.22).
Примечание 2: старые системы BIOS воспринимают только 4 младших бита в DH, то есть позволяют указать не более 16 головок. Современные системы BIOS (с сигнатурой A0h в блоке данных A.13-1) принимают преобразованные параметры CHS, допуская до 256 головок. В обоих случаях должные предельные значения
параметров для конкретного дисковода возвращает обработчик
INT 13\AH=08h (8.01-49).
Примечание 3: при возникновении ошибок считывания с флоппи-дисков
рекомендуют повторять попытки считывания по крайней мере трижды со сбросом контроллера дисковода в начальное состояние перед каждой новой попыткой.
Примечание 4: при работе в операционной системе Windows прямой доступ к дискам посредством INT 13 возможен только если диск закрыт для конкурентного доступа операцией LOCK (примечание 2 к INT 21\AX=440Dh).
Примечание 5: некоторые старые BIOS не возвращают число в AL. Современные системы BIOS при возникновении ошибок считывания (код = 11h) возвращают в AL длину скорректированного пакета данных.
Примечание 6: INT 13\AH=0Ah (с теми же спецификациями вызова) осуществляет
считывание секторов на жестких магнитных дисках вместе с 22-байтовым продолжением, содержащим от 4 до 7 байтов кода для коррекции ошибок. Обработчик прерывания INT 13\AH=0Ah не
исправляет ошибок и прекращает процесс считывания сразу же после обнаружения ошибки в последнем считанном секторе.
8.01-47 |
INT 13\AH=03h – запись данных в сектора диска |
|
При вызове: |
|
|
|
AH |
= 03h |
|
AL |
– ненулевое число секторов, которые надлежит записать |
CH, CL, DH, DL – то же, что для INT 13\AH=02h (8.01-46)
ES:BX – указатель на буфер с подготовленными данными для записи При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1).
– 358 –
