|
Эта процедура возвращает
управление вызввающей программе только тогда, когда будет
введен символ, так что программе не приходится проверять, был
ли действительно введен символ. Код обычного символа
возвращается в регистре AL, но если содержимоое AL равно
нулю, то в регистре АН находится код специального символа.
Эти регистры соответствуют первому и второму байтам,
упоминавшимся выше, при рассмотрении кодов специальных
символов. Ниже описана логика процесса распознавания
получаемых символов:
если AL=0 то
начало
спец_символ:= истина;
введенный_символ:= АН
конец
иначе
начало
спец_символ:= AL
конец;
Можно сделать ряд интересных замечаний, касающихся
значений, возвращаемых этой процедурой. Если введен обычный
код АSCII (то есть, AL не равняется нулю), то в регистре АН
содержится код сканирования для нажатой клавиши. Но, если
код ASCII был введен с помощью клавиши "Alt", то в регистре
АН будет ноль. Этту информацию программа может использовать
для определения способа вода символа. Некоторые символы кода
ASCII встречаются на клавиатуре IBM/PC дважды.
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.
|