Список поддерживаемых прерываний
Быстрые ссылки:
Список поддерживаемых прерываний с описаниями:
INT 10h /
AH = 00h - установить видеорежим.
вход:
AL = нужный видеорежим.
Следующие видеорежимы поддерживаются:
00h - Текстовый режим 40x25, 16 цветов, 8 страниц.
03h - Текстовый режим 80x25, 16 цветов, 8 страниц.
INT 10h /
AH = 01h - установить форму курсора в текстовом режиме.
вход:
CH = вершина курсора (биты 0-4) и опции (биты 5-7).
CL = основание курсора (биты 0-4).
Если биты 6-5 регистра CH установлены в 00, то курсор
виден. Чтобы скрыть курсор, установите биты в 01
(следующее значение в CH будет скрывать курсор: 28h - 00101000b).
Бит 7 должен быть всегда нулем.
Примечание переводчика. Высота курсора - это разность между вершиной
и основанием курсора. Т.е. если установить биты 0-4 регистра
СН в 00000, а регистра CL - в 11111, то курсор будет высотой
в 32 строки (не текстовых строки - а строки экранных). Если установить
биты 0-3 регистра СН в 1111, а регистра CL - в 1111, то курсор будет
высотой в одну строку и располагаться под буквами. Ну и так далее...
INT 10h /
AH = 02h - установить позицию курсора.
вход:
DH = строка.
DL = столбец.
BH = номер страницы (0..7).
INT 10h /
AH = 03h - получить позицию и размер курсора.
вход:
BH = номер страницы.
выход:
DH = строка.
DL = столбец.
CH = вершина курсора.
CL = основание курсора.
INT 10h /
AH = 05h - выбрать активную видео страницу.
вход:
AL = номер новой страницы (0..7).
активированная страница отображается.
INT 10h /
AH = 06h - прокрутка окна вверх.
INT 10h /
AH = 07h - прокрутка окна вниз.
вход:
AL = количество строк, которые должны быть прокручены (00h = полная очистка окна).
BH = атрибут, используемый для записи строки пробелов в нижней части окна.
CH, CL = строка, столбец - координаты верхнего левого угла окна.
DH, DL = строка, столбец - координаты нижнего правого угла окна.
INT 10h /
AH = 08h - прочитать символ и
атрибут с позиции курсора.
вход:
BH = номер страницы.
выход:
AH = атрибут.
AL = символ.
INT 10h /
AH = 09h - записать символ и
атрибут в позиции курсора.
вход:
AL = символ для вывода на экран.
BH = номер страницы.
BL = атрибут.
CX = сколько раз символ будет выведен на экран.
INT 10h /
AH = 0Ah - записать символ только в позицию курсора.
вход:
AL = символ для вывода на экран.
BH = номер страницы.
CX = сколько раз символ будет выведен на экран.
INT 10h /
AH = 0Eh - вывод в режиме телетайпа.
вход:
AL = символ для записи.
Эта функция отображает символ на экране, передвигает курсор и
прокручивает экран, если это необходимо. Печать всегда
выполняется на текущей видеостранице.
INT 10h /
AH = 13h - записать строку.
вход:
AL = режим записи:
bit 0: не изменять курсор после записи;
bit 1: строка содержит атрибуты.
BH = номер страницы.
BL = атрибут, если строка содержит только символы (бит 1 регистра AL - ноль).
CX = количество символов в строке (атрибуты не считаются).
DL,DH = столбец, строка - координаты, с которых начинается запись строки.
ES:BP указатель на строку, которая будет напечатана.
INT 10h /
AX = 1003h - выбрать интенсивность/мерцание.
вход:
BL = режим записи:
0: включить интенсивность (16 возможных цветов фона).
1: включить мерцание (не поддерживается эмулятором!).
BH = 0 (чтобы избежать проблем на некоторых адаптерах).
Таблица цветов:
Атрибут символа - это 8-ми битовое значение. Младшие четыре бита
представляют набор цветов переднего плана, а старшие 4 бита - цвета фона.
Мерцание цветов фона не поддерживается.
HEX BIN ЦВЕТ
0 0000 черный
1 0001 синий
2 0010 зеленый
3 0011 бирюзовый
4 0100 красный
5 0101 фиолетовый
6 0110 коричневый
7 0111 светло-серый
8 1000 темно-серый
9 1001 светло-синий
A 1010 светло-зеленый
B 1011 голубой (светло-бирюзовый)
C 1100 ярко-красный
D 1101 малиновый
E 1110 желтый
F 1111 белый
INT 11h - получить список оборудования BIOS.
выход:
AX = слово списка оборудования BIOS. Фактически
эта функция возвращает содержимое слова в 0040h:0010h.
В настоящее время эта функция может использоваться для
определения количества дисководов.
Описание битов для обнаруженного BIOS установленного оборудования:
Бит(ы) Описание
15-14 количество параллельных портов.
13 не поддерживается.
12 игровой прот установлен.
11-9 количество последовательных портов.
8 зарезервировано.
7-6 количество дисководов (минус 1):
00 один дисковод;
01 два дисковода;
10 три дисковода;
11 четыре дисковода.
5-4 видеорежимы:
00 EGA,VGA,PGA, или другой со встроенной видео BIOS;
01 40x25 CGA цвета;
10 80x25 CGA цвета (по умолчанию в эмуляторе);
11 80x25 монохромный текст.
3 не поддерживается.
2 не поддерживается.
1 математический сопроцессор установлен.
0 установлен, если дисковод может быть загрузочным (всегда установлен в эмуляторе).
INT 12h - получить размер памяти.
выход:
AX = килобайты смежной памяти,
начинающейся с абсолютного адреса 00000h.
Возвращает содержимое слова по адресу 0040h:0013h.
Дисководы эмулируются с помощью файлов FLOPPY_0(..3).
INT 13h /
AH = 00h - сброс дисковода (в настоящее время эта функция не работает).
INT 13h /
AH = 02h - прочитать сектор диска в память.
INT 13h /
AH = 03h - записать сектор на диск.
вход:
AL = количество секторов для чтения/записи (не должно быть нулем)
CH = номер цилиндра (0..79).
CL = номер сектора (1..18).
DH = номер головки (0..1).
DL = номер дисковода (0..3 , зависит от количества файлов FLOPPY_?).
ES:BX указатель на буфер данных.
выход:
CF устанавливается в случае ошибки.
CF очищен, если ошибок нет.
AH = состояние (0 - если все выполнено успешно).
AL = количество переданных секторов.
Примечание: каждый сектор имеет 512 байтов.
INT 15h /
AH = 86h - функция ожидания BIOS.
вход:
CX:DX = интервал в микросекундах
выход:
CF сброшен, если операция выполнена успешно (ждет окончания интервала),
CF установлен, если произошла ошибка или функция ожидания уже в работе.
Примечание:
на многих системах разрешение периода ожидания равно 977 микросекундам.
Emu8086 использует 1000-микросекундный период.
INT 16h /
AH = 00h - прочитать следующую нажатую клавишу (без эха).
выход:
AH = скан-код BIOS.
AL = ASCII-символ.
(если клавиша прочитана, она удаляется из буфера клавиатуры).
INT 16h /
AH = 01h - проверить готовность символа в буфере клавиатуры.
выход:
ZF = 1 если символ не готов.
ZF = 0 если символ готов.
AH = скан-код BIOS.
AL = ASCII-символ.
(если клавиша прочитана, она удаляется из буфера клавиатуры).
INT 19h - перезагрузка системы.
Обычно BIOS пытается прочитать сектор 1, головку 0, дорожку 0 с дисковода А: в 0000h:7C00h.
Эмулятор просто останавливает выполнение. Для загрузки
с дисковода выберите из меню:
'Virtual Drive' -> 'Boot from Floppy'
INT 1Ah /
AH = 00h - получить системное время.
выход:
CX:DX = количество тиков, начиная с полночи.
AL = 0, если таймер не переполнялся за 24 часа с момента сброса.
Примечания:
Часы обновляются приблизительно
18.20648 раз в секунду,
и
1800B0h за 24 часа.
AL еще не устанавливается эмулятором!
MS-DOS все-же не может полностью быть загружен в эмулятор,
поэтому я сделал эмуляцию для некоторых основных прерываний DOS:
INT 20h - выход в операционную систему.
INT 21h /
AH=09h - вывод строки из DS:DX.
INT 21h /
AH=0Ah - ввод строки в DS:DX, первый байт - размер буфера, второй байт - количество фактически прочитанных символов.
INT 21h /
AH=4Ch - выход в операционную систему.
INT 21h /
AH=01h - чтение символа из стандартного устройства ввода с эхом, результат записывается в AL.
INT 21h /
AH=02h - запись символа в стандартное устройство вывода, DL = символ для записи. После выполнения AL = DL.