Секреты программирования игр




Функция № 21: Установка режима обратной записи DMA - часть 2


Затем, если ваш буфер размером 2К, вы должны зарезервировать двойной буфер, то есть 4К. Теперь, начав воспроизведение этого четырехкилобайтного буфера, вы должны следить за тем, какую половину буфера в данный момент проигрывает DIGPAK. Каждый раз, когда DMA пересекает границу 2К, вам следует записать следующие 2К позади текущей позиции воспроизведения! Вот почему этот метод получил название обратной записи. Фактически, вы записываете данные позади текущей передачи данных с использованием прямого доступа в память. Чтобы жизнь не показалась вам такой уж простой, помните, что вы не можете использовать любые 4К для подобного буфера. Он не может пересекать границ страницы. Границы страниц располагаются через каждые 64К в первом мегабайте адресного Пространства компьютера. Поэтому DIGPAK содержит функцию, которая позволяет выяснить, не пересекает ли выбранный вами буфер одну из таких границ. если да, то просто выберите следующие 4К для вашего буфера, они уже точно пересекут границу.

Все это звучит достаточно запутано... но так оно и есть. Именно поэтому я и предоставил в ваше распоряжение простую программу PEND.C. Вы можете использовать ее как прообраз для своих функций воспроизведения звука. Используя прямой доступ в память и двойную буферизацию, вы сможете подкачивать звуковые данные с диска, осуществлять программное микширование в реальном времени и создавать звуковое сопровождение для фильмов и FLIC-файлов.

ВХОД:     АХ    =   69Сh

                 DX    =   0   Выключить режим обратной записи.

                 DX    =   1   Включить режим обратной записи.

ВЫХОД:  АХ    =   0   Режим обратной записи не поддерживается драйвером.

                 АХ    =   1   Режим обратной записи установлен.




Содержание  Назад  Вперед