Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Роберт Журден Весь текст 1069.56 Kb

Справочник программиста на IBM PC

Предыдущая страница Следующая страница
1 ... 8 9 10 11 12 13 14  15 16 17 18 19 20 21 ... 92
байт в регистре AL. Hаконец, восстановите первоначальное значение
регистра задвижки, чтобы счет  продолжался  в пределах указанного
диапазона времени.

;---установка адресов портов
COMMAND_REG  EQU   43H     ;адрес командного регистра
CHANNEL_2    EQU   42H     ;адрес канала 2
             CALL  SET_COUNT  ;установка диапазона
              .
;---здесь программа работает, а затем требует случайное число
              .
             CALL  GET_NUMBER ;получение случайного числа
              .
              .
;---начинаем отсчет канала 2
SET_COUNT    PROC
             MOV   AL,10110110B   ;канал 2, режим 2, оба байта
             OUT   COMMAND_REG,AL ;посылаем в командный регистр
             MOV   AX,10000       ;значение счетчика
             OUT   CHANNEL_2,AL   ;посылаем младший байт
             MOV   AL,AH          ;передвигаем старший байт в AL
             OUT   CHANNEL_2,AL   ;посылаем старший байт
             RET
SET_COUNT    ENDP
;---получение случайного числа
READ_NUMBER  PROC
;---пересылаем значение счетчика в регистр задвижки
             MOV   AL,10000110B   ;требуемая команда
             OUT   COMMAND_REG,AL ;посылаем в командный регистр
;---читаем значение счетчика
             MOV   AL,10110110B   ;запрос на чтение/запись
             OUT   COMMAND_REG,AL ;посылаем запрос
             IN    AL,CHANNEL_2   ;получаем младший байт
             MOV   AH,AL          ;временно храним его в AH
             IN    AL,CHANNEL_2   ;получаем старший байт
             CALL  SET_COUNT      ;восстанавливаем задвижку
             SWAP  AH,AL          ;ставим байты на место
             RET                  ;теперь случайное число в AX
READ_NUMBER  ENDP
   Раздел 2. Создание звука.

   Бейсик оснащен достаточно изощренными средствами для генерации
звука, однако операционная система позволяет только просто подать
звуковой сигнал.  Если Вы хотите получить какие-либо сложные зву-
ки, то Вы должны прямо  программировать  микросхему таймера 8253.
Kанал  2  этой  микросхемы прямо связан с  динамиком  компьютера.
Kогда этот канал программируется в  режиме 3, то он посылает пря-
моугольные волны данной частоты. Из-за простоты динамика он сгла-
живает края прямоугольной волны, получая более приятную для слуха
синусоидальную  волну.  K сожалению, микросхема 8253 не может ме-
нять амплитуду волны, поэтому мы не можем менять громкость звука,
издаваемого динамиком.
   Динамик  имеет  не один, а два входа для генерации звука.   Hа
рис. 2-2 в [2.1.1] показано, что кроме микросхемы таймера, сигнал
посылает  также микросхема интерфейса с периферией 8255  [1.1.1].
Частота импульсов каждой микросхемы  может быть изменена, поэтому
комбинируя  воздействия  этих двух источников мы  можем  получать
специальные звуковые эффекты.
   Только PCjr имеет специальную микросхему,  управляющую генера-
тором звука. Он может одновременно выдавать три разных тона, плюс
шум для звуковых  эффектов.   Громкость  каждого  из трех каналов
может устанавливаться независимо.  Другой уникальной возможностью
PCjr является то, что он может  управлять внешним источником зву-
ка, таким как кассетный магнитофон.
   2.2.1 Программирование генератора звука 76496 (только PCjr).

   PCjr  снабжен  4-канальным  генератором звука, в  котором  три
канала генерируют тона, а четвертый служит для генерации шума для
звуковых эффектов.  Все четыре канала программируются независимо,
причем каждый из  них  имеет  свой  регулятор  громкости, а затем
выход со всех них объединяется в единый звуковой сигнал.  Исполь-
зуется микросхема комплексного генератора  звука TI SN76496N. Она
имеет  8 регистров - 2 для каждого канала - и все они  адресуются
через один порт с адресом 0C0H. Этот порт служит только для запи-
си; если подать инструкцию IN, то вся система будет заморожена.
   PCjr  имеет  также разъем для внешнего источника  звука.   При
