Программирование игр для Windows. Советы профессионала

Все неуказанные номера функций являются


Все неуказанные номера функций являются устаревшими.
Функция № 1: DigPlay
Функция DigPlay исполняет 8-битный оцифрованный звук. Она является базовой функцией DIGPAK для исполнения звуковых эффектов. Прикладная программа создает структуру звуковых данных, описывая положение звука в памяти и его продолжительность. Функция DigPlay может модифицировать содержимое звукового буфера. Поэтому если вам необходимо исполнить звуковой эффект более одного раза, используйте комбинацию функций MassageAudio и DigPlay2. Вы также можете использовать DigPlay для воспроизведения звука с разным разрешением с компакт-дисков и даже для его записи. Универсальность данной функции объясняется тем, что интерфейс пакета программ DIGPACK развивался в течение нескольких лет и изначально содержал только одну эту функцию. Для обеспечения совместимости сверху вниз, эта функция сохранила прежние возможности, получив расширенные установки различных режимов воспроизведения и записи.
Прототип этой функции находится в файле DIGPLAY.H. Реализация функции содержится в файле DIGPLAY-OBJ, объектном файле, созданном из файла DIGPLAY.ASM. Вы можете использовать либо интерфейсные функции, либо напрямую вызывать прерывание 66h.
Вход:    AX=688h    Номер команды
DS:SI        *Реальный режим*
   Указатель на звуковую структуру, описывающую звуковой эффект.
ESI *Прямая адресация*
В случае использования 32-разрядной адресации, ESI указывает на 32-разрядный адрес звуковой структуры в первом мегабайте адресного пространства. Будет преобразован драйвером DIGPAK в допустимый адрес СЕГМЕНТ:СМЕЩЕНИЕ.
Выход:  Ничего
Функция № 2: SoundStatus
Данная функция проверяет текущее состояние звукового драйвера и возвращает номер версии для драйверов версии 3.1 и выше. Она используется для запроса текущего состояния исполнения звукового эффекта. Если в настоящий момент звуковой эффект воспроизводится, в регистре АХ будет возвращена 1. Данная функция также используется для определения версии звукового драйвера DIGPAK, числовое значение которой помещается в регистр ВХ.




Это справедливо Для драйверов версий 3.1 и выше. Для получения этого значения вы также Можете использовать функцию ReportVersionNumber.
Вход:    AX          =689h
Выход: АХ          =0        Звук не исполняется.
=1        В настоящий момент исполняется звуковой эффект.
ВХ=         Начиная с версии 3.1 вызов функции SoundStatus возвращает в регистре ВХ номер версии. Номер версии возвращается в десятичном формате и умножен на 100, то есть значение 310 соответствует версии 3.10. Версии ниже 3.1 ничего невозвращают в регистре ВХ, так что вы должны обнулить его перед проверкой номера версии. Если ВХ остался нулевым, значит версия загруженного драйвера DIGPAK меньше, чем 3.1.
Функция № 3: MassageAudio
Функция преобразует звуковые данные в выходной формат аппаратного обеспечения. Данные будут преобразованы в необходимый аппаратно-зависимый формат в соответствии с заголовком структуры. Например, некоторые устройства не позволяют воспроизводить звук непосредственно в беззнаковом 8-битном формате. После переформатирования содержимого памяти, вы можете без перезагрузки данных использовать функцию DigPlay2 столько раз, сколько это необходимо.
ВХОД: AX=68Ah
DS:SI           *Реальный режим* Указатель на звуковую структуру, описывающую звуковой эффект.
ESI          *Прямая адресация* В случае использования 32-разрядной адресации, ESI указывает на 32-разрядный адрес звуковой структуры в первом мегабайте адресного пространства. Будет преобразован драйвером DIGPAK в допустимый адрес СЕГМЕНТ:СМЕЩЕНИЕ.
Функция № 4: DigPlay2
Функция исполняет звуковые данные, преобразованные в необходимый аппаратно-зависимый формат. В сочетании с MassageAudio она позволяет воспроизводить звуковые данные, не изменяя содержимого звукового буфера.
ВХОД: АХ-68ВП
DS:SI        * Реальный режим* Указатель на звуковую структуру, описывающую звуковой эффект.
ESI          *Прямая адресация* В случае использования 32-разрядной адресации, ESI указывает на 32-разрядный адрес звуковой структуры в первом  мегабайте адресного пространства.


Будет преобразован драйвером DIGPAK в допустимый адрес СЕГМЕНТ:СМЕЩЕНИЕ.
ВЫХОД: Ничего
Функция № 5: AudioCapabilities
Данная функция сообщает о возможностях аппаратного обеспечения. Она возвращает информацию от резидентного драйвера DIGPAK об ограничениях и специфических особенностях платы в виде слова состояния, которое вы можете легко проанализировать.
ВХОД: АХ=68Ch ВЫХОД: АХ=Бит 0 ->     1 - поддерживается фоновое воспроизведение
0 - драйвер воспроизводит звук только как основной процесс.
Бит 1->   1 - исходные данные должны быть преобразованы для выходного устройства;
0 - устройство способно воспроизводить неформатированные 8-битовые беззнаковые звуковые данные
Бит 2 ->      1 - устройство может воспроизводить звук только с фиксированной частотой, но звуковой драйвер способен понизить частоту входных данных
0 - устройство способно воспроизводить звук с указанной пользователем частотой.
(Замечание: Вы в любом случае можете воспроизводить звуковой фрагмент с нужной частотой, драйвер способен понизить частоту входных данных. Однако повышение частоты пока не поддерживается.)
Бит 3 ->      1 — устройство использует вектор прерывания таймера во время воспроизведения звука.
Бит 4 ->     1 — драйвер поддерживает разделение таймера (не доступно в защищенном режиме).
Бит 5->      1 — поддерживается режим ожидания.
Бит б->      1 — поддерживается режим стереопанорамы.
Бит 7->      1 - поддерживается воспроизведение 8-битного РСМ-стереозвука.
Бит 8->      1 — поддерживается запись звука.
Бит 9->      1 - поддерживается режим обратной записи DMA.
DX =        Если драйвер может воспроизводить данные только с определенной частотой, в регистре DX содержится значение этой частоты.
Функция № 8: StopSound
Функция немедленно останавливает воспроизведение музыкального фрагмента.
ВХОД:  AX=68Fh
ВЫХОД: Ничего       Вызывает немедленное прекращение воспроизведения текущего музыкального фрагмента.
Функция № 12: SetTimerDivisorRate
Эта функция не работает в защищенном режиме.


Она позволяет прикладной программе информировать драйвер DIGPAK, использующий таймер, о перепрограммировании частоты прерываний таймера 8253. Данная функция используется только в реальном режиме, так как ни один из базирующихся на прерывании таймера драйверов DIGPAK не работает в защищенном режиме. Если ваша компьютерная игра перепрограммировала таймер 8253 на новую частоту, вы должны сообщить об этом драйверу DIGPAK. Для того чтобы обеспечить воспроизведение музыкального фрагмента, драйвер DIGPAK, использующий таймер, должен перепрограммировать 8253 на очень высокую частоту- По умолчанию DIGPAK считает исходную частоту прерываний таймера равной стандартной (18.2 раза в секунду) и устанавливает это значение после завершения музыкального эффекта. Однако данная функция позволяет вам поставить драйвер DIGPAK в известность об изменении базовой частоты. В результате этого драйвер будет обслуживать программу прерываниями таймера с указанной частотой, а после воспроизведения звукового эффекта драйвер установит таймер на эту частоту.
ВХОД: AX=693h
DX=         Делитель частоты таймера. Драйверы, базирующиеся на прерываниях от таймера, способны обслуживать прикладную программу прерываниями от таймера с заданной делителем частотой независимо от частоты прерываний, необходимой для воспроизведения звукового эффекта. Реально частота прерываний будет стремиться к заданной величине. Для восстановления стандартной частоты прерываний (18.2 раза в секунду) в регистре DX следует задать 0.
ВНИМАНИЕ!!! Если вы перепрограммируете таймер в своей программе, при выходе из нее обязательно восстановите нормальное значение частоты прерываний — 18.2 раза в секунду.
ВЫХОД: Ничего
Функция № 14: PostAudioPending
Данная функция позволяет вам поместить в очередь второй музыкальный фрагмент. Начиная с версии DIGPAK 3.0, приложение может задать второй музыкальный фрагмент, который должен быть воспроизведен сразу по окончании воспроизведения текущего фрагмента. Этот метод, называемый двойной буферизацией, позволяет вашей прикладной программе осуществлять очень сложное манипулирование звуком.


