10/21/94 07:51pm
prer_prg.lek
П.Нортон, Р.Уилтон "IBM PC и PS/2
руководство по
программированию" перевод
В.Н.Григорьева М "Радио и
связь" 1994
Программные прерывания.
Пользователь может "добраться" до устройства несколькими способами:
1 Используя знания адресов микросхем и формата данных, управлять устройством на самом низком уроане. Такие программы наиболее эффективны, но аппаратозависимы;
2 Можно использовать подпрограммы, находящиеся в ROM BIOS. В этом случае программый продукт потеряет зависимость от аппаратуры и будет независимым от операционной системы (останется только проблема загрузки и передачи управления, но она решается достаточно просто);
3 Еще один вариант - работа с функциями BIOS DOS. Такое решение максимально упрощает написание программ обслуживания устройств, но делает их зависимыми от используемой версии DOS и неинтересными с точки зрения системного программирования;
4 Последний вариант - использование библиотеки подпрограмм языка высокого уровня. Основной трудностью такого подхода является понимание описания работы используемых подпрограмм.
Прерывания ROM BIOS:
Все перечисленные выше уровни в конечном итоге работают через BIOS, поэтому применение других подходов является напрасной тратой времени машины но не программиста, вынужденного иметь дело с детальной информацией. Многие языки имеют возможноть обращаться к BIOS с целью написания более эффективных программ. Поскольку обращение к подпрограммам ПЗУ осуществляется через таблицу векторов имеется возможность подменять или дополнять функциональные возможности служб BIOS.
ROM BIOS имеет 12 точек входа. Каждая точка объединяет несколько логическисвязанных служб, имеющих номера. Все прерывания (точки входа) можно поделить на несколько групп:
1 Прерывания, обслуживающие конкретные устройства
10h ВИДЕОСИСТЕМА - управление видеорежимом, цветами, вывод символьной и графической информации, получение информации о состоянии видеосистемы;
13h ДИСКОВАЯ СИСТЕМА - работа дисковой памяти на уровне физической структуры носителя;
14h ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ - организация обмена через RS-232;
16h КЛАВИАТУРА - получение информации с клавиатуры и управление ею;
17h ПАРАЛЛЕЛЬНЫЙ ПОРТ - работа с устройством печати;
2 Прерывания, сообщающие информацию о конфигурации системы
11h - получить список периферийного оборудования,
12h - получить размер основной памяти;
3 Прерывание таймера
1Ah - чтение/запись в часы реального времени, управление будильником;
4 Прерывание печати экрана
05h - вывод содержимого текстового буфера экрана на устройство печати;
5 Прерывание специальных служб
18h - передать управление ROM Бейсику,
19h - перезагрузить компьютер;
6 Прочие прерывания
15h - работа с клавиатурой, интервальным таймером, джойстиком, режимы работы процессора, получение информации о BIOS, завершение прерывания.
При работе подпрограммы ROM BIOS используют регистры микропроцессора, через которые получают исходные данные и возвращают результат. В общем случае предпологается, что будет изменено состояние всех регистров. Особое внимание следует уделить размеру области памяти, отведенной под стек т.к. BIOS использует стек пользовательской программы и ее недостаточный размер может привести к разрушению системы.
"Традиционный" BIOS не может работать в защищенном режиме и не поддерживает многозадачный режим. Поэтому на машинах PS/2 моделей 50, 60, 80 установлен усовершенствованный интерфейс Advanced BIOS (ABIOS), свободный от указанных недостатков, но имеющий другой: большую сложность, связанную с особенностями защищенного режима. По этой причине ABIOS прикладными программами обычно не используется.
Прерывания DOS:
Помимо прерываний ROM BIOS программе пользоваателя доступны прерывания DOS. Эти прерывания в основном направлены на организацию вычислительного процесса и работа с устройствами рассматривается прежде всего с этой точки зрения.
За DOS зарезервированны прерывания 20h..3Fh, используется только 10. По мере появления новых версий DOS набор прерываний претерпевает серьезные изменения, хотя совместимость "снизу вверх" поддерживается.
Имеется 10 точек входа в прерывания DOS:
20h ЗАВЕРШЕНИЕ ПРОГРАММЫ - указывает DOS что работа программы завершена;
21h ОБЩИЕ СЛУЖБЫ DOS - обслуживание программы, работа с клавиатурой, видеосистемой, файловой системой и файлами, прерываниями,часами;
22h АДРЕС ЗАВЕРШЕНИЯ - используется для хранения адреса точки входа DOS при завершении работы программы. Используется только ОС;
23h АДРЕС ОДРАБОТЧИКА Ctrl-C - указывает на программу обработки нажатия соответствующей клавиши;
24h АДРЕС ОБРАБОТЧИКА КРИТИЧЕСКИХ ОШИБОК - реагирует на обнаруженные ошибки при работе DOS во время работы с устройствами. Перед обращением формируется блок параметров, после обработки должен быть возвращен параметр бальнейших действий дле ОС (игнорировать, повторить, отменить, выйти из программы);
25h ЧТЕНИЕ ДИСКА В АБСОЛЮТНЫХ АДРЕСАХ - чтение информации без учета физической структуры данных на носителе. Все необходимые вычисления производятся соответствующей службой;
26h ЗАПИСЬ ДИСКА В АБСОЛЮТНЫХ АДРЕСАХ - операция противоположная чтению;
27h ЗАВЕРШИТЬ И ОСТАТЬСЯ РЕЗИДЕНТНЫМ - завершение программы без удаления ее из памяти. Резидентная программа может периодически получать управление через систему прерываний;
28h ПРЕРЫВАНИЕ ОЖИДАНИЯ СИСТЕМЫ DOS - используется внутри других служб, ожидая завершения инициированной операции;
2Fh МУЛЬТИПЛЕКСНОЕ ПРЕРЫВАНИЕ - предназначено для организации связи с резидентными программами. Организовывает очередь на устройство печати.
Работа со службами DOS требует меньших знаний о физической организации устройств и вычислительной системы. Но все эти службы используются только в конкретной ОС. В свою очередь службы ROM BIOS не зависят от установленной системы, что делает их более привлекательными для изучения.