Обработка прерываний в MS DOS.
Вывод на экран в консольном приложении.
Прямая работа с видео памятью.
Функции видео BIOS.
Видео страницы (дисплейные страницы).
В текстовом режиме размер видеобуфера > размера 1 экрана.
80х25 4кбайта 4 страницы.
40х25 2кбайта 8 страниц.
Поэтому в функциях видеобиос надо указать на какой странице находится выход.
Представить ч/з прерывание INT 10h.
AH=0 (№ фун-ии) установить видео режим.
В AL=№ режима.
0,1-16 цвет.текст 40х25.
2,3-16 цвет.текст 80х25.
В современных ПК поддерживается текстовый режимы VESA BIOS Extention, то АН=4FH, AL=02h.
№ видеорежима задается в рг ВХ. ВХ=№ режима.
108h 80x60.
109h 132x25.
10Ah 132x43.
10Bh 132x50.
10Ch 132x60.
Другие полезные функции:
АН=2-установить позицию курсора.
ВН-страница
DН-строка.
ВL-столбец.
АН=3 – получить позицию курсора.
АН=5 – установить активную видеостраницу, т.е. ту страницу, которая отображается на экране.
AL=номер страницы.
Вывести символ в текущую позицию курсора:
1. AH=09h – с атрибутом=BL.
2. AH=0Ah – без атрибута (BL не найден).
3. AH=0Eh – в режиме телетайпа.
AL=символ. BH=страница.
В рг СХ для 1,2 записывается кол-во повторений символа.
Для 1,2 курсор не перемещается!
AH=0Fh – получить видео режим.
Выход: AL-видеорежим.
ВН-актив.видео страница.
АН-число столбцов символов на экране.
AH=11h – загрузка шрифтов.
AL=00h.
Для текстов видео режимов, кроме 7, видео память распологается в области начиная с адреса 0В800h:0000h. Поэтому в MS DOS любая программа может выводить на экран простой командой пересылки данных не прибегая к функциям DOS и BIOS.
На ПК обычно бывает 0 видеостран., т.е. сегмент В800 соответствует левой верхней точке экрана. Номерование столбцов идет слева направо, сверху вниз.
WriteConsoleA – вывод начинается с текущей позиции курсора с текущего атрибута.
SetConsoleCursorPosition – установить курсор на задан.позицию.
SetConsoleTextAttribute – установить атрибут для текста.
Собственный обработчик прерываний среды MS DOS пишется в след.случаях:
1. чтобы заменить стандартный обработчик (в особых случаях ошибок при выполнении программы) – деление на 0.
2. чтобы заменить стандартный обработчик MS DOS для опред.ситуаций – обработ.по Ctrl+c.
3. чтобы связать свой обработчик прерывания со стандартным обраб. и выполнить, как системный, так и собственный – прерывание от таймера.
4. чтобы обеспечить связь программы, которая остает.резидентной после завершения с другими прикладными программ.
5. чтобы обслужить прерывание не поддерживаясь стандарт.драйверами устр. MS DOS.
Для установки корректных обраб.прерываний. чтобы они не вступали в конфликт с другими, MS DOS пред-ет спец.средства – ч/з прерывание int 21h.
25h – устан.собствен.обработчик прер-я.
35h – получить указ-ль прер-я, известный системе в настоящ.время
31h – завершение программ.и остав.резидент-й.
Int 27h - завершение программ.и остав.резидентй.
Проблемы, возникающие при установке программы в резидент:
1. надо сохранить адрес старшего обработ.прер-ий.
2. проверить не находится ли наша программа в резиденте.
3. установить новые адреса обработ.прерываний.
Для определения наличия программы в памяти используются след.способы:
1. применение незадействен.прерывания или несуществен.ф-ии какого-либо прерывания.
2. с помощью мультиплексного прерывания INT 2FH, которая предназначена для взаимодействия DOS с резидент.програм.
3. применеие спецификации AMIS-альтер.спец.мультипл.прер-я – ч/з прер-е INT 20h.