В настоящее время можно найти уже довольно много книг, посвященных операционной системе MS-DOS. Большинство из них, однако, ограничиваются описанием MS-DOS на уровне пользователя или, в крайнем случае, на уровне прикладного программиста, не затрагивая деталей и тонкостей работы самой операционной системы. Этот подход, безусловно, правомерен и оправдан - пользователей ПЭВМ гораздо больше, чем системных программистов, а более глубокая информация предоставляется в руководствах, поставляемых фирмами и специальных заказных пособиях.
И все же потребность в, казалось бы, специальной информации у нас огромна. Наш программист часто оказывается в очень сложной ситуации: не имея доступа к зарубежной оригинальной литературе, он вынужден разрабатывать специальное программное обеспечение, написание которого требует глубокого знания операционной системы MS-DOS и аппаратных особенностей IBM PC. Можно с уверенностью сказать, что в условиях информационного голода, отсутствия фирменного технического обслуживания и необходимости обеспечения работы самой экзотической аппаратуры каждый прикладной программист вынужден быть немножко системным программистом, знать и уметь больше, чем его западный коллега.
Как известно, спрос рождает предложение, и уже сейчас появились книги под названием "Системное программирование в MS-DOS", в которых описываются, как правило, прерывания MS-DOS и приводятся примеры работы с ними. Такой подход нам кажется полезным только на начальном этапе изучения программирования в MS-DOS.
При написании настоящей книги авторы предполагали, что с прерываниями DOS и BIOS вы уже знакомы достаточно хорошо, либо способны разобраться самостоятельно - для этого существуют как специальные справочные системы типа TechHelp (которая сейчас имеется и на русском языке) или NortonGuide, так и контекстные справочники, являющиеся элементом интегрированных сред программирования (например, QuickAdvisor корпорации Microsoft или справочная система Thelp фирмы Borland International).
Авторы настоящего руководства стремились прежде всего осветить те вопросы, которые практически невозможно найти нигде, кроме как в документации, поставляемой фирмами. В соответствии с этим общеизвестные вещи изложены более кратко. В книге описана, например, структура управляющих блоков MS-DOS, показано, как написать собственный драйвер устройства или правильно работающую резидентную программу. Книга рассчитана на хорошего прикладного программиста, имеющего в своем распоряжении широко распространенную справочную информацию по MS-DOS, который, однако, пришел к необходимости еще более углубить свои знания.
Предполагается, что у вас имеется в распоряжении компьютер, на котором вы в процессе изучения книги можете опробовать приводимые нами примеры и проводить свои собственные исследования.
Все программы транслировались в среде Microsoft Quick C версий 2.01 и 2.5. На прилагаемой дискете находятся исходные тексты программ и некоторые утилиты, описанные в настоящем руководстве. Примеры составлены так, чтобы вы могли без значительных переделок использовать их в своих разработках.
Для тех, кто уже исчерпал документированные особенности MS-DOS, приводятся сведения о наиболее полезных недокументированных прерываниях и управляющих блоках MS-DOS. Изучение недокументированных прерываний и структур данных позволит вам глубже понять внутреннее устройство операционной системы, извлечь такую информацию о состоянии системы, которую трудно, если вообще возможно, получить "законным" способом.
Объем информации настолько огромен, что наше руководство разделено на несколько частей.
Первый том серии содержит сведения об операционной системе MS-DOS, прерываниях, драйверах, резидентных программах, файловой системе MS-DOS. Основное внимание при этом уделяется не таким общеизвестным вещам, как, например, запись/чтение файлов (хотя об этом тоже будет рассказано), а скорее описанию того, как MS-DOS выполняет эти операции, какие внутренние структуры данных она при этом использует и каким образом происходит взаимодействие DOS и прикладной программы пользователя.
На основе анализа управляющих блоков DOS вы сможете проанализировать состояние операционной системы, определить конфигурацию логических дисковых устройств, получить доступ к загружаемым (устанавливаемым) драйверам, в том числе к резидентным драйверам операционной системы. Вы научитесь переопределять прерывания DOS, составлять "выскакивающие" ("POP-UP") программы, которые, оставаясь резидентными в памяти после запуска, "оживают" при нажатии на клавишу, определенную заранее. Знание внутренней "кухни" файловой системы позволит вам при необходимости выполнять все файловые операции самостоятельно, без помощи DOS, пользуясь только прерыванием BIOS INT 13H для непосредственной работы с диском (такая работа в обход DOS может потребоваться, например, для организации защиты данных от несанкционированного доступа).
Второй том посвящен в большей степени аппаратному обеспечению компьютера. Здесь описаны клавиатура, мышь, таймер, контроллеры прерываний и прямого доступа к памяти, принтер, расширенная и дополнительная память. Приведены сведения о внутреннем устройстве клавиатуры, портах, средствах DOS и BIOS для работы с клавиатурой - т.е. все, что необходимо для полного использования возможностей клавиатуры. Для мыши приводится большое число примеров программ, которые вы можете использовать в своих разработках.
Подробно описаны порты принтера, средства DOS и BIOS для работы с принтером, а также система принтерного спулинга (печать в фоновом режиме). Рассматриваются вопросы русификации принтеров и управления принтером, поддерживающим протокол фирмы Epson.
Третий том - это описание дисплейных адаптеров. Рассмотрены адаптеры CGA, EGA и VGA. Описаны видеорежимы, средства DOS и BIOS для управления адаптерами и вывода текстовой и графической информации, способы загрузки знакогенератора адаптера EGA, а также описываются основные возможности графической библиотеки Microsoft Quick C 2.5.
Приведены рекомендации по отладке программ с использованием этих средств, по отладке программ специального типа (например, драйверов), а также основные приемы, используемые для защиты программ от отладки.
Как пользоваться книгой?
Можно просто читать ее, изучая приводимые примеры программ и тут же проверяя их работу на компьютере. Все сведения излагаются последовательно, поэтому вы сразу можете садиться за компьютер и начинать работать. Если вас интересует что-то конкретное, например, драйверы, вы можете начать сразу с соответствующей главы.
При необходимости книгами серии можно пользоваться как справочниками: все наиболее полезные таблицы вынесены в приложения.
Прилагаемая к книге дискета содержит не только исходные тексты примеров программ, но и готовые библиотеки объектных модулей для всех моделей памяти, а также справочную базу данных по этим модулям. Базу данных можно подключить к справочной базе интегрированной среды Quick C или использовать отдельно при помощи утилиты Microsoft Quick Help QH.EXE.
Все необходимые сведения об использовании содержимого дискеты приведены в файле README.DOC.
Каков начальный уровень знаний, необходимых для работы с серией? Предполагается, что вы свободно владеете языками ассемблера и Си (хотя в некоторых случаях приводятся необходимые пояснения), умеете пользоваться стандартными прерываниями BIOS и DOS, знакомы в целом с архитектурой компьютера и имеете некоторый опыт составления программ.
Первый раздел книги напомнит вам о составе операционной системы, процессе ее загрузки и об общей схеме работы. Раздел также содержит обзор прерываний DOS и BIOS, сведения о механизме обработки ошибок. Если вы владеете этим материалом, можете пропустить первый раздел.
Для работы вы можете использовать любой совместимый с IBM PC/XT/AT компьютер с любым дисплейным адаптером. Однако при изучении дисплейных адаптеров EGA и VGA вам будет нужен соответственно адаптер EGA или VGA. Желательно, чтобы компьютер был оснащен жестким диском (на машине, например, ЕС-1840, вам будет очень трудно работать). Наличие жесткого диска обязательно для изучения глав, посвященных файловой системе. Для изучения мыши вам следует приобрести это устройство.
Все программы, приведенные в книге, подготовлены для Microsoft Quick C или Microsoft C 6.0. Не исключено, что вы сможете использовать Turbo-C фирмы Borland, если приведете программы в соответствие со стандартами Turbo-C.
Программы, составленные на языке Ассемблера, транслировались при помощи программы Quick Assembler, входящей в состав интегрированной среды Quick C 2.01. Возможно также использование ассемблера MASM версии 5.0 или более поздней версии, программы Turbo-Assembler фирмы Borland с учетом приведенных выше замечаний.
Еще одно замечание, перед тем, как вы начнете изучение книги по системному программированию.
Системное программирование - это, исходя из названия, программирование системных задач, создание операционных систем или отдельных компонент операционных систем, таких, например, как драйверы внешних устройств.
В отличие от прикладного программиста, системный программист должен в одинаковой степени владеть и программным, и аппаратным обеспечением компьютера. Если прикладной программист, как правило, не работает напрямую с аппаратурой, пользуясь сервисом операционной системы, то одна из основных задач системного программиста - организация обслуживания устройств ввода/вывода.
Поэтому книга содержит в себе две равноценные по объему части, посвященные операционной системе и аппаратному обеспечению компьютера.
Однако при создании драйвера устройства вам следует ориентироваться прежде всего на фирменное техническое описание устройства - только там приводятся все технические подробности, без учета которых Ваш драйвер не будет правильно работать.
Очень осторожно следует использовать
недокументированные средства операционной
системы, может получиться так, что в другой
версии операционной системы Ваша отлаженная
программа будет делать совсем не то, для чего она
предназначена.