Жанр: Учеба

Программно-аппаратная организация компьютера IBM PC

сторінка №21

ющим образом:

Регистр Бит Значение
_______ ___ ________

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 утрачены некоторые реквизиты данных
(использующиеся для записи размещения и
информации о битах)
4 данные не найдены

Четвертая процедура, с кодом 3, используется для записи блоков данных
на кассету.
На этом мы завершаем изучение служебных процедур системы BIOS-ПЗУ,
предназначенных для поддержки периферийных устройств, подключаемых к
IBM/PC, но этим не исчерпывается ни система BIOS, ни оборудование IBM/PC.
В следующем разделе мы рассмотрим все остальное. Но прежде чем двигаться
дальше, нужно сообщить еще одну подробность, касающуюся интерфейса
кассетного накопителя.
Интерфейс кассетного накопителя IBM/PC разрабатывался только для
подключения кассетного накопителя к IBM/PC и он практически не
используется ни в одном компьютере. некоторые умные люди приспосабливают
этот интерфейс для соединения IBM/PC с другими устройствами. Одно из
возможных использований - подключение специализированных контроллеров
буферированного приема/передачи.

11.4. Дополнительные процедуры системы BIOS

Помимо тех процедур, которые мы уже рассмотрели, система BIOS
включает еще ряд интересных и полезных служебных процедур. Программы
11-101 и 11-102, входящие в дисковый пакет, прилагаемый к этой книге,
включают интерфейсные подпрограммы на ассемблере и вспомогательные
процедуры на Паскале, позволяющие наиболее полно использовать эти
служебные процедуры системы BIOS.
Первая из этих процедур - это процедура распечатки содержимого
экрана. Она обычно вызывается процедурой обслуживания клавиатуры системы
BIOS-ПЗУ, когда та обнаруживает нажатие клавиши "PrtSc". Распечатка экрана
выполняется программой обслуживания прерывания номер 5 и это позволяет
программно вызывать ту же операцию, запрашивая прерывание номер 5.

Процедура обслуживания клавиатуры, обнаружив нажатие клавиши "PrtSc",
просто вызывает прерывание 5.
Пользующиеся интерпретатором Бейсика замечали, что при работе с
Бейсиком клавиша "PrtSc" не действует. Однако, имеется простой способ
вызова программы распечатки экрана из программ на Бейсике. Сам
интерпретатор изменяет способ обслуживания клавиатуры и здесь ничего
изменить нельзя, но можно просто запросить из программы на Бейсике
прерывание 5, описанное выше.
Для программ на Бейсике необходима интерфейсная процедура на машинном
языке, позволяющая обратиться к операции распечатки экрана, Это очень
простая процедура, состоящая всего из двух команд, занимающих три байта.
На языке ассемблера эти команды записываются так:

INT; вызов прерывания номер 5 (распечатка экрана)
; (2-х байтная команда)
RET; возврат в программу на Бейсике (1 байт)

Такую простую подпрограмму можно просто записать в память командами
POKE и, поскольку длина ее всего три байта, можно использовать числа
обычной точности, Следующая короткая программа показывает, как это
делается:

100 REM Простая программа, позволяющая организовать
110 REM вызов операции распечатки экрана из Бейсика
120 REM Трехбайтная программа на машинном языке
125 REM формируется внутри переменной.

130 HOLD.THE.CODE = 0 'выделяется 4-байтная переменная
140 REM обычной точности
150 PRINT.SCREEN = VARPTR(HOLD.THE.CODE) 'установка указателя
160 REM на область памяти
170 POKE PRINT.SCREEN + 0,205 '1-й байт подпрограммы -
175 REM команда прерывания (INT)
180 POKE PRINT.SCREEN + 1,5 '2-й байт - номер прерывания 5
190 POKE PRINT.SCREEN + 2,203 '3-й байт - команда возврата
200 REM
210 REM Теперь подпрограмма в машинных кодах
220 REM храниться в переменной "hold.the.code"
230 REM и ее адрес храниться в "print.screen"
240 REM
250 CALL PRINT.SCREEN