Используя двойную буферизацию, вы можете производить программное микшироваиие и (или) подкачивать длинное музыкальное произведение с диска, или из расширенной памяти EMS. В демонстрационной программе PEND.C показано, как можно исполнить по частям большой звуковой клип. Модифицируя эту демонстрационную программу, вы можете воспроизводить звуковые эффекты с диска, или выполнять программное микширование, добавляя набор звуковых эффектов в основной музыкальный поток.
ВХОД: AX=695h
DS:SI        *Реальный режим*. Указатель на звуковую структуру, описывающую звуковой эффект.
ESI          *Прямая адресация* В случае использования 32-разрядной адресации, ESI указывает на 32-разрядный адрес звуковой структуры в первом мегабайте адресного пространства. Будет преобразован драйвером DIGPAK в допустимый адрес СЕГМЕНТ:СМЕЩЕНИЕ.
ВЫХОД: АХ=0        Началось воспроизведение фрагмента.
АХ=1        Фрагмент поставлен в очередь на воспроизведение.
АХ=2        В очереди уже имеется фрагмент, поэтому данный фрагмент в очередь не поставлен.
Функция № 15: AudioPendingStatus
Функция позволяет получить текущий статус состояния двойного буфера функции PostAud io Pending. Система с двойной буферизацией может находиться в одном из трех состояний. В состоянии 0 никакой звуковой фрагмент не воспроизводится. В состоянии 1 музыкальный фрагмент воспроизводится, но в очереди фрагментов больше нет (это означает, что пришло время поместить-в очередь следующий звуковой фрагмент). И, наконец, последний вариант — первый фрагмент воспроизводится, а второй уже находится в очереди, в этом случае никаких действий от прикладной программы не требуется,
ВХОД:  АХ=696Ь ВЫХОД: АХ=0        Никакой фрагмент не воспроизводится.
АХ=1        Один фрагмент воспроизводится, другой фрагмент ожидает своей очереди.
АХ=2        Звуковой фрагмент воспроизводится, но очередь пуста.
Функция № 16: SetStereoPan
В настоящее время эта функция поддерживается только несколькими устройствами, например, Sound Blaster Pro.


Вы можете вызывать AudioCapabilities для проверки возможности использования текущим драйвером режима стереопереходов. На некоторых стереозвуковых платах, таких как Sound Blaster Pro, вы можете управлять раскладкой монозвукового эффекта по стереоканалам. С помощью вызова данной функции вы указываете звуковой плате процентное •соотношение громкости вашего фрагмента для правого и левого динамиков. Вы можете вызывать эту функцию когда угодно, даже во время воспроизведения, чтобы перемещать звук от динамика к динамику. Это позволяет вам разнообразить вашу игру захватывающими и потрясающими эффектами.
ВХОД: AX=697h
DX=         Процентное соотношение громкости по каналам:
0 — 100% на правый динамик.
64 — 50% по обоим динамикам.
127 — 100% на левый динамик.
ВЫХОД: АХ=0        Команда проигнорирована, драйвер не поддерживает стереопереходов.
АХ=1        Команда выполнена.
Функция № 17: SetPlayMode
функция позволяет установить режим записи/воспроизведения для резидентного драйвера DIGPAK. Из-за того, что, появившись в 1987 году, DIGPAK обеспечивал всего лишь одну функцию (воспроизведение звукового эффекта), независимая функция была наиболее простым способом расширения возможностей драйвера с одновременным сохранением совместимости сверху вниз. С помощью данной функции вы можете задать разрешение, при котором будет выполняться воспроизведение или запись звукового фрагмента.
ВХОД: AX=698h
DX==         Режим воспроизведения. DX       =0 ->     8-разрядный РСМ.
=1 ->     8-разрядный стерео-РСМ (правый/левый).
=2 ->     16-разрядный РСМ.
=3 ->      16-разрядный стерео-РСМ.
После изменения режима воспроизведения все функции DIGPAK работают точно так же, как и раньше, но ожидают данные в установленном формате. 8-разрядный стерео-РСМ состоит из пар беззнаковых данных для обоих каналов. Поддерживается платами Stereo FX и Sound Blaster Pro. Все 16-разрядные данные являются знаковыми и в случае стереозвука их знак определяет правый или левый канал записи/воспроизведения.


