Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Dos7book

.pdf
Скачиваний:
97
Добавлен:
09.02.2015
Размер:
5 Мб
Скачать
☆

Глава 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 –

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]