ввести с клавиатуры), специальных кодов столько, сколько требуется для
выполнения всех предусмотренных клавиатурой IBM/PC функций. Например,
сорок кодов выделено для функциональных клавиш (десять обычных и еще
тридцать для трех возможных смещений - обычного и с помощью клавиш "Alt" и
"Ctrl"). Ниже приведена таблица специальных кодов и комбинаций клавиш,
которыми они вырабатываются. Вы конечно заметите определенную хаотичность
этих кодов. Некоторые комбинации с клавишей "Alt" разрешены, а другие нет,
причем без какой-либо видимой причины. То же можно сказать и о комбинациях
с клавишей "Ctrl".
Значение Клавиши, с помощью
специального которых он формируется
кода
____________ __________________________________
3 Ctrl-2 (что должно соответствовать коду
CHR$(0) или ASCII NULL)
15 обратная табуляция (shift-tab)
16-25 от Alt-a до Alt-p (верхний ряд букв)
30-38 от Alt-A до Alt-L (средний ряд букв)
44-50 от Alt-Z до Alt-M (нижний ряд букв)
59-68 от F1 до F10 (функциональные клавиши)
71 клавиша "Home" (курсор в верхний левый
угол экрана)
72 клавиша "Курсор вверх"
73 клавиша "PgUp" (страница вверх)
75 клавиша "Курсор влево"
77 клавиша "Курсор вправо"
79 клавиша "End" (конец)
80 клавиша "Курсор вниз"
81 клавиша "PgDn" (страница вниз)
82 клавиша "Ins" (вставка)
83 клавиша "Del" (удалить)
84-93 от смещение-F1 до смещение-F10 (функ-
циональные клавиши с обычным смещением)
94-103 от Ctrl-F1 до Ctrl-F10
104-113 от Alt-F1 до Alt-F10
114 Ctrl-PrtSc
115 Ctrl-Курсор влево
116 Ctrl-Курсор вправо
117 Ctrl-End
118 Ctrl-PgDn
119 Ctrl-Home
120-131 от Alt-1 до Alt-= (верхний ряд клавиш)
132 Ctrl-PgUp
Как Вы могли заметить, эта таблица не слишком регулярна. Вы,
наверное, заметили, что имеется сорок комбинаций с функциональными
клавишами - каждая из клавиш в одном из четырех смещенных состояний
(обычном, смещенном, с клавишей "Ctrl" и с клавишей "Alt").
Имея в своем распоряжении все эти коды, любая программа не будет
испытывать недостатка кодов специального назначения. Обычно, для любой
программы хватает функциональных клавиш и нескольких клавиш специального
назначения, таких как "Home" и клавиши управления курсором. Однако, если
потребуются дополнительные клавиши, Вы сможете их найти в этой таблице.
Доступ к этим специальным кодам символов требует изменения
определенных особых методов. В следующих двух разделах мы рассмотрим как
это делается.
10.4. Процедура обслуживания клавиатуры в системе BIOS
Рассмотрим теперь служебные процедуры системы BIOS, позволяющие
осуществлять доступ к клавиатуре.
Процедуры обслуживания клавиатуры в системе BIOS вызываются с помощью
прерывания номер 22, шестнадцатиричное значение 16. Таких процедур всего
три, поскольку не слишком много функций можно запросить для клавиатуры.
Первая процедура, имеющая код 0, возвращает очередной принятый от
блока клавиатуры символ. Эта процедура возвращает управление вызывающей
программе только тогда, когда будет введен символ, так что программе не
приходится проверять, был ли действительно введен символ. Код обычного
символа возвращается в регистре AL, но если содержимое AL равно нулю, то в
регистре АН находится код специального символа. Эти регистры соответствуют
первому и второму байтам, упоминавшимся выше, при рассмотрении кодов
специальных символов. Ниже описана логика процесса распознавания
получаемых символов:
если AL=0 то
начало
спец_символ:= истина;
введенный_символ:= АН
конец
иначе
начало
спец_символ:= AL
конец;
Можно сделать ряд интересных замечаний, касающихся значений,
возвращаемых этой процедурой. Если введен обычный код АSCII (то есть, AL
не равняется нулю), то в регистре АН содержится код сканирования для
нажатой клавиши. Но, если код ASCII был введен с помощью клавиши "Alt", то
в регистре АН будет ноль. Эту информацию программа может использовать для
определения способа вода символа. Некоторые символы кода ASCII встречаются
на клавиатуре IBM/PC дважды.
Приложение 10.1. Текст программы демонстрации возможностей управления
клавиатурой (Бейсик).
1000 REM Листинг 10.1 - программа отображения битов
1010 REM состояния клавиатуры
1030 GOSUB 2000 'вывод заголовка
1040 GOSUB 3000 'дополнительная информация
1050 GOSUB 4000 'отображение битов клавиатуры
1060 GOSUB 5000 'проверка завершения ввода с клавиатуры
1070 GOTO 1050
2000 REM Подпрограмма вывода заголовка
2010 KEY OFF : CLS : WIDTHS 80 : LOCATE ,,0
2020 REM
2030 LOCATE 5,1
2040 PRINT " Программы для книги 'Персональный компьютер"
2050 PRINT " фирмы ИБМ', автор Питер Нортон, 1983"
2060 PRINT
2070 PRINT "Программа 10-1: Отображение битов состояния"
2080 PRINT "клавиатуры"
2999 RETURN
3000 REM Подпрограмма отображения вспомогательной информации
3010 LOCATE 11,28
3020 PRINT "Байт 1 Байт 2";
3030 LOCATE 12,28
3040 PRINT "12345678 12345678";
3050 LOCATE 17,10
3060 PRINT "Чтобы увидеть изменение битов состояния нажмите";
3065 PRINT "и удерживайте любую из";
3070 LOCATE 18,15
3080 PRINT "-- Левую или правую клавишу смещения";
3090 LOCATE 19,15
3100 PRINT "--Ctrl,Alt,Num-Lock,Scroll-Lock,Caps-Lock,Ins";
3110 LOCATE 21,10
3120 PRINT "(обратите внимание на влияние смещения и"
3125 PRINT "Num-Lock yf клавишу Ins) ";
3130 LOCATE 24,10
3140 PRINT "Для выхода в ДОС нажмите любую клавишу ввода";
3999 RETURN
4000 REM Подпрограмма отображения битов состояния клавиатуры
4010 DEF SEG = &H40
4020 CONTROL% = PEEK(&H17)
4030 CHECK% = 128
4040 FOR I% = 1 TO 8
4050 LOCATE 14,27 + I%
4060 IF CONTROL% >= CHECK% THEN COLOR 30,0 ELSE COLOR 7,0
4070 IF CONTROL% >= CHECK% THEN PRINT "1"; ELSE PRINT "0";
4080 IF CONTROL% >= CHECK% THEN CONTROL% = CONTROL%-CHECK%
4090 CHECK% = CHECK / 2
4100 NEXT I%
4110 CONTROL% = PEEK(&H18)
4120 CHECK% = 128
4130 FOR I% = 1 TO 8
4140 LOCATE 14,36 + I%
4150 IF CONTROL% >= CHECK% THEN COLOR 30,0 ELSE COLOR 7,0
4160 IF CONTROL% >= CHECK% THEN PRINT "1" ELSE PRINT "0"
4170 IF CONTROL% >= CHECK% THEN CONTROL% = CONTROL%-CHECK%
4180 CHECK% = CHECK% / 2
4190 NEXT I%
4999 RETURN
5000 REM Подпрограмма ожидания завершения работы
5010 K$ = INKEY$
5020 IF LEN(K$) = 0 THEN RETURN 'ожидание ввода с клавиатуры
5030 IF (LEN(K$) = 2) AND (CHR$(82) = MID(K$,2,1)) THEN
5035 RETURN 'Нажата клавиша Ins
5040 CLS : LOCATE ,,1
5999 SYSTEM
9999 REM Конец программы 10-1
ГЛАВА 11. ДОПОЛНИТЕЛЬНЫЕ СРЕДСТВА - АДАПТЕР СВЯЗИ, ДИНАМИК И ПРОЧЕЕ
В этой главе мы рассмотрим дополнительные средства, представляемые
IBM/PC, некоторые их низ более сложны, другие менее сложны, но все
сложности не таковы не таковы, чтобы посвящать каждому из этих средств
самостоятельную главу. Здесь мы рассмотрим устройство печати, асинхронный
адаптер связи, интерфейс накопителя на кассетной магнитной ленте, динамик
и ряд полезных сведений о системе BIOS в ПЗУ.
11.1. Асинхронный адаптер связи
Асинхронный адаптер связи позволяет IBM/PC общаться с внешним миром с
помощью стандартного метода, известного под названием RS-232. В
персональных компьютерах адаптер RS-232 обычно используется для двух
целей.
Первая цель использования RS-232 собственно для связи, по телефонным
линиям. При этом адаптер RS-232 подключается к модему (или
модулятору-демодулятору), который выполняет преобразование сигналов
компьютера в телефонные сигналы. Модем, в свою очередь, подключается к
телефонной линии. На другом конце линии должен находиться другой модем,
который может быть подключен к чему-нибудь. Это может быть все что угодно,
от универсального компьютера до другого персонального компьютера или
какого-либо простого устройства, например, устройства печати. Это, нужно
сказать, и является нормальным использованием адаптера связи.
Другой способ использования RS-232 значительно проще. Некоторые
устройства вывода разработаны в соответствии с протоколом взаимодействия
RS-232. Наиболее часто это относится к устройствам печати, особенно
посимвольным устройствам. Таким образом, адаптер связи IBM/PC может
использоваться просто в качестве дополнительного средства взаимодействия с
периферийным оборудованием, таким как устройство печати.
Сделаем небольшое отступление и рассмотрим два основных способа
взаимодействия персональных компьютеров, в том числе IBM/PC, с
периферийным оборудованием. Эти два способа кратко называют
последовательным и параллельным. Протокол RS-232 является
"последовательным", поскольку данные передаются по одной линии и биты
данных посылаются последовательно, по одному. Параллельная связь реализует
другую схему взаимодействия, которая по названию популярных устройств
печати фирмы "Центроникс", получила название параллельного интерфейса типа
"Центроникс" или, для краткости, просто параллельного интерфейса. При
параллельном взаимодействии данные передаются побайтно и этот интерфейс
включает столько линий связи, сколько необходимо чтобы передавать все эти
биты одновременно.
Параллельный интерфейс приспособлен для непосредственной связи
компьютера с внешними устройствами, в частности, что данные могут
передаваться быстрее, поскольку за один цикл передачи пересылается сразу
целый байт. Параллельный интерфейс типа "Центроникс" используется в
качестве стандартного адаптера связи с устройством печати в IBM/PC.
Последовательный интерфейс работает медленнее, однако, он имеет ряд
специальных возможностей для организации взаимодействия с удаленными
объектами. Все эти возможности не нужны при локальном использовании
последовательного интерфейса, для взаимодействия с устройством печати.
Однако, это может оказаться удобным способом организации связи между
компьютером и устройством печати, в частности, еще и потому что многие
персональные компьютеры предыдущего поколения не имели параллельного
интерфейса.
Осуществление связи с удаленным абонентом может оказаться очень
сложной задачей, поскольку может возникнуть множество различных неполадок,
требуется контроль многочисленных ошибок и необходимо работать с
разнообразным оборудованием, подключенным к линии. Однако, служебные
процедуры, входящие в систему BIOS IBM/PC для обслуживания адаптера RS-232
достаточно просты и удобны в использовании.
Имеется всего четыре служебных процедуры для связи и все они
вызываются с помощью прерывания 20, шестнадцатиричное значение 14: регистр
DX используется для указания того, какой адаптер связи должен быть