- •1. Структура и принципы работы ms-dos
- •1.1. Основные компоненты операционной системы
- •Msdos.Sys
- •Command.Com
- •Config.Sys
- •Autoexec.Bat
- •Wina20.386
- •Драйверы
- •Внешние команды
- •Подготовка системной дискеты
- •Программа fdisk
- •Резидентные программы
- •1.2. Процесс загрузки операционной системы
- •1.3. Состав и общая схема работы ms-dos
- •Файловая система
- •Система управления памятью
- •Система управления программами
- •Система связи с драйверами устройств
- •Система обработки ошибок
- •Служба времени
- •Работа с консолью оператора
- •Другие системы ms-dos
- •1.4. Обзор прерываний bios
- •Определение конфигурации компьютера
- •Определение объема оперативной памяти
- •Работа с видеоконтроллером
- •Выбрать видеорежим (00h)
- •Установить размеры и форму курсора (01h)
- •Свернуть окно (06h, 07h)
- •Работа с клавиатурой
- •Обслуживание дисковой подсистемы
- •Перезагрузка операционной системы
- •Системный сервис для машин класса at
- •1.5. Обзор прерываний ms-dos
- •Получение системной информации
- •Символьный ввод и вывод
- •Работа с файловой системой
- •Управление программами
- •Управление памятью
- •Связь с драйверами устройств
- •Другие функции
- •1.6. Обработка ошибок
- •1.7. Вызов прерываний ms-dos
- •1.8. Программа errcode
- •1.9. Переменная errno
- •1.10. Программа errno
Определение конфигурации компьютера
Прежде чем пытаться работать с каким-либо периферийным устройством, следует убедиться в том, что оно есть в компьютере. В процессе инициализации тестовые модули, расположенные в BIOS, определяют конфигурацию компьютера и записывают соответствующие значения в специально отведенную для этого ячейку памяти.
Для определения конфигурации компьютера программа может вызвать прерывание INT 11h. При этом она получает в регистре AX содержимое указанной выше ячейки памяти, имеющей размер в одно слово. Каждый бит в слове конфигурации отвечает за соответствующее устройство.
Анализируя слово конфигурации, программа может узнать, подключены ли к компьютеру накопители на гибких магнитных дисках (НГМД) и, если подключены, то сколько их имеется в наличии. Можно определить начальный режим видеоконтроллера, выяснить, присутствует ли арифметический сопроцессор, сколько в системе установлено параллельных и последовательных портов, подключен ли игровой адаптер (джойстик).
Обычно программа не работает сама с аппаратурой, а пользуется услугами операционной системы. При обращении к стандартной аппаратуре через операционную систему программа получит признак ошибки, если соответствующее устройство отсутствует.
Программы, составленные на языках высокого уровня, таких как С или Pascal, могут в случае отсутствия арифметического сопроцессора использовать модули эмуляции. Операции сопроцессора эмулируются центральным процессором и программа просто работает медленнее.
Но если программа обращается непосредственно к портам отсутствующего устройства, это может привести к непредсказуемым последствиям.
Определение объема оперативной памяти
Сказанное выше справедливо и по отношению к оперативной памяти. Для работы некоторых программ требуется достаточное количество памяти. Прерывание INT 12h возвращает в регистре AX количество имеющихся блоков памяти размером в один килобайт. Анализируя эту величину, программы могут при недостатке памяти либо вывести на экран соответствующее сообщение и отказаться от работы, либо изменить алгоритмы работы, организовав, например, виртуальную память на диске или просто записывая в файл промежуточные результаты.
Если ваш компьютер оборудован расширенной памятью (адресное пространство расширенной памяти находится выше границы в 1 мегабайт), размер этой памяти в килобайтах можно узнать, вызвав прерывание INT 15h со значением регистра AX, равным 8800h.
Однако будьте осторожны - при использовании драйвера himem.sys операционная система MS-DOS резервирует для себя всю расширенную память. Несмотря на то что объем свободной расширенной оперативной памяти, определенный с помощью прерывания INT 15h, будет при этом равным нулю, программа все же сможет заказать себе блоки в такой памяти. Для этого следует воспользоваться программным интерфейсом драйвера himem.sys.
Работа с видеоконтроллером
Прерывание INT 10h выполняет все многочисленные операции по обслуживанию видеоконтроллера.
При вызове прерывания INT 10h, как и при вызове многих других прерываний, регистр AH содержит номер функции, которую требуется выполнить. Остальные регистры содержат дополнительные параметры.
Программирование видеоконтроллера - сложная задача. Функции, выполняемые прерыванием INT 10h слишком обширны даже для простого перечисления. Поэтому мы приведем краткий обзор только некоторых из этих функций.