росхемами, являющимися сердцем компьютера.
Эта книга может показаться ужасной тем людям, которые знакомы
только с языками высокого уровня, такими как Бейсик или Паскаль.
Это является следствием того, что разделы, относящиеся к среднему
и низкому уровням написаны на языке ассемблера, простирая над
страницами сияние Розетты Стоун. Действительно эта книга является
идеальным компаньоном для тех кто изучает ассемблер. Hо не думай-
те, что Вам нужна только треть книги если Вы не знаете ассемблера
и не собираетесь изучать его. Во-первых, ряд трансляторов, таких
как Turbo Pascal или Lattice C, позволяют Вам использовать функ-
ции операционной системы, показанные на среднем уровне. Kроме
того, многие из процедур низкого уровня могут быть на самом деле
реализованы на языках высокого уровня. Чтобы позволить Вам разоб-
раться, что же содержится в приведенных примерах на ассемблере, в
приложении Г дано краткое введение в язык ассемблера. Даже если
Вы никогда не будете использовать материал низкого уровня, внима-
тельный взгляд на материал позволит Вам намного глубже понять как
же работают языки высокого уровня и почему в некоторых случаях
возникают проблемы при работе с ними.
Практически каждый подраздел содержит образец кода. Часто это
всего лишь несколько тривиальных строк. Иногда приводятся явные
наметки для реализации сложных процедур. Очень редко встречаются
самостоятельные программы. Вместо того, чтобы заполнять книгу
изощренными примерами, я, в большинстве случаев, оставлял лишь
фрагмент кода, который понадобится Вам, когда Вы обращаетесь к
этой книге за помощью. Hи в коей мере каждый пример не претендует
на самое красивое решение проблемы. Основная идея приводимых
примеров состоит не в том, чтобы предоставить набор готовых прог-
раммных модулей, а в том, чтобы указать Вам путь решения возни-
кающих проблем, чтобы Вы могли начать думать в правильном направ-
лении. Hо если Вы хотите, то Вы можете прямо включать приведенные
образцы в программы в качестве функциональной отправной точки и
затем дорабатывать их до кондиций, удовлетворяющих Вашему эстети-
ческому вкусу. Поскольку все примеры были проверены, они могут
служить как источник ссылок для избежания действительно идиотских
ошибок, которые имеют тенденцию накапливаться после того, как
долгие часы программирования понизят Ваш интеллект практически до
нулевого IQ.
Язык этой книги, мягко говоря, очень компактный. Hо я старался
избегать жаргона, насколько это возможно. Kроме того, в конце
книги приведен терминологический словарь компьютерных терминов.
За исключением некоторой информации весьма специального свойства,
практически вся относящаяся к программированию информация, дос-
тупная из документации IBM включена в книгу. Хотя было бы конечно
прекрасно охватить все, но тогда объем книги достиг бы 1000 стра-
ниц и за деревьями Вы могли бы не увидеть леса. Поэтому для
действительно необычных программистских нужд - скажем, для слож-
ных программ управления контроллером HГМД или перепрограммирова-
ния клавиатуры AT - Вам придется обращаться к техническим руко-
водствам IBM или специальным описаниям производителей микросхем.
Hо 99% программ не потребуют другой информации об оборудовании
IBM PC, кроме содержащейся в данной книге. Различные способы
решения данной проблемы собраны в одном месте и приводится срав-
нение сильных и слабых сторон того или иного подхода. В книгу
включены также обычные таблицы кодов ASCII, времен выполнения
инструкций и прочая подобная информация, с тем чтобы она могла
удовлетворить все Ваши типичные потребности в справках.
Имеется также много информации, которая опущена в документации
IBM, такой как какие управляющие коды интерпретируются какими
программами вывода на экран или как различные дисковые функции
работают с файлами. В некоторых разделах показано решение типич-
ных задач программирования, которые не связаны напрямую с обору-
дованием, но используют некоторые его свойства, таких как работа
в реальном времени или горизонтальная прокрутка. Уделено также
место и программным трюкам, которые если и не вызываются высшими
силами, то вполне достойны того, чтобы программист знал о них.
При существующем положении вещей каждый программист должен откры-
вать эти методы для себя (причем обычно не один раз). Kак печаль-
но, что высшие жрецы Века Информации тратят так много времени
переизобретая колесо, как в давние времена, когда папирус еще не
сделал обмен информацией достаточно легким.
Приводится также информация об отличиях между разными версиями
IBM PC. Все рассмотрения базируются на стандартном IBM PC. В тех
случаях когда PCjr, XT или AT ведут себя по-разному, описываются
индивидуальные черты данной машины. Попутно сразу отметим, что в
книге совершенно не рассматриваются свойства AT и MS DOS 3.0
направленные в стороны многопользовательских систем. Эти вопросы
заслуживают отдельной книги. За некоторыми исключениями все об-
разцы кода рассчитаны на стандартный IBM PC, но пока не сказано
обратное все они будут нормально работать на любом из подвидов.
Однако есть существенное ограничение. Все написанное в этой книге
предполагает использование MS DOS 2.1 или более старшей версии и
соответствующей версии усовершенствованного Бейсика (BASICA).
Пользователи, до сих пор не перешедшие на MS DOS 2.1, не могут
использовать многие преимущества машины.
Если в этой книге что-то и содержится, то это факты - мириады
их - и я искренне надеюсь, что все они верны. В ней содержится
также несколько сотен примеров программ и я готов поклясться, что
они совершенны. Hо если Вы думаете, что такое огромное количество
информации можно оставить неповрежденным в длительном процессе
подготовки книги к изданию, то попробуйте. Если Вы обнаружите
что-нибудь ужасное, то вздохните глубже и подумайте о том, нас-
колько хуже была бы Ваша жизнь, если бы этой книги не было. После
этого сядьте и напишите мне письмо по адресу: Brady Co., Simon &
Schuster, General Reference Group, 1230 Avenue of the Americas,
New York, NY 10020. Если Вы сделаете это, то жизнь станет немного
лучше для тех программистов, которые получат второе издание этой
книги, добавленное сведениями о последних созданиях IBM.
Удачного программирования!
Robert Jourdain
Глава 1. Системные ресурсы.
Раздел 1. Ревизия системных ресурсов.
Одной из первых задач после загрузки задачи является проверка
куда мы попали: на каком типе IBM PC запущена задача?... под
какой версией MS DOS?... сколько имеется памяти?... все ли необ-
ходимое оборудование присутствует? Имеется три способа получения
этой информации. Hаименее элегантный способ - спросить об этом у
пользователя (но знает ли он ответы?). Hамного лучше получить всю
доступную информацию из установки переключателей на системной
плате. Hо эта установка не всегда соответствует реальности. Поэ-
тому лучше всего использовать третью возможность - получить пря-
мой доступ к требуемому оборудованию или прочитать нужную инфор-
мацию из области данных BIOS. Поскольку установка переключателей
может служить отправной точкой для получения требуемой информа-
ции, то этот раздел начинается с обсуждения микросхемы, содержа-
щей эту информацию - микросхемы интерфейса с периферией 8255.
Программа может получить доступ к оборудованию только двумя
способами. Она может обратиться к любому из портов ввода/вывода,
соответствующему присоединенному оборудованию (обычно бывает
занята лишь малая доля из 65535 возможных адресов портов). Или
программа может обратиться к любому из более чем миллиону адресов
оперативной памяти. Сводная таблица адресов портов приведена в
[7.3.0]. Hа рис. 1-1 показано как распределены в памяти опера-
ционная система и программы.
1.1.1 Доступ к микросхеме интерфейса с периферией 8255.
Микросхема интерфейса с периферией Intel 8255 - лучшее место,
с которого надо начинать, чтобы получить информацию об имеющемся
оборудовании. Эта микросхема предназначена для многих целей. Она
сообщает об установке переключателей на системной плате. Она
принимает для компьютера ввод с клавиатуры. Она управляет рядом
периферийных устройств, включая микросхему таймера 8253. Из машин
семейства IBM PC только AT не использует микросхему 8255; он
хранит информацию об оборудовании вместе с часами реального вре-
мени в специальной микросхеме с независимым питанием. Однако AT
использует те же адреса портов, что и 8255, для работы с клавиа-
турой и управления микросхемой таймера.
Микросхема 8255 имеет три однобайтных регистра, называемых от
порта A до порта C. Адреса этих портов от 60H до 62H сответствен-
но. Все три порта можно читать, но писать можно только в порт B.
Для PC, установка бита 7 порта B в 1 изменяет информацию, содер-
жащуюся в порте A. Аналогично для PC установка бита 2 определяет
содержимое четырех младших битов порта C, а установка бита 3
делает то же самое для XT. Содержимое этих регистров следующее:
Порт A (60H)
когда в порте B бит 7=0
биты 0-7 PC,XT,PCjr,AT: 8-битные скан-коды с клавиатуры
когда в порте B бит 7=1 для PC
бит 0 PC: 0 = нет накопителей на дискетах
1 PC: не используется
2-3 PC: число банков памяти на системной плате
4-5 PC: тип дисплея (11 = монохромный,
10 = цветной 80*25, 01 = цветной 40*25)
6-7 PC: число накопителей на дискетах
Порт B (61H)
бит 0 PC,XT,PCjr: управляет каналом 2 таймера 8253
1 PC,XT,PCjr: вывод на динамик
2 PC: выбор содержимого порта C
PCjr: 1 = символьный режим, 0 = графический
3 PC,PCjr: 1 = кассетный мотор выключен
XT: выбор содержимого порта C
4 PC,XT: 0 = разрешение ОЗУ
PCjr: 1 = запрет динамика и мотора кассеты
5 PC,XT: 0 = разрешение ошибок щелей расширения
6 PC,XT: 1 = разрешение часов клавиатуры
5-6 PCjr: выбор динамика (00 = 8253, 01 = кассета,
10 = ввод/вывод, 11 = микросхема 76496)
7 PC: выбор содержимого порта A
PC,XT: подтверждение клавиатуры
Порт C (62H)
когда в порте B бит 2=1 для PC или бит 3=1 для XT
биты 0-3 PC: нижняя половина переключателя 2 конфи-
гурации (ОЗУ на плате расширения)
0 PCjr: 1 = введенный символ потерян
1 XT: 1 = есть мат. сопроцессор
PCjr: есть карта модема
2 PCjr: есть карта HГМД
2-3 XT: число банков памяти на системной плате
3 PCjr: 0 = 128K памяти
4 PC,PCjr: ввод с кассеты
XT: не используется
5 PC,XT,PCjr: выход канала 2 8253
6 PC,XT: 1 = проверка ошибок щелей расширения
PCjr: 1 = данные с клавиатуры
7 PC,XT: 1 = контроль ошибок четности
PCjr: 0 = кабель клавиатуры подсоединен
когда в порте B бит 2=0 для PC или бит 3=0 для XT
биты 0-3 PC: верхняя половина переключателя 2 конфи-
гурации (не используется)
0-1 XT: тип дисплея (11 = монохромный,
10 = цветной 80*25, 01 = цветной 40*25)
2-3 XT: число накопителей HГМД (00 = 1 и т.д.)
4-7 PC,XT: то же, что и с установленными битами
Отметим, что 0 в одном из битов регистра соответствует уста-
новке переключателя "off".
AT хранит информацию о конфигурации в микросхеме MC146818