ВЫХОД: АХ   = 1       Режим установлен.
АХ = 0      Режим не поддерживается данным драйвером.
Функция № 18: Адрес флага ожидания и адрес «семафора» DIGPAK
Эта функция сообщает прикладной программе адрес в памяти, по которому расположен внутренний флаг ожидания драйвера DIGPAK. Этот метод называется «семафором и позволяет программе постоянно отслеживать состояние флага, не выполняя вызова функции. По изменению состояния этого флага, ваша программа может принимать решение о помещении следующего звукового фрагмента в очередь ожидания.
int far *ReportPendingAddress(void);
Сообщает дальний адрес флага ожидания. Если ячейка памяти по этому адресу содержит значение 1, это означает, что следующий фрагмент все еще ожидает своей очереди. Когда значение ячейки становится равным 0, ваша программа может начать загрузку следующего фрагмента в двойной буфер. Использование «семафора» для определения момента загрузки следующего фрагмента предпочтительнее, чем вызов функции AudioPendingStatus.
int far *ReportSemaphoreAddress(void) ;
Сообщает адрес «семафора» DIGPAK. Возвращаемый указатель является дальним указателем на ячейку памяти внутри драйвера DIGPAK. Если значение не нулевое, то DIGPAK находится в активном состоянии и вы не должны в это время вызывать какие бы то ни было функции DIGPAK по аппаратному прерыванию, так как это, возможно, прервет исполнение кода самого драйвера.
ВХОД:  AX=699h
ВЫХОД: AX:DX      Дальний адрес флага ожидания.
BX:DX      Дальний адрес «семафора» DigPak. (При использовании DIGPAK.ASM в 32-разрядном режиме адресации, возвращаемый адрес будет преобразован в допустимый 32-разрядный адрес.)
Функция № 19: Установка режима записи                         
Функция позволяет вам установить DIGPAK в режим записи или воспроизведения звука. Вызов функции DigPlay после установки режима записи, обеспечивает запись звука в указанный буфер памяти. Функция поддерживается только для карт Sound Blaster.
ВХОД: AX-69AI1
DX=0 Включить режим записи. 
DX=1       Выключить режим записи.             


ВЫХОД: АХ=0        Драйвер не поддерживает запись звука.
АХ=1        Режим записи звука установлен.
Функция № 21: Установка режима обратной записи DMA
Функция позволяет включить режим обратной записи DMA. В идеале было бы достаточно использовать функцию PostAudioPending. Однако большинство моделей звуковых карт не позволяют гладко проиграть две звуковые последовательности одну за другой. И хотя фирма Creative Labs уже продала свыше двух миллионов карт Sound Blaster без этого недостатка, другие звуковые платы по-прежнему не способны обеспечить ровную стыковку двух звуковых фрагментов. Единственный способ обойти данную проблему состоит в использовании метода обратной записи DMA. В идеале функция PostAudio Pending должна была бы автоматически использовать этот метод, но это заняло бы слишком много времени для изменения всех имеющихся драйверов. Метод, с помощью которогб DIGPAK поддерживает режим обратной записи, достаточно прямолинеен, но пока я придумываю что-нибудь получше, вы вполне можете им воспользоваться.
Посмотрев на демонстрационную программу PEND.C, вы увидите пример того, как вместо PostAudioPending используется метод обратной записи DMA в том случае, если это поддерживается звуковой картой. Вы можете свободно использовать этот подход к реализации двойной буферизации в своих программах.
Обычно во время воспроизведения музыкального фрагмента звуковая карта осуществляет прямой доступ в память, который прерывается программой по окончании воспроизведения звука. Такой метод используется для исполнения одного фрагмента за один раз и это является стандартным режимом для вызовов функций DIGPAK. При автоматической инициализации прямого доступа в память, по достижении конца звукового фрагмента контроллер прямого доступа в память немедленно возвращается в начало буфера; он никогда самостоятельно не заканчивает воспроизведение. Следовательно, если ваш фрагмент — это слово «Привет!» и вы инициировали прямой доступ в память, то будете слышать «Привет!» непрерывно до тех пор, пока не прервете воспроизведение.