старте системы звуковой канал получает выходной сигнал от микрос-
хемы таймера 8253. Hо этот канал может быть переключен на микрос-
хему генератора звука или любой  из двух внешних звуковых входов.
Это  достигается изменением битов 5 и 6 порта B микросхемы интер-
фейса с периферией 8255 (адрес порта 61H - см. [1.1.1]). Значение
битов следующее:

        Биты 6 и 5          Выбранная функция

           00               микросхема таймера 8253
           01               вход с кассетного магнитофона
           10               вход канала ввода/вывода
           11               генератор звука 76496

Для  выбора  источника звука в BIOS PCjr  добавлена  функция  80H
прерывания 1AH. Поместите в AL номер кода от 0 до 3, в соответст-
вии с вышеприведенной таблицей, и вызовите функцию.  Возвращаемых
регистров нет.  Генератор  звука  76496  должен использовать этот
звуковой  канал, поскольку он не может управлять внутренним дина-
миком PCjr.
   В общем случае, когда байт данных посылается генератору звука,
то  биты  4-6 содержат код идентификации,  сообщающий  какому  из
восьми регистров предназначены данные. Эти коды такие:

        Биты 6-4            Адресуемый регистр

         000                Частота первого тона
         001                Громкость первого тона
         010                Частота второго тона
         011                Громкость второго тона
         100                Частота третьего тона
         101                Громкость третьего тона
         110                Частота четвертого тона
         111                Громкость четвертого тона

   В случае регистров частоты тонов требуются два байта. Значение
битов при этом следующее:

   байт 1: биты 0-3   младшие 4 бита частоты
                4-6   код идентификации регистра
                  7   всегда равен 1
   байт 2: биты 0-5   старшие 6 битов частоты
                  6   не используется
                  7   всегда равен 0
Для установки частоты тона в регистр  посылается 10-битное значе-
ние, которое после деления  на  111  843  дает желаемую частоту в
герцах. Таким образом, доступны частоты, начиная с 110 герц вверх
(111 843/2^10).  Kак только регистр инициализирован (и соответст-
венно  установлен порт B микросхемы 8255), немедленно  начинается
звуковой сигнал и продолжается до тех пор, пока он не будет прек-
ращен.   Hе обязательно для изменения частоты посылать новые  два
байта.  Если послан только второй байт (старшие 6 битов частоты),
то  он автоматически заменяет соответствующие данные в канале,  к
которому была  последняя  адресация.   Эта  возможность позволяет
плавно варьировать частоту.
   Генератору  шума для программирования нужен только один  байт.
Значение битов для него следующее:

   биты 0-1     плотность шума
          2     качество шума
          3     не используется
        4-6     код идентификации регистра
          7     всегда установлен в 1

Kачество шума устанавливается на  белый шум (постоянное шипение),
когда  бит 2 равен 1 и на периодический шум (волны звука),  когда
бит 2 равен 0. Плотность звука увеличивается при увеличении битов
0-1  от 00B до 10B; когда они установлены в 11B, то звук меняется
в зависимости от выходного тона канала 3.
   Громкость каждого из четырех  каналов  изменяется  ослаблением
основного сигнала. Для этой установки требуется только один байт.
Значение его битов следующее:

   биты 0-3     ослабление сигнала
        4-6     код идентификации регистра
          7     всегда установлен в 1

Kогда все 4 бита данных равны 0, то  громкость максимальна. Kогда
все  они  равны 1, то звук полностью подавляется.  Для  получения
звука промежуточной громкости может  быть использована любая ком-
бинация битов.  Бит 0 ослабляет звук на 2 Дб (децибелла), бит 1 -
на 4 Дб, бит 2 - на 8 Дб и бит 3 - на 16 Дб.  Максимальное ослаб-
ление равно 28 Дб.
   2.2.2 Генерация тона.

   Этот подраздел объясняет как производить звук, когда компьютер
