|
|
|
|
Создание и установка резидентных программ (TSR) является широко используемым средством, но его функционирование остается скрытым от большинства
пользователей. Архитектура MS-DOS и аппаратные средства PC налагают ограничения на возможности TSR и условия их осуществления. Некоторые из этих
ограничений проявляются только тогда, когда TSR выводятся на экран или запрашивают базовую систему ввода-вывода (BIOS) с прерыванием программ
обслуживания; другие требуют внимания при установке TSR.
Эта глава описывает работу TSR. Вы будете ознакомлены с обслуживанием (документированным и нет), которое обеспечивает DOS, и со взаимодействием TSR
с DOS. Вы будете также ознакомлены с несколькими техническими решениями автора относительно TSR. Но вначале несколько слов
предупреждения.
Многие материалы, использованные в этом описании не документированы, а получены реассемблированием PC-DOS версии 3.10. Многие обсуждаемые здесь
программы не доступны в версиях PC-DOS ниже 3.00, и нет гарантий, что они будут представлены в следующих версиях DOS. Многие особенности характерны для
программного обеспечения PC-DOS 3.10, которое их использует, и не могут быть перенесены в другие выпуски DOS, но могут быть использованы в будущем.
Это делает возможным конфликты между различными существующими TSR (включая представленные здесь примеры). Степень этих конфликтов может находиться в
диапазоне от досадных до катастрофических. Наиболее серьезные из них могут привести к потере данных или порче диска.
Дополнительно в этой главе описывается программирование контроллера CRT 6845, который поддеpживает монохромный и цветной дисплейные адаптеры
(MDA и CGA). Ошибки в программировании этого устройства могут привести к серьезному повреждению Вашей системы.
Обзор
Резидентные программы становятся повсеместными. Они доступны как коммерческие программы, совместно используемые средства и даже как часть MS-DOS.
Sidekick (боковой удар) Борланда является, вероятно, наиболее известным коммерческим предложением. Команды PRINT и ASSIGN и несколько других утилит
DOS также являются резидентными.
Все резидентные программы начинают жизнь, как обычные программы. После выполнения такой программы часть ее кода остается в памяти. Код, который
выполняется при первом обращении, называется кодом инициализации, а тот, который остается после, известен как резидентный код. Основной задачей кода
инициализации является подготовка резидентного кода для дальнейшего использования. Возможности кода инициализации не ограничены, но программирование
резидентного кода может быть сложным.
Резидентные программы могут быть сгруппированы в три категории на основе того, что их резидентный код делает. Члены первой группы не обеспечивают
взаимодействия пользователя с их резидентной частью. Однажды загруженные, они остаются фоновыми, выполняя свои задачи без обращения к базовой системе
ввода-вывода (BIOS).Команда DOS ASSIGN является одним из таких резидентов; ее резидентная часть обеспечивает доступ и переназначает запрошенный диск с
одного драйвера на другой. Подробное документирование и многочисленные примеры делают написание этого типа резидентных программ несложной задачей.
Члены второй группы резидентных программ остаются приостановленными до выдачи специального запроса пользователя. Обычно этот запрос производиться
нажатием функциональной клавиши или комбинацией функциональной клавиши с другими (например, Alt-Shift), причем функциональная клавиша нажимается
последней. С другой стороны, их резидентный код не делает запросов к базовой системе ввода-вывода; они должны обслуживаться командами DOS, такими, как
чтение и запись, только во время инициализации.
Небольшая резидентная телефонная база данных попадает в эту группу. Код инициализации считывает полное ее оглавление в память. В ответ на нажатие
функциональной клавиши резидентный код должен сохранить текущий экран, получить одно или больше имен, найти ассоциированные с ними номера телефонов и
отобразить результаты поиска. Когда имен больше нет, резидент должен восстановить начальный экран и выключиться.
Обслуживание, необходимое для таких TSR, достаточно хорошо документировано, но есть несколько технических решений относительно распределения
используемых клавиш и связи с аппаратными средствами отображения.
Последняя группа резидентных программ осуществляет асинхронные запросы к базовой системе ввода-вывода. Эти программы запускаются нажатием
функциональной клавиши или каким-либо другим программным прерыванием от аппаратных средств, (например, таймером). Этот резидентный код не обязательно
имеет связь с пользователем. К этой категории относится утилита DOS PRINT. Эти резидентные программы трудны для написания, потому что DOS в основном
является однопользовательской/однопрограммной системой. Майкрософт имеет средство отладки для таких программ, но оно не документировано и для
правильного использования требует нестандартных соглашений DOS .
Перед тем, как начать писать резидентную программу, Вам будет нужна некоторая дополнительная информация. Например, для поддержки "горячих"
функциональных клавиш, Вы должны знать,как работает клавиатура и дисплей. Или,например, архитектура программного обеспечения DOS налагает некоторые
реальные ограничения на то, что могут делать резидентные программы; Вы должны знать о работающих в версии DOS модулях, которые воздействуют на TSR.
Раз Вы понимаете работу аппаратуры и механизм операционной системы, Вы должны быть готовы изучить, что TSR требует при своей инициализации и
реактивации. И, наконец, Вы узнаете,как писать TSR, которая выполняется в фоновом разделе.
|
|