Как же использовать подобное поведение контроллера прямого доступа в память для двойной буферизации? Вначале вы должны выбрать фиксированный размер буфера передачи, например, 2 килобайта. Затем, если ваш буфер размером 2К, вы должны зарезервировать двойной буфер, то есть 4К. Теперь, начав воспроизведение этого четырехкилобайтного буфера, вы должны следить за тем, какую половину буфера в данный момент проигрывает DIGPAK. Каждый раз, когда DMA пересекает границу 2К, вам следует записать следующие 2К позади текущей позиции воспроизведения! Вот почему этот метод получил название обратной записи. Фактически, вы записываете данные позади текущей передачи данных с использованием прямого доступа в память. Чтобы жизнь не показалась вам такой уж простой, помните, что вы не можете использовать любые 4К для подобного буфера. Он не может пересекать границ страницы. Границы страниц располагаются через каждые 64К в первом мегабайте адресного Пространства компьютера. Поэтому DIGPAK содержит функцию, которая позволяет выяснить, не пересекает ли выбранный вами буфер одну из таких границ. если да, то просто выберите следующие 4К для вашего буфера, они уже точно пересекут границу.
Все это звучит достаточно запутано... но так оно и есть. Именно поэтому я и предоставил в ваше распоряжение простую программу PEND.C. Вы можете использовать ее как прообраз для своих функций воспроизведения звука. Используя прямой доступ в память и двойную буферизацию, вы сможете подкачивать звуковые данные с диска, осуществлять программное микширование в реальном времени и создавать звуковое сопровождение для фильмов и FLIC-файлов.
ВХОД: АХ = 69СЬ
DX=0       Выключить режим обратной записи.
DX=1        Включить режим обратной записи.
ВЫХОД: АХ=0        Режим обратной записи не поддерживается драйвером.
АХ=1        Режим обратной записи установлен.
Функция № 22: Значение счетчика прямого доступа в память
Функция возвращает текущее значение счетчика при прямом доступе в память. Другими словами, если вы начали передачу из буфера в 4К, в процессе воспроизведения счетчик будет изменяться от 4097 до 0.


Отслеживая значения счетчика, вы можете определить момент, когда следует заполнять следующую половину буфера. В программе PEND.C показано, как это сделать на практике.
ВХОД: AX=69Dh
ВЫХОД: АХ= Текущее значения счетчика (значение убывает, а не возрастает).
Функция № 23: Проверка буфера прямого доступа в память
Функция позволяет проконтролировать, не пересекает ли выбранный вами буфер прямого доступа в память грашщ страницы. Пример использования этой функции приведен в программе PEND.C.
ВХОД: AX=69Eh
ES:BX       *Реальный режим* Указатель на звуковую структуру, описывающую звуковой эффект.
ЕВХ         *Прямая адресация* В случае использования 32-разрядной адресации, ЕВХ указывает на 32-разрядный адрес звуковой структуры в первом мегабайте адресного пространства. Будет преобразован драйвером DIGPAK в допустимый адрес СЕГМЕНТ: СМЕЩЕНИЕ.
СХ =  Размер буфера. ВЫХОД: АХ=1        Блок не пересекает границу страницы. АХ=0        Блок пересекает границу страницы.
Функция № 24: Установка громкости при импульсно-кодовой модуляции
Функция, реализована только для нескольких звуковых карт. Она позволяет установить для карты общую относительную громкость звука.
ВХОД: AX=69Fh
ВХ =         Громкость левого канала (или обоих для моно) 0-100.
СХ =         Громкость правого канала (или обоих для моно) 0-100.
ВЫХОД: АХ=1        Громкость установлена.
АХ=0        Устройство не поддерживает установку громкости.
Функция № 25: SetDPMIMode
Функция информирует драйвер DIGPAK о 32-разрядной адресации. Поскольку оригинальные драйверы DIGPAK предполагалось использовать только в реальном режиме, я не задумывался о возможности другой адресации. (Первые драйверы DIGPAK разрабатывались в 1987 году, поэтому в этом нет ничего удивительного.) Из-за того, что многие функции DIGPAK используют комбинацию регистров сегмента и смещения для формирования адреса, это порождает определенные проблемы в защищенном режиме. В защищенном режиме сегментные регистры являются селекторами и сформировать из них адрес реального режима трудно.


