использован, если их больше одного; нулевое значение соответствует первому
(и, обычно, единственному) адаптеру. Программы 11-101 и 11-102, входящие в
дисковый пакет, прилагающийся к этой книге, содержит ассемблерные
интерфейсы подпрограммы и вспомогательные программы на Паскале,
позволяющие наиболее полно воспользоваться всеми процедурами связи системы
BIOS в ПЗУ.
Первая процедура, с кодом 0, устанавливает четыре стандартных
параметра связи: скорость передачи, способ контроля по паритету,
количество стоповых битов и длину слова. Эти параметры задают различные
вариации организации связи. IBM/PC может использовать самые различные их
сочетания и обычно конкретные значения определяются тем оборудованием,
которое находится на другом конце линии связи. Коды этих переменных
выбираются из регистра AL следующим образом:
Первые три бита задают скорость передачи в битах в секунду. Восемь
возможных значений соответствуют довольно большим скоростям передачи, хотя
персональные компьютеры наиболее часто используют две скорости - 300 и
1200 бит в секунду. Ниже приведены коды и соответствующие им значения:
Код Скорость передачи (бит в секунду)
-----------------------------------------------
000 110
001 150
010 300 (примерно 30 символов в секунду)
011 600
100 1200 (примерно 120 символов в секунду)
101 2400
110 4800
111 9600
(Издержки организации связи - необходимость передачи битов паритета и
стоповых битов - увеличивают число битов, необходимых для передачи
символа. Поэтому скорость передачи 300 бит в секунду позволяет передавать
примерно 30 символов в секунду, хотя в коде символа в ASCII всего 7 или 8
бит).
Следующие два бита определяют способ контроля по паритету:
Код Способ контроля
___ ________________
00 отсутствует
01 контроль по нечетности
10 отсутствует
11 контроль по четности
Следующий бит указывает число используемых стоповых битов, являющихся
обязательной частью протокола RS-232:
Код Число стоповых битов
___ ____________________
0 1
1 2
Последние два бита параметра определяют длину используемого слова:
Код Длина слова
___ ___________
10 7 бит (стандартный код ASCII)
11 8 бит (обычная длина слова для компьютеров)
Как правило, выбор всех этих параметров не произволен и определяется
характеристиками системы или оборудования, с которыми Вы связываетесь.
Вторая процедура для связи, с кодом 1, используется для пересылки
одного байта данных. Этот байт загружается в регистр AL и сигнал
завершения возвращается в регистр AH. Если передача завершилась неудачно,
то первый бит в регистре AH будет установлен в единицу, а значение
остальных семи бит будет в этом случае таким же, какое описано ниже для
процедуры с кодом 3. Таким образом, сравнение содержимого регистра AH с
числом 128 позволит определить успешно ли закончилась передача. Как
обычно, интерфейсная процедура, входящая в прилагающийся к этой книге
пакет, возьмет на себя заботу обо всех этих подробностях.
Третья процедура для связи, с кодом 2, используется для приема байта
из линии связи. Эта процедура ожидает завершения операции (которое может
заключаться в обнаружении ошибки или условия тайм-аута).
Эта процедура содержит одну из наиболее существенных ошибок в
исходной версии системы BIOS-ПЗУ; если версия BIOS датирована 24.04.1981,
то в ней сообщение о тайм-ауте ошибочно передается как сообщение об ошибке
по паритету с данными, готовыми для приема. Определить свою версию BIOS Вы
можете с помощью отладчика ДОС-DEBUG. Если вызвать DEBUG и ввести команду:
D F000:FFF5 L8
то будет отображена дата создания версии BIOS. Более подробно ошибки
первой версии системы BIOS рассмотрены в главе 6.
Если операция приема закончилась успешно, регистр AH будет обнулен. В
противном случае, единицы будут в первом бите регистра AH и в некоторых
битах с 4-го по 7-ой, как описывается ниже.
Последняя процедура, с кодом 3, используется для определения полного
текущего состояния порта связи (в регистре AH) и его модема (в регистре
AL). Часть этой информации сообщается и при выполнении процедур с кодами 1
и 2. Регистры AH и AL устанавливаются следующим образом:
Регистр Бит Значение
_______ ___ ________
AH 1-ый тайм-аут (кроме BIOS версии 24.4.81)
AH 2-ой сдвиговый регистр передачи пуст
AH 3-ий буферный регистр передачи пуст
AH 4-ый обнаружен разрыв связи
AH 5-ый ошибка в битах обрамления
AH 6-ой ошибка по паритету (BIOS версии
24.4.81 устанавливается в случае
тайм-аута)
AH 7-ой коллизия
AH 8-ой данные готовы (BIOS версии 24.4.81
устанавливается в случае тайм-аута)
AL 1-ый есть сигнал в линии
AL 2-ой есть вызов
AL 3-ий модем готов
AL 4-ый сигнал отбоя посылки
AL 5-ый есть дельта - огибающая сигнала при
приеме
AL 6-ой есть задний фронт сигнала вызова
AL 7-ой есть дельта - огибающая модем
AL 8-ой сигнал отбоя по дельта-огибающей
Вся приведенная выше информация предназначена для того, чтобы
позволить специалисту по телекоммуникации начать программировать для
IBM/PC.
11.2. Адаптер устройства печати
Система BIOS-ПЗУ включает процедуры поддержки для параллельного
адаптера устройства печати. (Различия параллельных и последовательных
адаптеров рассмотрены в предыдущем разделе). Эти процедуры проще, чем
процедуры обслуживания связи, поскольку проще само устройство печати.
Имеется всего три процедуры и используется только шесть бит состояния.
Для доступа к этим трем процедурам используется прерывание 23,
шестнадцатиричное значение 17. Регистр DX указывается для указания того,
какой адаптер должен использоваться, когда их больше чем один; ноль
обозначает первый (и обычно единственный) адаптер. Программы 11-101 и
11-102 в дисковом пакете, прилагающемся к этой книге, включают
интерфейсные подпрограммы на Ассемблере и вспомогательные процедуры на
Паскале, необходимые для более полного использования этих служебных
процедур системы BIOS.
Одна из незначительных ошибок в исходной версии системы BIOS-ПЗУ
касается как раз обслуживания устройства печати. Когда команда перевода
страницы посылается стандартному устройству печати фирмы "Эпсон", система
BIOS отводит на выполнение этой операции несколько меньше времени, чем
фактически может потребоваться устройству. Это происходит в тех случаях,
когда команда перевода страницы выдается вблизи верхнего края старой
страницы. Во всех версиях BIOS после 24.4.1981 это время увеличено.
Первая процедура с кодом 0, используется для пересылки одного байта
устройству печати. Эта процедура очень проста и о ней больше нечего
сообщить.
Вторая процедура с кодом 1, используется для сброса устройства печати
и определения его состояния. Эта процедура может использоваться для
перевода устройства печати в нормальное состояние после того как ему были
посланы какие-нибудь специальные коды управления. Информация о состоянии
возвращается в регистре AH,причем биты имеют следующие значения:
Бит Значение
___ ________
1-ый устройство печати занято
2-ой сигнал подтверждения
3-ий сигнал отсутствия бумаги
4-ый сигнал выборки
5-ый сигнал ошибки вывода
6-ой,7-ой не используются
8-ой сигнал тайм-аута (для BIOS версии 24.4.1981
это может оказаться ложная тревога)
Третья и последняя процедура с кодом 2 используется для чтения битов
состояния, описанных выше, без выполнения сброса. Эта процедура особенно
полезна для программ управления устройством печати.
Вот и все, что нужно было сказать об устройстве печати. Это не
слишком сложное устройство и, соответственно, просты процедуры его
обслуживания.
11.3. Интерфейс кассетного накопителя
Очередная часть системы BIOS-ПЗУ относится к интерфейсу кассетного
накопителя. Он практически никем не используется и многие, включая и меня,
не видят других причин включения его в состав IBM/PC, кроме чисто
коньюктурных проблем сбыта. (Более подробно этот вопрос рассматривается в
главе 2).
Имеется всего четыре простых служебных процедуры для обслуживания
кассетного накопителя : для чтения и записи блоков данных и для включения
и выключения двигателя. Отсутствуют команды перемотки кассеты: эта
операция должна выполняться вручную с пульта управления кассетным
накопителем.
Заметим, что имеющиеся команды носят "физический" характер, и совсем
нет "логических команд, таких как команда поиска файла. Команды такого
рода относятся скорее к уровню операционной системы, чем к уровню системы
BIOS - в конце концов, система BIOS должна обеспечивать наиболее
примитивный, элементарный уровень обслуживания, на базе которого могут
строиться логические процедуры более высокого уровня. К сожалению, ДОС
совершенно не поддерживает интерфейс кассетного накопителя, так что с ним
можно работать только из Бейсика или на примитивном уровне системы BIOS.
Это существенно ограничивает возможности тех, кто хотел бы серьезно
использовать кассетный накопитель.
Для доступа к четырем процедурам обслуживания кассетного накопителя
используется прерывание 21, шестнадцатиричное значение 15. Программы
11-101 и 11-102 в дисковом пакете, прилагающемся к этой книге, включают
интерфейсные подпрограммы на ассемблере и вспомогательные процедуры на
Паскале, необходимые для более полного использования этих служебных
процедур системы BIOS.
Первая процедура, с кодом 0, включает двигатель кассетного
накопителя. Эта процедура возвращает управление немедленно, не ожидая пока
двигатель раскрутится - это необходимо учитывать.
Вторая процедура, скажем 1, выключает двигатель. Третья процедура, с
кодом 2, используется для чтения блоков данных с кассеты. Данные
передаются блоками по 256 байт и за один раз можно считывать несколько
блоков. Если в процессе передачи данных будет обнаружена ошибка, сообщение
об этом будет передано в регистре AH.
Код ошибки Значение
__________ ________
1 обнаружена ошибка циклического избыточного
кода (CRC)
2 утрачены некоторые реквизиты данных