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




Функция № 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, таймер может быть использован




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