После вызова этой функции, DIGPAK будет знать, что он активизирован прикладной программой для защищенного режима и будет реагировать на полный 32-разрядный адрес в ESI, а не на комбинацию DS:SI. Процесс трансляции адреса автоматически обеспечивается интерфейсом нижнего Уровня DIGPLAY.ASM, находящимся в подкаталоге программ для защищенного режима.
ВХОД: АХ=6А0h
DX=   Режим включен/выключен (1/0). ВЫХОД: Ничего
#*****************************************************************
#***** DigPlay, компонуемый интерфейс Digitized Sound Package ****
#*****************************************************************
DIGPLAY.H Компонуемый интерфейс реального режима. Все процедуры имеют прототипы и используют имена сегментов, пригодные для любой модели памяти.
#ifndef LOADABLE_DRIVERS
ftdefine LOADABLE_DRIVERS 1// условная компиляция
#endif
/* битовые флаги возможностей драйвера     */
/* возвращаются функцией AudioCapabilities */
#define PLAYBACK       1   // бит 0, возможно воспроизведение звука
//  в фоновом режиме
#define MASSAGE        2 
// бит 1, данные преобразованы
//в аппартно-эависимый формат
#define FIXEDFREQ      4   // бит 2, драйвер воспроизводит звук
//  только с фиксированной частотой
#define USESTIMER      8   // бит 3, драйвер использует таймер
#define SHARESTIMER   16   // бит 4, таймер может быть использован
//  совместно (бета-версия!!!)
#define LOOPEND       32   // бит 5, поддерживается цикличность и
//  очередь ожидания (бета-версия!!!)
#define STEREOPAN     64   // бит 6, поддерживаются стереопереходы
#define STEREOPLAY   128   // бит 7, поддерживается 8-разрядный
                        //  РСМ-звук
#define AUDIORECORD  256   // бит 8, поддерживается запись звука
#define DMABACKFILL  512   // бит 9, поддерживается режим обратной                             // записи DMA
#define PCM16      1024   // бит 10, поддерживается 16-разрядный
//  звук
#define PCM16STEREO 2048   // бит 11, поддерживается 16-разрядный


//  стереозвук
typedef struct
{ char far *sound;            // адрес звуковых данных
unsigned short sndlen;     // длина звуковых данных
short far *IsPlaying;       // адрес флага состояния
short frequency;            // частота воспроизведения }SNDSTRUC;
extern short far cdecl DigPlay (SNDSTRUC far *sndplay) ;
// 688h -> воспроизведение 8-разрядного оцифрованного звука
extern short far cdecl SoundStatus (void);
// 689h -> сообщает состояние звукового драйвера
extern void far cdecl MassageAudio (SNDSTRUC far *sndplay);
// 68Ah -> преобразует цифровой звук в аппаратнозависимый формат
extern void far cdecl DigPlay2 (SNDSTRUC far *sndplay);
// 6SBh -> воспроизведение звука в аппаратноэависимом формате
extern short far cdecl AudioCapabilities (void);
// 68Ch -> сообщает информацию о возможностях драйвера
extern short far cdecl DigPakIdentityString (char far *str) ;
// 68Ch -> копирует в заданный буфер идентификатор драйвера
// звука и возвращает длину скопированной строки
extern void far cdecl StopSound (void) ;
// 68Fh -> останавливает воспроизведение звука
extern short far cdecl PostAudioPending (SNDSTRUC far *sndplay);
#define NOTPLAYING О // звук не воспроизводится
#define PLAYINGNOTPENDING  1 // звук воспроизводится, очередь пуста
#define PENDINGSOUND       2 // звук воспроизводится, следующий
//  фрагмент ожидает своей очереди
extern short far cdecl AudioPendingStatus (void);
#define FULLRIGHT           0
#define FULLLEFT            127
#define FRONTANDCENTER      64
extern short far cdecl SetStereoPan(short panvalue);
// 0 - 127, 0 - 100% правый канал
#define PCM_8_MONO      О
#define PCM_8_STEREO   1
#define PCM_16_MONO 2 #define PCM_16__STEREO        3
extern short far cdecl SetPlayMode (short playmode);
// 0 - режим не поддерживается
// 1— режим поддерживается
extern short far cdecl SetRecordMode(short mode);
// устанавливает режим записи звука
extern short far * far cdecl PendingAddress (void);
// сообщает дальний адрес флага ожидания.


Если ячейка памяти по
// этому адресу содержит значение 1, это означает, что следующий
// фрагмент все еще ожидает своей очереди. Когда значение ячейки
// становится равным 0, ваша программа может начать загрузку
// следующего фрагмента в двойной буфер. Использование "семафора"
// для определения момента для загрузки следующего фрагмента
// предпочтительнее, чем вызов функции AudioPendingStatus.
extern short far * cdecl ReportSemaphoreAddress(void);
// сообщает адрес семафора DIGPAK. Возвращаемый указатель является
// дальним указателем на ячейку памяти внутри драйвера DIGPAK. Если
// значение не нулевое, то DIGPAK находится в активном состоянии и
// вы не должны в это время вызывать какие бы то ни было функции
// DIGPAK по аппаратному прерыванию, так как это, возможно, прервет
// исполнение кода самого драйвера.
extern void far cdecl SetTimerDivisorRate (short rate) ;
// устанавливает делитель частоты для таймера
// Если ваша программа перепрограммировала таймер 8253 на новую
// частоту, вы должны сообщить об этом драйверу DIGPAK.
// Не забудьте восстановить стандартную частоту после завершения
// работы программы.
extern short far cdecl ReportVersionNumber (void);
// сообщает версию драйвера DIGPAK
// Номер версии возвращается умноженным на сто, то есть значение
// 310 соответствует версии 3.1. Драйверы версий младше 3.1 не
// поддерживают данную функцию, поэтому нулевое значение означает,
// что версия загруженного драйвера DIGPAK меньше, чем 3.1.
extern short far cdecl SetBackFillMode (short mode);
// Устанавливает режим обратной записи DMA. Возвращает 1, если
// режим.установлен, и 0, если драйвер не поддерживает этот режим.
extern unsigned short far cdecl ReportDMAC (void);
// сообщает текущее значение счётчика DMA
extern short far cdecl VerifyDMA (chac far *data, short length);
// Проверяет, не пересекает ли буфер границ страницы. Возвращает 1,
// если граница не пересекается, и 0, если буфер пересек границу.
extern void far cdecl NullSound (char far *sound, short sndlen, short null) ;
/* Дополнительные функции */
extern void far cdecl WaitSound (void);
// ожидание окончания воспроизведения звука
extern short far cdecl Checkin (void);        
// Загружён ли драйвер. 1 - да; О - нет.
/**** Внимание!!! Если вы используете LOADABLE_DRIVERS, то должны
обеспечить доступ к функциям распределения памяти и к DOSCALLS.OBJ.
extern short far cdecl InitDP (short segment);
 // инициализировать
драйвер DIGPAK
extern void far cdecl DeInitDP (short segment);
// выгрузить драйвер DIGPAK

Содержание раздела