В этой простой программе строки 120-170 записывают подпрограмму в
машинных кодах. Эту процедуру достаточно выполнить один раз. Оператор CALL
в строке 250 может выполняться тогда, когда необходимо распечатать
содержимое экрана. (Интерфейсные подпрограммы для всех процедур системы
BIOS и ДОС включены в дисковый пакет, прилагаемый к этой книге, но такой
простой интерфейс, как тот, который описан выше, можно оформить
непосредственно на Бейсике. Для более сложных процедур обычно требуются
законченные интерфейсные подпрограммы на ассемблере, которые могут
загружаться из Бейсика процедурой BLOAD).
Следующая из дополнительных процедур системы BIOS - процедура вывода
списка оборудования, которая вызывается с помощью прерывания номер 17,
шестнадцатеричное значение 11. При первом включении IBM/PC процедуры
запуска и самопроверки проверяют, какое оборудование подключено к IBM/PC
(в основном, проверка сводится к считыванию позиций переключателей,
установленных на системной плате IBM/PC; эти переключатели должны
выставляться определенным образом в зависимости от состава подключенного
оборудования. Такой метод не слишком точен, поскольку переключатели могут
быть выставлены неправильно).
Ваши программы могут выяснить конфигурацию системы, запрашивая
прерывание 17. При выполнении процедуры обслуживания этого прерывания не
производится ни новая проверка состава оборудования, ни повторное
считывание положений переключателей. Происходит всего лишь пересылка двух
байтов, содержащих код конфигурации системы, вызывающей программы в
регистрах AH и AL.
Ниже приведена таблица кодов оборудования:

Регистр Бит Значение
_______ ___ ________

AH 1-2 число адаптеров устройства печати
(от 0 до 3)
AH 3 не используется
AH 4 игровой адаптер подключен или нет
AH 5-7 число адаптеров связи (от 0 до 7)
AH 8 не используется
AL 1-2 число дисководов без единицы
(если установлен 8-ой бит)
AL 3-4 начальный видеорежим (см.таблицу
ниже)
AL 5-6 объем памяти на системной плате
(см.таблицу ниже)
AL 7 не используется
AL 8 дисководы подключены (если да, см.

1 и 2 биты)

Заметим, что число дисководов, задаваемое первыми двумя битами AL,
копируется числом, на единицу меньше действительного числа, так что
значение 00 соответствует одному дисководу, 01 - двум и так далее. С
помощью такой схемы кодирования указывается наличие до 4-х дисководов.
Восьмой бит указывает, имеются ли вообще дисководы в системе. Если этот
бит установлен, то используются два бита счетчика. Проще было бы
использовать три бита для кодирования числа дисководов, что позволило бы
задавать числа от 0 до 7.
Следующая таблица поясняет значения битов для начального видеорежима:

Биты Значение
____ _____________________________________________

00 (не используется)
01 графический режим, 40 столбцов, черно-белое
изображение
10 графический режим, 80 столбцов, черно-белое
изображение
11 монохромный режим

Следующая таблица поясняет установку битов для кода объема памяти на
системной плате:

Бит Значение
___ ______________________

00 16К
01 32К
10 48К
11 64К

Ваши программы могут использовать эту информацию для настройки своей
работы на конфигурацию системы.
Следующая процедура сообщает, какой объем памяти подключен к
компьютеру. Имеется ввиду объем рабочей памяти, включающий объем памяти на
системной плате (сообщаемый предыдущей процедурой) и дополнительные платы
памяти. Для вызова этой процедуры служит прерывание 18, шестнадцатиричное
значение 12, а значение, возвращаемое в регистре AX, равняется числу
блоков памяти размером 1К. Такой способ позволяет определить полный объем
памяти в один мегабайт.
Значение объема памяти не устанавливается прямой проверкой, а берется
из стандартной ячейки памяти. Это позволяет программно изменять объем
используемой памяти.
Одно из самых полезных средств для работы с IBM/PC с большим объемом
памяти (например, 512К) включает системную программу, которая использует
часть памяти как некий очень быстрый накопитель на гибком диске, т.е. так
называемый электронный диск. Такой тип модификации системы может быть
очень полезен и начинает использоваться все шире. Для того чтобы иметь
возможность выделения физической памяти для какого-нибуть специфического
использования, IBM/PC хранит рабочее значение объема доступной памяти в
ячейке оперативной памяти, содержимое которой можно изменить. И при любом
использовании памяти, например, при ее выделении программам, объем памяти
всегда сравнивается с этим значением.
Еще одна интересная особенность ПЗУ не связана с системой BIOS, а
относится к способу вызова кассетной системы Бейсика, которая также
хранится в ПЗУ. Если значение 18, тогда управление компьютером передается
интерпретатору Бейсика. Следует иметь в виду, что такая операция уже не
позволит снова получить управление Вашей программе и даже операционной
системе ДОС.
Еще одна процедура, которая удаляет Вашу программу и ДОС из системы,
- это процедура начальной загрузки, вызывающаяся прерыванием 25,
шестнадцатиричное значение 19. Эта процедура перезагружает операционную
систему с диска, так же как это происходит после нажатия клавиши
Ctrl-Alt-Del. Единственное отличие заключается в том, что при нажатии
клавиши Ctrl-Alt-Del выполняется диагностика системы, такая же как при
включении питания, а при запросе прерывания 25 сразу производится загрузка
системы. Это один из самых радикальных способов завершения программы,
гарантирующий наличие в памяти новой копии операционной системы.
Следующая процедура - это процедура обслуживания таймера. Она
используется для считывания и изменения внутреннего счетчика таймера. Хотя
эту процедуру и называют процедурой текущих даты/времени, на самом деле
это всего лишь счетчик прерываний таймера. Счетчик увеличивается на
единицу при каждом прерывании, которое происходит примерно 18-21 раз в
секунду. Вычисление и обновление времени дня и даты - это операция ДОС,
которая использует результаты счетчика.

Имеется две процедуры обслуживания таймера, вызывающиеся по
прерыванию 26, шестнадцатиричное значение 1А, одна, с кодом 0, для
считывания показаний таймера, а вторая, с кодом 1, для их установки.
Значение счетчика таймера хранится в виде пары двухбайтовых чисел,
использующихся, фактически, как одно четырехбайтовое. Эта процедура вносит
лишь одно добавление в примитивную процедуру подсчета часов. Когда это
происходит, счетчик сбрасывается и факт запоминается. При очередном
запросе на считывание значения счетчика передается сообщение о том, что
таймер сбрасывался.
Это позволяет ДОС следить за временем дня и сменой дат не вычисляя их
постоянно. Когда ДОС необходимо установить время дня, используется
описанная процедура для получения значения счетчика и по нему вычисляется
время; если будет получено сообщение о сбросе таймера, то ДОС изменит
также и дату. Таким образом, ДОС выполняет все эти вычисления только
тогда,когда требуется указать время, что упрощает функции процедуры
обслуживания прерываний от таймера, которая должна выполняться 18 раз в
секунду. Если к ДОС будет хотя бы один запрос времени за день, то
проверить это, оставив Ваш компьютер включенным на 24 часа. К концу Вашей
проверки время дня будет по прежнему правильным, а дата ошибочной).
Если Вы будете сами считывать или устанавливать показания таймера с
помощью этих процедур системы BIOS, это может помешать правильному отсчету
времени и даты в ДОС. ДОС устанавливает значение счетчика таймера таким
образом, как будто он был запущен в полночь, после чего ДОС полностью
полагается на значение признака сброса таймера. Любая установка или
считывание показаний таймера Вашими программами естественно окажет влияние
на отсчет времени в ДОС. Если Ваши программы будут только считывать
показания таймера, это может привести к перехвату сообщения о сбросе
таймера, что нарушит порядок отсчета даты в ДОС.
Теперь мы рассмотрели все процедуры системы BIOS-ПЗУ.
Вы могли обратить внимание на два упущения в составе этих процедур. В
то время как все устройства, подключаемые стандартным образом, имеют
поддерживающие их служебные процедуры,совершенно не поддерживается игровой
адаптер. Это происходит потому, что такая поддержка просто не нужна. Я
могу только предполагать почему это произошло; одна из возможных причин
может заключаться в том, что форма "ИБМ" не сочла этот адаптер достаточно
важной составной частью системы, которой требуется какая-либо поддержка на
уровне системы BIOS. Возможно, также что игровой адаптер был доставлен к
системе на достаточно поздней стадии ее разработки и его поддержка не
могла быть включена в систему BIOS, размещенную в ПЗУ.
Еще одна недостающая часть системы BIOS - это набор процедур для
обслуживания встроенного динамика. Почему они не были включены в систему -
это для меня загадка. В следующем разделе мы рассмотрим работу динамика и
то, как извлекать из него звуки под управлением программы.

11.5. Рецензия звука с помощью динамика