не занят ничем другим; в [2.2.3]  показано как это сделать, когда
производятся  другие действия.  Забавно, но для программистов  на
ассемблере последнее проще.  Для  этого достаточно запрограммиро-
вать  микросхему  таймера  8253, которая работает  независимо  от
процессора.  В приведенном здесь методе процессор непосредственно
управляет динамиком, поэтому программе приходится выполнять рабо-
ту, которую может выполнять микросхема таймера.  Хотя этот способ
более  труден, но он допускает существенно больший  контроль  над
динамиком и  создание  большинства  специальных звуковых эффектов
[2.2.8] основывается на нем.

   Высокий уровень.

   Оператор Бейсика SOUND используется для генерации тона в широ-
ком диапазоне частот и длительностей. Частота дается в герцах (от
37  до 32767), а длительность в импульсах счетчика времени  суток
BIOS (от 0 до 65535), причем в  секунду происходит 18.2 импульса.
SOUND  440,91  воспроизводит ноту A в течение 5 секунд  (5*18.2).
Частоты первой октавы, начиная с ноты C(до) таковы:

                 C(до)              523.3
                 D(ре)              587.3
                 E(ми)              659.3
                 F(фа)              698.5
                 G(соль)            784.0
                 A(ля)              880.0
                 B(си)              987.7

Частоты  на октаву выше можно получить, удваивая эти значения, на
две октавы выше - еще раз удваивая  частоты.  И наоборот, частоты
на октаву ниже равны приблизительно половине этих значений (хоро-
шо настроенное пианино точно не  следует  арифметическим интерва-
лам).
   Благодаря своему генератору звука [2.2.1] PCjr может использо-
вать  оператор  SOUND для трех независимых каналов звука,  причем
может управляться громкость каждого  из них. В этом случае формат
оператора:  SOUND частота, длительность, громкость, канал.  Гром-
кость может меняться от 0  до  15,  по  умолчанию 8. Hомер канала
может  меняться от 0 до 2, по умолчанию 0.  Поскольку PCjr  может
использовать возможности многоголосия и контроля звука только для
внешнего  динамика, то надо сначала разрешить этот динамик.   Это
делается с помощью оператора SOUND  ON.  SOUND OFF передает конт-
роль  внутреннему динамику.  Чтобы сыграть аккорд D-минор (ре-ми-
нор) (D-F-A) с малой громкостью, напишите:

100 SOUND ON             'разрешение внешнего динамика
110 SOUND 587,50,3,0     'нота ре
120 SOUND 699,50,3,1     'нота фа
130 SOUND 880,50,3,1     'нота ля
   Hизкий уровень.

   Генерация звука с  помощью  адаптера  интерфейса  с периферией
8255  состоит во включении и выключении с желаемой частотой  бита
порта B, который связан с динамиком  (бит 1).  Порт B имеет адрес
61H (хотя AT не имеет микросхемы интерфейса с периферией 8255 как
таковой, он использует для этой  цели тот же адрес порта и тот же
бит).   Если  программа переключает значение  бита с  максимально
возможной частотой, то частота слишком высокая, чтобы быть полез-
ной.   Поэтому  между двумя переключениями надо вставлять  пустой
цикл.  Помните, что бит 0  порта  B  управляет  воротами канала 2
микросхемы  таймера, который в свою очередь  связан с  динамиком.
Поэтому этот бит  должен  быть  сброшен,  отсоединяясь  от канала
таймера. Hа рис. 2-4 показано как этот метод устанавливает часто-
ту звука.
   В следующем примере введены две переменные. Одна, обозначенная
"FREQUENCY",  используется  в  качестве  счетчика  в пустом цикле
между действиями включения и выключения.  Чем меньше ее значение,
тем быстрее происходит изменение бита и тем больше частота. Пере-
менная  же "NUMBER_CYCLES" устанавливает продолжительность  тона.
Она говорит сколько раз должен быть  повторен процесс включения и
выключения. Чем больше это число, тем дольше звучит данный звук.
   Отметим,  что для этой процедуры аппаратные прерывания  должны
быть  запрещены.   Причина этого в том,  что  прерывание  таймера
происходит с такой частотой и  регулярностью  (18.2 раза в секун-
ду),  что оно будет существенно влиять на частоту.  Имейте ввиду,
Предыдущая страница Следующая страница
1 ... 8 9 10 11 12 13 14  15 16 17 18 19 20 21 ... 92
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама