Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Глава 11. дополнительные средства - адаптер связи, динамик и прочее

ГЛАВА 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  используется  для  указания того,
какой адаптер связи должен быть использован, если  их  больше
одного;  нулевое  значение  соответствует первому (и, обычно,
единственному) адаптеру. Программы 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       утрачены   некоторые    реквизиты     данных
                 (использующиеся  для  записи  размещения   и
                 информации о битах) 
         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
[ Оглавление ]

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог