Жанр: Учеба
Справочник программиста на IBM PC
Справочник программиста
на персональном компьютере
фирмы IBM.
Роберт Журден
Оглавление.
Введение 5
Соглашения о числах, принятые в этой книге. 5
Введение 6
Доступ к микросхеме интерфейса с периферией 8255. 11
Определение типа IBM PC. 13
Определение версии MS DOS. 14
Определение числа и типов адаптеров дисплея. 14
Определение числа и типа дисковых накопителей. 16
Определение числа и типа периферийных устройств. 17
Ревизия количества памяти. 18
Программирование контроллера прерываний 8259. 22
Запрет/разрешение отдельных аппаратных прерываний. 22
Написание собственного прерывания. 23
Дополнение к существующему прерыванию. 26
Манипуляции с памятью. 27
Запуск одной программы из другой. 29
Использование команд интерфейса с пользователем из 31
программы.
Сохранение программы в памяти после завершения. 32
Загрузка и запуск программных оверлеев. 34
Преобразование программ из типа .EXE в тип .COM. 36
Программирование микросхемы таймера 8253/8254. 39
Установка/чтение времени. 41
Установка/чтение даты. 43
Установка/чтение часов реального времени. 44
Задержка программных операций. 45
Операции запрограммированные во времени. 46
Управление работой в реальном времени. 47
Генерация случайных чисел с помощью микросхемы таймера. 50
Программирование генератора звука 76496 (только PCjr). 51
Генерация тона. 53
Генерация звука одновременно с другими действиями. 54
Гудок динамика. 55
Генерация набора тонов. 56
Генерация строки тонов, одновременно с другими операциями. 59
Создание плавного перехода тонов. 61
Создание звуковых эффектов. 62
Одновременная генерация разных звуков. 64
Очистка буфера клавиатуры. 66
Проверка символов в буфере. 67
Ожидать ввод символа и не выводить его на экран. 68
Ожидание нажатия клавиши и эхо на экран. 70
Прием символа без ожидания. 71
Получение строки символов. 71
Проверка/установка статуса клавиш-переключателей. 73
Написание процедуры ввода с клавиатуры общего назначения. 75
Перепрограммирование прерывания клавиатуры. 77
Использование клавиш "BackSpace", "Enter", "Escape" и 80
"Tab".
Использование клавиш-переключателей: "Shift", "Ctrl" и 80
"Alt".
Использование клавиш-переключателей: NumLock, CapsLock, 81
Ins и ScrollLock.
Использование цифровой дополнительной клавиатуры и кла- 82
виш перемещения курсора.
Использование функциональных клавиш. 83
Перепрограммирование отдельных клавиш. 84
Создание макроопределений для отдельных клавиш. 85
Создание процедуры обработки Ctrl-Break. 86
Перепрограммирование клавиши PrtSc. 87
Предопределенное использование клавиш. 89
Сводная таблица скан-кодов. 90
Сводная таблица кодов ASCII 90
Сводка кодов псевдографики для построения рамок. 93
Сводная таблица расширенных кодов. 93
Программирование контроллера дисплея 6845. 96
Установка/проверка режима дисплея. 98
Установка атрибутов/цветов символов. 102
Установка цвета границы экрана. 108
Очистка части/всего экрана. 109
Переключение между видеоадапторами. 110
Установка курсора в абсолютную позицию. 112
Относительное позиционирование курсора 114
Включение и выключение курсора. 115
Изменение формы курсора. 116
Чтение/сохранение/восстановление позиции курсора. 118
Создание альтернативных типов курсора. 119
Вывод на экран одного символа. 120
Вывод строки символов на экран. 125
Чтение символа и его атрибутов в данной позиции. 127
Создание специальных символов. 128
Сводка данных для описания символов. 130
Установка цветов для точечной графики. 133
Рисование точки на экране (монохромный, цветной и PCjr). 137
Рисование точки на экране (EGA). 140
Определение цвета точки экрана. 146
Рисование линий на экране. 148
Заполнение областей экрана. 152
Графический вывод с использованием символов псевдографики. 156
Вертикальный сдвиг текстового экрана. 158
Сдвиг текстового экрана горизонтально. 159
Переключение между текстовыми страницами. 160
Сдвиг между страницами текста. 163
Чтение таблицы размещения файлов. 165
Определение доступного дискового пространства. 168
Получение/установка размера файла. 169
Восстановление после ошибок, связанных с нехваткой 170
пространства на диске
Чтение/изменение корневого каталога. 172
Создание/удаление подкаталога. 175
Чтение/изменение подкаталога. 176
Получение/установка текущего каталога. 177
Получение/установка времени и даты последнего доступа к 178
файлу.
Спрятанные и защищенные от записи файлы. 179
Чтение/изменение метки тома. 180
Установка/проверка накопителя по умолчанию. 183
Создание/удаление файла. 184
Открытие/закрытие файла. 187
Переименование файла; изменение позиции файла в каталоге. 191
Подготовка к файловым операциям. 192
Анализ информации командной строки. 196
Программирование контроллера НГМД 765 и микросхемы пря- 199
мого доступа к памяти 8237.
Чтение/запись определенных секторов. 206
Запись в последовательные файлы. 208
Чтение из последовательных файлов. 213
Запись в файлы прямого доступа. 217
Чтение из файлов прямого доступа. 221
Проверка данных после операций чтения/записи. 223
Определение дисковых ошибок и восстановление после них. 224
Инициализация порта принтера/повторная инициализация 228
принтера.
Проверка того, что принтер связан с машиной. 229
Интерпретация ошибок принтера и восстановление после них. 230
Переключение между двумя или несколькими принтерами. 232
Установка текстового и графического режимов. 234
Управление расстоянием между строками. 235
Управление движением бумаги. 236
Управление положением печатающей головки. 237
Установка позиций табуляции. 238
Изменение шрифта печати. 239
Сравнение возможностей принтеров IBM. 239
Вывод текстовых или графических данных на принтер. 242
Выравнивание правого поля. 245
Пропорциональная печать. 247
Печать специальных символов. 248
Копирование экрана на принтер (дамп экрана). 251
Программирование микросхемы UART 8250. 255
Инициализация последовательного порта. 256
Установка текущего коммуникационного порта. 259
Определение статуса коммуникационного порта. 260
Инициализация и управление модемом. 261
Передача данных. 264
Получение данных. 266
Посылка/получение данных с помощью коммуникационного 269
прерывания.
Сводка управляющих кодов, используемых при коммуникации. 271
Создание заголовка драйвера. 273
Создание стратегии устройства. 274
Создание обработчика прерывания устройства. 275
Доступ к драйверу устройства. 278
Обнаружение и анализ ошибок устройства. 279
Чтение/запись с кассетного магнитофона. 283
Чтение позиции светового пера. 284
Получение аналогового ввода через игровой порт. 286
Получение цифрового ввода из игрового порта. 288
Приложения. 291
Приложение А. Двоичные и шестнадцатиричные числа и адре- 291
сация памяти.
Приложение Б. Битовые операции в Бейсике. 294
Приложение В. Основные сведения об языке ассемблера. 296
Приложение Г. Включение ассемблерных процедур в программы 300
на Бейсике.
Приложение Д. Использование драйвера устройства ANSI.SYS. 302
Приложение Е. Набор инструкций микропроцессора 8088. 302
Приложение Ж. Набор инструкций микропроцессора 80286. 305
Приложение З. Толковый словарь IBM PC. 308
Соглашения о числах, принятые в этой книге.
Программисты на ассемблере не найдут ничего необычного в способе
представления чисел и адресов, используемом в этой книге. Но
многие программисты на языках высокого уровня мало знакомы с
системой адресации и недесятичными числами и они могут быть слегка
сконфужены на первых порах. Если Вы относитесь к этой категории
- не отчаивайтесь! Данная книга может служить сравнительно
безболезненным способом знакомства с этой кабаллистикой, а Ваше
образование как программиста будет существенно ограничено без знакомства
с этими вещами. Чтобы помочь Вам в этом вопросе в книгу
включены два приложения. В приложении А обсуждаются двоичные и
шестнадцатиричные числа, а также как последние используются при
адресации памяти. Приложение Б более подробно разбирает двоичные
числа и их использование в битовых операциях. Даже если Вы не
нуждаетесь в помощи в этом отношении обратите внимание на следующие
правила:
1. Для удобства менее классных программистов, все числа счи-
таются десятичными, до тех пор пока за ними не следует H (для
шестнадцатиричных) или B (для двоичных). Иногда B опускается
после двоичных чисел, когда очевидно, что их значения описы-
вают цепочку битов.
2. Другое исключение - числа из восьми цифр вида 0000:0000.
Это шестнадцатиричные числа, дающие сегмент и смещение адреса
памяти. Их значение объяснено в приложении А.
3. Биты нумеруются от 0 до 7 (или от 0 до 15), где бит 0 соот-
ветствует младшему биту (т.е., когда установлен бит 0 = 1, а
бит 7 = 128).
4. Выражение вида "ASCII 5" относится к символу номер 5 набора
ASCII. Это означает, что оно относится к одному байту со зна-
чением 5, а не к коду ASCII для символа 5 и не к двухбайтному
целому, представляющему значение 5.
5. Числа заключенные в квадратные скобки, напр. [2.1.3], яв-
ляются перекрестными ссылками на другие разделы данной книги.
Приведенный пример подразумевает "Глава 2, Раздел 1, Пункт 3".
[2.1.0] относится к общему обсуждению, начинающему раздел 1
главы 2. Вы обнаружите сотни таких ссылок, рассеяных по всему
тексту. Они отсылают Вас к тем местам книги, в которых Вы
можете найти информацию об упомянутом предмете. Их основное
назначение - помощь начинающим. Если Вы понимаете о чем идет
речь, игнорируйте перекрестные ссылки.
6. Когда в текст включен текст программы, то он всегда выделен
жирным шрифтом.
Введение.
Программисты в наше время являются одной из наиболее передовых
групп. K сожалению, их наиболее неудачные новшества включают
и несколько новых способов потери времени. Бесконечны ужасные
истории о программах, для отладки которых требуется в двадцать
раз больше времени, чем для написания. И Вы можете снова и снова
слышать о программах, к которым приходится обращаться вновь и
вновь, так как они не были достаточно хорошо продуманы с самого
начала. Намного меньше сказано о том, что может оказаться самым
надежным и емким способом пустой траты времени для изучающих
программирование: поиск информации о машине. Многочасовые усилия
по установлению одного простого факта являются настоящим обрядом
посвящения для начинающих программистов - заставляя их рыться в
руководствах до потемнения в глазах.
Типичное следующее утро после этого - это глаза, слезящиеся от
терминала, метровая стопка смятых выдач и пара дюжин руководств,
рассыпанных по всему полу. Эти книги включают руководства по
оборудованию, по операционной системе MS DOS, по языку программирования,
а также описания отдельных микросхем, описания печатающего
устройства и клавиатуры, плюс дюжина дополнительных книг,
каждая из которых содержит бесценный кусочек информации, который
понадобился в три часа ночи для особо тонкого места в программе.
Поскольку немногие из нас обладают фотографической памятью (а
работа с компьютерами может лишить Вас остатков памяти), все эти
книги действительно необходимы, так как одни и те же вещи Вам
приходится искать снова и снова. На первых порах Вы можете затрачивать
часы и не обнаружить требуемой информации. Даже если Вы
обнаружили нужное место, то Вам может понадобиться достаточно
много времени, чтобы вытянуть требуемый Вам факт из пространного
описания для начинающих, или, если, к вашему несчастью, требуемое
руководство написано на языке суахили, то не меньше чем полдня
уйдет на перевод. Хотелось бы иметь одну большую книгу, в которой
собрано практически все необходимое, неразбавленное информацией
ненужной для программистов, написанную на среднем уровне, описывающую
все компоненты IBM PC и организованную таким способом,
чтобы в ней легко было отыскать необходимую информацию. Но слышали
ли Вы когда-нибудь о такой книге?
Поэтому я собрал вместе все эти руководства и описания для тех
кто хочет писать нетривиальные программы, но не может позволить
себе тратить массу времени (или 600 - 800 долларов, чтобы купить
все эти книги). Материал организован двумя способами. Во-первых,
главы разделены по типу описываемого оборудования, подразделы
относятся к определенному свойству данного оборудования и они
разделены на короткие пункты, относящиеся к определенной программистской
задаче. Например, один из разделов главы, посвященной
выводу на дисплей, относится к курсору и содержит пункты, описывающие
как позиционировать курсор, менять его форму, включать и
выключать его и т.д.
Во-вторых, каждый пункт разделен на четыре части (иногда меньше).
Сначала идут несколько абзацев, описывающих основные понятия.
Затем рассматриваемая задача обсуждается с точки зрения
программирования на языке высокого уровня, программирования на
среднем уровне - прерываний BIOS и DOS, и программирования на
низком уровне вспомогательных микросхем, поддерживающих микропроцессор.
Кроме того, каждый из разделов главы начинается с пары
страниц, описывающих сведения необходимые для понимания данного
раздела. Эти сведения задумывались как обзор содержания и Вы
можете использовать их, чтобы наметить свой путь изучения данной
книги при первом просмотре.
Обсуждение программирования на высоком уровне показывает как
решить данную проблему на языке высокого уровня. Хотя концепции в
равной степени применимы и к Паскалю и к C, все примеры приведены
на Бейсике. Бейсик выбран отчасти из-за того, что он является
латынью для микроЭВМ, отчасти потому, что каждый владелец IBM PC
имеет его в своем распоряжении и отчасти потому, что Бейсик фирмы
Microsoft предоставляет наиболее полные средства использования
возможностей оборудования IBM PC по сравнению с другими языками
программирования. Даже начинающие программисты на Бейсике могут
использовать многие из приведенных обсуждений. Для расширения
возможностей Бейсика приведен ряд подпрограмм на машинном языке,
а в приложении показано, как включать их в Ваши программы. Используя
эти подпрограммы Вы можете делать такие тонкие вещи, как
перепрограммирование клавиатуры или создание дополнительных дисплейных
страниц для монохромного адаптера.
Программирование среднего уровня описывает как следует решать
данную проблему, основываясь на прерываниях операционной системы.
Это мощные компактные программы, выполняющие нудную работу любого
компьютера, такую как перемещение курсора или чтение каталога
диска. Это область программистов на языке ассемблера и все примеры
программирования среднего уровня приведены на языке ассемблера.
Но теперь все больше и больше трансляторов с языков высокого
уровня предоставляют доступ к прерываниям, позволяя грамотному
программисту проделывать операции, которые не позволяет сам язык,
например, чтение абсолютного сектора диска. Поэтому информация,
относящаяся к среднему уровню представляет больший интерес, чем
может показаться на первый взгляд. Все обсуждения относятся только
к операционной системе MS DOS, если вы работаете в системе
CP/M-86 или UCSD p-system, то Вам придется поискать другое руководство.
Наконец, примеры программирования низкого уровня показывают
как данная проблема может быть решена на уровне микросхем. Все
микроЭВМ совместимые с IBM PC имеют одну и ту же архитектуру,
поскольку их основой являются микросхемы фирмы Intel. Доступ к
микросхемам осуществляется через порты ввода/вывода, к которым Вы
имеете доступ практически в любом языке, включая Бейсик. Обсуждаются
все важные для программиста микросхемы, включая таймер,
интерфейс с периферией, контроллер прерываний, контроллер дисплея,
контроллер НГМД (накопителя на гибких магнитных дисках) и
микросхемы управления коммуникационным каналом. Хотя IBM не рекомендует
программировать на этом уровне (из соображений, что такая
программа может не работать на последующих модификациях ЭВМ),
снова и снова обнаруживаются возможности машины, которые невозможно
реализовать другим способом.
Не все задачи показаны на всех трех уровнях. Решение некоторых
просто невозможно на Бейсике. Для решения других не предусмотрено
средств операционной системы. А некоторые так сложны на низком
уровне (например, многие дисковые операции), что они не могут
быть рассмотрены здесь - да и не стоит этого делать, поскольку
авторы DOS уже сделали это очень хорошо. Однако в большинстве
случаев показаны все три уровня. Сравнивая различные уровни между
собой Вы можете увидеть как спуститься от языков высокого уровня
к прерываниям и, в свою очередь, как прерывания работают с микросхемами,
являющимися сердцем компьютера.
Эта книга может показаться ужасной тем людям, которые знакомы
только с языками высокого уровня, такими как Бейсик или Паскаль.
Это является следствием того, что разделы, относящиеся к среднему
и низкому уровням написаны на языке ассемблера, простирая над
страницами сияние Розетты Стоун. Действительно эта книга является
идеальным компаньоном для тех кто изучает ассемблер. Но не думайте,
что Вам нужна только треть книги если Вы не знаете ассемблера
и не собираетесь изучать его. Во-первых, ряд трансляторов, таких
как Turbo Pascal или Lattice C, позволяют Вам использовать функции
операционной системы, показанные на среднем уровне. Кроме
того, многие из процедур низкого уровня могут быть на самом деле
реализованы на языках высокого уровня. Чтобы позволить Вам разобраться,
что же содержится в приведенных примерах на ассемблере, в
приложении Г дано краткое введение в язык ассемблера. Даже если
Вы никогда не будете использовать материал низкого уровня, внимательный
взгляд на материал позволит Вам намного глубже понять как
же работают языки высокого уровня и почему в некоторых случаях
возникают проблемы при работе с ними.
Практически каждый подраздел содержит образец кода. Часто это
всего лишь несколько тривиальных строк. Иногда приводятся явные
наметки для реализации сложных процедур. Очень редко встречаются
самостоятельные программы. Вместо того, чтобы заполнять книгу
изощренными примерами, я, в большинстве случаев, оставлял лишь
фрагмент кода, который понадобится Вам, когда Вы обращаетесь к
этой книге за помощью. Ни в коей мере каждый пример не претендует
на самое красивое решение проблемы. Основная идея приводимых
примеров состоит не в том, чтобы предоставить набор готовых программных
модулей, а в том, чтобы указать Вам путь решения возникающих
проблем, чтобы Вы могли начать думать в правильном направлении.
Но если Вы хотите, то Вы можете прямо включать приведенные
образцы в программы в качестве функциональной отправной точки и
затем дорабатывать их до кондиций, удовлетворяющих Вашему эстетическому
вкусу. Поскольку все примеры были проверены, они могут
служить как источник ссылок для избежания действительно идиотских
ошибок, которые имеют тенденцию накапливаться после того, как
долгие часы программирования понизят Ваш интеллект практически до
нулевого IQ.
Язык этой книги, мягко говоря, очень компактный. Но я старался
избегать жаргона, насколько это возможно. Кроме того, в конце
книги приведен терминологический словарь компьютерных терминов.
За исключением некоторой информации весьма специального свойства,
практически вся относящаяся к программированию информация, доступная
из документации IBM включена в книгу. Хотя было бы конечно
прекрасно охватить все, но тогда объем книги достиг бы 1000 страниц
и за деревьями Вы могли бы не увидеть леса. Поэтому для
действительно необычных программистских нужд - скажем, для сложных
программ управления контроллером НГМД или перепрограммирования
клавиатуры AT - Вам при
...Поділитися у соцмережах