К сожалению, в системе BIOS нет универсальных процедур обслуживания
встроенного в IBM/PC динамика. Хотя в системе имеются две подпрограммы,
позволяющие извлекать звуки из динамика, но они могут использоваться
только внутри самой системы BIOS - это не служебные процедуры общего
пользования.
В данном разделе мы поясним работу динамика и поясним основы его
использования.Дисковый пакет, прилагающийся к этой книге, содержит
служебные подпрограммы на Ассемблере,которые обеспечат Вам доступ ко всем
возможностям динамика.
Любой громкоговоритель - будь то часть высококачественной системы
воспроизведения звука, телефонный динамик или динамик IBM/PC - работает за
счет получения последовательности электрических импульсов, которые
вызывают отклонение диафрагмы динамика, вызывающее колебания воздуха,
образующие звук. В обычном динамике, поступающие импульсы имеют различную
мощность (громкость) и длительность (частоту или высоту тона). Простой
динамик IBM/PC не позволяет регулировать громкость и звук образуется
просто последовательностью электрических импульсов. Ток к динамику
подается и отключается в режиме простого двоичного управления. Частота
импульсов тока определяет звуковую частоту, вырабатываемую динамиком.
Например, если ток включается и выключается 300 раз в секунду, то динамик
генерирует звук частотой 300 герц.
Схемы управления динамиком очень интересно организованы и
обеспечивают два способа формирования звука. Импульсы, посылаемые
динамику, управляются комбинацией программного сигнала и программируемого
таймера. Два способа формирования звука определяются тем, используется
таймер или нет.
Сначала рассмотрим как формируется звук без использования таймера.
Чтобы заставить динамик звучать программа должна задавать импульсы нужной
частоты в течение нужного времени. Хотя это делается на ассемблере, я
использовал Паскале-подобные конструкции просто для иллюстрации логики
этой операции. Предположим, что необходимо воспроизвести звук с частотой
300 герц, который должен звучать половину секунды. Вот что необходимо
сделать:

повторить 150 раз { то есть, 1/2 секунды, при частоте 300 Гц }
начало
импульс отключения динамика
задержка на 1/600 секунды {половина цикла}
{задержка времени выполняется с помощью холостого цикла,
повторяющегося нужное число раз}
импульс включения динамика
задержка еще на 1/600 секунды {вторая половина цикла}
конец;

Если Вы внимательно изучите программу на ассемблере BEEP/WARBLE,
приведенную в виде листинга 3.2. в главе 3, Вы заметите, что она работает
именно таким образом.
Это очень хороший способ воспроизведения звука, но он не позволяет
программе ничего делать, кроме генерации звука. Фактически, эта маленькая
программа использует весь ресурс микропроцессора 8088, не делая ничего
кроме подсчета времени и формирования импульсов для динамика. Для этого
есть более совершенный способ, использующий таймер.
Одна из скрытых возможностей IBM/PC - это наличие программируемого
таймера. Он не измеряет никаких промежутков времени, а только подсчитывает
импульсы основного тактового генератора системы. Для этого таймера
задается число, называемое коэффициентом деления (или просто делителем), и
он подсчитывает число импульсов тактового генератора и сравнивает это
число с делителем. Когда эти числа сравняются, таймер выдает сигнал и
снова начинает подсчет с нуля.
Системный тактовый генератор работает на чистоте 1,19мГц. Так что
если таймер запрограммирован на 10000 импульсов, он будет выдавать сигналы
примерно 100 раз в секунду. Можно добиться любой частоты импульсов на
выходе таймера, подбирая соответствующий делитель. После загрузки делителя
схемы динамика запускаются для работы под управлением таймера, после чего
выходные сигналы таймера будут управлять частотой формируемого звука, а
компьютер может выполнять любую другую работу.
Такой способ управления динамиком позволяет программам работать, пока
динамик воспроизводит звук. Таким образом организована работа одной из
процедур Бейсика, фоновая музыка или MB. Необходимо заметить, что при
формировании звука с помощью таймера, он продолжает звучать до тех пор,
пока он не будет отключен той же программой , которая его запустила.
Листинг 3.2. может использоваться в качестве примера формирования
звуков без использования таймера. Программа на ассемблере, представленная
листингом 11.1., показывает как запустить звучание динамика с помощью
таймера.

Приложение 11.1. Текст программы генерации звука с использованием
таймера (Ассемблер).

a440seg segment 'code'

assume cs:a440seg

a440 proc far

mov al,0b6h
out 67,al

mov ax,2711
out 66,al
mov al,ah
out 66,al

in al,97
or al,03
out 97,al

int 20h

a440 endp

a440seg ends

end

Список сторінок

Поділитися у соцмережах

☏ Замовлення реклами: +3805044-68-872

© Асоціація електронних бібліотек України

☝ Усі матеріали сайту (зокрема статті, зображення, рекламні оголошення тощо) призначені лише для попереднього ознайомлення. Усі права на публікації, представлені на сайті, належать їхнім законним власникам. Просимо Вас не зберігати копії інформації.